Creo que tengo la idea, así que la compartiré. Entiendo que es lo mismo que entrenar cualquier NN con Descenso de gradiente estocástico, pero terminarás con matrices para los valores de salida de las capas en lugar de vectores.
Solo tenemos que hacer un seguimiento de la dimensionalidad.
Mi ejemplo será un aprendizaje supervisado para una regresión.
- ¿Cuáles son los tipos de máquina?
- ¿Cómo cambiará el aprendizaje automático la sociología?
- ¿Cuál es el mejor algoritmo para implementar un reconocimiento de voz robusto en entornos ruidosos?
- ¿Qué opinas de Keras?
- Cómo construir un generador de lenguaje natural
NN con
- una capa de entrada (dim 50),
- una capa oculta (dim 25)
- una capa de salida (dim 3).
L1 Regularización: [matemáticas] \ lambda [/ matemáticas]
La relación de minibatch: [matemática] r = 5 [/ matemática]
Parámetro de tasa de aprendizaje: [matemáticas] \ epsilon [/ matemáticas]
Parámetro de momento: [matemática] \ alfa [/ matemática]
X: datos de entrada, y los valores que queremos aprender.
a1 —-w1 ——-> (z2 | a2 = sigmoide (z2)) ——w2 —-> (z3 | a3 = sigmoide (z3))
División de datos para nuestro mini lote
Comencemos con un conjunto de datos de 10000 muestras de 50 características (las 50 entradas). Esto se puede ver como una matriz A de tamaño [math] \ mathbb {R} ^ {10000,50} [/ math]
Para implementar un mini lote, debe elegir una relación r para dividir su conjunto de datos en r partes. Terminará con una matriz de tamaño 10000 / r [math] \ mathbb {R} ^ {10000 / r, 50}. [/ Math]
Elija una de estas matrices, y será su primera matriz de entrada a1.
Entradas de reenvío
Escribamos la dimensionalidad:
- a1: → tenue (2000,50)
- w1: → tenue (25,50)
- z2 = [matemáticas] w1 \ cdot [/ matemáticas] [matemáticas] a1 ^ t [/ matemáticas] → dim (25,2000)
- a2 = sigmoide (z2), por ejemplo
- w2: → tenue (3,25)
- z3: → dim (3,2000)
- a3 = sigmoide (z3)
- ¡No menciono los biais!
Propagación hacia atrás
- Primero necesitamos calcular el costo total de nuestra función.
Podemos elegir el error medio al cuadrado entre todos los elementos en a3 y el vector y, y agregar el término de regularización para todos los pesos.
- Luego necesitamos calcular el gradiente para cada peso. Habrá un gradiente:
Simplemente escribo la fórmula, pero no es la pregunta aquí:
- [matemáticas] grad2 = (a_3 – y) \ cdot a_2 ^ T + \ lambda w_1 [/ matemáticas] → dim (3,25)
- [matemática] grad1 = w_2 \ intercal \ cdot (a_3 – y) \ cdot a_1 + \ lambda w_2 [/ math] → dim (25,50)
Luego necesitamos actualizar nuestros pesos en la dirección opuesta de su gradiente respectivo
- [matemáticas] w1 – = \ Delta_w1 + \ alpha \ Delta_w1_prev [/ matemáticas]
- [matemáticas] w2 – = \ Delta_w2 + \ alpha \ Delta_w2_prev [/ matemáticas]
Conclusión
Después del entrenamiento de nuestra red neuronal, podemos ajustar cualquier matriz de tamaño [:, 50], porque si usó descenso de gradiente estocástico, mini lote o lote, la única matriz que cambia de tamaño es el valor de salida de las neuronas y No las pesas.
Supongo que el mini lote es útil porque podemos abusar de la multiplicación de la matriz de vectorización.
No soy un experto en aprendizaje automático, así que no dudes en editar mis errores.