[PYTHON] Essayons le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 10 Mémo "Détails et amélioration du réseau neuronal"

Contenu

Ceci est un mémo pour moi pendant que je lis Introduction aux applications de traitement du langage naturel en 15 étapes. Cette fois, au chapitre 3, étape 10, notez vos propres points.

Préparation

Aperçu des chapitres

Au chapitre 8, nous avons développé à partir d'un simple perceptron et introduit un perceptron multicouche, et au chapitre 9, nous avons implémenté un classificateur multi-classes. Le chapitre 10 vise à améliorer le réseau neuronal.

--Difficulté à approfondir la couche du réseau neuronal

10.1 Deep Neural Networks À l'origine, un réseau neuronal avec trois couches ou plus était appelé profond. Pour ajouter plus de couches, ajoutez simplement plus de couches avec model.add.

Difficulté à approfondir la couche du réseau neuronal

article Solution
Facile à surapprendre Early stopping
・ S'il y a plusieurs couches, la puissance expressive du réseau neuronal est élevée, il est donc facile de suradapter les données d'entraînement.
・ Répétez l'entraînement en unités d'époque, mais arrondissez l'entraînement avant que la précision des données de test ne diminue.

Dropout
・ Certaines unités sont ignorées au hasard à un certain rythme pendant l'apprentissage, et toutes les unités sont utilisées lors de la prédiction.
・ Il est difficile de surapprendre car le nombre d'unités valides dans un apprentissage est petit.
・ Une méthode de prédiction similaire à l'ajout de plusieurs réseaux de neurones a le même effet que l'apprentissage d'ensemble.
L'apprentissage ne se passe pas bien Batch normalization
Changement de covariable interneSe produit
 ・手前の層の重みの更新のせいで、後ろの層の重みの更新が妨げられる
・データの分布が平均0で分散1になるよう正規化する
・新たな層として追加したり、層中の活性化関数の前で実行したりする
Augmentation de la quantité de calcul Apprenez un réseau neuronal à l'aide d'un GPU qui peut traiter en parallèle à grande vitesse

EarlyStopping


model.fit(X, y,
    epochs = 100,
    validation_split = 0.1,
    callbacks = [EarlyStopping(min_delta = 0.0, patience = 1)])

    #époques: faites-le suffisamment grand pour qu'il ne se termine pas avant d'arrondir avec Early Stop
    # validation_Split: vous pouvez spécifier le rapport entre les données d'entraînement et les données de validation et les données d'entraînement d'entrée.
    #callbacks: les callbacks spécifiés dans la liste sont appelés séquentiellement pendant l'apprentissage.

Dropout


