¿Cómo están almacenando los ‘RNNs’ memoria ‘?

Esta es una gran pregunta. Hace poco hablé con alguien que no entendía lo que estaba sucediendo, y desafortunadamente no tuve tiempo para hacerlo, así que intentaré hacerlo ahora.

La persona con la que hablé dijo algo como esto:

Los LSTM tienen memoria y los RNN simples no. Esto significa que los LSTM pueden recordar algo y los RNN no.

Esto es muy incorrecto o básicamente correcto, según su punto de vista.

Permítanme explicar primero por qué esto está muy mal. Si realmente intenta implementar RNN y LSTM, se dará cuenta de que la forma en que funcionan es desenrollando a tiempo. Esto le permite olvidarse de la “memoria” o “estado”, y simplemente se convierte en una red de alimentación estándar.

(Imagen de: Tutorial de redes neuronales recurrentes, Parte 1 – Introducción a los RNN)

En esta imagen, hay algunas transformaciones U, V, W y para diferentes tipos de redes, estas pueden o no existir. En particular, para los RNN clásicos, ¿cuáles faltan? Si respondiste V, estás en lo correcto. Los RNN calculan la salida y pasan esa misma salida al siguiente paso de tiempo, en otras palabras, tienen [math] s_t = o_t [/ math]. Algunas personas dicen que los RNN clásicos no tienen estado, pero esto obviamente es incorrecto, tienen estado, eso es lo que pasa al siguiente paso del tiempo. Antes de que aparecieran los LSTM, la mayoría de las personas pensaban que el estado y la salida eran lo mismo, y tendían a referirse a este objeto como la salida en el tiempo t, no el estado en el tiempo t. Tenga en cuenta que la parte V está realmente fuera de la red, no es recurrente en absoluto. Eso significa que puede tener un RNN tradicional que puede modelar básicamente las mismas cosas que un LSTM, si pudiera proporcionar los parámetros correctos (más sobre eso más adelante).

Cuando los LSTM entraron en escena, pasaron de un estado que era un elemento a un estado que tenía dos, uno al que podemos referirnos como “celda” y el otro como “salida”.

(De las redes LSTM de comprensión altamente recomendadas)

En esta forma de verlo, obviamente, no agregó ninguna “memoria”, simplemente pasó dos señales al siguiente paso en lugar de una. Pero lo que hizo es sorprendente: si miras la línea superior (celda), puedes ver lo fácil que es tener una situación en la que [matemáticas] c_t = c_ {t-1} [/ matemáticas] (o para cualquier subconjunto de dimensiones dentro de [math] c_t [/ math]). Puedes pensar en eso como recordar algo con el tiempo. Sin embargo, permítanme enfatizar nuevamente, incluso en un RNN tradicional puede configurar las cosas para que el “estado” (o un subconjunto del mismo) se conserve con el tiempo, al igual que con LSTM.

En caso de que creas que tener esa cosa especial de “memoria” es realmente fundamental, déjame mostrarte un GRU:

Aquí hay exactamente un estado, al igual que en un RNN clásico, pero la transformación es muy complicada. ¿Tiene esto “memoria”? Pues sí y no. Su salida es su estado como en un RNN y no hay nada extra, pero a diferencia de un RNN, es fácil preservar el valor, por lo que su salida es similar a la memoria. Los GRU son muy efectivos en muchas situaciones y a menudo pueden modelar fenómenos similares a la memoria tan bien como los LSTM.

Entonces la persona con la que hablé estaba completamente equivocada. Sin embargo, él también tenía razón. ¿Por qué? Los RNN pueden modelar fenómenos similares a la memoria, si proporciona los pesos correctos. Pero el punto de ML es, por supuesto, ¿puede aprender esos pesos? Resulta ser poco práctico. Es bastante complicado modelar la preservación de un valor como un estado en un RNN clásico, en parte debido al problema del gradiente de fuga, y en parte simplemente porque la función de activación tiende a estropear las cosas. Pero a menudo para modelar su problema, desea un comportamiento similar a la memoria. Si usa LSTM o GRU, obtiene este comportamiento de forma natural.

En otras palabras, si desea que su red recurrente se comporte como si pudiera recordar cosas, debe usar LSTM y GRU, y no RNN tradicionales. Pero teóricamente, estos últimos son igual de capaces. Ninguno de estos tiene “memoria” (o todos los tienen), pero los dos primeros son capaces de preservar fácilmente un estado a medida que pasa por un paso, y podemos pensar en eso como recordar, y el último tiene problemas con él.

En pocas palabras, los RNN y sus variaciones controladas, como LSTM y GRU, pueden representar el comportamiento de memorización almacenando información implícitamente en los parámetros de la red. Sin embargo, como Goodfellow et al. (2016) explicaron muy bien que, aunque las redes neuronales son generalmente buenas para almacenar conocimiento implícito que es difícil de expresar formalmente, por ejemplo, cómo caminamos, cómo tomamos una determinada decisión, etc., generalmente tienen dificultades para memorizar hechos y conocimientos explícitos, por ejemplo, “la tierra se mueve round the sun “, etc. Con este fin, se propone que las Redes de Memoria y las Máquinas Neuronales de Turing tengan células de memoria externas. Te sugiero que leas la Sección 10.12 del libro de aprendizaje profundo ( http://www.deeplearningbook.org/ …) y que también leas este bonito artículo en el diario de destilación: Atención y redes neuronales recurrentes aumentadas. Estos deberían resolver todas sus confusiones.