Abandonnez la fantaisie et adoptez Transformer: une comparaison de trois extracteurs de fonctionnalités de traitement du langage naturel (CNN / RNN / TF) (Partie 1)

Commentaire sur la technologie d'intelligence artificielle de Leifeng.com Note: L'auteur de cet article est M. Zhang Junlin. Il est directeur de la Société chinoise de l'information de Chine et titulaire d'un doctorat de l'Institut du logiciel de l'Académie chinoise des sciences. Il est actuellement expert principal en algorithmes dans le laboratoire d'IA de Sina Weibo. Auparavant, M. Zhang Junlin a été expert technique principal à Alibaba et responsable de la nouvelle équipe technique, ainsi que directeur technique et directeur technique à Baidu et à l'UFIDA. Parallèlement, il est l'auteur d'ouvrages techniques "This is the Search Engine: Detailed Explanation of Core Technology" (ce livre a remporté le 12e National Excellent Book Award) et "Big Data Daily Knowledge: Architecture and Algorithms". Cet article a été publié pour la première fois dans Zhihu, et réimprimé par Leifeng.com AI Technology Review avec l'autorisation de l'auteur.

Au moment de quitter l'ancien et d'accueillir le nouveau, tout le monde est occupé à revoir les résultats de l'année écoulée (ou à compter les pots avec des larmes devant le poêle) et à faire des plans pour 2019. Bien sûr, de nombreux amis ont une exécution et une efficacité de travail élevées. Copiez simplement le plan réalisé début 2018, et le plan pour 2019 peut être complété en 3 secondes.Je vous félicite. D'un point de vue économique, 2018 peut être une triste année pour tout le monde, mais pour le domaine du traitement du langage naturel, 2018 est sans aucun doute une année très enrichissante, et si vous ne pouvez choisir qu'une des nombreuses avancées technologiques. Si tel est le cas, le modèle Bert devrait être bien mérité. Dans le dernier article présentant Bert, "From Word Embedding to Bert Model - The History of Pre-Training Technology in Natural Language Processing", j'ai déclaré avec fierté les deux jugements personnels suivants: l'un est le modèle en deux étapes de Bert ( Pre-training + Finetuning) deviendra sûrement une méthode populaire pour la recherche et les applications industrielles dans le domaine de la PNL; la seconde est que du point de vue des extracteurs de fonctionnalités dans le domaine de la PNL, Transformer remplacera progressivement RNN en tant qu'extracteur de fonctionnalités le plus courant. En ce qui concerne le jugement de l'extracteur de fonctionnalités, l'article ci-dessus est limité en longueur, mais ne donne qu'une conclusion, sans donner une explication tentante. Quiconque a lu mon article sait que je ne suis pas une personne qui tire des conclusions avec désinvolture (celle qui ajoute La phrase suivante: "Vous ne vous levez pas négligemment ..." S'il vous plaît, arrêtez, ne révélez pas de secrets d'État, vous pouvez continuer à dormir, peu importe si vous bruyiez les autres étudiants, haha), mais pourquoi ai-je tiré cette conclusion à l'époque? Cet article peut être considéré comme une rumeur de ce qui précède, qui fournira des preuves plus détaillées pour étayer les conclusions faites auparavant.

Si je fais un macro-jugement sur la tendance future des trois principaux extracteurs de fonctionnalités dans la PNL actuelle, mon jugement est le suivant: RNN a pratiquement terminé sa mission historique et se retirera progressivement de l'étape historique à l'avenir; si CNN est correctement transformé À l'avenir, il y a encore l'espoir d'avoir une place dans le domaine de la PNL. Si le succès de la transformation dépasse les attentes, alors il y aura un chef de guerre qui pourrait être une partie distincte pour continuer à survivre et à grandir. Bien sûr, je pense que cet espoir n'est pas grand. Vous pouvez jouer au basket avec Song Xiaobao. La probabilité de pleurer est assez similaire; et Xinhuan Transformer deviendra évidemment bientôt l'extracteur de fonctionnalités le plus courant pour la PNL. Quant à savoir s'il y aura un nouvel extracteur de fonctionnalités à l'avenir, Tranformer sera supprimé d'un seul coup, puis remplacé par le nouveau roi de la montagne d'extraction de fonctionnalités? Ce genre d'inquiétude est en fait tout à fait nécessaire. Après tout, Li Shangyin nous a averti il y a mille ans: «La grâce de Jun est comme l'eau qui coule vers l'est, et vous devez perdre votre faveur et vous inquiéter. Ne faites pas précéder les fleurs, la brise fraîche est seulement à l'ouest du palais. Head. Bien sûr, ce poème semble être plus approprié pour RNN à l'heure actuelle, car le futur Transformer tombera en disgrâce? La réponse à cette question peut être fondamentalement affirmative, ce n'est rien de plus que si ce moment survient 3 ans plus tard ou 1 an plus tard. Bien sûr, j'espère que si c'est vous ou moi qui lisez cet article, un jour dans le futur, je sortirai une femme d'apparence ordinaire de la rue et je l'enverrai en Corée pour une chirurgie esthétique, s'écartant accidentellement du modèle de beauté de l'industrie cosmétique de la chaîne de montage. Il est préférable de faire ressortir une beauté époustouflante du pays de Tianxiang pour faire entrer Transformer dans le palais froid. Mais dans l'état actuel, même avec les jumelles, il semble que nous n'ayons pas vu un candidat avec cette qualification apparaître dans notre champ de vision.

Je sais que si vous êtes un personnel de R&D rigoureux, vous ne devriez pas tirer de conclusions claires qui semblent quelque peu arbitraires lorsque la situation actuelle n'est pas si claire, donc cette déclaration peut être controversée. Mais ce sont bien mes véritables pensées actuelles. »Quant au jugement ci-dessus basé sur quoi? Y a-t-il un fondement à ce jugement? La base est-elle suffisante? Je crois que vous pouvez avoir votre propre conclusion après avoir lu cet article.

En parlant de cela, certains étudiants qui souffrent généralement moins et qui aiment cueillir des épines se demanderont: pourquoi dites-vous que les extracteurs de fonctionnalités typiques de la PNL sont ces trois? Où mettez-vous d'autres extracteurs de fonctionnalités bien connus tels que Récursif NN? Eh bien, oui, de nombreux articles qui présentent des développements importants dans la PNL considèrent même Récursive NN comme un développement majeur de la PNL. En plus de cela, il en existe d'autres tels que Memory Network Profitez également de ce traitement honorable au niveau ministériel. Mais je n'ai pas été très optimiste sur ces deux technologies et je n'ai pas été optimiste sur ces deux technologies depuis de nombreuses années. La situation actuelle a renforcé cette vision. Et je vous conseille gratuitement, il n'y a pas besoin de perdre de temps sur ces deux technologies. Quant au pourquoi, parce que cela n'a rien à voir avec le sujet de cet article, j'ai l'occasion de développer plus tard.

