Oubliez la couche dans un réseau neuronal récurrent (RNN) -

13

J'essaie de comprendre les dimensions de chaque variable dans un RNN dans la couche oublier, cependant, je ne sais pas si je suis sur la bonne voie. L'image et l'équation suivantes proviennent de proviennent du blog Colah "Comprendre les réseaux LSTM" :

entrez la description de l'image ici

où:

  • est une entrée de taille m 1xtm1 vecteur
  • est un état caché de taille n 1ht1n1 vecteur
  • est une concaténation (par exemple, si x t = [ 1 , 2 , 3 ] , h t - 1 = [ 4 , 5 , 6 ] , alors)[xt,ht1]xt=[1,2,3],ht1=[4,5,6][xt,ht1]=[1,2,3,4,5,6]
  • wf est une poids de taille , où est le nombre d'états de cellule (si et dans l'exemple ci-dessus, et si nous avons 3 états de cellule, alors matrice)k(m+n)km=3n=3wf=33
  • est un biais devecteur k 1 , où k est le nombre d'états de cellule (puisque k = 3 comme l'exemple ci-dessus, alors b f est un vecteur 3 1 ).bfk1kk=3bf31

Si nous fixons à: [ 1 2 3 4 5 6 5 6 7 8 9 10 3 4 5 6 7 8 ]wf

[1234565678910345678]

Et soit: [ 1 , 2 , 3 ]bf[1,2,3]

Alors Wf.[ht1,xt]=

[1234565678910345678].[123456]=[91175133]

Wf.[ht1,xt]+bf=

[91175133]+[123]=[92177136]

11+exx=[92177136]

[111]

Ct1k=3

L'hypothèse ci-dessus est-elle correcte?

Cela signifie également que le nombre d'état de cellule et d'état caché est le même?

user1157751
la source

Réponses:

14

Grande question!

tl; dr: L'état de cellule et l'état caché sont deux choses différentes, mais l'état caché dépend de l'état de cellule et ils ont en effet la même taille.

Explication plus longue

La différence entre les deux peut être vue sur le schéma ci-dessous (partie du même blog):

L'état de cellule est la ligne en gras se déplaçant d'ouest en est à travers le sommet.

L'état de cellule est la ligne en gras se déplaçant d'ouest en est à travers le sommet. L'ensemble du bloc vert est appelé la «cellule».

L'état masqué du pas de temps précédent est traité comme faisant partie de l'entrée au pas de temps actuel.

Cependant, il est un peu plus difficile de voir la dépendance entre les deux sans effectuer une procédure pas à pas complète. Je vais le faire ici, pour fournir une autre perspective, mais fortement influencée par le blog. Ma notation sera la même et j'utiliserai des images du blog dans mon explication.

J'aime penser à l'ordre des opérations un peu différemment de la façon dont elles ont été présentées dans le blog. Personnellement, comme à partir de la porte d'entrée. Je présenterai ce point de vue ci-dessous, mais veuillez garder à l'esprit que le blog peut très bien être le meilleur moyen de configurer un LSTM par calcul et cette explication est purement conceptuelle.

Voici ce qui se passe:

La porte d'entrée

entrez la description de l'image ici

txtht1

xt=[1,2,3]ht=[4,5,6]

xtht1[1,2,3,4,5,6]

WiWi[xt,ht1]+biWibi

Supposons que nous passions d'une entrée en six dimensions (la longueur du vecteur d'entrée concaténé) à une décision en trois dimensions sur les états à mettre à jour. Cela signifie que nous avons besoin d'une matrice de poids 3x6 et d'un vecteur de biais 3x1. Donnons à ces quelques valeurs:

Wi=[111111222222333333]

bi=[111]

Le calcul serait:

[111111222222333333][123456]+[111]=[224262]

it=σ(Wi[xt,ht1]+bi)

σ(x)=11+exp(x)x

σ([224262])=[11+exp(22),11+exp(42),11+exp(62)]=[1,1,1]

En anglais, cela signifie que nous allons mettre à jour tous nos états.

La porte d'entrée comporte une deuxième partie:

Ct~=tanh(WC[xt,ht1]+bC)

Le but de cette partie est de calculer comment nous pourrions mettre à jour l'état, si nous le faisions. C'est la contribution de la nouvelle entrée à ce pas de temps à l'état de la cellule. Le calcul suit la même procédure illustrée ci-dessus, mais avec une unité tanh au lieu d'une unité sigmoïde.

Ct~it

itCt~

Vient ensuite la porte des oublis, qui était au cœur de votre question.

La porte de l'oubli

entrez la description de l'image ici

Le but de la porte d'oubli est de supprimer les informations apprises précédemment qui ne sont plus pertinentes. L'exemple donné dans le blog est basé sur la langue, mais nous pouvons également penser à une fenêtre coulissante. Si vous modélisez une série chronologique qui est naturellement représentée par des nombres entiers, comme le nombre d'individus infectieux dans une zone lors d'une épidémie, alors peut-être qu'une fois que la maladie s'est éteinte dans une zone, vous ne voulez plus vous soucier de considérer cette zone lorsque penser à la suite de la maladie.

