Introducción al aprendizaje profundo (62) Red neuronal recurrente - Red neuronal recurrente bidireccional

prefacio

El contenido principal proviene del enlace 1 del blog. Enlace 2 del blog. Espero que puedas apoyar mucho al autor.
Este artículo se usa para registros para evitar el olvido.

Redes neuronales recurrentes - Redes neuronales recurrentes bidireccionales

cursos

el futuro es importante

Tengo _____
tengo _____ mucha hambre,
tengo _____ mucha hambre, podría comer medio cerdo.

estoy feliz _ No
tengo mucha hambre, tengo mucha mucha hambre, podría comer medio cerdo.

  • Dependiendo de contextos pasados ​​y futuros, puede completar palabras muy diferentes
  • Hasta ahora RNN solo mira al pasado
  • Mientras llenamos los espacios en blanco, también podemos ver el futuro.

RNN bidireccional

inserte la descripción de la imagen aquí

  • - una capa oculta RNN directa
  • Una capa oculta RNN hacia atrás
  • Combine los dos estados ocultos para obtener la salida
    inserte la descripción de la imagen aquí

razonamiento

inserte la descripción de la imagen aquí

Resumir

  • Las redes neuronales recurrentes bidireccionales utilizan información temporal orientativa a través de capas ocultas actualizadas inversamente
  • Por lo general, se usa para extraer características y completar los espacios en blanco de la secuencia, no para predecir el futuro.

Libro de texto

En el aprendizaje secuencial, hemos asumido históricamente que el objetivo es: Modelar el siguiente resultado dada una observación (por ejemplo, en el contexto de una serie temporal o en el contexto de un modelo de lenguaje). Si bien este es un escenario típico, no es único. ¿Qué más podría pasar? Consideramos las siguientes tres tareas de llenar espacios en blanco en secuencias de texto.

I___.
Tengo hambre.
Tengo ___ hambre, podría comer medio cerdo.

Dependiendo de la cantidad de información disponible, podríamos llenar los espacios en blanco con diferentes palabras, como "feliz", "no" y "muy". Claramente, el "abajo" de cada frase transmite información importante, si la hay, sobre qué palabra se elige para llenar el espacio en blanco, por lo que los modelos de secuencia que no lo aprovechen tendrán un desempeño deficiente en las tareas relacionadas. Por ejemplo, para hacerlo bien en el reconocimiento de entidades nombradas (por ejemplo, identificar si "Verde" se refiere a "Sr. Verde" o verde), las diferentes longitudes de los rangos de contexto son igualmente importantes. Para obtener algo de inspiración para resolver el problema, primero desviémonos a los modelos gráficos probabilísticos.

1 Programación Dinámica en Modelo Oculto de Markov

Esta sección se utiliza para ilustrar el problema de programación dinámica. Los detalles técnicos específicos no son importantes para comprender el modelo de aprendizaje profundo , pero nos ayuda a pensar por qué usamos el aprendizaje profundo y por qué elegimos una arquitectura específica.

Si queremos utilizar un modelo gráfico probabilístico para resolver este problema, podemos diseñar un modelo de variables ocultas: en cualquier momento paso ttt , asumiendo que hay una variable ocultaht h_tht, probabilidad de paso P ( xt ∣ ht ) P(x_t \mid h_t)pag ( xtht) controla nuestroxt x_tXt. Además, cualquier ht → ht + 1 h_t \to h_{t+1}htht + 1La transición está determinada por alguna probabilidad de transición de estado P ( ht + 1 ∣ ht ) P(h_{t+1} \mid h_{t})pag _ _t + 1ht) se da. Este modelo gráfico probabilístico es uno隐马尔可夫模型(hidden Markov model,HMM), como se muestra en la figura.
inserte la descripción de la imagen aquí
Por lo tanto, paraTTPara una secuencia de T observaciones, tenemos la siguiente distribución de probabilidad conjunta sobre los estados observado y oculto:
P ( x 1 , … , x T , h 1 , … , h T ) = ∏ t = 1 TP ( ht ∣ ht − 1 ) PAGS ( xt ∣ ht ) , donde PAGS ( h 1 ∣ h 0 ) = PAGS ( h 1 ) . P(x_1, \ldots, x_T, h_1, \ldots, h_T) = \prod_{t=1}^ TP(h_t \mid h_{t-1}) P(x_t \mid h_t), \text{ donde } P(h_1 \mid h_0) = P(h_1).pag ( x1,,XT,h1,,hT)=t = 1Tpag _ _tht 1) P ( xtht) , donde  P ( h1h0)=pag _ _1) .