Ce qui précède est la conclusion, ci-dessous, nous entrons formellement dans l'étape de la preuve.

Battlefield Reconnaissance: caractéristiques et types de missions PNL

Les caractéristiques des tâches PNL sont très différentes de celles des images. La figure ci-dessus montre un exemple. L'entrée de PNL est souvent une phrase ou un article, elle présente donc plusieurs caractéristiques: Premièrement, l'entrée est une séquence linéaire unidimensionnelle, qui est facile à comprendre ; Deuxièmement, l'entrée est de longueur variable, certaines sont longues et d'autres courtes. Ce point ajoutera en fait des problèmes au traitement du modèle; encore une fois, la relation de position relative des mots ou des clauses est très importante et les positions de deux mots sont interchangées Peut conduire à une signification complètement différente. Si vous m'entendez vous dire: "Vous n'avez pas à rembourser les dix millions que vous me devez" et "Vous n'avez pas à rembourser les dix millions que je vous dois", que ressentez-vous en entendant? Pour comprendre la différence entre les deux; en outre, les fonctionnalités longue distance de la phrase sont également très importantes pour comprendre la sémantique. Pour des exemples, reportez-vous aux mots avec l'icône rouge. La capacité de l'extracteur de fonctionnalités à capturer des fonctionnalités longue distance est également très utile pour résoudre les tâches de PNL. Pivot.

Veuillez vous rappeler les caractéristiques ci-dessus, Le fait qu'un extracteur de caractéristiques s'adapte aux caractéristiques du domaine du problème détermine parfois son succès ou son échec, et la direction de nombreuses améliorations du modèle est en fait de le rendre plus adapté aux caractéristiques du problème de domaine . C'est pourquoi j'explique ce contenu avant d'introduire des extracteurs de fonctionnalités tels que RNN, CNN et Transformer.

La PNL est un domaine très large, comprenant des dizaines de sous-domaines et, en théorie, tant qu'elle est liée au traitement du langage, elle peut être incluse dans cette gamme. Mais si nous résumons un grand nombre de tâches NLP, nous constaterons que la plupart des tâches NLP peuvent être résumées en plusieurs catégories de tâches. Deux tâches apparemment très différentes peuvent être complètement identiques du point de vue du modèle de résolution de tâches.

D'une manière générale, la grande majorité des problèmes de PNL peuvent être classés dans les quatre types de tâches illustrées dans la figure ci-dessus: l'un est le marquage de séquence, qui est la tâche PNL la plus typique, comme la segmentation de mots chinois, le marquage d'une partie du discours, la reconnaissance d'entités nommées et le marquage de rôles sémantiques Et ainsi de suite peut être classé dans cette catégorie de problèmes, sa caractéristique est que chaque mot de la phrase oblige le modèle à donner une catégorie de classification en fonction du contexte. La deuxième catégorie concerne les tâches de classification, telles que notre classification de texte commune, le calcul des sentiments, etc. peuvent être classés dans cette catégorie. Sa caractéristique est que quelle que soit la longueur de l'article, une catégorie de classification peut être donnée dans son ensemble. Le troisième type de tâche est le jugement de la relation de phrase, comme l'implication, l'assurance qualité, la réécriture sémantique, le raisonnement en langage naturel et d'autres tâches sont tout ce mode, sa caractéristique est que, étant donné deux phrases, le modèle juge si les deux phrases ont une certaine relation sémantique; La quatrième catégorie concerne les tâches génératives, telles que la traduction automatique, la synthèse de texte, l'écriture de poésie et de phrases, la recherche d'images et la parole, etc., appartiennent toutes à cette catégorie. Sa caractéristique est qu'après la saisie du contenu du texte, un autre paragraphe de texte doit être généré de manière autonome.

Pour résoudre ces différentes tâches, quelle est la plus importante du point de vue du modèle? C'est la capacité de l'extracteur de caractéristiques. Surtout après la popularité de l'apprentissage profond, ce point devient plus important. Parce que le plus grand avantage du deep learning est "de bout en bout". Bien sûr, cela ne signifie pas du client au cloud. Cela signifie que dans le passé, les développeurs devaient réfléchir aux fonctionnalités à extraire. Mais après l'ère de bout en bout, ces Ne vous inquiétez pas du tout, lancez l'entrée d'origine dans un bon extracteur de fonctionnalités, et il extraira des fonctionnalités utiles par lui-même.

En tant que créateur de bogues senior et ingénieur d'algorithme, ce que vous devez faire maintenant, c'est: choisir un bon extracteur de fonctionnalités, choisir un bon extracteur de fonctionnalités, choisir un bon extracteur de fonctionnalités et lui fournir beaucoup de données d'entraînement, Définissez la fonction de perte, dites-lui ce que vous voulez qu'elle fasse ... Ensuite, vous pensez que vous n'avez pas à attendre le résultat, non? Alors vous êtes la personne la plus optimiste de tout l'univers que j'aie jamais vue ... Vous passez en fait beaucoup de temps à régler les paramètres ....... À partir de ce processus, on peut voir que si nous avons un extracteur de fonctionnalités puissant, il est inévitable que l'ingénieur en algorithme junior devienne un homme de réglage. À l'époque où AutoML (automatique qui) est populaire, peut-être voulez-vous être un tuning Je ne peux pas participer au chevalier, Li Si a dit: "Je veux aller à Cai Dongmen pour chasser le lapin rusé, et comment puis-je l'obtenir!" S'il vous plaît comprendre. Alors chérissez vos journées où vous ajustez encore vos super paramètres à deux heures du soir, car pour vous il y a de bonnes et de mauvaises nouvelles. La bonne nouvelle est que cela peut être comme ça pour vous. dur Les jours s'écoulent! La mauvaise nouvelle est que cela pourrait être une journée si difficile pour vous À courre de ! ! ! Alors, comment pouvez-vous devenir un maître d'algorithme? Vous allez concevoir un extracteur de fonctionnalités plus puissant.

Les trois extracteurs de fonctionnalités sont décrits ci-dessous.

Vétéran sur le champ de bataille RNN: Lian Po est vieux et peut encore manger

Je suppose que tout le monde connaît le modèle RNN, je ne vais donc pas le présenter en détail. Reportez-vous à la figure ci-dessus pour la structure du modèle. Le cur est que chaque entrée correspond à un nud de couche caché, et une séquence linéaire est formée entre les nuds de couche cachés, et les informations sont dans la couche cachée de l'avant vers l'arrière. Passez en arrière progressivement. Passons directement à ce dont je veux parler.

Pourquoi RNN peut devenir l'extracteur de fonctionnalités grand public pour résoudre les problèmes de PNL

Nous savons que RNN est rapidement devenu un modèle vedette accrocheur depuis son introduction dans le monde de la PNL, et est largement utilisé dans diverses tâches de PNL. Cependant, le RNN d'origine a également des problèmes. Il adopte une structure de séquence linéaire pour collecter en continu les informations d'entrée de l'avant vers l'arrière. Cependant, cette structure de séquence linéaire a des difficultés d'optimisation lors de la propagation arrière, car le chemin de propagation arrière est trop long, ce qui peut facilement conduire à de graves problèmes. Le dégradé disparaît ou le dégradé explose. Afin de résoudre ce problème, les modèles LSTM et GRU ont été ultérieurement introduits. En ajoutant des informations d'état intermédiaires à propager directement vers l'arrière pour atténuer le problème de la disparition de gradient, de très bons résultats ont été obtenus. Ainsi, LSTM et GRU sont rapidement devenus les modèles standard de RNN. En fait, dans le domaine de l'image, l'idée originale du saut de connexion, qui a conduit à la révolution du modèle par HighwayNet / Resnet, etc., a été empruntée au mécanisme de transfert de couche cachée du LSTM. Après une optimisation continue, la PNL a ensuite emprunté au champ d'image et introduit le mécanisme d'attention (à partir de ces deux processus, vous pouvez voir la référence technique mutuelle et la promotion de différents domaines), le réseau de superposition approfondit les couches et le cadre Encoder-Decoder est introduit. Ces progrès technologiques ont considérablement élargi les capacités et les effets d'application du RNN. Le modèle présenté dans la figure ci-dessous est un coffret cadeau technologique général très typique qui utilise RNN pour résoudre des tâches de PNL. Avant que la nouvelle technologie n'apparaisse, vous pouvez voir ce coffret cadeau technologique dans divers domaines de la PNL.

Le contenu ci-dessus présente brièvement le processus général d'évolution technologique de RNN dans le domaine de la PNL. Alors pourquoi RNN est-il devenu si rapidement populaire en PNL et l'a-t-il dominé? La raison principale est que la structure de RNN est naturellement adaptée pour résoudre le problème de la PNL.L'entrée de la PNL est souvent une phrase de séquence linéaire de longueur variable, et la structure de RNN elle-même est une structure de réseau qui peut accepter une entrée de longueur variable et conduire des informations linéairement de l'avant vers l'arrière. , Et l'introduction de trois portes dans LSTM est également très efficace pour capturer des fonctionnalités longue distance. Par conséquent, RNN est particulièrement adapté au scénario d'application de séquence linéaire de la PNL, ce qui est la raison fondamentale pour laquelle RNN est si populaire dans le monde de la PNL.

Deux graves problèmes auxquels RNN est confronté dans la nouvelle ère

RNN est populaire dans l'industrie de la PNL depuis de nombreuses années (2014-2018?). Avant 2018, la plupart des résultats de l'état de l'art dans divers sous-domaines étaient obtenus par RNN. Mais au cours de l'année écoulée, voyant que le statut du leader de RNN Qunlun a été ébranlé, le soi-disant leader a ouvert la voie depuis 3 à 5 ans, et il semble que le modèle de célébrité Internet ne fasse pas exception.

Alors pourquoi est-ce? Il y a deux principales raisons.

La première raison réside dans la montée en puissance de certains nouveaux modèles à venir, comme le modèle CNN spécialement modifié et le Transformer particulièrement populaire récemment. Ces étoiles montantes, en particulier l'effet d'application de Transformer, présentent des avantages évidents par rapport à RNN. C'est la raison principale: si les anciens ne peuvent pas faire les nouveaux venus et n'ont pas la capacité de se réinventer et de se révolutionner, ils doivent naturellement se retirer de la scène de l'histoire consciemment ou involontairement. C'est une loi naturelle. En ce qui concerne la preuve spécifique de la faiblesse des capacités RNN, j'en parlerai plus tard dans cet article, et je n'en discuterai pas ici. Bien sûr, les royalistes de RNN parmi le staff technique devraient encore être assez nombreux, ils n'abandonneront pas facilement les étoiles de signalisation qui ont été si populaires, ils ont donc réfléchi ou réfléchissent à des pistes d'amélioration pour tenter de prolonger la vie de RNN. Quant à savoir ce que sont ces méthodes et si elles sont efficaces, nous continuerons à en discuter plus tard.

Un autre problème qui entrave sérieusement la popularité future de RNN est que la structure de dépendance de séquence de RNN lui-même est assez hostile pour le calcul massivement parallèle. En termes simples, il est difficile pour les RNN d'avoir des capacités de calcul parallèle efficaces. Cela peut ne pas sembler un gros problème à première vue, mais c'est en fait très sérieux. Si vous n'êtes satisfait d'envoyer un article qu'en modifiant le RNN, ce n'est vraiment pas un gros problème, mais si l'industrie choisit la technologie, il est peu probable qu'elle choisisse cette lenteur lorsqu'un modèle beaucoup plus rapide est disponible. Du modèle. Un modèle qui n'a pas d'application pratique pour soutenir sa valeur d'existence, la question de ses perspectives, on estime que la réponse peut être obtenue en pensant dans le cervelet.

La question est: pourquoi la puissance de calcul parallèle du RNN est-elle faible? Qu'est-ce qui l'a causé?

Nous savons que la raison pour laquelle RNN est RNN, le signe le plus typique qui peut le distinguer des autres modèles est: le calcul de l'état de la couche cachée au temps T dépend de deux entrées, l'une est le mot d'entrée de la phrase Xt au temps T, ce n'est pas une caractéristique , Tous les modèles doivent recevoir cette entrée d'origine; la clé est une autre entrée. L'état de la couche cachée St au temps T dépend également de la sortie de l'état de la couche cachée S (t-1) au temps T-1, qui reflète le mieux l'essence de RNN Le point caractéristique est que les informations historiques de RNN sont transmises plus tard par ce canal de transmission d'informations.Reportez-vous à la figure ci-dessus pour un schéma. Alors pourquoi la puissance de calcul parallèle de RNN n'est-elle pas bonne? Le problème réside ici. Parce que le calcul au temps T dépend du résultat du calcul de la couche cachée au temps T-1, et le calcul au temps T-1 dépend du résultat du calcul de la couche cachée au temps T-2 ... Cela forme la soi-disant dépendance de séquence. Autrement dit, seul le premier pas de temps peut être calculé avant que le résultat du deuxième pas de temps puisse être calculé. Cela rend les RNN incapables de calculer en parallèle de ce point de vue et ne peuvent honnêtement suivre le pas de temps qu'un mot par mot Les mots vont à l'envers.

CNN et Transformer n'ont pas ce genre de problème de dépendance de séquence, donc la puissance de calcul parallèle n'est pas un problème pour les deux, et les opérations à chaque pas de temps peuvent être calculées ensemble en parallèle.

Alors, RNN peut-il être modifié pour améliorer ses capacités de calcul parallèle? Si oui, quel est l'effet? Discutons de ce problème ci-dessous.

Comment transformer RNN pour avoir des capacités de calcul parallèle?

Comme mentionné ci-dessus, le nud de l'incapacité de RNN à effectuer un calcul parallèle réside dans la dépendance du résultat du calcul au temps T-1 au temps T, et cela se reflète dans le réseau entièrement connecté entre les couches cachées. Puisque le noeud est là, si vous voulez résoudre le problème, vous devez commencer par ce lien. Que peut-on faire de plus dans ce lien pour augmenter la puissance de calcul parallèle de RNN? Vous pouvez y penser.

En fait, il ne vous reste plus beaucoup d'options. Vous pouvez avoir deux grandes idées à améliorer: l'une consiste à conserver le lien caché entre tout pas de temps continu (T-1 à T); et l'autre est Interrompre partiellement la connexion de couche cachée entre des pas de temps consécutifs (temps T-1 à T).

Examinons d'abord la première méthode. Maintenant, notre problème a été transformé en: nous devons toujours garder la connexion cachée entre tout pas de temps continu (temps T-1 à T), mais sous cette prémisse, nous devons être en mesure de Comment gérer le calcul parallèle? Parce que tant que la connexion de couche masquée de deux pas de temps consécutifs est conservée, cela signifie que le résultat de la couche masquée au temps T doit être calculé, et le résultat de la couche masquée au temps T-1 doit être calculé en premier. Cela ne tombe pas dans le piège de la dépendance de séquence. ? Eh bien, c'est vrai, mais pourquoi doit-il être parallèle entre les entrées à différents pas de temps? Personne ne dit que le calcul parallèle de RNN doit se faire à des pas de temps différents.Pensez-y, la couche cachée contient-elle également de nombreux neurones? Alors peut-on le faire en parallèle parmi les neurones cachés? Si vous n'avez pas compris ce que cela signifie, veuillez voir l'image ci-dessous.

La figure ci-dessus ne montre que les nuds de couche cachés de chaque pas de temps. La couche cachée de chaque pas de temps contient 3 neurones. Il s'agit d'une vue de dessus, regardant les nuds de couche cachés du RNN de haut en bas. En outre, il existe toujours des connexions entre les neurones cachés en deux étapes de temps consécutives.La figure ci-dessus n'est pas représentée par souci de simplicité. Vous devriez comprendre maintenant. En supposant qu'il y a 3 neurones de couche cachés, alors nous pouvons former 3 calculs parallèles (la flèche rouge est séparée en trois), et chaque canal a toujours le problème de dépendance de séquence, donc chaque canal C'est toujours en série. La grande idée doit être claire, non? Cependant, les étudiants qui comprennent la structure de RNN constateront qu'il reste un problème: les connexions entre les neurones de la couche cachée sont entièrement connectées, c'est-à-dire qu'un neurone de la couche cachée au temps T est connecté à tous les neurones de la couche cachée au temps T-1. Si tel est le cas, il est impossible d'effectuer des calculs parallèles entre les neurones. Vous pouvez vous demander pourquoi. C'est simple. Je suppose que vous avez la capacité de le comprendre. Alors que faire? C'est très simple. La relation de connexion entre les neurones de la couche cachée au temps T et T-1 doit être modifiée, de la connexion complète précédente au neurone à la position correspondante (le neurone dans la même rangée séparé par la flèche rouge dans la figure ci-dessus Entre) est connecté, mais pas connecté à d'autres neurones. De cette manière, ce problème peut être résolu et des calculs parallèles peuvent être effectués entre des neurones cachés de chemins différents.

L'idée de la première méthode pour transformer la puissance de calcul parallèle de RNN est à peu près celle décrite ci-dessus. Le représentant de cette méthode est la méthode SRU proposée dans l'article "Unités récurrentes simples pour une récurrence hautement parallélisable". Son amélioration la plus essentielle est de combiner les couches cachées. La dépendance des neurones est modifiée de entièrement connecté au produit Hadamard, de sorte que l'unité de couche cachée au temps T dépend à l'origine de toutes les unités de couche cachée au temps T-1, mais elle ne dépend que de l'unité correspondante au temps T-1, donc elle peut être cachée Des calculs parallèles sont effectués entre les unités de couche, mais la collecte d'informations est toujours effectuée en séries chronologiques. Ainsi, le parallélisme se produit entre des unités cachées, pas entre différents pas de temps.

C'est en fait une méthode plus ingénieuse, mais son problème est que la limite supérieure du degré de parallélisme est limitée. Le degré de parallélisme dépend du nombre de neurones de la couche cachée, et généralement cette valeur n'est souvent pas trop grande, et l'augmentation du parallélisme n'est plus possible. C'est trop possible. De plus, chaque circuit parallèle nécessite encore un calcul de séquence, ce qui ralentira également la vitesse globale. La vitesse de test de SRU est la suivante: la vitesse de classification du texte est équivalente à celle du CNN original (Kim 2014) .Le papier ne dit pas si CNN a adopté une méthode d'apprentissage parallèle. D'autres n'ont fait des évaluations d'effets que sur des tâches complexes, la compréhension de la lecture et les tâches de TA, et n'ont pas comparé la vitesse avec CNN. Je suppose qu'il y a une raison à cela, car les tâches complexes nécessitent souvent des réseaux profonds, et d'autres ne sont pas des devinettes.

