Cómo tomar una derivada con respecto a una matriz

Dada una función [math] f: \ mathbb {R} ^ d \ to \ mathbb {R} [/ math] de las variables [math] x_1, x_2, \ cdots, x_d [/ math], definimos el gradiente de [ math] f [/ math] con respecto al vector [math] \ mathbf {x} = (x_1, x_2, \ cdots, x_d) [/ math] por

[matemáticas] \ nabla _ {\ mathbf {x}} f (\ mathbf {x}): = \ left (\ dfrac {\ partial f (\ mathbf {x})} {\ partial x_1}, \ dfrac {\ partial f (\ mathbf {x})} {\ partial x_2}, \ cdots, \ dfrac {\ partial f (\ mathbf {x})} {\ partial x_d} \ right) [/ math]

Por lo tanto, siempre que use la frase derivada con respecto a un vector , esencialmente significa que tomamos el gradiente con respecto a un vector. Realizamos esta tarea al encontrar primero las derivadas parciales con respecto a cada variable, y luego agruparlas en un vector.

Del mismo modo, definimos la segunda derivada de [math] f [/ math] con respecto al vector [math] \ mathbf {x} [/ math] por

[math] \ nabla _ {\ mathbf {x}} ^ 2f (\ mathbf {x}): = \ begin {bmatrix} \ dfrac {\ partial ^ 2 f (\ mathbf {x})} {\ partial x_1 ^ 2 } & \ dfrac {\ partial ^ 2 f (\ mathbf {x})} {\ partial x_1 \ partial x_2} & \ cdots & \ dfrac {\ partial ^ 2 f (\ mathbf {x})} {\ partial x_1 \ partial x_d} \\ \ dfrac {\ partial ^ 2 f (\ mathbf {x})} {\ partial x_2 \ partial x_1} & \ dfrac {\ partial ^ 2 f (\ mathbf {x})} {\ partial x_2 ^ 2} & \ cdots & \ dfrac {\ partial ^ 2 f (\ mathbf {x})} {\ partial x_2 \ partial x_d} \\\ vdots & \ vdots & \ cdots & \ vdots \\ \ dfrac {\ parcial ^ 2 f (\ mathbf {x})} {\ partial x_d \ partial x_1} & \ dfrac {\ partial ^ 2 f (\ mathbf {x})} {\ partial x_d \ partial x_2} & \ cdots & \ dfrac {\ partial ^ 2 f (\ mathbf {x})} {\ partial x_d ^ 2} \ end {bmatrix} [/ math]

La matriz anterior de derivadas parciales se llama la arpillera de [math] f [/ math] con respecto a [math] \ mathbf {x} [/ math].

De manera similar, si [math] g: \ mathbb {R} ^ {m \ times n} \ to \ mathbb {R} [/ math] es una función de la matriz

[math] \ mathbf {W} = \ begin {bmatrix} W_ {1,1} & W_ {1,2} & \ cdots & W_ {1, n} \\ W_ {2,1} & W_ {2, 2} & \ cdots & W_ {2, n} \\ \ vdots & \ vdots & \ cdots & \ vdots \\ W_ {m, 1} & W_ {m, 2} & \ cdots & W_ {m, n} \ end {bmatrix} [/ math]

, definimos el gradiente de [math] g [/ math] con respecto a [math] W [/ math] por

[matemáticas] \ nabla _ {\ mathbf {x}} f (\ mathbf {\ mathbf {W}}): = \ begin {bmatrix} \ dfrac {\ partial f (\ mathbf {W})} {\ partial W_ { 1,1}} & \ dfrac {\ partial f (\ mathbf {W})} {\ partial W_ {1,2}} & \ cdots & \ dfrac {\ partial f (\ mathbf {W})} {\ parcial W_ {1, n}} \\ \ dfrac {\ partial f (\ mathbf {W})} {\ partial W_ {2,1}} & \ dfrac {\ partial f (\ mathbf {W})} { \ partial W_ {2,2}} & \ cdots & \ dfrac {\ partial f (\ mathbf {W})} {\ partial W_ {2, n}} \\ \ vdots & \ vdots & \ cdots & \ vdots \\ \ dfrac {\ partial f (\ mathbf {W})} {\ partial W_ {m, 1}} & \ dfrac {\ partial f (\ mathbf {W})} {\ partial W_ {m, 2} } & \ cdots & \ dfrac {\ partial f (\ mathbf {W})} {\ partial W_ {m, n}} \ end {bmatrix} [/ math]

Por lo tanto, para calcular la derivada de una función con respecto a una matriz, primero encontramos todas las derivadas parciales y luego las organizamos en una matriz.


Ahora, considere una red neuronal con [math] 4 [/ math] unidades de entrada, [math] 5 [/ math] unidades en la primera capa oculta, [math] 3 [/ math] unidades en la segunda capa oculta y [math ] 2 [/ math] unidades de salida.