Ahora, supongamos que observamos todos los xi x_iXyo, excepto xj x_jXj, y nuestro objetivo es calcular P ( xj ∣ x − j ) P(x_j \mid x_{-j})pag ( xjX j), 其中x − j = ( x 1 , … , xj − 1 , xj + 1 , … , x T ) x_{-j} = (x_1, \ldots, x_{j-1}, x_{j+1 }, \ldots, x_{T})X j=( X1,,Xj 1,Xj + 1,,XT) . Dado queP ( xj ∣ x − j ) P(x_j \mid x_{-j})pag ( xjX j) no tiene variables ocultas, por lo que consideramosh 1 , … , h T h_1, \ldots, h_Th1,,hTSe suman todas las combinaciones posibles formadas por la selección. si hay alguna hola h_ihyoaceptable _k valores diferentes (número finito de estados), lo que significa que necesitamos saberk T k^TkLa suma de T elementos es obviamente una tarea difícil. Afortunadamente, hay una buena solución:动态规划(dynamic programming)。

Para ver cómo funciona la programación dinámica, consideramos las variables ocultas h 1 , … , h T h_1, \ldots, h_Th1,,hTSuma a su vez. De acuerdo con la fórmula anterior, se obtendrá:
PAGS ( X 1 , ... , X T ) = ∑ h 1 , ... , h TP ( X 1 , ... , X T , h 1 , ... , h T ) = ∑ h 1 , ... , h T ∏ t = 1 TP ( ht ∣ ht - 1 ) PAGS ( xt ∣ ht ) = ∑ h 2 , ... , h T [ ∑ h 1 PAGS ( h 1 ) PAGS ( X 1 ∣ h 1 ) PAGS ( h 2 ∣ h 1 ) ] ⏟ π 2 ( h 2 ) = def PAGS ( X 2 ∣ h 2 ) ∏ t = 3 TP ( ht ∣ ht − 1 ) PAGS ( xt ∣ ht ) = ∑ h 3 , ... , h T [ ∑ h 2 π 2 ( h 2 ) PAGS ( X 2 ∣ h 2 ) PAGS ( h 3 ∣ h 2 ) ] ⏟ π 3 ( h 3 ) = def PAGS ( X 3 ∣ h 3 ) ∏ t = 4 TP ( ht ∣ ht − 1 ) PAGS ( xt ∣ ht ) = … = ∑ h T π T ( h T ) PAGS ( X T ∣ h T ) . \begin{dividir}\begin{alineado} &P(x_1, \ldots, x_T) \\ =& \sum_{h_1, \ldots, h_T} P(x_1, \ldots, x_T, h_1, \ldots, h_T) \ \ =& \sum_{h_1, \ldots, h_T} \prod_{t=1}^TP(h_t \mid h_{t-1}) P(x_t \mid h_t) \\ =& \sum_{h_2, \ puntos, h_T} \underbrace{\left[\sum_{h_1} P(h_1) P(x_1 \mid h_1) P(h_2 \mid h_1)\right]}_{\pi_2(h_2) \stackrel{\mathrm{def} }{=}} P(x_2 \mid h_2) \prod_{t=3}^TP(h_t \mid h_{t-1}) P(x_t \mid h_t) \\ =& \sum_{h_3, \ldots , h_T} \underbrace{\left[\sum_{h_2} \pi_2(h_2) P(x_2 \mid h_2) P(h_3 \mid h_2)\right]}_{\pi_3(h_3)\stackrel{\mathrm{ def}}{=}} P(x_3 \mid h_3) \prod_{t=4}^TP(h_t \mid h_{t-1}) P(x_t \mid h_t)\\ =& \dots \\ = & \sum_{h_T} \pi_T(h_T) P(x_T \mid h_T). \end{alineado}\end{dividido}======pag ( x1,,XT)h1, , hTpag ( x1,,XT,h1,,hT)h1, , hTt = 1Tpag _ _tht 1) P ( xtht)h2, , hTPi2( h2)=definitivamente [h1pag _ _1) P ( x1h1) P ( h2h1) ]pag ( x2h2)t = 3Tpag _ _tht 1) P ( xtht)h3, , hTPi3( h3)=definitivamente [h2Pi2( h2) P ( x2h2) P ( h3h2) ]pag ( x3h3)t = 4Tpag _ _tht 1) P ( xtht)hTPiT( hT) P ( xThT) .

