Free AI web copilot to create summaries, insights and extended knowledge, download it at here
9939
Abstract
générer un nouveau mot de la traduction</li><li><b>decoder-decoder</b>: il faut faire attention à ce que l’on vient de traduire pour continuer la traduction</li></ol><p id="149f">Enfin, plus récemment lors de <a href="https://nips.cc/Conferences/2019">NeurIPS 2019</a> en décembre 2019, <a href="https://slideslive.com/38922304/from-system-1-deep-learning-to-system-2-deep-learning">Yoshua Bengio est revenu sur l’importance des mécanismes d’attentions utilisés à présent dans tous les modèles de Deep Learning</a> (et pas uniquement les modèles de NLP) en introduisant la conscience dans le vocabulaire traditionnel de l’apprentissage automatique. <b>Il considère en effet que l’ingrédient central de la conscience est l’attention. Il a comparé les mécanismes d’attention utilisés dans l’apprentissage machine à la façon dont notre cerveau choisit ce à quoi il faut prêter attention</b>:</p><blockquote id="b8ec"><p>“L’apprentissage automatique peut être utilisé pour aider les scientifiques du cerveau à mieux comprendre la conscience, mais ce que nous comprenons de la conscience peut également aider l’apprentissage automatique à développer de meilleures capacités.” (en anglais: “<i>Machine learning can be used to help brain scientists better understand consciousness, but what we understand of consciousness can also help machine learning develop better capabilities.</i>”)</p></blockquote><p id="8cb4">Selon Yoshua Bengio, une approche inspirée par la conscience est la voie à suivre si nous voulons des algorithmes d’apprentissage automatique qui peuvent se généraliser à des exemples hors des distributions utilisées pour leur entraînement.</p><h1 id="78f9">Modèle Transformer de Google AI</h1><p id="1e82">Voici ci-dessous le modèle Transformer développé par Google AI, entraîné 12 heures sur 8 GPUs NVIDIA P100 et présenté dans le papier scientifique “<a href="https://arxiv.org/abs/1706.03762">Attention Is All You Need</a>” en juin 2017. Il présente 2 grands modules: l’ensemble des 6 encoders qui encode une séquence d’entrée qui est alors décodée dans un ensemble de 6 decoders pour générer une séquence de sortie.</p><p id="019f">Nous pouvons également remarquer que le modèle Transformer possède 3 mécanismes d’attention et non pas un seul comme les modèles Seq2Seq: encoder-encoder dans chaque encoder, decoder-decoder et encoder-decoder (semblable aux modèles Seq2Seq) dans chaque decoder.</p><figure id="044b"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*avrY8BweFlF5rgmYo5a6dA.png"><figcaption>Modèle Transformer de 2017 à 6 couches (N=6) et 3 systèmes de self-attention (Image source: <a href="https://arxiv.org/abs/1706.03762">Attention Is All You Need</a>)</figcaption></figure><p id="bc27">Comme le fait le post “<a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>” ou la vidéo ci-dessous, examinons fonctionnement du modèle Transformer d’abord de manière générale vers ensuite plus de détails.</p>
<figure id="5842">
<div>
<div>
<img class="ratio" src="http://placehold.it/16x9">
<iframe class="" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FiDulhoQ2pro%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DiDulhoQ2pro&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FiDulhoQ2pro%2Fhqdefault.jpg&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=youtube" allowfullscreen="" frameborder="0" height="480" width="854">
</div>
</div>
</figure></iframe></div></div></figure><h1 id="dccf">Modèle en couches</h1><p id="9de7">Comme le cerveau dont les neurones fonctionnent en couches et les modèles ConvNet qui se sont inspirés de ce fonctionnement, le modèle Transformer est construit également en couches à la fois dans sa partie encodage et sa partie décodage (6 couches d’encodage puis 6 couches de décodage), <b>chaque couche apprenant des caractéristiques particulières qu’elle fournit alors à la couche suivante</b> (note: ce nombre de 6 n’est pas magique: il constitue plus un compromis pour avoir un temps d’entraînement acceptable selon les possibilités de computation de l’époque: le modèle BERT développé plus tard en novembre 2018 possède par exemple 24 couches et le modèle Turing-NLG révélé en février 2020 en possède 78).</p><figure id="270d"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/0*5TpasQFg5fwOqeA4"><figcaption>Caractéristiques apprises par les différentes couches d’un ConvNet (Image Source: <a href="http://web.eecs.umich.edu/~honglak/icml09-ConvolutionalDeepBeliefNetworks.pdf">Convolutional Deep Belief Networks for Scalable Unsupervised Learning of Hierarchical Representations</a>)</figcaption></figure><figure id="5a5a"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/0*y-3m-4NaehShRCOy.png"><figcaption>Transformer est un modèle en 6 couches (Image source: <a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>)</figcaption></figure><h1 id="f791">Encoder</h1><p id="e5a3">Chacun des 6 encoders est identique avec un <b>mécanisme de self-attention multi_head suivi par un un réseau fully-connected</b>, chacun suivi par une couche de concaténation puis de normalisation des vecteurs.</p><p id="7206">La notion de multi-head signifie que le processus d’attention (cf. paragraphe ci-après) est répliqué plusieurs fois dans chaque encoder (8 fois dans ce modèle mais là-aussi ce nombre n’est pas magique: il est de 28 dans le modèle Turing-NLG de Microsoft de janvier 2020).</p><figure id="c156"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/0*ifFEkhW2QOmK2vqN.png"><figcaption>Un schéma d’un encoder du modèle Transformer avec ses 2 couches de self-attention puis de Feed-Forward (Image source: <a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>)</figcaption></figure><h2 id="6cf4">Self-attention dans l’encoder</h2><p id="b1c9"><b>Le mécanisme de self-attention (ou d’attention interne puisqu’il intervient dès l’encodage de la séquence d’entrée et non seulement à partir du décodage comme dans un modèle Seq2Seq avec RNNs) revient à transformer chaque vecteur <i>x</i> représentant le token de la séquence d’entrée en un vecteur de contexte <i>z</i> qui prend en compte une relation particulière avec les autres tokens de la séquence.</b> Cette notion de relation est vaste et est apprise par l’entraînement: certaines “head” vont faire attention aux relations grammaticales, d’autres aux relations de co-référence, etc. C’est pour cela qu’il y a plusieurs “head” (ie, il y a plusieurs relations à apprendre entre des mots et ponctuations d’une phrase).</p><p id="2a8f">Comme le montre l’image ci-dessous issue du post <a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>, <b>le mécanisme de self-attention demande l’entraînement de 3 matrices</b> qui pour chaque token d’une séquence vont créer un vecteur par multiplication avec son vecteur d’embeddings (en fait le vecteur d’embeddings sommé au vecteur de position).</p><p id="78f2">Pour chaque token de la séquence d’entrée:</p><ol><li>la <b>matrice Q</b> qui permet de créer un vecteur de <b>QUERY (q)</b>, vecteur qui représente principalement le token dont il est issu dans le cadre de la séquence,</li><li>la <b>matrice K</b> qui permet de créer un vecteur de <b>KEY (k)</b> pour chaque token de la séquence, vecteurs qui représentent la singularité (une relation particulière) de chacun des tokens de la séquence par rapport au token dont on est entrain de calculer le vecteur de contexte (nous pouvons aussi imaginer les vecteurs k comme des vecteurs d’indexation),</li><li>la <b>matrice V</b> qui permet de créer un vecteur de <b>VALUE (v)</b> pour chaque token de la séquence, vecteurs qui représentent la valeur de chacun des tokens de la séquence.</li></ol><p id="6db6">Ainsi en faisant un dot produit du vecteur de QUERY q avec chacun des vecteurs de KEY k, on obtient un score pour chacun des tokens de la séquence qui après passage par un softmax représente un poids entre 0 et 1 avec une somme de tous les poids à 1. Ces poids vont permettre de faire ensuite une somme pondérée des vecteurs de VALUE v et créé ainsi le vecteur de contexte z.</p><p id="f1c9"><b>Pour tous les tokens d’une séquence, il va donc être possible de calculer de manière parallélisée son vecteur de contexte. Le problème de traitement séquentiel des modèles Seq2Seq est éliminé par cette architecture.</b></p><figure id="56ed"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/0*Gw-USk3BAyu5-2E4.png"><figcaption>Transformation par self-attention de chaque vecteur de token en un vecteur de contexte dans l’encoder (Image source: <a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>)</figcaption></figure><p id="2d72">Ces multiplications de matrices suivie par un softmax et une normalisation peuvent se résumer par le calcul matriciel suivant (ce qui explique la rapidité de calcul d’un modèle Transformer):</p><figure id="fea7"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/0*Wd5rDRQ67WNHiDqm.png"><figcaption>Le mécanisme de self-attention sous forme d’un équation matricielle (Image source: <a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>)</figcaption></figure><h2 id="0922">Vecteur de position (positional encoding)</h2><p id="5ce9">Afin de ne pas traiter les tokens d’une séquence d’entrée comme un “bag of words”, un vecteur de position est ajouté à son vecteur d’embeddings avant que le vecteur résultant n’entre dans le premier encoder.</p><p id="a45b">Afin de comprendre comment est calculé ce vecteur de position, lire le paragraphe “<a href="http://jalammar.github.io/illu
Options
strated-transformer/#representing-the-order-of-the-sequence-using-positional-encoding">Representing The Order of The Sequence Using Positional Encoding</a>” du post <a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>. L’idée principale est de coder sa position dans la séquence de manière fréquentielle.</p><p id="bdd4">Autre post sur le même thème: <a href="https://kazemnejad.com/blog/transformer_architecture_positional_encoding/">Transformer Architecture: The Positional Encoding</a> (septembre 2019: Amirhossein Kazemnejad)</p><h2 id="2ae5">Multi-Head</h2><p id="5c8e">Comme nous l’avons noté, chaque encoder possède 8 “head” qui permettent chacune de caractériser des relations différentes entre les tokens. Au final, chaque “head” produit une matrice de vecteurs de contextes Z (le nombre de ligne est égal au nombre de tokens et le nombre de colonnes est la dimensionnalité des matrices Q, K et V, ici 64). Ces matrices Z sont concaténées puis multipliées par une matrice 0 (dont les paramètres seront appris par entraînement) qui permettra de retrouver une seule matrice Z de sortie qui sera mise en entrée du Feed-Forward de l’encoder.</p><figure id="550e"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/0*Ws7qKMV2YyQjYbFm.png"><figcaption>Procédé de self-attention multi-head dans un encoder du modèle Transformer (Image source: <a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>)</figcaption></figure><h2 id="ec2e">Les “residuals”, les normalisations et le réseau fully-connected de sortie de l’encoder</h2><p id="5af2">Ce vecteur Z est alors additionné au vecteur d’entrée (residual) puis normalisé avant d’être passé à un réseau Feed-Forward (dont les paramètres seront appris par entraînement), qui lui même sera suivi par une telle procédure (residuals puis normalisation). Le vecteur résultant sera passé à l’encoder suivant.</p><figure id="a35a"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/0*5LeDwk2AinmnGAIF.png"><figcaption>Un encoder du modèle Transformer (Image source: <a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>)</figcaption></figure><h2 id="871c">Sortie de l’ensemble des encoders vers les decoders</h2><p id="c9fa">2 ensembles de matrices K et V sont produites par l’ensemble des 6 encoders et mis en entrée de la sous-couche “self-attention multi-head” de chaque decoder. Associés à la matrice Q qui est produite par la sous-couche “self-attention multi-head masquée” et qui encode la séquence de sortie, le même procédé de self-attention permet au decoder de “faire attention” au moment de générer un nouveau token de la séquence de sortie.</p><figure id="9c07"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*Pp4tOOYPgjU3_wig3xReag.png"><figcaption>2 ensembles de matrices K et V sont produites par l’ensemble des 6 encoders et mis en entrée de chaque decoder (Image source: <a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>)</figcaption></figure><h1 id="ee87">Decoder, couche linéaire et softmax finale et fonction de loss</h1><p id="2f84">Afin de comprendre les particularités du décodage (6 decoders), de la couche linéaire et softmax finale et de la fonction de loss utilisée, lire les paragraphes <a href="http://jalammar.github.io/illustrated-transformer/#representing-the-order-of-the-sequence-using-positional-encoding#the-decoder-side">The Decoder Side</a>, <a href="http://jalammar.github.io/illustrated-transformer/#representing-the-order-of-the-sequence-using-positional-encoding#the-final-linear-and-softmax-layer">The Final Linear and Softmax Layer</a> et <a href="http://jalammar.github.io/illustrated-transformer/#representing-the-order-of-the-sequence-using-positional-encoding#the-loss-function">The Loss Function</a> du post <a href="http://jalammar.github.io/illustrated-transformer/">The Illustrated Transformer</a>.</p><h1 id="7f00">Pour aller plus loin</h1><ul><li><a href="https://distill.pub/2016/augmented-rnns/#attentional-interfaces"><b>Attentional interfaces</b></a> (2016: Chris OLAH et Shan CARTER de Google Brain)</li><li><a href="https://arxiv.org/abs/1706.03762"><b>Attention Is All You Need</b></a> (juin — décembre 2017: Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin) et le post sur Google AI: <a href="https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html"><b>Transformer: A Novel Neural Network Architecture for Language Understanding</b></a> (août 2017: Jakob Uszkoreit — Google AI)</li><li>Vidéo <a href="https://www.youtube.com/watch?v=rBCqOTEfxvg"><b>Attention is all you need; Attentional Neural Network Models </b></a>(octobre 2017: Masterclass of Łukasz Kaiser — Google AI)</li><li><b>Vidéo “<a href="https://www.youtube.com/watch?v=iDulhoQ2pro">Attention Is All You Need</a>” (novembre 2017: </b>Yannic Kilcher)</li><li><a href="https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html"><b>Transformer: A Novel Neural Network Architecture for Language Understanding</b></a> (août 2017: Jakob Uszkoreit — Google AI)</li><li><a href="http://nlp.seas.harvard.edu/2018/04/03/attention.html"><b>The Annotated Transformer</b></a> (avril 2018: Harvard NLP)</li><li><a href="https://mlexplained.com/2017/12/29/attention-is-all-you-need-explained/"><b>Paper Dissected: “Attention is All You Need” Explained</b></a> (décembre 2017: Keita Kurita)</li><li><a href="https://arxiv.org/abs/1901.10430"><b>Pay Less Attention with Lightweight and Dynamic Convolutions</b></a> (2019: Felix Wu, Angela Fan, Alexei Baevski, Yann N. Dauphin, Michael Auli)</li><li><a href="http://jalammar.github.io/illustrated-transformer/"><b>The Illustrated Transformer</b></a> (juin 2018: Jay Alammar)</li><li><a href="https://towardsdatascience.com/transformer-attention-is-all-you-need-1e455701fdd9"><b>Transformer — Attention is all you need</b></a> (octobre 2019: Pranay Dugar)</li><li><a href="https://arxiv.org/abs/1905.02450"><b>MASS: Masked Sequence to Sequence Pre-training for Language Generation</b></a> (juin 2019: Kaitao Song, Xu Tan, Tao Qin, Jianfeng Lu, Tie-Yan Liu — Microsoft Research Asia & pre-training for transformers)</li><li><b>GPT — <a href="https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf">Improving Language Understanding by Generative Pre-Training</a></b> (juin 2018: Alec Radford, Karthik Narasimhan, Tim Salimans, Ilya Sutskever) et le post sur OpenAI: <a href="https://openai.com/blog/language-unsupervised/"><b>Improving Language Understanding with Unsupervised Learning</b></a></li><li><a href="https://arxiv.org/abs/1810.04805"><b>BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</b></a> (octobre 2018 — mai 2019: Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova — Google AI Language)</li><li><b>GPT-2 — <a href="https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf">Language Models are Unsupervised Multitask Learners</a></b> (février 2019: Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, Ilya Sutskever — OpenAI) et le post sur OpenAI: <a href="https://openai.com/blog/better-language-models/"><b>Better Language Models and Their Implications</b></a></li><li><a href="https://huyenchip.com/2019/05/12/top-8-trends-from-iclr-2019.html"><b>Top 8 trends from ICLR 2019</b></a> (mai 2019: Chip Huyen)</li><li><b>GPT-2 — <a href="https://arxiv.org/abs/1908.09203">Release Strategies and the Social Impacts of Language Models</a></b> (août 2019: Irene Solaiman, Miles Brundage, Jack Clark, Amanda Askell, Ariel Herbert-Voss, Jeff Wu, Alec Radford, Gretchen Krueger, Jong Wook Kim, Sarah Kreps, Miles McCain, Alex Newhouse, Jason Blazakis, Kris McGuffie, Jasmine Wang — OpenAI) et le post sur OpenAI: <a href="https://openai.com/blog/gpt-2-6-month-follow-up/"><b>GPT-2: 6-Month Follow-Up</b></a></li><li><a href="https://arxiv.org/abs/1907.05774"><b>Hello, It’s GPT-2 — How Can I Help You? Towards the Use of Pretrained Language Models for Task-Oriented Dialogue Systems</b></a> (août 2019: Paweł Budzianowski, Ivan Vulić — Cambridge University, UK)</li><li><a href="https://nv-adlr.github.io/MegatronLM"><b>MegatronLM: Training Billion+ Parameter Language Models Using GPU Model Parallelism</b></a> (août 2019: NVIDIA)</li><li><a href="http://www.peterbloem.nl/blog/transformers"><b>Transformers from scratch</b></a> (août 2019, Peter Bloem)</li><li><b>GPT-2 — <a href="https://arxiv.org/abs/1909.08593">Fine-Tuning Language Models from Human Preferences</a></b> (septembre 2019 — janvier 2020: Daniel M. Ziegler, Nisan Stiennon, Jeffrey Wu, Tom B. Brown, Alec Radford, Dario Amodei, Paul Christiano, Geoffrey Irving — OpenAI) et le post sur OpenAI: <a href="https://openai.com/blog/fine-tuning-gpt-2/"><b>Fine-Tuning GPT-2 from Human Preferences</b></a></li><li><b>GPT-2 — <a href="https://arxiv.org/abs/1908.09203">Release Strategies and the Social Impacts of Language Models</a></b> (août — novembre 2019: Irene Solaiman, Miles Brundage, Jack Clark, Amanda Askell, Ariel Herbert-Voss, Jeff Wu, Alec Radford, Gretchen Krueger, Jong Wook Kim, Sarah Kreps, Miles McCain, Alex Newhouse, Jason Blazakis, Kris McGuffie, Jasmine Wang) et le post sur OpenAI: <a href="https://openai.com/blog/gpt-2-1-5b-release/"><b>GPT-2: 1.5B Release</b></a></li><li><a href="https://huyenchip.com/2019/12/18/key-trends-neurips-2019.html"><b>Key trends from NeurIPS 2019</b></a> (décembre 2019: Chip Huyen)</li></ul><p id="6be5"><b>À propos de l’auteur:</b> Pierre Guillou est consultant en Intelligence Artificielle au Brésil et en France. Merci de le contacter via son <a href="https://www.linkedin.com/in/pierreguillou/">profil Linkedin</a>.</p></article></body>