Tout comme la couche d'entrée, la couche oublier prend l'état caché du pas de temps précédent et la nouvelle entrée du pas de temps actuel et les concatène. Il s'agit de décider stochastiquement ce qu'il faut oublier et ce qu'il faut retenir. Dans le calcul précédent, j'ai montré une sortie de couche sigmoïde de tous les 1, mais en réalité, elle était plus proche de 0,999 et j'ai arrondi.

Le calcul ressemble beaucoup à ce que nous avons fait dans la couche d'entrée:

ft=σ(Wf[xt,ht1]+bf)

Cela nous donnera un vecteur de taille 3 avec des valeurs comprises entre 0 et 1. Imaginons qu'il nous donne:

[0.5,0.8,0.9]

Ensuite, nous décidons stochastiquement en fonction de ces valeurs laquelle de ces trois parties d'informations à oublier. Une façon de le faire est de générer un nombre à partir d'une distribution uniforme (0, 1) et si ce nombre est inférieur à la probabilité que l'unité s'allume (0,5, 0,8 et 0,9 pour les unités 1, 2 et 3). respectivement), puis nous allumons cette unité. Dans ce cas, cela signifierait que nous oublions ces informations.

Remarque rapide: le calque d'entrée et le calque oublier sont indépendants. Si j'étais un parieur, je parierais que c'est un bon endroit pour la parallélisation.

Mise à jour de l'état de la cellule

entrez la description de l'image ici

Nous avons maintenant tout ce dont nous avons besoin pour mettre à jour l'état de la cellule. Nous prenons une combinaison des informations de l'entrée et des portes d'oubli:

Ct=ftCt1+itCt~

A part: produit Hadamard

x1=[1,2,3]x2=[3,2,1]

x1x2=[(13),(22),(31)]=[3,4,3]

Fin à part.

De cette façon, nous combinons ce que nous voulons ajouter à l'état de cellule (entrée) avec ce que nous voulons retirer de l'état de cellule (oublier). Le résultat est le nouvel état de cellule.

La porte de sortie

entrez la description de l'image ici

Cela nous donnera le nouvel état caché. Le point essentiel de la porte de sortie est de décider quelles informations nous voulons que la prochaine partie du modèle prenne en compte lors de la mise à jour de l'état de cellule suivant. L'exemple dans le blog est à nouveau, la langue: si le nom est pluriel, la conjugaison des verbes à l'étape suivante changera. Dans un modèle de maladie, si la sensibilité des individus dans une zone particulière est différente de celle d'une autre zone, la probabilité de contracter une infection peut changer.

La couche de sortie reprend la même entrée, mais considère ensuite l'état de cellule mis à jour:

ot=σ(Wo[xt,ht1]+bo)

Encore une fois, cela nous donne un vecteur de probabilités. Ensuite, nous calculons:

ht=ottanh(Ct)

Ainsi, l'état actuel de la cellule et la porte de sortie doivent s'accorder sur ce qu'il faut sortir.

tanh(Ct)[0,1,1]ot[0,0,1][0,0,1]

htyt=σ(Wht)

ht

Il existe de nombreuses variantes sur les LSTM, mais cela couvre l'essentiel!

StatsSorcière
la source
Merci pour votre réponse! J'ai une question supplémentaire: cela ne vous dérange pas. Un réseau neuronal profond peut être profond parce que la dérivée de ReLU est 1 (si la sortie est supérieure à 0). Est-ce le même cas pour cette cellule également? Je ne sais pas comment Tanh et Sigmoid peuvent avoir une dérivée constante de 1?
user1157751
Mon plaisir! Un réseau de neurones est considéré comme «profond» lorsqu'il a plus d'une couche cachée. Les dérivées des fonctions d'activation (tanh, sigmoid, ReLU) affectent la formation du réseau. Comme vous le dites, puisque ReLU a une pente constante si son entrée est supérieure à 0, sa dérivée est 1 si nous sommes dans cette région de la fonction. Les unités Tanh et sigmoïde ont une dérivée proche de 1 si nous sommes au milieu de leur région d'activation, mais leur dérivée ne sera pas constante. Peut-être que je devrais faire un article de blog séparé sur les dérivés ....
StatsSorceress
Pouvez-vous montrer un exemple de leur dérivé proche de 1 dans la région d'activation? J'ai vu beaucoup de ressources qui parlent du dérivé mais aucun calcul n'est fait?
user1157751
Bonne idée, mais ça va me prendre un peu de temps pour écrire un bon article à ce sujet. En attendant, pensez à la forme de la fonction tanh - c'est un «S» allongé. Au milieu, c'est là que la dérivée est la plus élevée. Lorsque le S est plat (la queue du S), la dérivée est 0. J'ai vu une source selon laquelle les sigmoides ont une dérivée maximale de 0,25, mais je n'ai pas de borne équivalente pour tanh.
StatsSorceress
La partie que je ne comprends pas est différente de ReLU avec une dérivée constante 1 où x> 0, mais sigmoïde et tanh avaient une valeur variable pour ses deux dérivés. Comment cela peut-il être "constant"?
user1157751