Por lo general, escribiremos 前向递归(forward recursion):
π t + 1 ( ht + 1 ) = ∑ ht π t ( ht ) P ( xt ∣ ht ) P ( ht + 1 ∣ ht ) . \pi_{t+1}(h_{t + 1}) = \sum_{h_t} \pi_t(h_t) P(x_t \mid h_t) P(h_{t+1} \mid h_t).Pit + 1( ht + 1)=htPit( ht) P ( xtht) P ( ht + 1ht)
La recursividad se inicializa comoπ 1 ( h 1 ) = P ( h 1 ) \pi_1(h_1) = P(h_1 )Pi1( h1)=pag _ _1) . Simplificación de símbolos, también se puede escribir comoπ t + 1 = f ( π t , xt ) \pi_{t+1} = f(\pi_t, x_t)Pit + 1=f ( pagt,Xt) , dondefff es alguna función aprendible. Esto se parece a la ecuación de actualización en el modelo de variable latente que discutimos en Redes neuronales recurrentes.

Al igual que con la recursión hacia adelante, también podemos usar la recursión hacia atrás para sumar el mismo conjunto de variables ocultas. Esto obtendrá:
PAGS ( X 1 , ... , X T ) = ∑ h 1 , ... , h TP ( X 1 , ... , X T , h 1 , ... , h T ) = ∑ h 1 , ... , h T ∏ t = 1 T - 1 PAGS ( ht ∣ ht - 1 ) PAGS ( xt ∣ ht ) ⋅ PAGS ( h T ∣ h T - 1 ) PAGS ( X T ∣ h T ) = ∑ h 1 , ... , h T - 1 ∏ t = 1 T - 1 PAGS ( ht ∣ ht - 1 ) PAGS ( xt ∣ ht ) ⋅ [ ∑ h TP ( h T ∣ h T - 1 ) PAGS ( x T ∣ h T ) ] ⏟ ρ T - 1 ( h T - 1 ) = def = ∑ h 1 , ... , h T - 2 ∏ t = 1 T - 2 PAGS ( ht ∣ ht - 1 ) PAGS ( xt ∣ ht ) ⋅ [ ∑ h T - 1 PAGS ( h T - 1 ∣ h T - 2 ) PAGS ( X T - 1 ∣ h T - 1 ) ρ T - 1 ( h T - 1 ) ] ⏟ ρ T - 2 ( h T - 2 ) = def = ... = ∑ h 1 PAGS ( h 1 ) PAGS ( X 1 ∣ h 1 ) ρ 1 ( h 1 ) . \begin{dividir}\begin{alineado} & P(x_1, \ldots, x_T) \\ =& \sum_{h_1, \ldots, h_T} P(x_1, \ldots, x_T, h_1, \ldots, h_T) \\ =& \sum_{h_1, \ldots, h_T} \prod_{t=1}^{T-1} P(h_t \mid h_{t-1}) P(x_t \mid h_t) \cdot P( h_T \mid h_{T-1}) P(x_T \mid h_T) \\ =& \sum_{h_1, \ldots, h_{T-1}} \prod_{t=1}^{T-1} P(h_t \mid h_{t-1}) P(x_t \mid h_t) \cdot \underbrace{\left[\sum_{ h_T} P(h_T \mid h_{T-1}) P(x_T \mid h_T)\right]}_{\rho_{T-1}(h_{T-1})\stackrel{\mathrm{def} }{=}} \\ =& \sum_{h_1, \ldots, h_{T-2}} \prod_{t=1}^{T-2} P(h_t \mid h_{t-1}) P (x_t \mid h_t) \cdot \underbrace{\left[\sum_{h_{T-1}} P(h_{T-1} \mid h_{T-2}) P(x_{T-1} \ medio h_{T-1}) \rho_{T-1}(h_{T-1}) \right]}_{\rho_{T-2}(h_{T-2})\stackrel{\mathrm{ def}}{=}} \\ =& \ldots \\ =& \sum_{h_1} P(h_1) P(x_1 \mid h_1)\rho_{1}(h_{1}). \end{alineado}\end{dividido} h_{T-2}} \prod_{t=1}^{T-2} P(h_t \mid h_{t-1}) P(x_t \mid h_t) \cdot \underbrace{\left[\sum_{ h_{T-1}} P(h_{T-1} \mid h_{T-2}) P(x_{T-1} \mid h_{T-1}) \rho_{T-1}(h_ {T-1}) \right]}_{\rho_{T-2}(h_{T-2})\stackrel{\mathrm{def}}{=}} \\ =& \ldots \\ =& \sum_{h_1} P(h_1) P(x_1 \mid h_1)\rho_{1}(h_{1}). \end{alineado}\end{dividido} h_{T-2}} \prod_{t=1}^{T-2} P(h_t \mid h_{t-1}) P(x_t \mid h_t) \cdot \underbrace{\left[\sum_{ h_{T-1}} P(h_{T-1} \mid h_{T-2}) P(x_{T-1} \mid h_{T-1}) \rho_{T-1}(h_ {T-1}) \right]}_{\rho_{T-2}(h_{T-2})\stackrel{\mathrm{def}}{=}} \\ =& \ldots \\ =& \sum_{h_1} P(h_1) P(x_1 \mid h_1)\rho_{1}(h_{1}). \end{alineado}\end{dividido}======pag ( x1,,XT)h1, , hTpag ( x1,,XT,h1,,hT)h1, , hTt = 1T 1pag _ _tht 1) P ( xtht)pag _ _ThT 1) P ( xThT)h1, , hT 1t = 1T 1pag _ _tht 1) P ( xtht)rT 1( hT 1)=definitivamente [hTpag _ _ThT 1) P ( xThT) ]h1, , hT 2t = 1T 2pag _ _tht 1) P ( xtht)rT 2( hT 2)=definitivamente hT 1pag _ _T 1hT 2) P ( xT 1hT 1) rT 1( hT 1) h1pag _ _1) P ( x1h1) r1( h1) .