model = Sequential()
model.add(Dense(..))
model.add(Dropout(0.5))
model.add(Dense(..))
model.add(Dropout(0.5))
model.add(Dense(..))
model.add(Dropout(0.5))
model.add(Dense(.., activation = 'softmax')
model.compile(..)

#L'argument du constructeur de suppression ignore les unités

BatchNormalization


model = Sequential()

#Ajouté en tant que nouveau calque
model.add(Dense(.., activation = 'relu'))
model.add(BatchNormalization(0.5))

#Ajouté avant la fonction d'activation
model.add(Dense(..))
model.add(BatchNormalization(0.5))
model.add(Activation('relu')

model.add(Dense(.., activation = 'softmax')
model.compile(..)

10.2 Apprentissage du réseau neuronal

Méthode de descente de gradient

Le gradient est obtenu en différenciant la fonction d'erreur avec le poids, la valeur de poids est mise à jour dans la direction opposée du gradient et l'apprentissage du réseau neuronal est avancé.

Solution optimale globale et solution optimale locale

--Solution optimale globale: La solution optimale que vous souhaitez trouver. Le poids avec la plus petite erreur parmi les poids possibles (solution optimale) --Solution optimale locale: solution partiellement optimale, mais il existe d'autres solutions les plus appropriées

Méthode de descente de gradient probabiliste et méthode mini-batch

10.3 Réglage du réseau neuronal

article Contenu
Taille du lot -Taille du lot à l'apprentissage, Keras par défaut à 32
・ Il existe de nombreuses puissances de 2, mais il ne s'agit que d'une convention, mais il est logique de rechercher de petites valeurs de manière dense et de grandes valeurs de manière éparse.
Optimizer -Adam, un retardataire, est souvent utilisé, mais selon le problème, un simple SGD peut être le meilleur.
・ Réglez le taux d'apprentissage ci-dessous
Taux d'apprentissage -Keras Adam par défaut à 0 pour le pourcentage de poids mis à jour à la fois.001
Fonction d'activation ・ ReLU est largement utilisé(Rectified Linear Unit)Cependant, la version améliorée de Leaky ReLU et SeLU(Scaled Exponential Unit)Il y a également place à considérer.
-Leaky ReLU: Lorsque l'entrée est 0 ou moins, convertir avec une fonction linéaire avec une petite pente
・ ELU: Si l'entrée est égale ou inférieure à 0, convertissez en soustrayant 1 de la fonction exponentielle.
Régularisation/Amortissement de la charge ・ Pour éviter un apprentissage excessif, contraignez le poids pour qu'il ne devienne pas trop grand et ajoutez la norme suivante à la fonction de perte.
・ Norme L1: somme des valeurs absolues de chaque élément de poids
・ Norme L2: somme des carrés de chaque élément de poids
・ Norme L∞: valeur absolue maximale de chaque élément de poids
Initialisation du poids ・ Keras par défaut est initialisé avec des nombres aléatoires
・ Il est également possible de spécifier la distribution

Fonction d'activation


model = Sequential()
model.add(Dense(.., activation = 'selu'))
model.add(Dense(.., activation = LeakyReLU(0.3)))
model.add(Dense(.., activation = 'softmax')
model.compile(..)

Régularisation


model = Sequential()
model.add(Dense(.., activation = 'relu',
    kernel_regularizer = regularizers.l2(0.1)))
model.add(Dense(.., activation = 'softmax',
    kernel_regularizer = regularizers.l2(0.1)))
model.compile(..)

Initialisation du poids


model = Sequential()
model.add(Dense(.., activation = 'relu',
    kernel_initializer = initializers.glorot_normal()))
model.add(Dense(.., activation = 'softmax',
    kernel_initializer = initializers.glorot_normal()))
model.compile(..)

glorot_normal (): Distribution normale de Glolot, également connue sous le nom de distribution normale de Xavier (j'ai entendu celle-ci). La valeur initiale de Xavier convient à la fonction sigmoïde et à la fonction tanh, mais lors de l'utilisation de ReLU comme fonction d'activation, ** la valeur initiale de He spécialisé pour ReLU ** semble être meilleure.

Recommended Posts

Essayons le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 10 Mémo "Détails et amélioration du réseau neuronal"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 3 Étape 08 Mémo «Introduction aux réseaux de neurones»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 12 Mémo "Réseaux de neurones convolutifs"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 3 Étape 13 Mémo «Réseaux de neurones récurrents»
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 06 Mémo «Identifiant»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 2 Étape 02 Mémo "Prétraitement"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 07 Mémo «Évaluation»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 09 Mémo "Identifier par Neural Network"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 4 Etape 14 Mémo "Recherche Hyper Paramètre"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 04 Mémo «Extraction de fonctionnalités»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 4 Étape 15 Mémo "Collecte de données"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 2 Étape 05 Mémo "Conversion de quantité de fonctionnalités"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 3 Étape 11 Mémo "Embeddings de mots"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 2 Étape 03 Mémo "Analyse morphologique et écriture écrite"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 01 Mémo «Créer un agent de dialogue»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" -Chapitre 1 Mémo "Connaissances préliminaires avant de commencer les exercices"
Résumé du début au chapitre 1 de l'introduction aux modèles de conception appris en langage Java
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
[Traitement du langage naturel] J'ai essayé de visualiser les remarques de chaque membre de la communauté Slack
Types de prétraitement dans le traitement du langage naturel et leur puissance
Résumé du chapitre 2 de l'introduction aux modèles de conception appris en langage Java
Chapitre 4 Résumé de l'introduction aux modèles de conception appris en langage Java
Résumé du chapitre 3 de l'introduction aux modèles de conception appris en langage Java
De l'introduction de l'API GoogleCloudPlatform Natural Language à son utilisation
J'ai essayé de résoudre 100 traitements linguistiques Knock version 2020 [Chapitre 3: Expressions régulières 25-29]
[WIP] Pré-traitement des notes dans le traitement du langage naturel
J'ai essayé de résoudre la version 2020 de 100 problèmes de traitement du langage [Chapitre 3: Expressions régulières 20 à 24]
J'ai essayé de résoudre la version 2020 de 100 coups de traitement de langue [Chapitre 1: Mouvement préparatoire 00-04]
J'ai essayé de résoudre la version 2020 de 100 traitements linguistiques [Chapitre 1: Mouvement préparatoire 05-09]
Une introduction au logiciel d'interface graphique de la plate-forme de classe fait avec Python / Tkinter! (Et de nombreux Try and Error)! (Au milieu de l'écriture)
Insoutenable manque d'attention dans le traitement du langage naturel
Apprentissage de l'histoire pour participer au développement d'applications en équipe avec Python ~ Après avoir terminé "Introduction à Python 3" de paiza learning ~