Deje que [math] \ mathbf {x} ^ {(i)} [/ math] denota la activación neuronal de la capa [math] i [/ math] th. Definimos la capa [matemática] 0 [/ matemática] como la capa de entrada.

Por lo tanto, [math] \ mathbf {x} ^ {(0)} \ in \ mathbb {R} ^ 4 [/ math], [math] \ mathbf {x} ^ {(1)} \ in \ mathbb {R } ^ 5 [/ math], [math] \ mathbf {x} ^ {(2)} \ in \ mathbb {R} ^ 3 [/ math] y [math] \ mathbf {x} ^ {(3)} \ in \ mathbb {R} ^ 2 [/ math].

Deje que [matemática] W ^ {(k)} _ {i, j} [/ matemática] denote el peso que conecta la unidad [matemática] i [/ matemática] en la capa [matemática] k [/ matemática] y la [matemática ] j [/ math] th unidad en la capa [math] k-1 [/ math]. Por lo tanto, para nuestra red neuronal, tenemos [math] \ mathbf {W} ^ {(1)} \ in \ mathbb {R} ^ {5 \ times 4}, \ mathbf {W} ^ {(2)} \ en \ mathbb {R} ^ {3 \ times 5}, \ mathbf {W} ^ {(3)} \ in \ mathbb {R} ^ {2 \ times 3} [/ math].

Del mismo modo, deje que [math] b ^ {(k)} _ i [/ math] denote el sesgo que conecta la unidad [math] i [/ math] th en la capa [math] k [/ math] th. Por lo tanto, tenemos [math] \ mathbf {b} ^ {(1)} \ in \ mathbb {R} ^ 5, \ mathbf {b} ^ {(2)} \ in \ mathbb {R} ^ 3, \ mathbf {b} ^ {(3)} \ in \ mathbb {R} ^ 2 [/ math].

Además, deje que [math] f_i: \ mathbb {R} \ to \ mathbb {R} [/ math] denote la función de activación para la capa [math] i \ ge 1 [/ math].

Por lo tanto, tenemos lo siguiente:

  1. [math] \ mathbf {x} ^ {(1)} = f_1 \ left (\ mathbf {b} ^ {(1)} + \ mathbf {W} ^ {(1)} \ mathbf {x} ^ {( 0)} \ right) [/ math]
  2. [math] \ mathbf {x} ^ {(2)} = f_2 \ left (\ mathbf {b} ^ {(2)} + \ mathbf {W} ^ {(2)} \ mathbf {x} ^ {( 1)} \ right) [/ math]
  3. [math] \ mathbf {x} ^ {(3)} = f_3 \ left (\ mathbf {b} ^ {(3)} + \ mathbf {W} ^ {(3)} \ mathbf {x} ^ {( 2)} \ right) [/ math]

Para una entrada dada [math] \ mathbf {x} ^ {(0)} \ in \ mathbb {R} ^ 4 [/ math], suponga que la salida real es [math] \ mathbf {y} \ in \ mathbb { R} ^ 2 [/ matemáticas]. Deje que la función de pérdida [matemática] E [/ matemática] se defina como

[matemáticas] E = \ dfrac {1} {2} || \ mathbf {x} ^ {(3)} – \ mathbf {y} || ^ 2 [/ matemáticas]

Supongamos que queremos calcular la derivada de [math] E [/ math] con respecto a la matriz [math] \ mathbf {W} ^ {(3)} [/ math]. Bueno, esto significa que queremos calcular las derivadas parciales.

Tenemos

[matemáticas] \ dfrac {\ partial E} {\ partial W ^ {(3)} _ {1,1}} = \ dfrac {\ partial E} {\ partial x ^ {(3)} _ 1} \ dfrac { \ partial x ^ {(3)} _ 1} {\ partial W ^ {(3)} _ {1,1}} + \ dfrac {\ partial E} {\ partial x ^ {(3)} _ 2} \ dfrac {\ parcial x ^ {(3)} _ 2} {\ parcial W ^ {(3)} _ {1,1}} [/ matemática]

Tenemos

  • [matemáticas] x ^ {(3)} _ 1 = f_3 \ left (b ^ {(3)} _ 1+ \ sum_ {j} W ^ {(3)} _ {1, j} x ^ {(2)} _ j \ right) [/ math]
  • [matemáticas] x ^ {(3)} _ 2 = f_3 \ left (b ^ {(3)} _ 2+ \ sum_ {j} W ^ {(3)} _ {2, j} x ^ {(2)} _ j \ right) [/ math]

Por lo tanto, tenemos

[matemáticas] \ dfrac {\ partial x ^ {(3)} _ 1} {\ partial W ^ {(3)} _ {1,1}} = f_3 ^ {\ prime} \ left (b ^ {(3) } _1 + \ sum_ {j} W ^ {(3)} _ {1, j} x ^ {(2)} _ j \ right) \ cdot x ^ {(2)} _ 1 [/ math]