La deuxième idée typique d'amélioration est la suivante: afin de pouvoir effectuer des calculs parallèles entre les entrées à différents pas de temps, il n'y a qu'une seule façon de rompre la connexion entre les couches cachées, mais pas toutes, car c'est fondamentalement Il est impossible de capturer les fonctionnalités combinées, donc la seule stratégie qui peut être sélectionnée est l'interruption partielle, telle que l'interruption tous les 2 pas de temps, mais comment capturer des fonctionnalités un peu plus éloignées? Il ne peut qu'approfondir la profondeur de la couche et établir la relation entre les entités longue distance à travers la profondeur de la couche. Un modèle représentatif est le RNN en tranches illustré dans la figure ci-dessus. Quand j'ai vu ce mannequin pour la première fois, je ne pouvais pas m'empêcher de rire comme une barre, et je n'ai pas pu m'empêcher de m'avancer pour lui dire bonjour: bonjour, mannequin CNN, je ne m'attendais pas à ce que vous comme un rugueux le porterait un jour Une robe rose, déguisée en RNN, est apparue devant moi, haha. Les élèves qui comprennent le modèle CNN souriront lorsqu'ils verront ma phrase ci-dessus: N'est-ce pas une version simplifiée de CNN? Les étudiants qui ne connaissent pas CNN suggèrent qu'après avoir lu la partie CNN plus tard, regardez en arrière et voyez si cela signifie cela.

Qu'en est-il de l'amélioration de la vitesse du RNN après cette transformation? L'article donne une expérience de comparaison de vitesse. En résumé, la vitesse du SRNN est 5 à 15 fois plus rapide que le modèle GRU. Eh bien, l'effet est bon, mais comparé au modèle de comparaison de vitesse du modèle DC-CNN, il est encore environ 3 fois plus lent que le modèle CNN en moyenne. Cest normal, mais cest un peu trop compliqué. Cest normal parce que cela changeait à lorigine le RNN en une structure de type CNN, et le modèle de séquence RNN est toujours utilisé dans le fragment, il ralentira donc inévitablement, et il est normal dêtre plus lent que CNN . Dire «déraisonnable» signifie: puisqu'il s'agit essentiellement de CNN et que la vitesse est plus lente que celle de CNN, quelle est la signification de ce changement? Pourquoi ne pas utiliser CNN directement? n'est-ce pas? L'ancien camarade de classe qui aime se comporter parce qu'il souffre de moins de nourriture dira à nouveau: Peut-être que l'effet est particulièrement bon. Eh bien, à en juger par le mécanisme d'action de cette structure, c'est peu probable. Vous avez dit que la partie expérimentale de l'article prouve ce point. Je pense que l'expérience comparative dans la partie expérimentale n'est pas suffisante. Vous devez compléter d'autres modèles CNN autres que DC-CNN pour comparaison. Bien sûr, ceci est purement une opinion personnelle, ne le prenez pas au sérieux, car je secoue souvent la tête lorsque je parle.À ce moment, les gens me donneront généralement des commentaires surpris: Pourquoi est-ce que j'entends le bruit de l'eau lorsque vous parlez?

Ci-dessus énumère deux idées majeures pour améliorer les capacités de calcul parallèle des RNN Personnellement, je suis pessimiste quant aux capacités de calcul parallèle des RNN, principalement parce que les caractéristiques essentielles des RNN déterminent que nous avons trop peu de choix. Il ne s'agit que de choisir d'interrompre ou de ne pas interrompre la connexion de la couche cachée. Si vous choisissez d'interrompre, vous serez confronté aux problèmes ci-dessus. Vous constaterez qu'il ne s'agit peut-être plus d'un modèle RNN. Afin de le faire ressembler à un RNN, la structure RNN est toujours adoptée dans le segment interrompu, ce qui ralentira sans aucun doute la vitesse. Donc, c'est un dilemme: au lieu de passer à un autre modèle, si nous choisissons de ne pas interrompre, il semble que nous ne pouvons effectuer un parallélisme qu'entre neurones cachés, l'inconvénient étant que la limite supérieure du parallélisme est très élevée. Faible; d'autre part, l'estimation de la dépendance de séquence qui existe toujours dans celle-ci est toujours un problème. C'est la raison du pessimisme, principalement parce qu'il n'y a pas de grand espoir.

Général CNN: Stimuler les champs de bataille de PlayerUnknown du champ de bataille

Il y a plus d'un an, CNN était le modèle d'apprentissage en profondeur le plus courant dans le traitement du langage naturel autre que RNN. Voici l'introduction de l'extracteur de fonctionnalités CNN, qui sera plus détaillé que RNN, principalement en considérant que tout le monde le connaît peut-être pas RNN Si haut.

Modèle CNN nostalgique précoce en PNL

La première introduction de CNN dans la PNL était le travail de Kim en 2014. Reportez-vous à la figure ci-dessus pour la structure du papier et du réseau. De manière générale, le mot ou le mot d'entrée est exprimé dans Word Embedding, de sorte que l'entrée d'informations textuelles unidimensionnelles d'origine est convertie en une structure d'entrée bidimensionnelle. Supposons que l'entrée X contient n caractères et que le Word Embedding de chaque caractère La longueur est d, alors l'entrée est un vecteur bidimensionnel de d * n.

La couche convolutionnelle est essentiellement une couche d'extraction d'entités, et l'hyperparamètre F peut être défini pour spécifier le nombre de noyaux de convolution (filtre) que la couche convolutionnelle contient. Pour un filtre, il est concevable qu'il existe une fenêtre mobile d'une taille de d * k commençant à partir du premier mot de la matrice d'entrée et se déplaçant vers l'arrière, où k est la taille de la fenêtre spécifiée par Filter et d est la longueur de Word Embedding. Pour une fenêtre à un certain moment, via la transformation non linéaire du réseau de neurones, la valeur d'entrée dans cette fenêtre est convertie en une certaine valeur caractéristique. Au fur et à mesure que la fenêtre continue de reculer, la valeur caractéristique correspondant à ce filtre est générée en continu pour former le filtre Vecteur de caractéristiques. C'est ainsi que le noyau de convolution extrait les fonctionnalités. Chaque filtre de la couche convolutionnelle fonctionne de cette manière pour former une séquence de caractéristiques différente. La couche Regroupement effectue des opérations de réduction de dimensionnalité sur les entités Filtrer pour former les entités finales. En général, le réseau neuronal de couche entièrement connecté est connecté après la couche de regroupement pour former le processus de classification final.

