Matrix Derivative

Human Being·2023년 1월 13일
0

Pytorch

목록 보기
2/3
post-thumbnail

Matrix Derivative

기초

A 벡터는 상수만 들어있을 때 다음과 같이 구할 수 있다

A=(1234)A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}

Ax=(1234)(x1x2)=(x1+2x23x1+4x2)=(f1(x1,x2)f2(x1,x2))A\vec{x} = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}\begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = \begin{pmatrix} x_1+2x_2 \\ 3x_1+4x_2 \end{pmatrix} = \begin{pmatrix} f_1(x_1, x_2) \\ f_2(x_1, x_2) \end{pmatrix}

ddxAx=[df1dx1df1dx2df2dx1df2dx2]=[1234]\frac{d}{dx}A\vec{x} = \begin{bmatrix} \frac{df_1}{dx_1} & \frac{df_1}{dx_2}\\ \frac{df_2}{dx_1} & \frac{df_2}{dx_2} \end{bmatrix} = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}

심화

A=[5334]=[a11aaa22]A=\begin{bmatrix} 5 & 3 \\ 3 & 4 \end{bmatrix}=\begin{bmatrix} a_{11} & a \\ a & a_{22} \end{bmatrix}

이처럼 A가 symmetric 할 경우 다음이 성립된다

ddxxTAx=2Ax\frac{d}{dx}x^TAx=2Ax

증명

  • xTAx=(x1,x2)(a11aaa22)(x1x2)=(x1,x2)(a11x1+ax2a21x1+a22x2)x^TAx = (x_1,x_2)\begin{pmatrix} a_{11} & a\\ a& a_{22} \end{pmatrix}\begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = (x_1,x_2)\begin{pmatrix} a_{11}x_1 + ax_2 \\ a_{21}x_1 + a_{22}x_2 \end{pmatrix}
    =a11x12+2ax1x2+a22x22=a_{11}x^2_1 + 2ax_1x_2 + a_{22}x^2_2
    =f(x1,x2)=f(x_1,x_2)
  • ddxxTAx=(dfdx1dfdx2)=2(a11x1+ax2ax1+a22x2)=2(a11aaa22)(x1x2)=2Ax\frac{d}{dx}x^TAx = \begin{pmatrix} \frac{df}{dx_1} \\ \frac{df}{dx_2} \end{pmatrix}=2\begin{pmatrix} a_{11}x_1 + ax_2\\ ax_1 + a_{22}x_2 \end{pmatrix}= 2\begin{pmatrix} a_{11} & a \\ a & a_{22} \end{pmatrix}\begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = 2Ax

Calculus in Autograd

y\vec{y}는 m개, x\vec{x}는 n개의 변수를 가지고 있다.

Jacobian Matrix JJ

  • y=f(x)\vec{y}=f(\vec{x})에서 x\vec{x}에 대한 y\vec{y}의 변화도
  • J=(yx1...yxn)=(y1x1...y1xn...ymx1...ymx1)J = \begin{pmatrix} \frac{\partial y}{\partial x_1} & ... & \frac{\partial y}{\partial x_n} \end{pmatrix} = \begin{pmatrix} \frac{\partial y_1}{\partial x_1} & ... & \frac{\partial y_1}{\partial x_n} \\ & ... \\ \frac{\partial y_m}{\partial x_1} & ... & \frac{\partial y_m}{\partial x_1} \end{pmatrix}

torch.autograd는 Vector-Jacobian 곱셈을 계산하는데
이는, 주어진 어떤 벡터 v\vec{v}에 대하여 JTv{J^T}\cdot{\vec{v}} 연산을 한다는 의미다

스칼라 함수 l=g(y)l=g(\vec{y})의 변화도(gradient)는
chian rule에 따라 l=f(x)g(f(x))=f(x)g(y)l^{\prime} = f^{\prime}(x)g^{\prime}(f(x)) = f^{\prime}(x)g^{\prime}(y)로 변환된다.
그리고 yy에 대한 ll의 변화도는 다음과 같다.
(ly1...lym)\begin{pmatrix} \frac{\partial l}{\partial y_1} & ... & \frac{\partial l}{\partial y_m} \end{pmatrix}

이에 대한 Transpose가 v\vec{v}라고 하자

v=(ly1...lym)T\vec{v} = \begin{pmatrix} \frac{\partial l}{\partial y_1} & ... & \frac{\partial l}{\partial y_m} \end{pmatrix}^T

xx에 대한 ll의 변화도의 Transpose를 구한다는 것은 다음과 같이 표현할 수 있다.
(lx1...lxm)=(y1x1...ymx1...y1xn...ymx1)(ly1...lym)=JTv\begin{pmatrix} \frac{\partial l}{\partial x_1}\\ ... \\ \frac{\partial l}{\partial x_m} \end{pmatrix} = \begin{pmatrix} \frac{\partial y_1}{\partial x_1} & ... & \frac{\partial y_m}{\partial x_1} \\ & ... \\ \frac{\partial y_1}{\partial x_n} & ... & \frac{\partial y_m}{\partial x_1} \end{pmatrix}\begin{pmatrix} \frac{\partial l}{\partial y_1}\\ ... \\ \frac{\partial l}{\partial y_m} \end{pmatrix} ={J^T}\cdot{\vec{v}}


Reference

0개의 댓글