[matemáticas] \ dfrac {\ parcial x ^ {(3)} _ 2} {\ parcial W ^ {(3)} _ {1,1}} = f_3 ^ {\ prime} \ left (b ^ {(3) } _2 + \ sum_ {j} W ^ {(3)} _ {2, j} x ^ {(2)} _ j \ right). \ Cdot 0 = 0 [/ math]

Además, tenemos

[matemáticas] \ dfrac {\ partial E} {\ partial x ^ {(3)} _ 1} = \ dfrac {\ partial} {\ partial x ^ {(3)} _ 1} \ dfrac {1} {2} \ left [\ left (x ^ {(3)} _ 1-y_1 \ right) ^ 2 + \ left (x ^ {(3)} _ 2-y_2 \ right) ^ 2 \ right] = x ^ {(3)} _1-y_1 [/ math]

Por lo tanto, [matemática] \ dfrac {\ parcial E} {\ parcial W ^ {(3)} _ {1,1}} = \ left (x ^ {(3)} _ 1-y_1 \ right) f_3 ^ {\ prime } \ left (b ^ {(3)} _ 1+ \ sum_ {j} W ^ {(3)} _ {1, j} x ^ {(2)} _ j \ right) \ cdot x ^ {(2)} _1 [/ matemáticas]

Del mismo modo, para cualquier [matemática] 1 \ le i \ le 2 [/ matemática], [matemática] 1 \ le j \ le 3 [/ matemática], tenemos

[matemáticas] \ dfrac {\ partial E} {\ partial W ^ {(3)} _ {i, j}} = \ left (x ^ {(3)} _ i-y_i \ right) f_3 ^ {\ prime} \ left (b ^ {(3)} _ i + \ sum_ {k} W ^ {(3)} _ {i, k} x ^ {(2)} _ k \ right) \ cdot x ^ {(2)} _ j [/matemáticas]

Ahora hemos terminado con el cálculo de derivadas parciales. Finalmente, necesitamos volver a colocarlos en forma de matriz.

Puede verificar que la matriz de derivadas parciales se pueda escribir como

[matemáticas] \ begin {bmatrix} \ left (x ^ {(3)} _ 1-y_1 \ right) f_3 ^ {\ prime} \ left (b ^ {(3)} _ 1+ \ sum_ {j} W ^ {( 3)} _ {1, j} x ^ {(2)} _ j \ right) \\ \ left (x ^ {(3)} _ 2-y_2 \ right) f_3 ^ {\ prime} \ left (b ^ { (3)} _ 2+ \ sum_ {j} W ^ {(3)} _ {2, j} x ^ {(2)} _ j \ right) \ end {bmatrix} \ begin {bmatrix} x ^ {(2) } _1 & x ^ {(2)} _ 2 & x ^ {(2)} _ 3 \ end {bmatrix} [/ math]

[matemáticas] = \ begin {bmatrix} \ left (x ^ {(3)} _ 1-y_1 \ right) \\ \ left (x ^ {(3)} _ 2-y_2 \ right) \ end {bmatrix} \ odot \ begin {bmatrix} f_3 ^ {\ prime} \ left (b ^ {(3)} _ 1+ \ sum_ {j} W ^ {(3)} _ {1, j} x ^ {(2)} _ j \ right ) \\ f_3 ^ {\ prime} \ left (b ^ {(3)} _ 2+ \ sum_ {j} W ^ {(3)} _ {2, j} x ^ {(2)} _ j \ right) \ end {bmatrix} \ left (\ begin {bmatrix} x ^ {(2)} _ 1 & x ^ {(2)} _ 2 & x ^ {(2)} _ 3 \ end {bmatrix} \ right) [/ math]

[matemática] = (x ^ {(3)} – \ mathbf {y}) \ odot f_3 ^ {\ prime} \ left (\ mathbf {b} ^ {(3)} + \ mathbf {W} ^ {( 3)} \ mathbf {x} ^ {(2)} \ right) \ left (\ mathbf {x} ^ {(2)} \ right) ^ T [/ math]

No sé exactamente cuál es su situación, pero aquí hay una situación en la que la derivada con respecto a una matriz tiene sentido.

Supongamos que tiene una función f que envía matrices a números reales.

Entonces la derivada de f en [matemáticas] M_0 [/ matemáticas] con respecto a [matemáticas] M_1 [/ matemáticas] se define por

[matemáticas] \ lim_ {t \ a 0} \ frac {f (M_0 + t M_1) -f (M_0)} {t}. [/ matemáticas]

Piense en ello como una especie de derivada direccional de la función de las matrices. Entonces puede ver la derivada de [math] f (M_0 + tM_1) [/ math] con respecto a t en t = 0.

No estoy seguro si esto te ayuda.