C'est le mécanisme de travail du modèle CNN qui a d'abord été appliqué dans le domaine de la PNL. Il a été utilisé pour résoudre la tâche de classification des phrases en PNL. Il semblait très concis. Après cela, des modèles améliorés sur cette base sont apparus les uns après les autres. Ces modèles CNN nostalgiques peuvent également être équivalents aux modèles RNN nostalgiques de l'époque dans certaines tâches, ils peuvent donc se développer de manière extravagante dans plusieurs domaines de la PNL, mais dans plus de domaines PNL, ils sont toujours supprimés par le modèle RNN au stade précoce de la dépression. Situation embarrassante. Alors pourquoi CNN, qui a été invincible dans le domaine de l'image, une fois qu'il s'est heurté au champ de la PNL, a-t-il été supprimé par le serpent RNN pour voir le champ d'image des anciens de Jiangdong? Cela montre que cette version de CNN a encore de nombreux problèmes. En fait, le problème le plus fondamental réside dans le fait que l'ancienne révolution a rencontré de nouveaux problèmes. La raison principale est que le nouvel environnement n'a pas apporté de changements ciblés aux caractéristiques du nouvel environnement, il est donc confronté au problème de l'insuffisance. .

CNN peut-il survivre aux divers environnements de tâches NLP de RNN? La réponse est sur le point d'être révélée.

L'évolution de CNN: le Colisée de la sélection naturelle

Jetons un coup d'il aux problèmes de la version nostalgique de CNN, puis voyons comment nos experts en PNL ont transformé CNN, et il a été changé pour une version moderne de CNN qui a l'air bien à l'heure actuelle.

Tout d'abord, nous devons être clairs: quelles fonctionnalités sont capturées par CNN? De la version nostalgique mentionnée ci-dessus de la couche convolutive CNN, vous pouvez probablement voir que la clé réside dans la fenêtre glissante couverte par le noyau de convolution.Les fonctionnalités que CNN peut capturer sont essentiellement reflétées dans cette fenêtre glissante. La fenêtre glissante de taille k traverse doucement les mots de la phrase et ondule, alors que capture-t-elle? En fait, elle capture les informations sur le fragment k-gramme du mot. Ces fragments de k-gramme sont CNN Pour les entités capturées, la taille de k détermine la distance à laquelle les entités peuvent être capturées.

Cela dit, regardons le premier problème de la version de Kim de CNN: il n'a qu'une seule couche convolutive. En surface, cela semble être un problème de profondeur insuffisante, non? Je vais vous demander en retour: pourquoi CNN devrait-il être profond? En fait, faire de la profondeur est un moyen, pas une fin. Le problème avec une seule couche convolutive est que pour les entités longue distance, un CNN monocouche ne peut pas la capturer. Si la fenêtre glissante k est au plus égale à 2 et s'il existe une entité longue distance avec une distance de 5, quel que soit le nombre de volumes activés Le noyau du produit ne peut pas couvrir l'entrée avec une distance de 5, il ne peut donc pas capturer les fonctionnalités longue distance.

Alors, comment pouvons-nous capturer les fonctionnalités longue distance? Il existe deux méthodes d'amélioration typiques: l'une consiste à supposer que nous utilisons toujours une seule couche convolutive, et la taille de la fenêtre glissante k est supposée être 3, c'est-à-dire que seuls trois mots d'entrée sont reçus, mais nous voulons capturer des entités avec une distance de 5, que devons-nous faire? ? Évidemment, si la fenêtre du noyau de convolution couvre toujours une zone continue, ce n'est certainement pas la tâche. Rappel: avez-vous déjà joué à Jump, non? Une stratégie similaire peut-elle être adoptée? Oui, vous pouvez sauter et vous couvrir, non? C'est l'idée de base de la convolution dilatée, et c'est en effet une solution.

La deuxième méthode consiste à faire la profondeur. La première couche de couche convolutive, en supposant que la taille de fenêtre glissante k est de 3, si une autre couche convolutionnelle est empilée, en supposant que la taille de fenêtre glissante est également 3, mais la deuxième couche de fenêtres couvre les caractéristiques de sortie de la première couche de fenêtres, donc Il peut en fait couvrir la distance d'entrée jusqu'à 5. Si vous continuez à empiler la couche convolutive, vous pouvez continuer à augmenter la longueur du noyau de convolution pour couvrir l'entrée.

Voici deux solutions typiques aux capacités de capture d'entités longue distance de CNN. CNN dilaté est un peu délicat, et il existe des connaissances sur la façon de définir les hyperparamètres lors de la superposition de couches convolutives. Étant donné que les sauts continus peuvent manquer certaines combinaisons de caractéristiques, il doit être soigneusement ajusté La correspondance des paramètres garantit que toutes les combinaisons possibles sont couvertes. Relativement parlant, l'approfondissement de CNN est la direction principale du développement. La raison ci-dessus est facile à comprendre. En fait, depuis l'émergence de CNN, les gens ont essayé différentes méthodes pour essayer d'atteindre la profondeur de CNN. Cependant, la réalité est souvent impitoyable. Le problème pour trouver comment lancer est que CNN ne le fait pas profondément. La couche convolutive à 3 couches ne peut pas être effectuée, et plus le réseau est profond n'aide pas l'effet de tâche (veuillez ne pas utiliser CharCNN comme contre-exemple, des recherches ultérieures montrent que le CNN à 2 couches utilisant des mots est plus efficace que CharCNN). Il semble que ce problème soit toujours causé par des méthodes d'optimisation insuffisantes des paramètres de réseau profond, plutôt que par la profondeur de la couche est inutile. Plus tard, après l'émergence de nouvelles technologies dans le domaine de l'image comme Resnet, il est naturel que les gens envisagent l'introduction de Skip Connection et de diverses technologies d'optimisation de Norm et d'autres paramètres, de manière à augmenter lentement la profondeur du réseau CNN.

