Je ne voulais pas faire DQN en premier lieu, mais je voulais utiliser Chainer à d'autres fins, donc j'ai écrit DQN pour la pratique, mais j'ai pensé le rendre public ~~ ** Je l'ai rendu public **. Aussi, si je le publie quand même, j'en profiterai pour organiser les connaissances que j'ai par rapport à cela (apprentissage Q + approximation des fonctions).
Si vous ne lisez que des articles de presse, Nature et NIPS, DQN made Deepmind / Google est incroyable! !! !! Cependant, compte tenu du contexte historique de l'apprentissage par renforcement, on peut voir qu'il s'agit d'une technologie qui est née de manière assez naturelle, avec renforcement de l'apprentissage + apprentissage en profondeur. (Il était visuellement facile de comprendre que jouer à des jeux ATARI avec de meilleures performances que les humains. $ \ Leftrightarrow $ Le réglage du problème était également bon.)
Dans cet article, les deux articles suivants de NIPS et Nature
・ V. Mnih * et al. *, "Jouer à atari avec apprentissage par renforcement profond" http://arxiv.org/pdf/1312.5602.pdf ・ V. Mnih * et al. *, "Contrôle au niveau humain grâce à l'apprentissage par renforcement profond" http://www.nature.com/nature/journal/v518/n7540/abs/nature14236.html
J'expliquerai le processus de renforcement de l'apprentissage jusqu'à ce point, en me concentrant uniquement sur les parties pertinentes autant que possible.
Bien que ce soit des informations ringardes, le premier auteur, Mnih, était une personne qui a étudié sous la direction du Dr Szepesvári, célèbre pour la planification probabiliste, y compris l'UCT, et du Dr Hinton, un parrain de réseau neuronal familier, et il est naturel que DQN soit né. On peut dire que c'est un flux.
Certaines personnes peuvent ne pas être familières avec l'apprentissage par renforcement lui-même. Le "PRML" de Bishop et, plus récemment, le "Machine Learning" de Murphy sont traités comme "Ce livre couvre de nombreux domaines de l'apprentissage automatique, à l'exception de l'apprentissage par renforcement."
Je pense que cela est dû au réglage des conditions spéciales pour un apprentissage amélioré. En effet, la théorie de l'apprentissage amélioré est un mélange de théorie du contrôle (théorie du contrôle optimal / méthode de planification dynamique) et d'apprentissage automatique dans un shaker. Ici, sans entrer dans une telle théorie, j'expliquerai (je vais) le plus simplement possible, "Qu'est-ce que l'apprentissage par renforcement?"
L'apprentissage intensifié est une méthode d'apprentissage automatique dans laquelle un «agent» placé dans un «environnement» obtient des mesures optimales (règles de détermination du comportement) par interaction avec l'environnement.
Selon Wikipédia, «l'apprentissage par renforcement est un type d'apprentissage automatique qui traite le problème des agents dans un environnement observant leur état actuel et décidant des mesures à prendre.» [^ 1 ] C'est vrai.
Une image vaut mille mots et ressemble à la figure suivante dans un diagramme schématique.
L'apprentissage intensifié progresse en répétant les étapes simples suivantes.
- L'agent reçoit l'observation $ o $ (ou directement l'état de l'environnement $ s $) reçue de l'environnement et renvoie l'action $ a $ à l'environnement en fonction de la stratégie $ \ pi $.
- L'environnement passe à l'état suivant $ s '$ en fonction de l'action $ a $ reçue de l'agent et de l'état actuel $ s $, et en fonction de cette transition, l'observation suivante $ o' $ et la récompense. Renvoie à l'agent un nombre unique (montant scalaire) appelé $ r $ qui indique la qualité de la dernière action.
- Progression du temps: $ t \ leftarrow t + 1 $
Où $ \ leftarrow $ représente une opération d'affectation. Les récompenses sont généralement données en fonction de l'état et de l'action, et les états suivants $ r = r (s, a, s ') $. Nous ne pouvons pas manipuler directement l'environnement en raison des conditions d'apprentissage intensif. Seuls les agents sont libres d'opérer. Ce type d'interaction et de contraintes environnement-agent représente les particularités d'un apprentissage amélioré.
Pour simplifier, les observations ici ne décrivent que des situations où l'état de l'environnement est passé directement à l'agent ($ o = s $) [^ 2]. Dans le cadre d'un apprentissage intensif, la politique optimale pour les agents est la somme des récompenses qui peuvent être obtenues du temps présent vers le futur infini en décidant des actions selon cette politique.
R_t = \sum_{k=0}^{\infty} \gamma^k r_{t+k+1} = r_{t+1} + \gamma\ r_{t+2} + \gamma^2\ r_{t+3} + \cdots
Je pense que c'est une mesure qui maximise. C'est-à-dire que c'est la fonction objective de l'apprentissage par renforcement. $ t $ représente l'heure actuelle et $ r_i $ représente la récompense reçue par l'agent au moment $ i $. $ \ Gamma $ est un paramètre d'apprentissage amélioré appelé taux d'actualisation. Cette valeur est généralement donnée comme une valeur continue entre $ 0 $ et moins de $ 1 $, et est une constante introduite de sorte que $ R_t $ est une valeur finie pour tout paramètre de récompense qui n'inclut pas l'infini ou l'infini. est. Habituellement défini sur une valeur proche de $ 1 $, telle que $ \ gamma = 0.99 $.
Chaque fois que l'état de l'environnement est passé directement comme observation d'un agent ($ o = s $) tel qu'il est maintenant ***, il y a une fonction déterministe qui produit l'action *** $ \ pi ^ * (s) On sait théoriquement qu'il existe au moins une stratégie optimale qui peut être représentée par) $ *** [^ 3]. Je n'entrerai pas dans les détails, mais toutes les méthodes d'apprentissage présentées dans les sections suivantes sont les mêmes en ce sens qu'elles recherchent des mesures déterministes qui maximisent les fonctions objectives ci-dessus.
Lorsque DQN apprend le jeu ATARI, on suppose que l'état est configuré avec l'écran de jeu (observation) entre 4 étapes.
Ici, nous allons présenter le contexte derrière la naissance de Deep Q-Network. Découvrez l'apprentissage Q, l'approximation des fonctions, la relecture d'expérience et l'itération Q ajustée neuronale qui composent le réseau Q profond.
Le Q-learning est un algorithme classique pour un apprentissage amélioré et peut être l'algorithme le plus connu pour un apprentissage amélioré. Toutes les méthodes basées sur le Q-learning apprennent des stratégies optimales en s'approchant d'une fonction appelée ** fonction de valeur comportementale optimale **.
Il existe une valeur d'action optimale pour chaque état et paire d'actions $ (s, a) $, et la récompense que vous obtenez si vous prenez une action $ a $ dans l'état $ s $ et suivez la stratégie optimale tout le temps. C'est une valeur qui représente la somme de (c'est-à-dire la fonction objectif) $ R $. C'est ce qu'on appelle la fonction de valeur d'action optimale, qui est calculée pour chaque ensemble de tous les états et actions $ (s, a) $, et est exprimée par $ Q ^ * (s, a) $.
C'est une définition déroutante, mais en gros, cette valeur représente le ** mérite ** d'agir $ a $ avec l'agent dans $ s $. Le point important à propos de cette ** fonction de valeur d'action optimale est qu'il y a un ** entre cette fonction et la politique déterministe optimale (l'une d'entre elles) $ \ pi ^ * (s) $.
\pi^*(s) = \rm{argmax}_a Q^* (s,a)
Cela signifie qu'il existe une relation **. ** En d'autres termes, dans l'apprentissage Q, l'obtention de la fonction de valeur d'action optimale [^ 4] et l'obtention de la politique optimale ont presque la même signification.
Dans l'apprentissage Q réel, une fonction de table $ Q (s, a) $ est créée pour tous les états $ s $ et une paire d'actions $ a
Q(s,a) \leftarrow (1-\alpha) Q(s,a) + \alpha \Bigl(r + \gamma \ \max_{a'} Q(s',a')\Bigr)
Où $ r $ est la récompense reçue de l'environnement après avoir sélectionné l'action $ a $ dans l'état $ s $, $ s '$ est aussi l'action $ a $ dans l'état $ s $, puis à la prochaine fois Représente le statut reçu. $ \ Alpha $ représente le taux d'apprentissage. Utilisez généralement des valeurs plus petites, telles que 0,1 $ ou 0,01 $, inférieures à 1 $. Cet algorithme rapproche à chaque fois $ Q (s, a) $ de $ r + \ gamma \ \ max_ {a '} Q (s', a ') $, qui contient la fonction elle-même. C'est [^ 5].
La notation de mise à jour ci-dessus n'est peut-être pas très populaire dans l'apprentissage amélioré (en particulier pour ceux qui sont connus pour leur apprentissage amélioré dans le livre Sutton & Barto), mais cette notation est une fonction de valeur $ Q (s, a) $ C'est dans un format qui exprime explicitement ce que vous essayez d'appliquer. Naturellement, cette mise à jour est une notation plus populaire.
Q(s,a) \leftarrow Q(s,a) + \alpha \Bigl(r + \gamma\ \max_{a'} Q(s',a') - Q(s,a)\Bigr)
Est équivalent à
La plus grande caractéristique de l'apprentissage Q est que les échantillons ($ s $, $ a $, $ r $, $ s '
J'ai dit que je créerais une fonction de table $ Q (s, a) $ pour tous les états et actions, mais si je donne une chose incroyablement haute dimensionnelle telle qu'une chaîne d'image comme un état comme DQN, il est naturel que la table fonctionne Donc ça ne rentre pas dans la mémoire et je ne peux pas prendre tous les échantillons. Même une image binaire de 10 $ \ fois 10 $ aura un nombre d'états très incontrôlable tel que $ 2 ^ {100} \ approx 10 ^ {30} $. Par conséquent, lorsque nous traitons un état aussi dimensionnel très élevé, nous utilisons une approximation de fonction pour $ Q (s, a) $.
Considérons donc l'utilisation d'une approximation de fonction pour la fonction $ Q (s, a) $. Donc $ Q (s, a) $ est représenté par un paramètre $ \ theta $, et la fonction approchée est représentée par $ Q_ \ theta (s, a) $.
Pour utiliser cette fonction pour approximer la fonction équivalente à l'apprentissage Q, classiquement, l'algorithme de méthode de gradient suivant est utilisé.
\theta \leftarrow \theta - \alpha \nabla_\theta L_\theta
Où $ L_ \ theta $ est représenté par la fonction d'erreur suivante. C'est la même chose que la mise à jour générale de la méthode de gradient.
L_\theta = \frac{1}{2}\Bigl( \rm{target} - Q_\theta(s,a)\Bigr)^2
En passant, si vous connaissez la vraie valeur de l'action $ Q ^ * (s, a) $, vous pouvez définir $ \ rm {target} = Q ^ * (s, a) $ comme apprentissage supervisé pur. , L'apprentissage intensifié ne donne pas $ Q ^ * (s, a) $, qui est le signal de l'enseignant. Par conséquent, comme pour l'apprentissage Q à l'aide des fonctions de table
\rm{target} = r + \gamma \max_{a'} Q_\theta (s',a')
Est utilisé comme signal de l'enseignant à ce moment-là. Et la différenciation de la fonction d'erreur n'est pas de différencier le signal enseignant, mais simplement de rapprocher $ Q_ \ theta (s, a) $ du signal enseignant. En d'autres termes
\begin{align}
\nabla_\theta L_\theta &=-\Bigl(\rm{target} - Q_\theta(s,a)\Bigr) \nabla_\theta Q_\theta(s,a)\\
&=-\Bigl(r + \gamma \max_{a'} Q_\theta (s',a') - Q_\theta(s,a)\Bigr) \nabla_\theta Q_\theta(s,a)
\end{align}
Ce sera.
Par conséquent, l'apprentissage de Q lors de l'utilisation de la fonction d'approximation est le suivant.
\theta \leftarrow \theta + \alpha \Bigl(r + \gamma \max_{a'} Q_\theta (s',a') - Q_\theta(s,a)\Bigr) \nabla_\theta Q_\theta(s,a)
Une expression très similaire à la deuxième expression de mise à jour pour l'apprentissage Q utilisant des fonctions de table est apparue.
Ce à quoi vous devez faire attention dans l'apprentissage Q en utilisant l'approximation de fonction est ** $ \ max_ {a '} Q_ \ theta (s', a ') $ inclus dans le signal de l'enseignant dans le calcul de la différenciation de la fonction d'erreur. Cela signifie qu'il ne doit pas être différencié **. Il est peu probable que ce genre d'erreur se produise lorsque vous vous différenciez et que vous le déposez dans le code, mais si vous utilisez la différenciation automatique qui est largement utilisée de nos jours, cela signifie que vous avez différencié même le signal de l'enseignant sans le savoir. (Et c'est difficile à remarquer car ils bougent tous les deux de la même manière au début de l'apprentissage). (Je l'ai fait une fois aussi)
Si l'apprentissage est différencié en incluant le signal enseignant, l'algorithme aura des propriétés différentes de l'apprentissage Q utilisant le dispositif d'approximation de fonction décrit ici.
Le Q-learning utilisant des méthodes d'approximation de fonctions non linéaires telles que les réseaux de neurones multicouches est Long-Ji à l'ère des réseaux de neurones secondaires où la rétropropagation d'erreur a été développée, lorsque l'apprentissage par renforcement a commencé à mûrir théoriquement. M. Lin l'a fait avec énergie. Experience Replay est la méthode publiée par cette personne dans l'article "Agents réactifs auto-améliorés basés sur l'apprentissage, la planification et l'enseignement par renforcement".
En passant, cet article est un article très intéressant qui forme des agents qui tentent de survivre dans un environnement de simulation complexe et dynamique.
Dans un réseau neuronal multicouche (bien qu'il s'agisse d'environ 3 ou 4 couches de réseau entièrement connecté), l'apprentissage est inévitablement lent, et même si le taux d'apprentissage est augmenté, l'apprentissage diverge. Afin d'accélérer cela, nous utiliserons les caractéristiques d'apprentissage Q mentionnées ci-dessus.
Qu'est-ce que Experience Replay? Tous les échantillons ($ s $, $ a $, $ r $, $ s '$) expérimentés par l'agent sont enregistrés (ou pour un nombre d'heures fini), et l'échantillon utilisé une fois est utilisé comme fonction ci-dessus. C'est une méthode qui est utilisée plusieurs fois dans l'apprentissage Q en utilisant l'approximation. Ceci est basé sur l'idée que dans l'apprentissage Q utilisant une fonction de table, l'apprentissage se déroule quelle que soit la façon dont l'ordre des échantillons est réorganisé, de sorte que la même propriété est attendue dans l'apprentissage Q utilisant un dispositif d'approximation de fonction.
Un algorithme qui pense à certains extrêmes de Experience Replay est l'itération Neural Fitted Q du Dr Riedmiller [^ 7]. Ceci est différent de l'apprentissage amélioré en ligne tel que "collecter et apprendre des données par vous-même" jusqu'à présent, et d'abord un nombre suffisant d'échantillons ($ s $, $ a $, $ r $, $ s '$) Il s'agit d'un algorithme qui considère "apprendre la politique optimale à partir des données données sans ajouter d'autres échantillons", c'est-à-dire effectuer un apprentissage de renforcement par lots, en supposant qu'il existe des données de.
Le pseudo code de l'algorithme d'itération Neural Fitted Q est le suivant.
input: Données $ D $ constituées de nombreux échantillons ($ s $, $ a $, $ r $, $ s '$) sortie: fonction Q après l'entraînement $ Q_ {\ theta_N} (s, a) $
Le point important dans Neural Fitted Q Itteration est que le signal de l'enseignant est toujours $ r + \ max_ {a '} Q_ {\ theta_k basé sur le même paramètre $ \ theta_k $ dans l'optimisation de la méthode de gradient effectuée à chaque fois pendant l'itération. } (s_t ', a') Généré à partir de $, c'est pourquoi, contrairement à la méthode en ligne, ** est complètement supervisé et appris lors de chaque optimisation **. Par conséquent, on s'attend à ce que l'apprentissage soit très stable en termes de paramètres.
Neural Fitted Q Iteration est un algorithme qui extrait des informations d'un nombre constant de données, mais avec une méthode plus avancée, après avoir appris dans une certaine mesure, l'agent est déplacé dans l'environnement et les données par lots sont ajoutées plus tard. L'idée de Growing Batch a été proposée [^ 8]. À ce stade, la méthode est presque la même que celle du papier Nature.
L'équipe de Riedmiller utilise cet apprentissage par renforcement par lots comme méthode principale et l'applique à l'apprentissage du comportement des robots. Il semble que l'enseignant soit également inscrit à Deepmind, et on peut voir qu'un nombre étonnamment élevé de chercheurs en apprentissage de renforcement sont accumulés dans Deepmind.
La question "Quelle est la nouvelle technologie de DQN?" Est simplement "J'ai appliqué la technologie d'apprentissage en profondeur à l'approximation fonctionnelle ci-dessus de l'apprentissage par renforcement."
Plus précisément, le réseau neuronal convolutif a été utilisé dans les articles NIPS et Nature, et cette structure a été utilisée. De plus, nous avons appliqué des méthodes d'optimisation qui ne rentrent pas dans les solutions locales, comme le RMS Drop récemment développé. Ce sont essentiellement des points nouveaux dans DQN. (Ajout: je pense que la structure de DQN qui n'entre que l'état dans le réseau et exprime la valeur estimée de toutes les valeurs d'action dans cet état avec une propagation directe est nouvelle, mais je suis désolé ~~ Je suis sûr Je ne peux pas l'avoir ~~) (Ajout: La structure de DQN a été introduite dans l'ajout de $ \ uparrow $, mais il y avait un précédent. À partir de 2009 au plus tard, Shibata \ & Kono utilisait un réseau neuronal entièrement connecté à 5 couches avec une structure similaire. L'apprentissage Q est configuré et l'apprentissage amélioré utilisant l'entrée d'image est appliqué à la tâche d'apprentissage comportemental d'AIBO [^ 9].)
Le document NIPS «Jouer à atari avec apprentissage par renforcement profond», où DQN est apparu pour la première fois, utilise Experience Replay à grande échelle en combinaison avec la méthode des mini-lots. Cependant, l'algorithme d'apprentissage amélioré en ligne est encore instable.
D'autre part, dans l'article «Contrôle au niveau humain grâce à l'apprentissage par renforcement profond» de Nature, en appliquant l'itération Neural Fitted Q + Growing Batch, la stabilisation est obtenue par l'apprentissage par renforcement en ligne «presque par lots».
C'est l'origine du DQN que je connais.
C'est pourquoi j'ai implémenté DQN dans la pratique de Chainer. Il sera publié sur github ~~. ~~ $ \ rightarrow $ ** Publié. ** ** https://github.com/ugo-nama-kun/DQN-chainer
** Addendum 1 **: Les deux versions nature / nips du code publié ont été publiées. Le test nécessite RLglue et RLglue Python-codec, qui sont souvent utilisés pour l'analyse comparative dans la recherche d'apprentissage intensif, Arcade Learning Environment qui connecte l'émulateur ATARI et RLglue, et Numpy, Scipy et Mochiron Chainer pour le package Python. Puisqu'il est censé être calculé sur GPU, le GPU NVIDIA est requis. Nous avons confirmé l'opération uniquement sur Ubuntu 14.04 LTS.
** Addendum 2 **: Le nombre d'histoires enregistrées pour la relecture d'expérience de DQN est fixé à 1/10 de l'original (10 $ ^ 6 \ rightarrow 10 ^ 5 $). C'était simplement parce que je voulais le réduire pour travailler sur ma petite machine. Je pense que la mise en œuvre de l'histoire est cette fois inefficace car il s'agit d'une implémentation simple de l'algorithme décrit dans le magazine Nature. Au moins à Pong, nous avons confirmé que l'apprentissage peut se faire sans problème.
** Addendum 3 **: Toutes les vérifications de fonctionnement sont effectuées avec Pong, qui est l'un des jeux ATARI. Consultez readme.txt pour savoir comment vous entraîner dans d'autres jeux. En raison de la réduction, les performances attendues peuvent ne pas être apprises.
J'ai créé à la fois la version NIPS et la version Nature, mais la version NIPS a de nombreux paramètres inconnus dans l'article, et l'atmosphère de convergence est meilleure avec la version Nature. Considérez la version NIPS comme un bonus.
Les résultats d'apprentissage de la version Nature sont publiés sur youtube $ \ downarrow $ https://www.youtube.com/watch?v=N813o-Xb6S8
Addendum: J'ai posté la version NIPS car elle fonctionnait bien (bien que le comportement du résultat soit presque le même) $ \ downarrow $ https://www.youtube.com/watch?v=ez_JEHMUpng
C'est une impression avec Chainer [^ 10], mais d'après l'expérience de l'implémentation de DQN une fois dans Theano et de la publication de la vidéo sur youtube, où se produit l'erreur dans Chainer par rapport à celle basée sur Theano? C'est vraiment facile à comprendre. Il y a beaucoup de liberté, donc je le recommande vivement si vous souhaitez utiliser une combinaison de composants standard d'un réseau de neurones (comme l'utilisation d'un réseau de neurones convolutif ou l'empilement de couches).
D'un autre côté, Theano est toujours attrayant en ce sens que lorsque vous voulez essayer un nouvel algorithme, vous pouvez accélérer le GPU avec presque la même opération indépendamment de cela. Par exemple, "Je vais en développer une nouvelle, meilleure comme la cellule LSTM! Je vais l'optimiser!" Parfois, j'ai l'impression que j'ai besoin d'utiliser une cellule générale comme Theano. Je vais. Dans ce cas, il semble qu'il sera utilisé dans la plupart des recherches avancées et des situations académiques (et plus particulières). C'était mon impression.
Cette histoire est complètement ridicule.
Je pense que c'est un phénomène rare d'appeler une personne yanky DQN, mais il est assez miraculeux que cet algorithme corresponde de toute façon à Deep Q-Network = DQN. Je le sens.
Lorsque vous déterrez les composants de chaque D-Q-N, D devient Deep learning, Q devient Q learning et N devient Neural Network.
Tout d'abord, on dit que Deep est une tendance ces jours-ci (on pense que le nom Deep Nantoka a probablement augmenté de manière explosive depuis l'article du Dr Hinton "Un algorithme d'apprentissage rapide pour les réseaux de croyances profondes"). Q Quel est le Q de l'apprentissage? Selon un commentaire du Dr Barto, l'un des créateurs de l'apprentissage par renforcement, ce "Q" est le Q de "Qualité" (je pense) [^ 11].
Ensuite, le nom Q-Network n'est pas très courant dans l'apprentissage intensif. Même dans l'article, je pense que la phrase «J'ai utilisé un réseau neuronal comme dispositif d'approximation de fonction dans l'apprentissage Q» est généralement utilisée. Une expression proche est celle que Lin a mentionnée plus tôt dans son article de 1993 intitulé Q-net, et je pense que c'est probablement à l'origine de ce que l'on a appelé Q-Network cette fois.
[^ 1]: Renforcer l'apprentissage dans Wikipédia
https://en.wikipedia.org/wiki/%E5%BC%B7%E5%8C%96%E5%AD%A6%E7%BF%92
[^ 2]: Une telle situation (bien qu'il y ait en fait quelques hypothèses supplémentaires) est appelée "en supposant que l'environnement peut être décrit par le processus de décision de Markov (MDP)". Lorsque l'état n'est pas transmis directement à l'agent, il est appelé processus de décision de Markov partiellement observable (POMDP), et ces dernières années, l'apprentissage par renforcement dans un tel environnement est appelé apprentissage par renforcement partiellement observable (PORL). Je vais. Le paramètre d'apprentissage du jeu ATARI est naturellement inclus dans PORL car seul l'écran de jeu est saisi par l'agent, mais l'apprentissage est effectué en supposant que l'état est configuré avec l'écran de jeu entre 4 étapes.
[^ 3]: Voir les «processus de décision de Markov» de M. Puterman et les «processus de décision de Markov dans l'intelligence artificielle» de O. Sigaud, O. Buffet pour plus d'informations sur ce point.
[^ 4]: Plus précisément, "dans un environnement qui peut être décrit dans le processus décisionnel de Markov"
[^ 5]: Voir le site suivant pour la forme complète de l'algorithme:
http://webdocs.cs.ualberta.ca/~sutton/book/ebook/node65.html
[^ 6]: Théoriquement, le taux d'apprentissage $ \ alpha $ devrait diminuer progressivement à chaque mise à jour. Cependant, ce n'est pas très réaliste lorsque vous souhaitez exécuter l'algorithme d'apprentissage amélioré pendant une longue période ou lorsque vous souhaitez toujours l'adapter à un environnement dynamique dans une certaine mesure. Pour plus d'informations sur les conditions de convergence, voir "Convergence of Q-learning: a simple proof" de Dr. Melo:
http://users.isr.ist.utl.pt/~mtjspaan/readingGroup/ProofQlearning.pdf
[^ 10]: Chainer a été mis à jour fréquemment depuis sa sortie et de nouvelles fonctionnalités ont été ajoutées, donc ce n'est que l'impression actuelle (juillet 2015).
[^ 11]: La source d'information est Mayutsuba:
http://www.quora.com/How-was-the-term-Q-learning-coined