[PYTHON] Othello-De la troisième ligne de "Implementation Deep Learning" (3)

Ceci est une suite de cet article. Othello-De la troisième ligne de "Implementation Deep Learning" (1) http://qiita.com/Kumapapa2012/items/cb89d73782ddda618c99 Othello-De la troisième ligne de "Implementation Deep Learning" (2) http://qiita.com/Kumapapa2012/items/f6c654d7c789a074c69b

Cliquez ici pour les articles suivants. Othello-De la troisième ligne de "Implementation Deep Learning" (4) [Fin] http://qiita.com/Kumapapa2012/items/9cec4e6d2c935d11f108

J'ai mentionné la fonction d'activation dans le premier article, mais étant donné le potentiel de mort de ReLU, jouons à un jeu d'Othello avec peut-être le moyen le plus simple et le plus rapide de contourner cela, Leaky ReLU. Je l'ai essayé. Le code est ici. https://github.com/Kumapapa2012/Learning-Machine-Learning/tree/master/Reversi

Leaky ReLU ReLU est une fonction d'activation qui définit toutes les valeurs inférieures à 0 à 0.

f = \max(0,x)

Cette fois, le NN est une jointure complète, mais comme décrit précédemment, le problème de la mort de ReLU peut se produire. Une solution à cela est Leaky ReLU, qui donne une petite inclinaison aux valeurs négatives (par défaut 0,2 pour le chainer).

{f = \begin{cases}
    x & (x>0) 
    \\
    0.2x  & (x<=0)
  \end{cases}
}

Cela élimine la pente zéro. Il s'agit d'une interprétation personnelle, mais la mort de ReLU est essentiellement due au fait que la pente de la valeur négative est 0, vous pouvez donc ajouter une pente. Cependant, parce que nous voulons conserver les caractéristiques de ReLU "pente positive est 1 et pente négative 0", comme la différenciation facile et le calcul et l'apprentissage rapides (rétropropagation), la pente est faible. , Je pense que c'est une fonctionnalité de Leaky ReLU.

J'ai essayé d'utiliser Leaky ReLU.

Changez la fonction d'activation de ReLU en Leaky ReLU en ne modifiant que 8 lignes de code dans agent.py.

$ diff ~/git/Learning-Machine-Learning/Reversi/agent.py agent.py 
47,55c47,55
<         h = F.relu(self.l1(x))
<         h = F.relu(self.l20(h))
<         h = F.relu(self.l21(h))
<         h = F.relu(self.l22(h))
<         h = F.relu(self.l23(h))
<         h = F.relu(self.l24(h))
<         h = F.relu(self.l25(h))
<         h = F.relu(self.l26(h))
<         h = F.relu(self.l27(h))
---
>         h = F.leaky_relu(self.l1(x))   #slope=0.2(default)
>         h = F.leaky_relu(self.l20(h))
>         h = F.leaky_relu(self.l21(h))
>         h = F.leaky_relu(self.l22(h))
>         h = F.leaky_relu(self.l23(h))
>         h = F.leaky_relu(self.l24(h))
>         h = F.leaky_relu(self.l25(h))
>         h = F.leaky_relu(self.l26(h))
>         h = F.leaky_relu(self.l27(h))

En conséquence, le taux de gain a augmenté régulièrement sur le plateau 6x6. ** Lors de l'utilisation de Leaky ReLU (pente = 0,2) ** image

C'est assez différent du résultat précédent. Après tout, est-ce que ReLU mourant s'est produit? ** Lors de l'utilisation de ReLU ** image

Ensuite, dans le cas d'une carte 8x8 ... Le taux de gain n'était pas stable / (^ o ^)
** Lors de l'utilisation de Leaky ReLU (pente = 0,2) ** image

Dans le premier résultat, le taux de victoire semble finalement converger. ** Lors de l'utilisation de ReLU ** image

Si vous pensez très simplement, si le taux de gain est ReLU, c'est-à-dire Leaky ReLU avec Slope = 0, il semble converger, et s'il ne converge pas lorsque Leaky ReLU avec Slope = 0,2, il peut y avoir une valeur optimale entre-temps. Peut être. J'aimerais l'essayer plus tard avec Slope = 0.1. Mais le plus gros problème est qu'il y a une vague de taux de victoire. L'ondulation semble signifier que l'apprentissage ne s'arrête pas au bon endroit. Cela semble être lié au taux d'apprentissage. D'après le chapitre 6 du livre "Deep Learning from Zero", le taux d'apprentissage est essentiellement un coefficient qui indique le degré de mise à jour du poids W. Plus la valeur est élevée, plus le degré de mise à jour de W est élevé et plus l'apprentissage progresse rapidement, mais il diverge. Il y a une possibilité [^ 1]. Cependant, s'il est trop petit, l'apprentissage sera trop lent. C'est. L'argument lr (Learning Rate = learning rate) de RMSPropGraves utilisé cette fois est 0,00025. Dans RMSPropGraves de chainer, le lr par défaut est 0,0001, donc cet échantillon est un peu plus grand. Probablement, ce 0,00025 est une valeur optimisée pour la vitesse d'apprentissage de la disposition à trois voies de l'échantillon, et dans le cas de la carte 8x8 d'Othello cette fois, la valeur de W n'est pas stable, et par conséquent, le taux de gain est comme indiqué dans le graphique ci-dessus. On pense qu'il est devenu instable. Pour cette raison, j'aimerais essayer à l'avenir ce qui se passe lorsque le taux d'apprentissage est bas. [^ 2]

