Existe uma maneira elegante de derivar este problema de álgebra linear?
Sou biólogo com autoaprendizagem de álgebra linear para algumas aplicações em meu trabalho. Tirar derivadas em contextos de álgebra não linear é bastante claro para mim, já que posso simplesmente comandar em cadeia meu caminho através dos problemas ... mas fazê-lo em um contexto de álgebra linear é um pouco misterioso para mim.
Estou tentando tirar a derivada da seguinte equação $$y = \vec{d}^TP^TP\vec{\delta},$$ Onde $$\vec{d} = \left[ \begin{array}\\ d_1 \\ d_2 \\ d_3 \end{array} \right]$$ e $$\vec{\delta} = \left[ \begin{array}\\ o_1^2 -d_1^2 \\ o_2^2 - d_2^2 \\ o_3^2 - d_3^2 \end{array} \right].$$ $P$ é apenas uma matriz 3x3 de constantes.
Eu gostaria de encontrar uma solução elegante para encontrar a derivada $y^\prime \left( \vec{d} \right)$, resultando no Jacobiano. A parte desafiadora é que o vetor$\vec{\delta}$ é um vetor composto segurando $\vec{\delta} = \vec{o} - \vec{d}^{\circ2}$ (não tenho certeza da minha notação aqui .. mas $\vec{d}^{\circ2}$ é suposto indicar todos os elementos de $d$são ao quadrado). Até agora, a única maneira de fazer isso é expandindo tudo em uma fórmula linear realmente grande para o valor único resultante e, em seguida, obtendo a derivada disso.
Meu objetivo final aqui é implementar isso no código ... fórmulas desnecessariamente grandes são algo que estou tentando evitar para manter meu código legível. Existe uma solução mais elegante para isso?
Respostas
$\DeclareMathOperator{\diag}{diag}$ No que segue $d, x, y$ e $\delta$ denotam vetores de coluna.
A função $y(d) = d^T P^T P \delta$ pode ser reescrito como o produto escalar $\langle Pd, P\delta \rangle$. Esta é a composição de três funções:
- $y_1 (d) = \begin{bmatrix}d\\ \delta\end{bmatrix}$ que tem derivado $Dy_1(d) = \begin{bmatrix} I \\ -2\diag(d) \end{bmatrix}$, Onde $\diag(d)$ é a matriz diagonal com $(d_1, d_2, d_3)$ ao longo da diagonal e $I$ é o $3 \times 3$ matriz de identidade.
- $y_2(x, y) = \begin{bmatrix}Px \\ Py \end{bmatrix}$ que tem a derivada $Dy_2(x, y) = \begin{bmatrix} P & 0 \\ 0 & P \end{bmatrix}$.
- $y_3 (x, y) = \langle x, y \rangle$ que tem a derivada $Dy_3(x, y) = (y^T, x^T)$.
Juntar as três coisas usando a regra da cadeia dá
$$ \begin{align*} Dy(d) &= Dy_3(y_2 \circ y_1(d)) Dy_2(y_1(d)) Dy_1(d) \\ &= Dy_3(Pd, P \delta) \begin{bmatrix} P & 0 \\ 0 & P \end{bmatrix} \begin{bmatrix} I \\ -2\diag(d) \end{bmatrix} \\ &= ((Pd)^T, (P\delta)^T) \begin{bmatrix} P & 0 \\ 0 & P \end{bmatrix} \begin{bmatrix} I \\ -2\diag(d) \end{bmatrix} \\ &= d^TP^TP - 2 \delta^T P^T P \diag(d). \end{align*} $$
O produto elementwise / Hadamard de dois vetores é comutativo $$a\circ b = b\circ a$$ e é equivalente a mudar um dos vetores em uma matriz diagonal e, em seguida, realizar a multiplicação normal da matriz, por exemplo $$\eqalign{ A &= {\rm Diag}(a) \quad\implies\quad &a\circ b = Ab \\ B &= {\rm Diag}(b) \quad\implies\quad &b\circ a = Ba \\ }$$ O vetor de todos ${\tt1}$é o elemento de identidade para a multiplicação de Hadamard, pois a matriz diagonal correspondente é a matriz de identidade. Isso tem uma implicação interessante:$$\eqalign{ a\circ{\tt1} &= {\tt1}\circ a \\ A{\tt1} &= Ia = a \;\;(!) \\ }$$ Aplicar esta transformação ao problema atual produz $$\eqalign{ X &= {\rm Diag}(d),\quad W={\rm Diag}(o) \\ y &= {\tt1}^TXP^TP(W^2-X^2){\tt1} \\ dy &= {\tt1}^T\,dX\,P^TP(W^2-X^2){\tt1} + {\tt1}^TXP^TP(-2X\,dX){\tt1} \\ &= {\tt1}^T(W^2-X^2)P^TP\,dX{\tt1} - 2\cdot{\tt1}^TXP^TPX\,dX{\tt1} \\ &= {\tt1}^T\Big((W^2-X^2)P^TP - 2\,XP^TPX\Big)\,dx \\ \frac{\partial y}{\partial x} &= {\tt1}^T\Big((W^2-X^2)P^TP - 2\,XP^TPX\Big) \\ }$$ que é um vetor de linha.
Se você preferir que seu gradiente seja um vetor de coluna, transponha o resultado $$\eqalign{ \frac{\partial y}{\partial x} &= \Big(P^TP(W^2-X^2) - 2\,XP^TPX\Big){\tt1} \\ }$$ Ou em termos das variáveis originais $$\eqalign{ \frac{\partial y}{\partial x} &= P^TP\delta - 2\,{\rm Diag}(d)P^TPd \\ }$$