Ce qui précède est le premier problème de la version Kim de CNN, le problème de ne pas pouvoir capturer les fonctionnalités longue distance, et la principale solution proposée par les chercheurs derrière. En regardant en arrière la version Kim de CNN, il y a un autre problème, à savoir la couche Max Pooling, qui est en fait liée à savoir si CNN peut conserver les informations de position des mots dans la phrase d'entrée. Tout d'abord, je veux poser une question: parce que RNN est une structure de séquence linéaire, il code naturellement les informations de position; alors, CNN peut-il conserver les informations de position relative de l'entrée d'origine? Nous avons dit plus tôt que les informations de localisation sont très utiles pour les problèmes de PNL. En fait, le noyau de convolution CNN peut conserver la position relative entre les entités. La raison est très simple. La fenêtre coulissante glisse de gauche à droite et les entités capturées sont également disposées dans cet ordre. Il a donc déjà enregistré les informations de position relative dans la structure. . Mais si la couche de pooling est immédiatement connectée à la couche convolutionnelle, la logique de fonctionnement de Max Pooling est la suivante: seule la caractéristique la plus forte est sélectionnée et conservée à partir du vecteur de caractéristiques obtenu à partir d'un noyau de convolution, donc quand il s'agit de la couche Pooling, les informations de position sont Jetez-le, c'est en fait une perte d'information en PNL. Par conséquent, dans le domaine de la PNL, l'une des tendances de développement actuelles de CNN est d'abandonner la couche Pooling et de s'appuyer sur la couche entièrement convolutive pour superposer la profondeur du réseau. Il y a une raison à cela (bien sûr, le champ d'image est également cette tendance).

La figure ci-dessus montre la structure principale d'un CNN moderne qui peut être utilisé dans le domaine de la PNL. Il est généralement superposé par une couche convolutive 1-D avec profondeur, en utilisant Skip Connection pour aider à l'optimisation, ou en introduisant CNN dilaté et d'autres moyens. Par exemple, le corps principal de ConvS2S est la structure illustrée dans la figure ci-dessus. Le codeur contient 15 couches convolutives, la taille du noyau de convolution = 3 et la longueur d'entrée de la couverture est de 25. Bien sûr, pour ConvS2S, l'introduction de la fonction non linéaire gated GLU dans le noyau de convolution est également une aide importante. En raison des limites d'espace, je ne vais pas l'étendre ici. GLU semble être un composant essentiel du modèle CNN en NLP et mérite d'être maîtrisé. Un autre exemple est TCN (Paper: An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling), qui intègre plusieurs technologies: en utilisant CNN dilaté pour étendre la longueur de couverture d'entrée d'une seule couche convolutive, en utilisant une profondeur d'empilement de couche convolutive complète, en utilisant Skip Connection a assisté l'optimisation et introduit Casual CNN pour rendre la structure du réseau invisible pour les données après le pas de temps T. Cependant, les expériences de TCN ont deux problèmes évidents: un problème est que la tâche n'est pas une tâche PNL typique sauf pour les modèles de langage, mais une tâche de données synthétiques, de sorte que la conclusion de l'article est difficile de dire directement qu'elle convient au domaine de la PNL; un autre point, il utilise La méthode de comparaison utilisée pour comparer l'effet n'utilisait pas le modèle qui fonctionnait bien à l'époque pour la comparaison, et le point de référence de comparaison était faible. Par conséquent, l'effet de modèle du TCN n'est pas suffisamment convaincant. En fait, les éléments qu'il devrait introduire sont fondamentalement introduits, et l'expérience n'est pas assez convaincante, je pense que c'est peut-être le manque de GLU.

En outre, parlez brièvement du problème de codage de position de CNN et des capacités de calcul parallèle. Comme mentionné ci-dessus, la couche convolutive de CNN conserve en fait les informations de position relative. Tant que vous n'utilisez pas vos mains lors de la conception du modèle et que vous n'insérez pas la couche de regroupement dans la couche intermédiaire, le problème n'est pas important et la position n'est pas spécifiquement ajustée dans la partie d'entrée L'encodage est très bien. Mais vous pouvez également ajouter une incorporation de position à chaque mot dans la section d'entrée comme ConvS2S, et superposer l'incorporation de position du mot et l'incorporation de vecteur de mot pour former une entrée de mot. C'est également possible, et c'est aussi une pratique normale.

Quant aux capacités de calcul parallèle de CNN, elles sont très puissantes, ce qui est en fait très facile à comprendre. Nous considérons une couche convolutive monocouche. Tout d'abord, pour un certain noyau de convolution, il n'y a pas de dépendance entre la position de chaque fenêtre glissante, donc elle peut être calculée en parallèle; de plus, il n'y a pas d'influence mutuelle entre différents noyaux de convolution, donc Il peut également être calculé en parallèle. Le parallélisme de CNN est très libre et très élevé, ce qui est un très bon avantage de CNN.

Le contenu ci-dessus présente comment la version nostalgique de CNN a survécu étape par étape à travers l'auto-évolution dans le PNL Shura Field. La direction d'évolution de CNN, si elle se résume en mille mots dans une phrase, est la suivante: essayez de rendre la profondeur de CNN aussi profonde que possible.A mesure que la profondeur augmente, de nombreux problèmes apparemment non pertinents sont résolus. Tout comme le thème principal de notre pays au cours des 40 dernières années a été le développement économique, de nombreux problèmes ne seront pas un problème si l'économie se développe bien. Ces dernières années, la raison pour laquelle tout le monde se sent difficile à divers égards est que léconomie ne fonctionne pas bien. Par conséquent, de nombreux problèmes ne peuvent être résolus par la conduite économique. Par conséquent, des difficultés apparemment diverses sont apparues. C'est une vérité.

Donc, après avoir présenté tant de choses, quelle est l'efficacité de la version moderne de CNN? Comment se compare-t-il avec RNN et Transforme? Ne vous inquiétez pas, nous discuterons de ce problème plus tard.

White Knight Transformer: les héros du monde se tiennent sur la scène

Transformer a été proposé par Google dans le document «Attention, c'est tout ce dont vous avez besoin» pour les tâches de traduction automatique en 2017, et il a suscité une réponse considérable. Chaque collègue engagé dans la recherche et le développement de PNL doit bien comprendre Transformer, son importance est sans aucun doute, surtout après avoir lu mon article, je crois que votre sentiment d'urgence sera plus urgent, je suis une telle personne Un expert en création d'anxiété. Cependant, je ne vais pas me concentrer ici. Si vous souhaitez vous familiariser avec Transformer, vous pouvez consulter les trois articles suivants: L'un est le billet de blog de Jay Alammar, The Illustrated Transformer, qui présente visuellement Transformer. Il est très facile de comprendre l'ensemble du mécanisme. Il est recommandé de commencer par cet article. C'est une version de traduction chinoise, le deuxième article est le blog de Calvo: Dissection de BERT Partie 1: L'encodeur, bien qu'il soit dit d'analyser Bert, mais parce que Bert's Encoder est Transformer, il analyse en fait Transformer. Les exemples donnés ici sont bons; Ensuite, vous pouvez aller plus loin en vous référant à "The Annotated Transformer." Écrit par le groupe de recherche PNL de l'Université Harvard, le principe du code est à deux volets, et l'explication est très claire.