Les références

Ordinateur Othello https://ja.m.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%AA%E3%82%BB%E3%83%AD
Parlez des expériences d'échec et des anti-modèles dans Neural Network http://nonbiri-tereka.hatenablog.com/entry/2016/03/10/073633 (D'autres seront ajoutés à une date ultérieure)

[^ 1]: L'expansion des fluctuations de poids due à un taux d'apprentissage élevé peut également être un facteur de la mort de ReLU. [^ 2]: De plus, la fonction d'activation de la couche de sortie est-elle la même que la couche cachée en premier lieu? Dois-je y réfléchir séparément? Je suis également inquiet à ce sujet.

Recommended Posts

Othello-De la troisième ligne de "Implementation Deep Learning" (3)
Othello-De la troisième ligne de "Implementation Deep Learning" (2)
Othello ~ De la troisième ligne de "Implementation Deep Learning" (4) [Fin]
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
Visualisez les effets de l'apprentissage profond / de la régularisation
Deep learning 1 Pratique du deep learning
L'histoire de l'apprentissage profond avec TPU
[Mémo d'apprentissage] Apprentissage profond à partir de zéro ~ Mise en œuvre de l'abandon ~
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Apprentissage profond appris par mise en œuvre (segmentation) ~ Mise en œuvre de SegNet ~
Comptez le nombre de paramètres dans le modèle d'apprentissage en profondeur
Deep running 2 Réglage de l'apprentissage profond
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
Deep Learning from scratch La théorie et la mise en œuvre de l'apprentissage profond appris avec Python Chapitre 3
Techniques pour comprendre la base des décisions d'apprentissage en profondeur
Créez un environnement python pour apprendre la théorie et la mise en œuvre de l'apprentissage profond
[Deep Learning from scratch] Implémentation de la méthode Momentum et de la méthode AdaGrad
Apprentissage profond appris par l'implémentation 1 (édition de retour)
Implémentation du modèle de reconnaissance d'images d'apprentissage en profondeur 2
Chapitre 2 Implémentation de Perceptron Ne découpez que les bons points de Deeplearning à partir de zéro
L'apprentissage en profondeur
[Détection d'anomalies] Essayez d'utiliser la dernière méthode d'apprentissage à distance
Résumé des pages utiles pour étudier le framework d'apprentissage profond Chainer
Deep learning 2 appris par l'implémentation (classification d'images)
Notes d'apprentissage depuis le début de Python 1
Signification des modèles et paramètres d'apprentissage en profondeur
Qiskit: mise en œuvre de l'apprentissage des circuits quantiques (QCL)
Implémentation d'un réseau neuronal à 3 couches (pas d'apprentissage)
Essayez l'apprentissage profond de la génomique avec Kipoi
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
Analyse émotionnelle des tweets avec apprentissage en profondeur
Lire l'implémentation de la minuterie globale ARM
Enregistrement d'apprentissage de la lecture "Deep Learning from scratch"
Notes d'apprentissage depuis le début de Python 2
Graphique de l'historique du nombre de couches de deep learning et du changement de précision
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
Python vs Ruby "Deep Learning from scratch" Chapitre 4 Implémentation de la fonction de perte
J'ai essayé l'histoire courante de prédire la moyenne Nikkei à l'aide du Deep Learning (backtest)
Python vs Ruby "Deep Learning from scratch" Chapitre 3 Implémentation d'un réseau neuronal à 3 couches
L'histoire selon laquelle le coût d'apprentissage de Python est faible
J'ai lu l'implémentation de range (Objects / rangeobject.c)
Apprentissage profond / rétropropagation d'erreur de la fonction sigmoïde
Pourquoi l'implémentation Python d'ISUCON 5 a utilisé Bottle
Un mémorandum d'étude et de mise en œuvre du Deep Learning
Apprentissage profond appris par la mise en œuvre ~ Détection d'anomalies (apprentissage sans enseignant) ~
Mémorandum d'apprentissage profond
Commencer l'apprentissage en profondeur
Compréhension de base de l'estimation de la profondeur stéréo (Deep Learning)
Apprentissage en profondeur Python
Apprentissage parallèle du deep learning par Keras et Kubernetes
À propos du contenu de développement de l'apprentissage automatique (exemple)
Python: Apprentissage en profondeur dans le traitement du langage naturel: Implémentation d'un système de sélection de phrases de réponses
Apprentissage profond × Python
Mise en place d'un modèle de prédiction des taux de change (taux dollar-yen) par machine learning
L'apprentissage en profondeur facilite considérablement la visualisation du laps de temps des changements physiques
Premier apprentissage profond en C # -Imitation de l'implémentation en Python-
Comment installer le framework d'apprentissage en profondeur Tensorflow 1.0 dans l'environnement Windows Anaconda