Honestamente, no entiendo cuál es el problema con llamarlo BTT (si alguien se siente libre de decirme), pero parece enfatizar algo que debería haber sido obvio, que es la profundidad causada por el componente de tiempo de los puntos de datos. La “evidencia” es que tenemos una pérdida en cada paso de tiempo, por lo que cambiamos los pesos con la regla de cambio habitual como siempre lo hacemos de acuerdo con todas las pérdidas (y su agregado), pero la profundidad de la red es inducida por el componente de tiempo . Para mí, parece una regla de cadena estándar una vez que despliegas el gráfico.
Si tenemos una función de pérdida para un punto de datos que se puede descomponer en el tiempo (como una oración), entonces tenemos:
[matemática] V (f (x), y) = \ sum ^ T_ {t = 1} V_t = \ sum ^ T_ {t = 1} V (f (x_t), y_t) [/ math]
- ¿Son las redes aditivas recurrentes universalmente mejores que las LSTM y GRU?
- ¿Cuáles son las implicaciones de privacidad del reconocimiento facial DeepFace de Facebook?
- ¿Cuál es el básico antes de aprender el aprendizaje automático?
- ¿Qué tipo de problemas puede resolver AI / Machine Learning en los países en desarrollo?
- ¿Qué opinas de Keras?
Entonces, por supuesto, si va a hacer algún tipo de método de gradiente como SGD, entonces necesitamos el gradiente de lo anterior:
[matemáticas] \ frac {\ parcial V (f (x), y)} {\ parcial W} = \ sum ^ T_ {t = 1} \ frac {\ parcial V (f (x_t), y_t)} {\ parcial W} = \ sum ^ T_ {t = 1} \ frac {\ partial V_t} {\ partial W} [/ math]
y luego simplemente hacemos la regla de cadena normal para cada componente anterior como lo haríamos normalmente. Los componentes de error más cercanos al final tendrán una regla de cadena más grande ya que cuando se despliega el gráfico es mucho más largo.
En resumen, la respuesta es que la diferencia es nula y, por supuesto, si la red cambia y la pérdida también cambia la ecuación final, pero sigue siendo la misma regla de la cadena.
Si quiere los detalles aquí es a lo que me refiero: considere alguna función de pérdida en algún momento paso [math] V_t [/ math] y la salida en ese paso de tiempo [math] \ hat y_t [/ math]. Entonces tenemos:
[matemáticas] \ frac {\ partial V_n} {\ partial W} = \ frac {\ partial V_n} {\ partial y_n} \ frac {\ partial y_n} {\ partial W} = \ frac {\ partial V_n} {\ parcial y_n} \ frac {\ partial y_n} {\ partial h_n} \ frac {\ partial h_n} {\ partial W} [/ math]
entonces la última parte [matemática] \ frac {\ parcial h_n} {\ parcial W} [/ matemática] depende de cada unidad oculta [matemática] h_t [/ matemática] en cada paso de tiempo anterior y cada [matemática] h_t [/ matemática ] depende de [matemáticas] W [/ matemáticas]. Por lo tanto, tenemos que aplicar la regla de la cadena (multivariable) nuevamente para cada unidad oculta en el pasado:
[math] \ frac {\ partial h_n} {\ partial W} = \ sum ^ n_ {t = 0} \ frac {\ partial h_n} {\ partial h_t} \ frac {\ partial h_t} {\ partial W} [ /mates]
para finalmente dar:
[matemáticas] \ frac {\ partial V_n} {\ partial W} = \ frac {\ partial V_n} {\ partial y_n} \ frac {\ partial y_n} {\ partial h_n} \ sum ^ n_ {t = 0} \ frac {\ partial h_n} {\ partial h_t} \ frac {\ partial h_t} {\ partial W} [/ math]
Puede parecer complicado, pero acabo de hacer una regla de cadena normal. Nada lujoso, excepto que había un componente de tiempo porque el modelado y la pérdida lo tenían.
Tenga en cuenta que [math] \ frac {\ partial h_t} {\ partial W} [/ math] puede calcularse fácilmente debido a la ecuación de recurrencia [math] h_t = tanh (W h_ {t-1} + U x_t + b_t) [/mates]. Observe también mi abuso de notación donde [math] W [/ math] representa un solo peso y toda la matriz / tensor para evitar suscribir todo y hacer que parezca más confuso de lo que realmente es.
Como un punto adicional para observar, observe que también podemos aplicar la regla de la cadena nuevamente donde el estado oculto actual [math] h_n [/ math] depende de los anteriores [math] h_t [/ math]. Si procedemos a aplicarlo, obtenemos:
[mates] \ frac {\ partial h_n} {\ partial h_t} = \ frac {\ partial h_n} {\ partial h_ {n-1}} \ frac {\ partial h_ {n-1}} {\ partial h_ { n-2}}… \ frac {\ partial h_1} {\ partial h_ {0}} [/ math]
y dado que los estados ocultos dependen entre sí de acuerdo con una función de activación [matemáticas] h_t = tanh (W h_ {t-1} + U x_t + b_t) [/ matemáticas] entonces obtenemos el famoso problema de gradiente de fuga si usamos un tanh, así que para evitar eso, usamos ReLu y evitamos eso.
Espero eso ayude.
Esta respuesta se basó principalmente en una gran explicación hecha a continuación:
quien recientemente vino a dar una charla en CBMM.