J'ai essayé GPT en utilisant Microsoft Cognitive Toolkit (CNTK).
Préparez un corpus japonais pour la formation. On suppose que NVIDIA GPU CUDA est installé.
Cette fois, j'ai préparé un corpus japonais et formé un modèle de génération de phrases japonais. Pour la division des mots, créez un modèle de sous-mots à l'aide de la phrase [1].
GPT Generative Pretraining Transformer (GPT) [2] utilise uniquement la partie Decoder de Transformer [3]. Les transformateurs sont introduits dans Natural Language: Machine Translation Part2-Neural Machine Translation Transformer.
De plus, cette fois-ci, comme dans le cas de Natural Language: BERT Part2 - Pré-formation non supervisée ALBERT, Pre-Layer Normalization Transformer [4] Je l'ai configuré. Les détails de la structure des couches sont illustrés dans la figure ci-dessous.
Nous avons également utilisé le paramétrage de l'intégration factorisée et le partage des paramètres entre couches pour réduire le poids du modèle.
L'attention multi-têtes de GPT utilise l'auto-attention masquée pour un apprentissage supervisé par retour automatique.
La valeur initiale de chaque paramètre a été fixée à une distribution normale avec une variance de 0,02.
La fonction de perte utilise l'erreur d'entropie croisée.
Adam [5] a été utilisé comme algorithme d'optimisation. L'hyperparamètre d'Adam $ β_1 $ est défini sur 0,9 et $ β_2 $ sur la valeur par défaut de CNTK.
Pour le taux d'apprentissage, utilisez le taux d'apprentissage cyclique (CLR) [6], le taux d'apprentissage maximal est de 1e-4, le taux d'apprentissage de base est de 1e-8, la taille du pas est 10 fois le nombre d'époques et la politique est Réglez sur triangular2.
La formation du modèle a effectué 1 000 000 itérations par formation en mini-lots.
・ Processeur Intel (R) Core (TM) i7-5820K 3,30 GHz ・ GPU NVIDIA Quadro RTX 6000 24 Go
・ Windows 10 Professionnel 1909 ・ CUDA 10.0 ・ CuDNN 7.6 ・ Python 3.6.6 ・ Cntk-gpu 2.7 ・ Cntkx 0.1.53 ・ Pandas 1.1.2 ・ Pièce sentencielle 0.1.91
Le programme de formation est disponible sur GitHub.
jgpt_training.py
Je compléterai le contenu requis pour cette implémentation.
OpenAI GPT GPT a été proposé comme modèle de pré-apprentissage dans le traitement du langage naturel. Un modèle de langage à renvoi automatique qui prédit le mot $ w_ {t + 1} $ à partir du mot d'entrée $ w_1, w_2, ..., w_ {t} $ jusqu'au temps $ t $ au temps suivant $ t + 1 $. ..
p(w) = \prod^T_{t=1} p(w_{t+1} | w_1, w_2, ..., w_t)
Comme BERT, GPT effectue une pré-formation non supervisée, puis ajuste avec un ensemble de données de plusieurs tâches. Dans BERT, l'apprentissage non supervisé a été réalisé en utilisant un jeton [MASK] spécial, mais dans GPT, le pré-apprentissage non supervisé est effectué en utilisant l'auto-retour comme indiqué dans la figure ci-dessous.
La figure ci-dessous montre l'attention multi-têtes de BERT et GPT. BERT autorise les informations bidirectionnelles, passées et futures, mais GPT masque les informations futures et n'utilise que des informations unidirectionnelles.
GPT-2 GPT-2 [7] se compose de la normalisation de pré-couche, et Transformer Decoder a jusqu'à 48 couches et 1,5 milliard de paramètres.
GPT-2 a bien fonctionné sur plusieurs tâches dans Zero-shot en pré-entraînement avec un énorme ensemble de données de 40 Go appelé WebText, qui contient 8 millions de phrases.
GPT-3 GPT-3 [8] a acquis un modèle de langage plus précis en maximisant la taille du réseau et de l'ensemble de données de GPT-2.
Le modèle de GPT-3 a la même configuration que GPT-2, mais introduit Sparse Transformer [[9]](# reference) dans Transformer Decoder, et dispose de 175 billions de paramètres dans jusqu'à 96 couches. Il semble que l'apprentissage de GPT-3 coûte environ 490 millions de yens, et si la formation avec un seul GPU est effectuée, cela prendra environ 355 ans.
On dit que GPT-3 est capable de générer des phrases à un niveau qui ne vous met pas mal à l'aise lors de l'échange de phrases avec des humains, mais il a la faiblesse d'être inférieur au modèle BERT dans les tâches qui nécessitent des informations bidirectionnelles. Semble être manifeste.
Training Loss La figure ci-dessous est une visualisation du journal de la fonction de perte pendant l'entraînement. L'axe horizontal représente le nombre de répétitions et l'axe vertical représente la valeur de la fonction de perte.
Voici un exemple de génération avec un modèle entraîné. Entrez un mot commençant par> et générez la suite.
>Humanité
L'humanité apprend cet utérus de bio-ingénierie reconstruit pour la première fois en économie et n'en change pas le prix.
>la magie
La magie est celle qui a un grand succès.
>Terre
L'importance de ce dernier est soulignée sur la terre.
>Aoi Hazuki est
Aoi Hazuki s'accroupit, ne sois pas si paisible.
On dirait qu'une phrase de type japonais a été générée, mais elle est devenue une phrase sans signification. Vous pouvez réaliser que vous avez besoin d'un modèle plus grand, d'un ensemble de données d'entraînement et de suffisamment de matériel pour l'exécuter afin de générer un niveau de texte confortable.
Natural Language : Machine Translation Part2 - Neural Machine Translation Transformer Natural Language : BERT Part2 - Unsupervised pretraining ALBERT