Por lo tanto, podemos 后向递归(backward recursion)escribir:
ρ t − 1 ( ht − 1 ) = ∑ ht P ( ht ∣ ht − 1 ) P ( xt ∣ ht ) ρ t ( ht ) , \rho_{t-1}(h_{ t- 1})= \sum_{h_{t}} P(h_{t} \mid h_{t-1}) P(x_{t} \mid h_{t}) \rho_{t}(h_{ t} ),rt 1( ht 1)=htpag _ _tht 1) P ( xtht) rt( ht) ,
inicializarρ T ( h T ) = 1 \rho_T(h_T) = 1rT( hT)=1 . Tanto la recursión hacia adelante como hacia atrás nospermitenT variables ocultas enO ( k T ) \mathcal{O}(kT)O ( k T ) (lineal en lugar de exponencial) tiempo para( h 1 , … , h T ) (h_1, \ldots, h_T)( h1,,hT) para sumar todos los valores. Este es uno de los grandes beneficios de usar modelos gráficos para el razonamiento probabilístico. También es消息传递算法un ejemplo muy específico de un genérico. Combinando la recursividad hacia adelante y hacia atrás, podemos calcular
P ( xj ∣ x − j ) ∝ ∑ hj π j ( hj ) ρ j ( hj ) P ( xj ∣ hj ) . P(x_j \mid x_{-j}) \propto \sum_{h_j} \pi_j(h_j) \rho_j(h_j) P(x_j \mid h_j).pag ( xjX j)hjPij( hj) rj( hj) P ( xjhj)
Debido a la simplificación de símbolos, la recursión hacia atrás también se puede escribir como ρ t − 1 = g ( ρ t , xt ) \rho_{t-1} = g(\rho_t, x_t)rt 1=g ( pagt,Xt) , dondeggg es una función que se puede aprender. Una vez más, esto se parece mucho a una ecuación de actualización, pero en lugar de avanzar como vemos en las redes neuronales recurrentes, funciona hacia atrás. De hecho, saber cuándo estarán disponibles los datos futuros es beneficioso para los modelos ocultos de Markov.

2 modelo bidireccional

Si queremos tener un mecanismo en la red neuronal recurrente que pueda proporcionar capacidades prospectivas similares a las de los modelos ocultos de Markov, debemos modificar el diseño de la red neuronal recurrente. Afortunadamente, esto es conceptualmente fácil, simplemente agregando un RNN que "se ejecuta hacia atrás desde el último token" en lugar de simplemente "comenzar desde el primer token" en el modo de avance que ejecuta la red neuronal recurrente. 双向循环神经网络(bidirectional RNNs)Se agregan capas ocultas que devuelven información para permitir una mayor flexibilidad en el manejo de dicha información. El siguiente diagrama muestra la arquitectura de una red neuronal recurrente bidireccional con una sola capa oculta.
inserte la descripción de la imagen aquí
De hecho, esto no es muy diferente de la recursión hacia adelante y hacia atrás de la programación dinámica en modelos ocultos de Markov. La principal diferencia es que las ecuaciones en HMM tienen un significado estadístico específico. No existe una explicación tan fácil de entender para las redes neuronales recurrentes bidireccionales, solo podemos tratarlas como funciones aprendibles de propósito general. Este cambio personifica los principios de diseño de las redes profundas modernas: primero use los tipos funcionalmente dependientes de modelos estadísticos clásicos y luego parametrícelos en una forma general.

2.1 Definición

La red neuronal recurrente bidireccional fue propuesta por (Schuster y Paliwal, 1997). Veamos los detalles de tal red.

Para cualquier momento paso ttt , dado un pequeño lote de datos de entradaX t ∈ R n × d \mathbf{X}_t \in \mathbb{R}^{n \times d}XtRn × d (número de muestrasnnn , el número de entradas dden cada ejemplod ), y sea la función de activación de la capa ocultaϕ \phiϕ _ En la arquitectura bidireccional, establecemos los estados ocultos directo e inverso del paso de tiempo comoH → t ∈ R n × h \overrightarrow{\mathbf{H}}_t \in \mathbb{R}^{n \times h}H tRn × hH ← t ∈ R n × h \overleftarrow{\mathbf{H}}_t \in \mathbb{R}^{n \times h}H tRn × h , dondehhh es el número de unidades ocultas. Los estados ocultos hacia adelante y hacia atrás se actualizan de la siguiente manera:
H → t = ϕ ( X t W xh ( f ) + H → t − 1 W hh ( f ) + bh ( f ) ) , H ← t = ϕ ( X t W xh ( segundo ) + H ← t + 1 W hh ( segundo ) + bh ( segundo ) ) , \begin{split}\begin{aligned} \overrightarrow{\mathbf{H}}_t &= \phi(\mathbf {X}_t \mathbf{W}_{xh}^{(f)} + \overrightarrow{\mathbf{H}}_{t-1} \mathbf{W}_{hh}^{(f)} + \mathbf{b}_h^{(f)}),\\ \overleftarrow{\mathbf{H}}_t &= \phi(\mathbf{X}_t \mathbf{W}_{xh}^{( b)} + \overleftarrow{\mathbf{H}}_{t+1} \mathbf{W}_{hh}^{(b)} + \mathbf{b}_h^{(b)}), \ mathbf{b}_h^{(b)}), \ end{alineado}\end{dividido}H tH t=ϕ ( XtWxh _( f )+H t 1WS.S( f )+bh( f )) ,=ϕ ( XtWxh _( b )+H t + 1WS.S( b )+bh( b )) ,
其中,权重W xh ( f ) ∈ R re × h , W hh ( f ) ∈ R h × h , W xh ( b ) ∈ R re × h , W hh ( b ) ∈ R h × h \mathbf{W }_{xh}^{(f)} \in \mathbb{R}^{d \times h}, \mathbf{W}_{hh}^{(f)} \in \mathbb{R}^{ h \times h}, \mathbf{W}_{xh}^{(b)} \in \mathbb{R}^{d \times h}, \mathbf{W}_{hh}^{(b) } \in \mathbb{R}^{h \veces h}Wxh _( f )Rprofundidad × altura ,WS.S( f )Ralto × alto ,Wxh _( b )Rprofundidad × altura ,WS.S( b )Rh × h和偏置bh ( f ) ∈ R 1 × h , bh ( b ) ∈ R 1 × h \mathbf{b}_h^{(f)} \in \mathbb{R}^{1 \times h }, \mathbf{b}_h^{(b)} \in \mathbb{R}^{1 \times h}bh( f )R1 × h ,bh( b )R1 × h son todos los parámetros del modelo.

A continuación, el estado oculto directo H → t \overrightarrow{\mathbf{H}}_tH ty el estado oculto inverso H ← t \overleftarrow{\mathbf{H}}_tH tConéctelos para obtener el estado oculto H t ∈ R n × 2 h \mathbf{H}_t \in \mathbb{R}^{n \times 2h} que debe enviarse a la capa de salidaHtRn × 2h ._ _ En una red neuronal recurrente bidireccional profunda con múltiples capas ocultas, esta información se pasa como entrada a la siguiente capa bidireccional. Finalmente, la salida calculada por la capa de salida esO t ∈ R n × q \mathbf{O}_t \in \mathbb{R}^{n \times q}OtRn × qqqq es el número de unidades de salida):
O t = H t W hq + bq . \mathbf{O}_t = \mathbf{H}_t \mathbf{W}_{hq} + \mathbf{b}_q.Ot=HtWh q+bq.Aquí
, la matriz de pesosW hq ∈ R 2 h × q \mathbf{W}_{hq} \in \mathbb{R}^{2h \times q}Wh qR2 h × q y sesgobq ∈ R 1 × q \mathbf{b}_q \in \mathbb{R}^{1 \times q}bqR1 × q es el parámetro del modelo de la capa de salida. De hecho, las dos direcciones pueden tener diferente número de unidades ocultas.

2.2 Coste computacional del modelo y su aplicación

Una propiedad clave de las redes neuronales recurrentes bidireccionales es que utilizan información de ambos extremos de la secuencia para estimar la salida. Es decir, usamos información de observaciones pasadas y futuras para predecir las observaciones actuales. Pero en el caso de predecir el siguiente token, ese modelo no es lo que necesitamos. Porque al predecir el próximo token, no podemos saber cuál será el próximo token después de todo, por lo que no obtendremos una buena precisión. Específicamente, durante el entrenamiento, podemos usar datos pasados ​​y futuros para estimar la palabra vacante presente; mientras que durante las pruebas, solo tenemos datos pasados, por lo que la precisión será pobre. El siguiente experimento ilustrará este punto.

Otro problema serio es que las redes neuronales recurrentes bidireccionales son computacionalmente muy lentas. La razón principal es que la propagación hacia adelante de la red requiere recurrencia hacia adelante y hacia atrás en la capa bidireccional, y la propagación hacia atrás de la red también depende del resultado de la propagación hacia adelante. Por lo tanto, el solucionador de gradientes tendrá una cadena muy larga.

El uso de capas bidireccionales es muy raro en la práctica y solo se usa en algunos casos. Por ejemplo, completar las palabras que faltan, la anotación de lemas (p. ej., para el reconocimiento de entidades nombradas) y codificar secuencias como un paso en una canalización de procesamiento de secuencias (p. ej., para la traducción automática).

3 Aplicación incorrecta de la red neuronal recurrente bidireccional

Dado que las redes neuronales recurrentes bidireccionales utilizan datos pasados ​​y futuros, no podemos aplicar ciegamente este modelo de lenguaje a ninguna tarea de predicción. Aunque los niveles de perplejidad producidos por el modelo son razonables, la capacidad del modelo para predecir tokens futuros puede tener fallas graves. Usamos el código de muestra a continuación como advertencia en caso de que se usen en el contexto incorrecto.

import torch
from torch import nn
from d2l import torch as d2l

# 加载数据
batch_size, num_steps, device = 32, 35, d2l.try_gpu()
train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)
# 通过设置“bidirective=True”来定义双向LSTM模型
vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
num_inputs = vocab_size
lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers, bidirectional=True)
model = d2l.RNNModel(lstm_layer, len(vocab))
model = model.to(device)
# 训练模型
num_epochs, lr = 500, 1
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)

producción:

perplexity 1.1, 109857.9 tokens/sec on cuda:0
time travellerererererererererererererererererererererererererer
travellerererererererererererererererererererererererererer

4 Resumen

  • En la red neuronal recurrente bidireccional, el estado oculto de cada paso de tiempo está determinado por los datos antes y después del paso de tiempo actual al mismo tiempo.

  • Las redes neuronales recurrentes bidireccionales tienen similitudes con el algoritmo "hacia adelante-hacia atrás" en modelos gráficos probabilísticos.

  • Las redes neuronales recurrentes bidireccionales se utilizan principalmente para la codificación de secuencias y la estimación de observaciones en un contexto bidireccional.

  • Las redes neuronales recurrentes bidireccionales son muy costosas de entrenar debido a las cadenas de gradientes más largas.

Supongo que te gusta

Origin blog.csdn.net/qq_52358603/article/details/128376751
Recomendado
Clasificación