Primero, para dar un poco de contexto, recuerde que LSTM se utilizan como redes neuronales recurrentes (RNN).
Los RNN son redes neuronales que utilizan salidas anteriores como entradas.
- ¿Son los modelos gráficos probabilísticos comúnmente vistos / muy utilizados en la minería de datos práctica / cotidiana?
- Cómo evaluar la agrupación de k-medias en R
- Cómo probar y depurar código, código de optimización numérica y / o modelos de aprendizaje automático
- Dada una lista de codificadores y sus respectivos conjuntos de fragmentos de código, ¿es posible inferir a partir de un fragmento de código nuevo dado el codificador original?
- ¿Cuáles son algunas buenas aplicaciones o scripts que prueban muchas técnicas de aprendizaje automático a la vez para problemas de predicción?
Desenrollar la red neuronal recurrente a lo largo del tiempo (crédito: C. Olah).
Consideramos que los RNN tienen un tipo de dimensión interna, que será la dimensión de los vectores [math] h_i [/ math]. Esta dimensión es constante en el tiempo.
Después de que uno alimente todas las entradas [math] x_i [/ math] en el RNN, se supone que la última salida, [math] h_t [/ math], contiene información sobre toda la oración. Esto es teóricamente cierto, pero muestra debilidad por secuencias largas. Eso es lo que LSTM intenta resolver.
LSTM facilita la repetición de entradas sin mucha alteración. Esto no parece realmente interesante, pero de hecho permite mantener información importante durante mucho tiempo: no olvida la información solo por el tiempo (tenga en cuenta que él puede olvidarlo activamente).
El modo en que LSTM funciona en detalle está fuera del alcance de esta pregunta y no es relevante para la respuesta, pero podría sugerir el muy buen artículo de Cristopher Olah al respecto: Comprender las redes LSTM.
Clasificación con salida RNN
Como dije, RNN generalmente genera vectores de tamaño fijo. A partir de esto, una práctica común es agregar una capa de proyección, así como una capa softmax. La idea es:
- proyecte la salida de [math] rnn \ _size [/ math] (dimensión interna rnn) a [math] num \ _class [/ math] (número de clase de clasificación (también conocido como etiquetas) que tiene.
- Obtener una distribución de probabilidad. Una función softmax proyectará su vector de salida (resultado del punto anterior) en un vector de probabilidad, es decir, cada valor en [0,1] y la suma es igual a 1.
La proyección es una función lineal [matemática] f (x) = W x + b [/ matemática]
(donde x es la variable de entrada, W es una matriz aprendida (llamada ponderaciones ), ab vector aprendido (llamada sesgo )
Entonces obtienes una distribución de probabilidad sobre algunas clases a partir de tu entrada, ¿no suena como una clasificación?
Ejemplo: adivinar la siguiente palabra
Puede construir un modelo RNN que adivine la siguiente palabra dada las anteriores. Por lo tanto, tendrá tantas clases como palabras. Podemos tomar un vocabulario bastante medio como 10,000 palabras. Luego, por razones computacionales, es mejor que tomemos una dimensión RNN mucho más pequeña, como 200. Luego, su modelo procesa de la siguiente manera, para cada paso [math] i [/ math]:
- alimentar una palabra ([matemática] x_i [/ matemática]), y la última salida ([matemática] h_ {i-1} [/ matemática] si> 0) al RNN
- Proyecte esas informaciones: [math] h_i [/ math] es entonces un vector de 200 dimensiones
- proyecte este vector en nuestro espacio de clasificación: es decir, obtenga un vector de 10.000 dimensiones
- aplique softmax en él, la misma dimensión pero valores en [math] [0, 1] [/ math] y sum = 1