\section{Chapitre 18: Apprentissage supervisé} \label{sec:ch18} \subsection{Introduction} \label{sec:ch18intro} \begin{itemize} \item Essentiel pour les environnements inconnus \item Améliore la performance \end{itemize} Trois types d'apprentissage: \begin{itemize} \item \textbf{Supervisé (inductif)}: \begin{itemize} \item Ensemble de couples entrée-sortie $(x_n,y_n)$. \item La distribution $F(x,y)$ est inconnue. \item Par exemple $y_n = f(x_n) + w_n$ où $w_n$ est un bruit centré. \item On cherche $h(x)$ qui se rapproche le plus possible de $f(x)$. Si $h(x_n)=f(x_n) \forall n$, alors $h(x)$ est cohérente. \end{itemize} \item \textbf{Non-supervisé}: Relations entre les perceptions. Apprend à partir du passé. \item \textbf{Renforcement}: Évaluation par récompense ou punition. \end{itemize} Espace des hypothèses: \begin{itemize} \item L'espace des hypothèses $\emph{H}$ doit permettre de représenter les données. \item Si $\emph{H}$ contient $f$, alors le problème d'apprentissage est dit réalisable. \item L'hypothèse la plus probable: \begin{align} h^{\star} &= \argmax_{h \in \emph{H}} P(h|data)\\ &= \argmax_{h \in \emph{H}} p(data|h)P(h) \end{align} \end{itemize} \subsection{Arbres de décision} \label{sec:ch18arbres} \begin{itemize} \item Chaque noeud représente un test à faire. \item Chaque branche représente une valeur possible résultant du test. \item Une feuille représente une prise de décision. \item Les instances sont représentées par des paires (attributs, valeur). \item Les valeurs peuvent être continues ou discrètes. \end{itemize} La fonction \begin{itemize} \item La fonction est généralement binaire, mais on peut la généraliser à plusieurs valeurs de sortie ou à une valeur continue. Les problèmes de classification sont les plus fréquents. \item Les arbres de décisions sont robustes aux erreurs et aux valeurs manquantes. \item Toute fonction booléenne est représentable par un arbre de décision. \end{itemize} \subsubsection{Algorithme} \label{sec:ch18arbrealgo} \begin{itemize} \item Construction de haut en bas. \item Chaque valeur possible de l'attribut choisi crée un noeud. \end{itemize} \subsubsection{Entropie} \label{sec:ch18entropie} L'entropie de Shannon est définie comme la somme pondérée de l'information de Shannon: \begin{align} H(x) &= \sum_{i=1}^np_i\log_2{\frac{1}{p_i}} \\ \end{align} Propriétés de l'entropie: \begin{itemize} \item $H(X) \geq 0$ et $H(X)=0 \iff \exists i, p_i=1$ \item $H(X) \leq \log_2(n)$ et $H(X) = \log_2(n) \iff \forall i p_i=\frac{1}{n}$ \end{itemize} \subsubsection{Choix de l'attribut} \label{sec:ch18choixattr} \begin{itemize} \item Choisir l'attribut ayant le meilleur gain d'information: \begin{align} \text{Gain}(S,A) &\equiv H(S)-\sum_{v \in V(A)}\frac{\abs{S_v}}{\abs(S)}H(S_v)\\ H(S) &\equiv - \sum_{i=1}^c(p_i)\log_2(p_i) \end{align} \end{itemize} \subsubsection{Procédure générale d'apprentissage} \label{sec:ch18procappren} \begin{itemize} \item Collecte d'exemples \item Division (entrainement, test, validation) \item Générer l'hypothèse H sur l'ensemble de validation \item Mesurer l'hypothèse H sur l'ensemble de test \end{itemize} \subsubsection{Élagage de l'arbre} \label{sec:ch18elagage} Un noeud devient une feuille avec la valeur de classification la plus fréquente. Cette étape se fait si elle améliore la performance sur l'ensemble de validation. \subsubsection{Valeurs manquantes} \label{sec:ch18valmanq} S'il y a des valeurs manquantes dans le jeu d'entrainement, on peut: \begin{itemize} \item Donner la valeur moyenne de cet attribut. Le calcul de l'information de change pas. \item Attribuer une probabilité pour la valeur manquante, On a maintenant des fractions d'exemples dans nos calculs. \end{itemize} \subsubsection{Attributs multivariés} \label{sec:ch18multivar} Si on a des attributs qui ont plusieurs valeursm on peut avoir un problème avec la fonction de gain d'information, car chaque attribut peut être unique. On se retrouve donc avec un arbre horizontal de profondeur 1. Au lieu d'utiliser le gain d'information, on utilise la ratio de gain d'information, ce qui pénalise ces attributs. \begin{align} \textsc{SplitInformation}(S,A) &\equiv -\sum_{i=1}^c\frac{\abs{S_i}}{\abs{S}}\log_2\frac{\abs{S_i}}{\abs{S}}\\ \textsc{GainRatio}(S,A) &\equiv \frac{\textsc{Gain}(S,A)}{\textsc{SplitInformation}(S,A)} \end{align} \subsubsection{Attributs continus} \label{sec:ch18attrcont} On utilise un point de coupe pour obtenir une discrétisation. \begin{itemize} \item On trie les valeurs en ordre croissant \item On calcule la \textbf{médiane} à chacun des changements de valeur \item On compare les valeurs de coupe et on choisit celle qui a le \textbf{plus grand gain} d'information \end{itemize} \subsection{Ensembles d'hypothèses} \label{sec:ch18ensembles} On apprened plusieurs hypothèses et on combine leurs prédictions. \begin{itemize} \item \textbf{Vote par majorité}. La prédiction \textbf{la plus fréquente} est retournée. \item \textbf{Boosting}. On attribue un poids à chacun des exemples. Plus un exemple a un poids important, plus il sera considéré par l'algorithme d'apprentissage. On augmente le poids des exemples mal classés et diminue celui de ceux bien classés. On calcule la \textbf{majorité pondérée} par la performance sur l'ensemble d'entrainement. \end{itemize} \subsection{K-voisins plus proches} \label{sec:ch18knn} Le seul paramètre est le nombre de voisins à considérer. On a un échantillon d'exemples et de classes. Pour un nouvel exemple, on calcul la distances avec chaque exemple de l'échantillon. On choisit les $k$ plus proches et on effectue un vote de majorité de la classe. Mesures de distance: \begin{itemize} \item Enclidienne: $D(X,Y)=\sqrt{\sum_{i=1}^nw_i(x_i-y_i)^2}$ \end{itemize} Fonction visée: \begin{itemize} \item Valeurs possibles $V$ \item L'estimation de $f$ est tout simplement la valeur qui revient le plus souvent parmi les $k$ plus proches voisins \end{itemize} \begin{align} \hat{f}(x_q) \leftarrow \max_{v \in V}\sum_{i=1}^k \delta(v,f(x_i)) \end{align} \subsection{Réseaux de neurones} \label{sec:ch18reseaux} Un réseau de neurones est un ensemble de neurones interconnectés. Chaque neurone contient: \begin{itemize} \item Des liens d'entrée $x_i$ \item Des poids d'entrée $w_{j,i}$ \item Une fonction d'entrée \item Une fonction d'activation \item Une valeur de sortie \end{itemize} \begin{figure}[h!] \centering \includegraphics[height=152px]{neurone_artificiel} \caption{Un neurone artificiel} \label{fig:ch18neurone} \end{figure} \subsubsection{Perceptron} \label{sec:ch18perceptron} \begin{itemize} \item La fonction d'entrée est une somme pondérée $\sum_{i=0}^nw_ix_i$. \item Un perceptron peut donc représenter toutes les fonctions linéairement séparables. Ex: OR et AND le sont, mais XOR ne l'est pas. \item Dans ces deux premiers cas, la fonction d'activation $a_i=1, \sum_{i=1}^nw_ix_i>0; -1, sinon$. On change $w_0$ pour avoir le comportement désiré. \end{itemize} Règle d'apprentissage: On débute avec des valeurs de poids aléatoires Puis on mets les poids à jour pour chaque exemple. \begin{align} w_i \leftarrow w_i + \eta(t-o)x_i \end{align} On peut aussi le faire après une première passe sur tous les exemples: \begin{align} w_i \leftarrow w_i + \eta\sum_{d \in D}(t_d-o_d)x_{id} \end{align} \subsubsection{Fonction d'activation} \label{sec:ch18activation} Il existe plusieurs fonctions d'activations possibles: \begin{figure}[h!] \centering \begin{itemize} \item Sigmoid: $\sigma(y) = \frac{1}{1+e^{-y}}$ \end{itemize} \caption{Fonctions d'activation} \label{fig:ch18fonctionactivation} \end{figure} \subsubsection{Réseaux multi-couches} \label{sec:ch18reseauxmulti} Les réseaux multi-couches permettent de créer des séparateurs non-linéaires. On a alors ce qu'on appelle des couches de neurones cachées. \begin{figure}[h!] \centering \includegraphics[height=264px]{reseauprofond} \caption{Un réseau profond de neurones artificiels} \label{fig:ch18neurone} \end{figure} On peut représenter la fonction XOR avec deux couches d'un neurone linéaire. \begin{figure}[h!] \centering \includegraphics[height=208px]{xor-neurone} \caption{Un réseau profond modélisant la fonction XOR} \label{fig:ch18neuronexor} \end{figure} L'ajustement des poids revient à changer les paramètres de la fonction représentée par le réseau. \subsubsection{Rétropropagation} \label{sec:ch18retroprop} Utilise l'algorithme de descente du gradient. L'erreur du réseau est: \begin{align} E(\vec{w})=\frac{1}{2}\sum_{d\in D}\sum_{k \in \text{sorties}}(t_{kd}-o_{kd})^2 \end{align} On exprime la variation de poids par: \begin{align} \Delta w_{ji} = - \eta \frac{\partial E}{\partial w_{ji}} \end{align} Pour chaque exemple d'entrainement: \begin{itemize} \item Calculer les valeurs de sortie \item Calculer l'erreur pour chaque unité de sortie $k$: \begin{align} \delta_k \leftarrow o_k(1-o_k)(t_k-o_k) \end{align} \item Calculer l'erreur pour chaque unité cachée $h$: \begin{align} \delta_h \leftarrow o_h(1-o_h)\sum_{k \in \text{sorties}}w_{kh}\delta_{k} \end{align} \item Mettre à jour les poids de sorties $w_{ji}$: \begin{align} w_{ji} &\leftarrow w_{ji} + \Delta w_{ji}\\ & w_{ji} + \eta \delta_jX_{ji} \end{align} \end{itemize} Conditions d'arrêt: \begin{itemize} \item nombre fixe d'itérations \item borne minimale pour l'erreur \item Derniers paramètres qui ont contribué à une augmentation de la performance \end{itemize} \subsection{Machines à vecteurs de support (SVM)} \label{sec:ch18svm} Problèmes à deux classes linéairement séparables. Plusieurs solutions possibles pour la surface de décision. On veut aloir la surface la plus éloignée possible des données proches de chaque classe. \subsubsection{Hyperplans} \label{sec:ch18hyperplans} La distance d'un point à l'hyperplan est: \begin{align} \frac{\abs{D(x)}}{\norm{w}} \text{ où } D(x) = w^Tx+b \end{align} On définit le vecteur unité par la distance minimale entre les points et l'hyperplan: \begin{align} \min_{i=1,\ldots,m}\abs{w^tx+i+b}=1 \end{align} Le point le plus proche est maintenant à une distance $\frac{1}{\norm{w}}$. Le classificateur est donnée par le signe de $D(x)$ en nombre de vecteurs unités. La marge maximale est donc de $m=\frac{2}{\norm{w}}$. On doit donc minimiser: \begin{align} \min \frac{1}{2}\norm{w}^2 \text{ s.c. }y_i(w^Tx_i+b) \geq 1 \forall i \end{align} On a donc une problème d'optimisation quadratique. On peut résoudre par les méthodes classiques si $d$ n'est pas trop grand. L'approche SVM utilise plutôt les multiplicateurs de Lagrange. \subsubsection{Lagrangien} \label{sec:ch18lagrangien} \begin{mydef} Pour un problème d'optimisation \begin{align} \min f(x) \text{ s.c. } c_i(x) \leq 0, \forall i \end{align} Le lagrangien est défini par \begin{align} \Lambda(x,\alpha)=f(x)+\sum_{i=1}^n\alpha_ic_i(x), \alpha_i \geq 0, \forall i \end{align} \end{mydef} \subsubsection{Représentation duale} \label{fig:ch18svmduale} Représentation duale du problème: \begin{align} \Lambda(w,b,\alpha) &= \frac{1}{2} \norm{w}^2-\sum_{i=1}^n \alpha_i\left[(x_i^Tw+b)y_i-1 \right], \\alpha_i &\geq 0, \forall i \end{align} On a, par les conditions KKT, que $\nabla_{w,b}\Lambda(w,b,a=0 \iff w=\sum_{i=1}^n\alpha_iy_yx_i$ et $\sum_{i=1}^n\alpha_iy_i=0$. Par substitution, on obtient que \begin{align} \Lambda(w,b,\alpha) &= \sum_{i=1}^n\alpha_i - \frac{1}{2} \sum_{i=1}^n\sum_{j=1}^n\alpha_i\alpha_jy_iy_j(x_i^Tx_j)\\ \alpha_i &\geq 0, \forall i\\ \sum_{i=1}^n\alpha_iy_i&=0 \end{align} On doit trouver $\argmin_{\alpha}\Lambda(w,b,\alpha)$. \subsubsection{Solution du problème d'optimisation} \label{sec:ch18svmsolutionoptim} \begin{align} \hat{w} &= \sum_{i=1}^{n_s}\alpha_iy_ix_i\\ \hat{b} &= y_s-\sum_{i=1}^{n_s}\alpha_iy_i(x_i^Tx_s)\\ D(x) &= (\hat{w}^Tx+b) \end{align} Pour classer une nouvelle donnée, on calcule le signe de cette expression. si positif (classe 1) sinon (classe 2): \begin{align} \hat{w}^Tz+\hat{b} = \sum_{i=1}^{n_s}\alpha_iy_i(x_i^Tz)+\hat{b} \end{align} Pour créer un classificateur multi-classes, on effectue plusieurs SVM et on prend celui qui maximise ;a distance D(x). \subsubsection{Cas non linéairement séparable} \label{sec:ch18svnnonlin} On introduit une variable d'écart $\xi_i$ pour la classification. Elles permettent de relaxer les contraintes par rapport à la marge. \begin{align} w^Tx_i + b &\geq 1- \xi_i & y_i=1\\ w^Tx_i + b &\leq -1 + \xi_i & y_i=-1\\ \xi_i &\geq 0& \forall i \end{align} On obtient le problème d'optimisation suivant: \begin{align} \min &\frac{1}{2}\norm{w}^2+C\sum_{i=1}^n \xi_i&\\ \text{s.c. } &y_i(w^Tx_i + b) \geq 1-\xi_i, &\xi_i \geq 0 \end{align} La forme duale est similaire à celel du cas linéaire, sauf que la valeur de $\alpha$ est limitée: \begin{align} \max W(\alpha) &= \sum_{i=1}^n \alpha_i - \frac{1}{2} \sum_{i=1}^n\sum_{j=1}^n \alpha_i\alpha_jy_iy_j(x_i^Tx_j)\\ \text{s.c. }C &\geq \alpha_i \geq 0, \sum_{i=1}^n \alpha_iy_i = 0 \end{align} On peut projeter les $x_i$ dans un nouvel espace où ils sont linéairement séparables. On utilise alors une fonction de re-description $\Phi(x)$. Afin de résoudre les problèmes de dimensionnalité, on utilise les fonctions noyau. \begin{mydef} Une \textbf{fonction noyau} prend la forme \begin{align} K(x,y) = \langle \phi(x),\phi(y) \rangle \end{align} Cette fonction doit répondre aux conditions de Mercer pour que $\Phi(x)$ existe. \end{mydef} \begin{mydef} La condition de Mercer énonce que, pour une fonction $K$ symétrique, $\Phi$ existe tel que: \begin{align} K(x,x^{\prime}) &= \Phi(x)\Phi(x^{\prime}) = \sum_{i=1}^m g_i(x)g_i(x^{\prime}) \end{align} Si, pour toute fonction $f$ tel que $\int_x f(x)^2dx < \infty$, on a: \begin{align} \int_x\int_{x^{\prime}} K(x,x^{\prime}) f(x)f(x^{\prime})dxdx^{\prime} \end{align} Alors la matrice de Gram $K(x_i,x_j)$ est semi-définie positive. \end{mydef} \begin{itemize} \item Transformation: On substitue $K(x_i,x_j)$ à $x_i^Tx_j$ dans le problème dual et dans la règle de classification. \item Problème dual: \begin{align} \max W(\alpha) &= \sum_{i=1}^n \alpha_i - \frac{1}{2} \sum_{i=1}^n\sum_{j=1}^n \alpha_i\alpha_jy_iy_jK(x_i,x_j)\\ \text{s.c. }C &\geq \alpha_i \geq 0, \sum_{i=1}^n \alpha_iy_i = 0 \end{align} \item Classificateur: \begin{align} \langle \hat{w},z \rangle + \hat{b} = \sum_{i=1}^{n_s}\alpha_iy_iK(x_j^T,z)+\hat{b} \end{align} \item Surface de séparation: \begin{align} D(x)=\sum_{j=1}^s \hat{\alpha}_jy_jK(x_j,x)+\hat{b} \end{align} \end{itemize} \subsubsection{Exemple de fonctions noyaux} \label{sec:ch19svmtransfo} \begin{itemize} \item Noyau polynomial: $K(x,y) = (x^Ty+1)^d$ \item Noyau à base radiale de dispersion $\sigma$: $K(x,y) = e^{-\norm{x-y}^2/(2\sigma^2)}$ \item Sigmoïde: $K(x,y) = \tanh (\kappa x^Ty+\theta)$ \end{itemize} \subsubsection{SVM et régression} \label{sec:ch18svmregression} \begin{itemize} \item Fonction de perte: $\abs{y-f(x)}_\epsilon = \max(0,\abs{y-f(x)}-\epsilon)$ \item Régression linéaire: $f(s)=wx+w_0$ \item Minimiser: $\frac{1}{2}\norm{w}^2+C\sum_{i=1}^m\abs{y_i-f(x_i)}_\epsilon$ \item Forme duale: $f(x) = \sum_{i=1}^m(\alpha_i^{\star}-\alpha_i)K(x_i,x)+w_0$ \end{itemize} %%% Local Variables: %%% mode: latex %%% TeX-master: "notes_de_cours" %%% End: