Olvídese de la capa en una red neuronal recurrente (RNN) -


13

Estoy tratando de averiguar las dimensiones de cada variable en un RNN en la capa de olvido, sin embargo, no estoy seguro de si estoy en el camino correcto. La siguiente imagen y ecuación es de la publicación del blog de Colah "Comprender las redes LSTM" :

ingrese la descripción de la imagen aquí

dónde:

  • es entrada de tamaño m * 1 vectorxtm1
  • se oculta estado de tamaño n * 1 vectorht1n1
  • es una concatenación (por ejemplo, si x t = [ 1 , 2 , 3 ] , h t - 1 = [ 4 , 5 , 6 ] , entonces [ x t , h t - 1] ] = [ 1 , 2 , 3 , 4 , 5 , 6 ] )[xt,ht1]xt=[1,2,3],ht1=[4,5,6][xt,ht1]=[1,2,3,4,5,6]
  • es pesos de tamaño k * ( m + n ) de la matriz, donde k es el número de estados celulares (si m = 3 , y n = 3 en el ejemplo anterior, y si tenemos 3 estados celulares, entonces w f = 3 3 matriz)wfk(m+n)km=3n=3wf=33
  • es el sesgo de tamaño k * 1 vector, donde k es el número de estados celulares (ya que k = 3 como el ejemplo anterior, entonces b f es un 3 * 1 vector).bfk1kk=3bf31

Si establecemos como: [ 1 2 3 4 5 6 5 6 7 8 9 10 3 4 5 6 7 8 ]wf

[1234565678910345678]

Y ser: [ 1 , 2 , 3 ]bf[1,2,3]

Entonces Wf.[ht1,xt]=

[1234565678910345678].[123456]=[91175133]

Entonces podemos agregar el sesgo, Wf.[ht1,xt]+bf=

[91175133]+[123]=[92177136]

11+exx=[92177136]

[111]

Ct1k=3

¿Es correcta la suposición anterior?

¿Esto también significa que el número de estado de la celda y el estado oculto es el mismo?

Respuestas:


14

Gran pregunta!

tl; dr: El estado de la celda y el estado oculto son dos cosas diferentes, pero el estado oculto depende del estado de la celda y, de hecho, tienen el mismo tamaño.

Explicación más larga

La diferencia entre los dos se puede ver en el siguiente diagrama (parte del mismo blog):

El estado celular es la línea en negrita que viaja de oeste a este a través de la parte superior.

El estado de la celda es la línea en negrita que viaja de oeste a este a través de la parte superior. Todo el bloque verde se llama 'celda'.

El estado oculto del paso de tiempo anterior se trata como parte de la entrada en el paso de tiempo actual.

Sin embargo, es un poco más difícil ver la dependencia entre los dos sin hacer un recorrido completo. Lo haré aquí, para proporcionar otra perspectiva, pero fuertemente influenciada por el blog. Mi notación será la misma y utilizaré imágenes del blog en mi explicación.

Me gusta pensar en el orden de las operaciones un poco diferente de la forma en que se presentaron en el blog. Personalmente, como comenzar desde la puerta de entrada. Presentaré ese punto de vista a continuación, pero tenga en cuenta que el blog puede ser la mejor manera de configurar un LSTM computacionalmente y esta explicación es puramente conceptual.

Esto es lo que está sucediendo:

La puerta de entrada

ingrese la descripción de la imagen aquí

txtht1

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

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

WiWi[xt,ht1]+biWibi

Supongamos que estamos pasando de una entrada de seis dimensiones (la longitud del vector de entrada concatenado) a una decisión tridimensional sobre qué estados actualizar. Eso significa que necesitamos una matriz de peso de 3x6 y un vector de sesgo de 3x1. Vamos a darles algunos valores:

Wi=[111111222222333333]

bi=[111]

El cálculo sería:

