paper - ¿Qué es num_units en tensorflow BasicLSTMCell?
rnn tensorflow (5)
Creo que es confuso para los usuarios de TF el término "num_hidden". En realidad, no tiene nada que ver con las células LSTM desenrolladas, y simplemente es la dimensión del tensor, que se transforma desde el tensor de entrada de paso de tiempo y alimentado a la celda LSTM.
En los ejemplos de MNIST LSTM, no entiendo qué significa "capa oculta". ¿Es la capa imaginaria que se forma cuando representa un RNN desenrollado a lo largo del tiempo?
¿Por qué es num_units = 128
en la mayoría de los casos?
Sé que debería leer el blog de Colah en detalle para entender esto, pero, antes de eso, solo quiero obtener un código que funcione con una muestra de datos de series de tiempo que tengo.
num_units
puede interpretarse como la analogía de la capa oculta de la red neuronal feed forward. La cantidad de nodos en la capa oculta de una red neuronal feed forward es equivalente a un número num unidades de unidades LSTM en una celda LSTM en cada paso de la red.
¡Vea la image allí también!
El argumento n_hidden
de BasicLSTMCell
es el número de unidades ocultas del LSTM.
Como dijiste, realmente deberías leer la publicación de blog de Colah para entender LSTM, pero aquí hay un pequeño aviso.
Si tiene una entrada x
de forma [T, 10]
, alimentará el LSTM con la secuencia de valores de t=0
a t=T-1
, cada uno de tamaño 10
.
En cada paso de tiempo, multiplicas la entrada con una matriz de forma [10, n_hidden]
y obtienes un vector n_hidden
.
Su LSTM llega a cada paso de tiempo t
:
- el estado oculto anterior
h_{t-1}
, del tamañon_hidden
(ent=0
, el estado anterior es[0., 0., ...]
) - la entrada, transformada al tamaño
n_hidden
- sumará estas entradas y producirá el siguiente estado oculto
h_t
de tamañon_hidden
De la publicación del blog de Colah:
Si solo quiere que el código funcione, simplemente manténgase con n_hidden = 128
y estará bien.
El número de unidades ocultas es una representación directa de la capacidad de aprendizaje de una red neuronal: refleja la cantidad de parámetros aprendidos . El valor 128
probablemente fue seleccionado de forma arbitraria o empírica. Puede cambiar ese valor experimentalmente y volver a ejecutar el programa para ver cómo afecta la precisión del entrenamiento (puede obtener una precisión de prueba superior al 90% con muchas menos unidades ocultas). Usar más unidades hace que sea más probable memorizar a la perfección el conjunto de entrenamiento completo (aunque tomará más tiempo y correrá el riesgo de un ajuste excesivo).
La clave para entender, que es algo sutil en la publicación de blog famosa Colah (encontrar "cada línea lleva un vector completo" ), es que X
es una matriz de datos (hoy en día a menudo se llama un tensor ) - no está destinado a ser un valor escalar Donde, por ejemplo, se muestra la función tanh
, significa que la función se transmite a través de toda la matriz (un bucle for
implícito) y no simplemente se realiza una vez por cada paso de tiempo.
Como tal, las unidades ocultas representan el almacenamiento tangible dentro de la red, que se manifiesta principalmente en el tamaño de la matriz de ponderaciones . Y debido a que una LSTM realmente tiene un poco de su propio almacenamiento interno separado de los parámetros del modelo aprendido, tiene que saber cuántas unidades hay, lo que finalmente necesita estar de acuerdo con el tamaño de las pesas. En el caso más simple, un RNN no tiene almacenamiento interno, por lo que ni siquiera necesita saber de antemano a cuántas "unidades ocultas" se está aplicando.
- Una buena respuesta a una pregunta similar here .
- Puede ver la fuente de BasicLSTMCell en TensorFlow para ver exactamente cómo se usa.
Nota al margen: esta notación es muy común en las estadísticas y el aprendizaje automático, y en otros campos que procesan grandes lotes de datos con una fórmula común (los gráficos en 3D son otro ejemplo). Toma un poco de tiempo acostumbrarse para las personas que esperan ver sus bucles escritos explícitamente.
Un LSTM guarda dos piezas de información a medida que se propaga a través del tiempo:
Un estado hidden
; que es la memoria que acumula LSTM usando sus compuertas (forget, input, and output)
en el tiempo, y la salida del paso de tiempo anterior.
Las num_units de num_units
son del tamaño del estado oculto de LSTM (que también es el tamaño de la salida si no se utiliza proyección).
Para que el nombre num_units
más intuitivo, puede pensarlo como el número de unidades ocultas en la celda LSTM, o el número de unidades de memoria en la celda.
Mira esta increíble publicación para mayor claridad