Pourquoi utiliser des réseaux profonds?
Essayons d'abord de résoudre une tâche de classification très simple. Disons que vous modérez un forum Web qui est parfois inondé de messages indésirables. Ces messages sont facilement identifiables - le plus souvent, ils contiennent des mots spécifiques comme "acheter", "porno", etc. et une URL vers des ressources externes. Vous souhaitez créer un filtre qui vous alertera sur ces messages suspects. Cela devient assez facile - vous obtenez une liste de fonctionnalités (par exemple, une liste de mots suspects et la présence d'une URL) et entraînez une régression logistique simple (aka perceptron), c'est-à-dire un modèle comme:
g(w0 + w1*x1 + w2*x2 + ... + wnxn)
où x1..xn
sont vos fonctionnalités (présence d'un mot spécifique ou d'une URL), w0..wn
- coefficients appris et g()
est une fonction logistique pour que le résultat soit compris entre 0 et 1. C'est un classificateur très simple, mais pour cette tâche simple, il peut donner de très bons résultats, créant limite de décision linéaire. En supposant que vous n'utilisiez que 2 entités, cette limite peut ressembler à ceci:
Ici, 2 axes représentent des caractéristiques (par exemple, le nombre d'occurrences d'un mot spécifique dans un message, normalisé autour de zéro), les points rouges restent pour le spam et les points bleus - pour les messages normaux, tandis que la ligne noire montre la ligne de séparation.
Mais bientôt, vous remarquez que certains bons messages contiennent beaucoup d'occurrences du mot "acheter", mais pas d'URL, ou une discussion approfondie sur la détection du porno , sans se référer réellement aux films porno. La frontière de décision linéaire ne peut tout simplement pas gérer de telles situations. Au lieu de cela, vous avez besoin de quelque chose comme ceci:
Cette nouvelle frontière de décision non linéaire est beaucoup plus flexible , c'est-à-dire qu'elle peut ajuster les données beaucoup plus près. Il existe de nombreuses façons de réaliser cette non-linéarité - vous pouvez utiliser des caractéristiques polynomiales (par exemple x1^2
) ou leur combinaison (par exemple x1*x2
) ou les projeter vers une dimension supérieure comme dans les méthodes du noyau . Mais dans les réseaux de neurones, il est courant de le résoudre en combinant des perceptrons ou, en d'autres termes, en construisant un perceptron multicouche. La non-linéarité vient ici de la fonction logistique entre les couches. Plus il y a de couches, plus les motifs sophistiqués peuvent être couverts par MLP. Une seule couche (perceptron) peut gérer une détection de spam simple, un réseau avec 2-3 couches peut capturer des combinaisons délicates de fonctionnalités, et des réseaux de 5-9 couches, utilisés par de grands laboratoires de recherche et des entreprises comme Google, peuvent modéliser la langue entière ou détecter des chats sur les images.
C'est une raison essentielle pour avoir des architectures profondes - elles peuvent modéliser des modèles plus sophistiqués .
Pourquoi les réseaux profonds sont-ils difficiles à former?
Avec une seule caractéristique et une limite de décision linéaire, il suffit en fait de n'avoir que 2 exemples de formation - un positif et un négatif. Avec plusieurs fonctionnalités et / ou frontière de décision non linéaire, vous avez besoin de plusieurs commandes plus d'exemples pour couvrir tous les cas possibles (par exemple, vous devez non seulement trouver des exemples avec word1
, word2
et word3
, mais aussi avec toutes leurs combinaisons possibles). Et dans la vraie vie, vous devez gérer des centaines et des milliers de fonctionnalités (par exemple, des mots dans une langue ou des pixels dans une image) et au moins plusieurs couches pour avoir suffisamment de non-linéarité. La taille d'un ensemble de données, nécessaire pour former pleinement ces réseaux, dépasse facilement 10 ^ 30 exemples, ce qui rend totalement impossible d'obtenir suffisamment de données. En d'autres termes, avec de nombreuses fonctionnalités et de nombreuses couches, notre fonction de décision devient trop flexiblepour pouvoir l'apprendre avec précision .
Il existe cependant des moyens de l'apprendre approximativement . Par exemple, si nous travaillions dans des contextes probabilistes, au lieu d'apprendre les fréquences de toutes les combinaisons de toutes les fonctionnalités, nous pourrions supposer qu'elles sont indépendantes et n'apprennent que des fréquences individuelles, réduisant le classificateur de Bayes complet et sans contrainte à un Bayes naïf et nécessitant donc beaucoup, beaucoup moins de données à apprendre.
Dans les réseaux de neurones, il y a eu plusieurs tentatives pour réduire (de manière significative) la complexité (flexibilité) de la fonction de décision. Par exemple, les réseaux convolutionnels, largement utilisés dans la classification des images, supposent uniquement des connexions locales entre les pixels voisins et n'essaient donc que d'apprendre des combinaisons de pixels à l'intérieur de petites "fenêtres" (disons, 16x16 pixels = 256 neurones d'entrée) par opposition aux images complètes (disons, 100x100 pixels = 10000 neurones d'entrée). D'autres approches incluent l'ingénierie des fonctionnalités, c'est-à-dire la recherche de descripteurs spécifiques, découverts par l'homme, des données d'entrée.
Les fonctionnalités découvertes manuellement sont en fait très prometteuses. Dans le traitement du langage naturel, par exemple, il est parfois utile d'utiliser des dictionnaires spéciaux (comme ceux contenant des mots spécifiques au spam) ou de rattraper la négation (par exemple, " pas bon"). Et en vision par ordinateur, des choses comme les descripteurs SURF ou des fonctionnalités de type Haar sont presque irremplaçables.
Mais le problème avec l'ingénierie manuelle des fonctionnalités est qu'il faut littéralement des années pour trouver de bons descripteurs. De plus, ces fonctionnalités sont souvent spécifiques
Pré-formation non supervisée
Mais il s'avère que nous pouvons obtenir automatiquement de bonnes fonctionnalités directement à partir des données en utilisant des algorithmes tels que les encodeurs automatiques et les machines Boltzmann restreintes . Je les ai décrits en détail dans mon autre réponse , mais en bref, ils permettent de trouver des motifs répétés dans les données d'entrée et de les transformer en fonctionnalités de niveau supérieur. Par exemple, étant donné uniquement des valeurs de pixels de ligne en entrée, ces algorithmes peuvent identifier et passer des bords entiers supérieurs, puis à partir de ces bords construire des figures et ainsi de suite, jusqu'à ce que vous obteniez des descripteurs de haut niveau tels que des variations de visages.
Après un tel réseau de formation préalable (non supervisé), il est généralement converti en MLP et utilisé pour une formation supervisée normale. Notez que la pré-formation se fait par couches. Cela réduit considérablement l'espace de la solution pour l'algorithme d'apprentissage (et donc le nombre d'exemples de formation nécessaires) car il n'a besoin que d'apprendre les paramètres à l' intérieur de chaque couche sans tenir compte des autres couches.
Et au-delà...
La pré-formation non supervisée existe depuis un certain temps maintenant, mais récemment, d'autres algorithmes ont été trouvés pour améliorer l'apprentissage à la fois - avec et sans pré-formation. Un exemple notable de tels algorithmes est l' abandon - technique simple, qui "abandonne" au hasard certains neurones pendant l'entraînement, créant une certaine distorsion et empêchant les réseaux de suivre les données de trop près. C'est toujours un sujet de recherche brûlant, donc je laisse cela à un lecteur.