[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 inglés, eso significa que vamos a actualizar todos nuestros estados.

La puerta de entrada tiene una segunda parte:

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

El objetivo de esta parte es calcular cómo actualizaríamos el estado, si tuviéramos que hacerlo. Es la contribución de la nueva entrada en este paso de tiempo al estado de la celda. El cálculo sigue el mismo procedimiento ilustrado anteriormente, pero con una unidad de tanh en lugar de una unidad sigmoidea.

Ct~it

itCt~

Luego viene la puerta de olvidar, que fue el quid de tu pregunta.

La puerta de olvidar

ingrese la descripción de la imagen aquí

El propósito de la puerta de olvido es eliminar la información previamente aprendida que ya no es relevante. El ejemplo dado en el blog está basado en el idioma, pero también podemos pensar en una ventana deslizante. Si está modelando una serie temporal que está naturalmente representada por números enteros, como los recuentos de individuos infecciosos en un área durante un brote de enfermedad, entonces tal vez una vez que la enfermedad haya desaparecido en un área, ya no quiera molestarse en considerar esa área cuando pensando en cómo viajará la enfermedad a continuación.

Al igual que la capa de entrada, la capa de olvido toma el estado oculto del paso de tiempo anterior y la nueva entrada del paso de tiempo actual y los concatena. El punto es decidir estocásticamente qué olvidar y qué recordar. En el cálculo anterior, mostré una salida de capa sigmoidea de todos los 1, pero en realidad estaba más cerca de 0.999 y redondeé hacia arriba.

El cálculo se parece mucho a lo que hicimos en la capa de entrada:

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

Esto nos dará un vector de tamaño 3 con valores entre 0 y 1. Supongamos que nos dio:

[0.5,0.8,0.9]

Luego decidimos estocásticamente, en base a estos valores, cuál de esas tres partes de la información olvidamos. Una forma de hacerlo es generar un número a partir de una distribución uniforme (0, 1) y si ese número es menor que la probabilidad de que la unidad se 'encienda' (0.5, 0.8 y 0.9 para las unidades 1, 2 y 3 respectivamente), luego activamos esa unidad. En este caso, eso significaría que olvidamos esa información.

Nota rápida: la capa de entrada y la capa de olvidar son independientes. Si fuera una persona de apuestas, apostaría que es un buen lugar para la paralelización.

Actualizar el estado de la celda

ingrese la descripción de la imagen aquí

Ahora tenemos todo lo que necesitamos para actualizar el estado de la celda. Tomamos una combinación de la información de la entrada y las puertas de olvido:

Ct=ftCt1+itCt~

Aparte: producto Hadamard

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

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

Fin a un lado.

De esta manera, combinamos lo que queremos agregar al estado de la celda (entrada) con lo que queremos quitar del estado de la celda (olvidar). El resultado es el nuevo estado de la celda.

La puerta de salida

ingrese la descripción de la imagen aquí

Esto nos dará el nuevo estado oculto. Esencialmente, el objetivo de la puerta de salida es decidir qué información queremos que la siguiente parte del modelo tenga en cuenta al actualizar el estado de la celda posterior. El ejemplo en el blog es nuevamente lenguaje: si el sustantivo es plural, la conjugación verbal en el siguiente paso cambiará. En un modelo de enfermedad, si la susceptibilidad de los individuos en un área particular es diferente a la de otra área, entonces la probabilidad de contraer una infección puede cambiar.

La capa de salida toma la misma entrada nuevamente, pero luego considera el estado actualizado de la celda:

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

Nuevamente, esto nos da un vector de probabilidades. Luego calculamos:

ht=ottanh(Ct)

Por lo tanto, el estado actual de la celda y la puerta de salida deben acordar qué salida.

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

htyt=σ(Wht)

ht

Hay muchas variantes en LSTM, ¡pero eso cubre lo esencial!


¡Gracias por tu respuesta! Tengo una pregunta extra es que no te importa. Una red neuronal profunda puede ser profunda porque la derivada de ReLU es 1 (si la salida es mayor que 0). ¿Es este el mismo caso para esta celda también? No estoy seguro de cómo Tanh y Sigmoid pueden tener una derivada constante de 1.
user1157751

¡El gusto es mio! Una red neuronal se considera 'profunda' cuando tiene más de una capa oculta. Las derivadas de las funciones de activación (tanh, sigmoide, ReLU) afectan la forma en que se entrena la red. Como usted dice, dado que ReLU tiene una pendiente constante si su entrada es mayor que 0, su derivada es 1 si estamos en esa región de la función. Las unidades Tanh y sigmoides tienen una derivada cercana a 1 si estamos en el medio de su región de activación, pero su derivada no será constante. Tal vez debería hacer una publicación de blog por separado sobre los derivados ...
StatsSorceress

¿Puede mostrar un ejemplo de su derivada cerca de 1 en la región de activación? ¿He visto muchos recursos que hablan de la derivada pero no se hacen cálculos?
user1157751

Buena idea, pero me llevará algún tiempo escribir una publicación adecuada sobre eso. Mientras tanto, piense en la forma de la función tanh: es una 'S' alargada. En el medio es donde la derivada es la más alta. Cuando la S es plana (las colas de la S), la derivada es 0. Vi una fuente en la que dichos sigmoides tienen una derivada máxima de 0.25, pero no tengo un límite equivalente para tanh.
StatsSorceress

La parte que no entiendo es diferente a ReLU con derivada constante 1 donde x> 0, pero sigmoide y tanh tenían un valor variable para ambas derivadas. ¿Cómo puede ser esto "constante"?
user1157751
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.