Ce qui suit ne parle que du contenu lié au sujet de cet article.

Pour clarifier ici, l'extracteur de fonctionnalités de Transformer mentionné dans cet article n'est pas ce à quoi le document original fait référence. Nous savons que le Transformateur mentionné dans l'article "Attention est tout ce dont vous avez besoin" se réfère au cadre complet Encoder-Decoder, et je parle du point de vue des extracteurs de fonctionnalités. Vous pouvez simplement le comprendre comme la partie Encoder du document. Le but de la partie Encoder étant relativement simple, il est d'extraire des caractéristiques de la phrase originale, tandis que la partie Decoder a relativement plus de fonctions. Outre la fonction d'extraction de caractéristiques, elle inclut également la fonction de modèle de langage et la fonction de modèle de traduction exprimée par le mécanisme d'attention. Veuillez donc faire attention ici pour éviter toute confusion dans la compréhension ultérieure du concept.

La partie Encoder du Transformer (pas les modules marqués comme encodeurs dans l'image ci-dessus, mais le tout dans la case rouge, l'image ci-dessus est de The Illustrated Transformer, Jay Alammar appelle chaque bloc Encoder, qui n'est pas conforme au nom conventionnel) Une pile de plusieurs blocs transformateurs identiques. Ce bloc de transformateur est en fait la partie la plus critique de Transformer, et la formule de base est ici. Alors à quoi ça ressemble?

Voyez l'image ci-dessus. Est-ce que ça a l'air mignon, un peu comme un robot Android, n'est-ce pas? Cela doit être souligné ici. Bien que l'article original de Transformer ait toujours mis l'accent sur l'auto-attention, à l'heure actuelle, il n'y a pas que l'auto-attention qui peut améliorer l'effet Transformer. Tous les éléments de ce bloc, y compris l'auto-attention multi-têtes, la connexion Ignorer, LayerNorm et FF travaillent ensemble. Pourquoi dites vous cela? Vous verrez cela plus tard.

Sur la base des caractéristiques de la tâche NLP, parlons de la solution correspondante de Transformer. Tout d'abord, le langage naturel est généralement une phrase de longueur variable, alors comment résoudre ce problème de longueur variable? L'approche de Transformer est similaire à CNN. En général, la longueur maximale de l'entrée est définie. Si la phrase n'est pas aussi longue, elle est remplie de remplissage, de sorte que toute l'entrée du modèle semble au moins de longueur fixe. De plus, la position relative entre les mots dans les phrases NLP contient beaucoup d'informations. Comme mentionné ci-dessus, RNN codera naturellement les informations de position dans le modèle car sa structure est une séquence linéaire; et la couche convolutive de CNN conserve en fait la position. Relativement informatif, donc ne rien faire n'est pas un gros problème. Mais pour Transformer, afin de pouvoir conserver les informations de position relative entre les mots de la phrase d'entrée, quelque chose doit être fait. Pourquoi doit-il faire quelque chose? Étant donné que la première couche du réseau d'entrée est la couche d'auto-attention Muli-head, nous savons que l'auto-attention fera en sorte que le mot d'entrée actuel et tout mot de la phrase aient une relation, puis l'intègrent dans un vecteur d'intégration, mais lorsque toutes les informations sont incorporées, la position Les informations ne sont pas codées. Par conséquent, Transformer, contrairement à RNN ou CNN, doit coder explicitement les informations Positionon à l'entrée. Transformer utilise des fonctions de position pour coder la position, tandis que les modèles tels que Bert attribuent à chaque mot une incorporation de position, qui correspond à l'incorporation de mot. L'incorporation de position est ajoutée pour former l'incorporation d'entrée du mot, similaire à l'approche ConvS2S mentionnée ci-dessus. En ce qui concerne le problème des fonctionnalités dépendantes à longue distance dans les phrases PNL, l'auto-attention peut naturellement résoudre ce problème, car lors de l'intégration d'informations, le mot actuel et n'importe quel mot de la phrase sont connectés, donc cela se fait en une seule étape. . Contrairement à RNN, qui doit être renvoyé à travers la séquence de nuds cachés, et CNN, qui doit augmenter la profondeur du réseau pour capturer les fonctionnalités longue distance, la solution Transformer est relativement simple et intuitive à ce stade. Il s'agit de présenter séparément comment Transformer résout plusieurs points clés des tâches PNL.

Il existe deux versions de Transformer: Transformer base et Transformer Big. La structure des deux est en fait la même. La principale différence est que le nombre de blocs Transformer inclus est différent. La base du Transformer contient 12 piles de blocs, tandis que le Transformer Big est doublé pour contenir 24 blocs. Sans aucun doute, Transformer Big a doublé la profondeur du réseau, la quantité de paramètres et la quantité de calcul par rapport à la base de Transformer, il s'agit donc d'un modèle relativement lourd, mais l'effet est également le meilleur.

(Partie 1)

Lei Feng.com AI Technology Review est réimprimé avec l'autorisation de l'auteur.

Depuis Avril, le rêve éveillé, pas l'amour, m'dame se débarrasser de, match parfait avec l'ancienne constellation
Précédent
Jeudi cinq ou six Chongqing 18 sites pittoresques gratuit!
Prochain
Il a révélé un luxe discret! POUTRES x Nepenthes x famille mixte tripartite VANS ne vous laissera jamais tomber
Entertainment ont prévu: monde premier fichier donné à l'intérieur « Sea King », le retour directeur « Panther 2 »
5G est bonne, mais la configuration est trop mauvais! Moto Z3 version en ligne de l'état libéré
Col 01 grammes seront disponibles en Novembre, au prix ou pour 13-19000000!
Pourquoi les gens intelligents ne parviennent pas à sauver le monde? | « Wandering la Terre » Méditer
Harbin 10 programme de chauffage de la zone de chauffage annoncé! Ce soir, le chauffage urbain réchauffement sur le sujet
« enfants » bébé: perdu au destin, mais ne jamais abandonner l'espoir!
drame La vie en pot ne vous inquiétez pas, le millet bande Max 3 que vous venez de jouer
Variété conjointement publié ensemble! Série d'automne vetements et d'hiver obligent à nouveau S'il vous plaît Take That!
Journée du poisson d'avril est en cours de lecture de l'Université de mal, à la fin le nombre d'écoles sous la veille « découverte de l'or »?
Samsung A50 rendu ressemble à l'apparence d'exposition mil 9
En mai, les plus à part les plus profondes pensées, amour vieux irremplaçable, l'amour de cette vie à son domicile dans la constellation