Problèmes avec le perceptron
Notre modèle de perceptron utilise une fonction \(\text{Treshold}(z)\) qui retourne la classe \(0\) ou \(1\) selon le signe de \(z = \mathbf{w} \cdot \mathbf{x}\).
Les prédictions ne prennent pas en compte la distance entre le point à classer et sa distance avec la frontière. \(0\) ou \(1\), aucune continuité.
La dérivée de la vraie fonction de perte pour le perceptron n’est pas definie lorsque \(z = \mathbf{w} \cdot \mathbf{x} = 0\).
\[L(y_i,h_{\mathbf{w}}(\mathbf{x}_i)) = \max(0, -y_i(\mathbf{w} \cdot \mathbf{x}_i))\]
Rappel : \(L\) est notre fonction de perte selon \(\mathbf{w}\) pour un \(\mathbf{x}_i\) particulier. \(J(\mathbf{w})\) est la fonction de perte moyenne.
Le suivant illustre une fonction de perte de \(\mathbf{x}_i = [4,-1]\) pour un perceptron et la ligne où elle est non-dérivable.
L’algorithme de la descente du gradient a besoin d’une fonction de perte dérivable en tout point. La dérivée donnée précédement pour le perceptron était une estimation pour outrepasser ce problème.
\[ ∇J(\mathbf{w}) = -(y_t - h_{\mathbf{w}}(\mathbf{x}_i))\mathbf{x}_i\\ \mathbf{w} \leftarrow \mathbf{w} - \alpha\cdot[-(y_t - h_{\mathbf{w}}(\mathbf{x}_i))\mathbf{x}_i]\\ \]
Sans ce hack, il y a plusieurs \(\mathbf{w}\) qui « briseront »» l’apprentissage. Par exemple, si \(\mathbf{w}\) est initialisé sur la ligne non dérivable, il est impossible d’ajuster les poids pour converger vers une solution. Aussi, le taux d’apprentissage peut faire en sorte que l’ajustement de \(\mathbf{w}\) donne des nouveaux poids qui se trouve dans la région non-dérivable.
Remarquez que pour des dimensions plus élevées \(n\), la région non dérivable devient exponentiellement plus grande. Pour \(n = 2\), c’est une ligne, \(n = 3\) un plan 2D, etc. La région est un hyperplan.
Une autre approche
Tenons pour acquis que plus qu’un point est loin de la frontière, plus qu’il est probable d’être bien classé.
Soit le graphique suivant. La ligne bleue est la frontière donnée par le perceptron. Les ‘x’ sont les projections \(\mathbf{w} \cdot \mathbf{x}\) :
Le produit scalaire donne la distance signée entre un point et la frontière.
Au lieu d’attribuer une classe \(0\) si la distance signée est négative, ou une classe \(1\) si elle est \(\ge 0\), la probabilité qu’un point est d’une classe donnée peut être en fonction de quelque chose de continue.
Régression logistique
La régression logistique est un modèle linéaire. Comme le perceptron, il donne une frontière linéaire sous forme d’un hyperplan. La frontière peut être utilisée pour la classification.
Pour obtenir une classification, la fonction \(\text{Threshold}(z)\) est changée pour une fonction \(\text{DecisionLogistic}(z)\). Elle a la forme \(\text{decision}(\sigma(z))\) où \(z =\mathbf{w} \cdot \mathbf{x}_i\).
La fonction sigmoid \(\sigma(z)\) est au coeur de la régression logistique : sa sortie est interprétée comme une probabilité.
\[ \sigma(z) = \frac{1}{1 + e^{-z}}\\ \sigma(\mathbf{w} \cdot \mathbf{x}_i) = \frac{1}{1 + e^{-(\mathbf{w} \cdot \mathbf{x}_i)}} = \frac{1}{1 + \frac{1}{e^{(\mathbf{w} \cdot \mathbf{x}_i)}}}\\[30pt] P(y_i = 1|\mathbf{w};\mathbf{x}_i) = \sigma(\mathbf{w} \cdot \mathbf{x}_i)\\ P({y}_i = 1|\mathbf{w};\mathbf{x}_i) = 1 -P({y}_i = 0|\mathbf{w};\mathbf{x}_i) \]
\(\text{decision}(.)\) ne fait que décider la classe si la probabilité est suffisante. Habituellement, le seuil est \(\ge 50\%\). \[ \text{decision}(P({y} = 1 | \mathbf{w}; \mathbf{x})) = \begin{cases} 1 & \text{si} P({y} = 1 | \mathbf{w}_i; \mathbf{x}_i) > 0.5, \\ 0 & \text{sinon} \end{cases} \]
Le modèle de régression logistique donne une probabilité (une régression est continue / une classification est discrète !). La fonction de décision ne fait pas partie du modèle; elle utilise le modèle pour attribuer une classe. Elle est souvent ignorée dans les discussions à propos de la régression logistique.
Révision probabilité conditionnelle
Soit l’expression suivante :
\(P(X = x | A)\)
- \(X\) est une variable aléatoire
- \(X\) est le résultat d’un évènement
- \(X\) = \(x\) est lorsque le résultat de l’évènement = \(x\)
- \(P(...|...) \rightarrow\) probabilité conditionnelle. Nous avons déjà observé le résultat d’un autre évènement
- \(P(X = x | A)\) est la
distribution conditionelle de probabilités que le
résultat de l’évènement de \(X\) soit
\(x\) étant donné que
le résultat de l’évènement d’\(A\) soit
déjà observé. \(A\) n’est pas déterminé
pendant \(X\) !
- \(P(X = x | A = y)\) est la probabilité (pas la distribution !) d’obtenir \(X = x\) sachant que \(A = y\) avant l’évènement de \(X\)
Probabilité vs. vraisemblance
Probabilité (probability) : Si on connaît la distribution (la loi normale, par exemple), on peut calculer la probabilité de d’échantillonner une valeur spécifique. Exemple : Quelle est la probabilité d’obtenir une valeur \(x=2\) dans une distribution normale de moyenne \(μ=0\) et écart-type \(σ=1\) ?
Vraisemblance (likelihood): Si on connaît l’échantillon observé et le modèle sous-jacent (par exemple, une loi normale), on peut calculer la vraisemblance pour différents paramètres \(μ\) et \(σ\). Exemple : On observe un échantillon de valeurs \(a, b, …\) et on se demande quels paramètres \(μ\) et \(σ\) du modèle normal rendent ces observations les plus probables. On maximise la vraisemblance par rapport aux paramètres. La vraisemblance est utilisée dans le modelage statistique et l’estimation de paramètres.
\(P(X = x | A)\) est une vraisemblance si le résultat de \(X\) est paramétrisé par \(A\). Dit autrement, \(X\) est en fonction de \(A\) où \(A\) peut être changé (est un paramètre). \(P(X = x | A = 1)\) est une probabilité. La valeur de \(A\) est fixe.
La probabilité est utilisée avant l’observation pour prédire la probabilité d’un événement dans un cadre donné. La vraisemblance, par contre, est utilisée après l’observation pour estimer les paramètres du modèle qui rendent les données observées les plus probables.
Modélisation de la régression logistique
La régressien logistique modélise une distribution de Bernoulli. Nous tenons pour acquis que les vrais classes \(y_i\) sont en fonction des caractéristiques \(\mathbf{x_i}\):
\[ P(y_i = 1 | \mathbf{x}_i) = p \quad \text{(La vraisemblance d'observer }y_i = 1\text{ sachant qu'on a } x_i\text{)} \] \[ P(y_i = 0 | \mathbf{x}_i) = 1 - p \quad \text{(La vraisemblance d'observer }y_i = 0\text{ sachant donné qu'on a } x_i\text{)} \] \[\downarrow\] \[ f(\mathbf{x}_i) = P(y_i | \mathbf{x}_i) = p^{y_i}(1 - p)^{1 - y_i} \]
Pour notre hypothèse, nous pouvons reparamétriser : \[z = \mathbf{w}\cdot\mathbf{x}_i\] \[ \text{(La vraisemblance d'observer } y_i = 1 \text{ sachant qu'on a }z_i)\\ \begin{align*} h(z_i) &= P(y_i = 1| z_i)\\ &= \sigma(z_i) \\ &= \sigma(\mathbf{w}\cdot\mathbf{x}_i)\\ &= \frac{1}{1 + e^{(-\mathbf{w} \cdot \mathbf{x}_i)}} \end{align*} \]
Dit autrement, quelle est la vraisemblance d’observer les paramètres \(\mathbf{w}\) si \(\mathbf{x}_i\) est réellement la classe \(1\). Nous voulons ajuster \(\mathbf{w}\) pour maximiser la vraisemblance \(P(y_i = 1| z_i)\): trouver les paramètres \(\mathbf{w}\) spécifiques qui font en sorte que le modèle donne une haute probabilité que la classe d’un \(\mathbf{x}_i\) soit \(1\) lorsqu’elle est réellement \(1\).
Transformation
\(\sigma\) transforme les points 1D \(\mathbf{w} \cdot \mathbf{x}_i\) à des points 2D. Contrairement à \(\text{Threshold}\), \(\sigma\) est continue.
Avec le perceptron, nous avions soit \(0%\) que la classe soit \(1\), ou \(100\) que la classe soit \(1\). En utilisant la fonction \(\sigma\), nous avions une belle courbe continue en tout point où les points sur la frontière (quand \(\mathbf{w} \cdot \mathbf{x}_i = 0\)) ont une probabilité de \(50%\) d’être la classe \(1\).
Intuition sur la fonction \(\sigma\)
La portée de la fonction \(\sigma\) est \((0, 1)\). Notez que \(0\) et \(1\) ne sont pas inclut. La fonction a deux asymptotes. \[\lim_{\mathbf{w} \cdot \mathbf{x} \to -\infty} \sigma(\mathbf{w} \cdot \mathbf{x}) = 0\\ \lim_{\mathbf{w} \cdot \mathbf{x} \to +\infty} \sigma(\mathbf{w} \cdot \mathbf{x}) = 1\]
Si un \(\mathbf{x}_i\) ce trouve sur la frontière linéaire (\(\mathbf{w} \cdot \mathbf{x}_i = 0\)), le dénominateur de \(\sigma(\mathbf{x}_i)\) est \(2\); sa sortie est donc \(0.5\). Ceci représente une probabilité de \(50\%\) d’être classe \(0\) ou classe \(1\).
Pour \(\mathbf{w} \cdot \mathbf{x_i} > 0\) : plus qu’un \(\mathbf{x}_i\) est loin de l’hyperplan dans la direction positive, plus que \(\frac{1}{e^{(\mathbf{w} \cdot {\mathbf{x}_i})}}\) est petit. Donc, \(\sigma(\mathbf{w} \cdot \mathbf{x})\) tend plus vers 1. En d’autres mots, la probabilité que \(\mathbf{x}_i\) soit d’une classe tend vers \(100\%\).
Pour \(\mathbf{w} \cdot \mathbf{x_i} < 0\) : plus qu’un \(\mathbf{x}_i\) est loin de l’hyperplan dans la direction negative, plus que \(\frac{1}{{e^{(\mathbf{w} \cdot {\mathbf{x}_i})}}} = e^{-(\mathbf{w} \cdot {\mathbf{x}_i})} \rightarrow e^{|\mathbf{w} \cdot \mathbf{x}|}\) est grand. La probabilité que \(\mathbf{x}_i\) soit d’une classe tend vers \(0\%\), donc elle est de l’autre classe.
Nous voyons les asymptotes horizontales (\(\mathbf{w} \cdot \mathbf{x}_i \rightarrow \pm\inf\), la dérivé tend vers \(0\) )L’entropie croisée
La continuité de la \(\sigma\) permet une fonction de perte continue. Conséquemment, la dérivée de cette fonction de perte est définie partout.
La perte utilisée pour la régression logistique est l’entropie croisée (cross entropy). Elle est aussi appelée negative log-likelihood.
L’entropie croisée est une mesure souvent utilisée dans le domaine de l’apprentissage automatique pour évaluer la performance d’un modèle de classification. L’entropie croisée mesure la différence entre deux distributions de probabilité : la distribution réelle (vraies étiquettes) et la distribution prédite par le modèle. La formule pour un cas binaire (deux classes) est souvent donnée par :
\[ -y_i \log(p_i) + (1 - y_i) \log(1 - p_i)\\ \]
où \(y_i\) est l’étiquette réelle (\(0\) ou \(1\)) pour l’exemple \(i\), \(p_i\) est la probabilité prédite pour la classe positive.
La fonction \(log(p_i)\) est idéale. \(p_i \in (0,1)\) donc :
Notez que \(log(0)\) est indéfini, mais \(p_i\) ne peut être égale à \(0\). De plus, la dérivée d’un \(log\) est facile : \(\frac{d}{dx}log(x) = \frac{1}{x}\) ✨
Si \(y_i = 1\), la perte augmente lorsque la probabilité prédite est base.
Si \(y_i = 0\), la perte augmente lorsque la probabilité prédite est haute.
Pour l’entropie croisée moyenne où \(m\) est le nombre d’exemples: \[ J(\mathbf{w}) = -\frac{1}{m}\sum_{i=0}^{m-1} [y_i \log(p_i) + (1 - y_i) \log(1 - p_i)] \]
Gradient de l’entropie croisée
\[ \begin{align*} J(\mathbf{w}) &= -\frac{1}{m} \sum_{i=0}^{m-1} [y_i \log(p_i)) + (1 - y_i) \log(1 - p_i))]\\ &= -\frac{1}{m} \sum_{i=0}^{m-1} [y_i \log(\sigma(z)) + (1 - y_i) \log(1 - \sigma(z))]\ \text{où}\ z = \mathbf{w}\cdot \mathbf{x}_i\\ \end{align*} \]
Pour trouver le gradient de \(J(\mathbf{w})\) par rapport aux poids \(\mathbf{w}\), nous calculons la dérivée :
\[ \begin{align*} \frac{\partial J(\mathbf{w})}{\partial w_j} &= \frac{\partial J(\mathbf{w})}{\partial \sigma(z)}\frac{\partial \sigma(z)}{\partial z}\frac{\partial z}{\partial{w_j}}\\ \end{align*} \]
\[ \frac{\partial J(\mathbf{w})}{\partial \sigma(z)} = -\frac{1}{m} \sum_{i=0}^{m-1} [y_i \frac{1}{\sigma(z)} - (1 - y_i)\frac{1}{1 - \sigma(z)}] \]
\[ \begin{align*} \frac{\partial \sigma(z)}{\partial z}&= \frac{\partial \frac{1}{1 + e^{-z}}}{\partial z}\\ &= \frac{\partial (1 + e^{-z})^{-1}}{\partial z}\\ &= \frac{\partial (1 + e^{-z})^{-1}}{\partial (1 + e^{-z})}\frac{\partial (1 + e^{-z})}{\partial z}\\ &=-(1 + e^{-z})^{-2}\frac{\partial (1 + e^{-z})}{\partial z}\\ &=-(1 + e^{-z})^{-2} \cdot -e^{-z}\\ &=\frac{e^{-z}}{(1 + e^{-z})^2}\\ &=\frac{e^{-z}}{(1 + e^{-z})^2} = \sigma(z)(1 - \sigma(z)) \end{align*} \] preuve pour la dernière étape
\[ \begin{align*} \frac{\partial z}{\partial w_j} = \frac{\partial (\mathbf{w} \cdot \mathbf{x}_i)}{\partial w_j} = \frac{\partial (w_0x_{i0} + \dots + w_jx_{ij} + ...)}{\partial w_j} = x_{ij} \\ \end{align*} \]
\[ \frac{\partial J(\mathbf{w})}{\partial w_j} = -\frac{1}{m} \sum_{i=0}^{m-1} (y_i - \sigma(z)) x_{ij} \]
Sous forme vectorisée, le gradient est :
\[\nabla_{\mathbf{w}} J(\mathbf{w}) = -\frac{1}{m} \mathbf{X}^T (\mathbf{y} - \sigma(\mathbf{X}\mathbf{w})))\]
Ici, \(\mathbf{X}\) est la matrice des caractéristiques d’entrée, \(\mathbf{y}\) est le vecteur des étiquettes réelles, et \(\mathbf{w}\) est le vecteur de poids. Ce gradient est utilisé dans des algorithmes comme la descente de gradient pour trouver les poids \(\mathbf{w}\) qui minimisent la fonction de perte d’entropie croisée.
Règle de la chaîne
Pour de l’aide avec la règle de la chaîne, regardez la vidéo suivante qui présente une justification géométrique.
Comparaison entre Perceptron et Régression logistique
Utiliser des probabilités nous permet une fonction de perte continue et lisse. Il y a plus d’informations dans la probabilité que dans une simple sortie \(0\) ou \(1\). La descente de gradient nous mène, habituellement, à une meilleur frontière linéaire, relatif au perceptron.