Search
Duplicate

수학/ 스칼라-벡터-행렬 미분

스칼라-벡터-행렬의 미분은 분자 중심, 분모 중심으로 구분될 수 있는데, 아래 내용은 미분 결과를 열벡터로 표현하기 위한 분모 중심 기준으로 작성되었다. 분자 중심 기준은 참조의 위키 페이지 참조
차원 표기는 가장 안쪽 차원이 가장 뒤에 표기되는 것이 기본이다. 예컨대 m×nm \times n 행렬은 가장 안쪽 차원인 열의 크기가 nn이고 그 바깥의 차원인 행의 크기가 mm이라는 의미다. 마찬가지로 차원의 크기가 p×m×np \times m \times n이라면 가장 바깥쪽 차원의 크기가 pp가 된다.
아래와 같이 정의 되는 미분과 달리 적분은 함수 전체에 대해 직접 적분이 가능하기 때문에 아래와 같이 정의될 필요가 없다.

스칼라 함수에 대한 미분

스칼라를 출력하는 함수를 스칼라 함수라고 한다.

스칼라-스칼라 미분

스칼라를 입력으로 받고 스칼라를 출력하는 함수 y=f(x):FFy = f(x) : F \to F를 스칼라로 미분하면 결과는 스칼라가 된다.
df(x)dx=dydx{d f(x) \over dx} = {d y \over dx}

스칼라-벡터 미분

벡터를 입력으로 받고 스칼라를 출력하는 함수 y=f(x):FnFy = f(\bold{x}) : F^n \to F를 벡터로 미분하면 결과는 nn-차원 (열)벡터가 된다. 이것은 입력 벡터의 각 성분들로 함수를 스칼라-스칼라 미분한 후 그 결과를 원래 벡터 형태로 만드는 것이 된다. 이것을 특별히 gradient라고 하고 \nabla로 표시한다. gradient는 벡터를 입력으로 받는 스칼라 함수에 대해서만 정의된다.
df(x)dx=dydx=[yx1yx2yxn]=yx=[x1x2xn]\begin{aligned} {d f(\bold{x}) \over d\bold{x}} = {d y \over d\bold{x}} &= \begin{bmatrix} {\partial y \over \partial x_1} \\ {\partial y \over \partial x_2} \\ \vdots \\ {\partial y \over \partial x_n} \end{bmatrix} = \nabla y \\ \bold{x} &= \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} \end{aligned}
참고로 위의 결과인 y\nabla\bold{y}x\bold{x}로 한 번 더 미분하면 벡터-벡터 미분의 결과로 행렬이 되며(스칼라 함수를 벡터로 2번 미분), 해당 행렬을 특별히 헤시안 행렬(Hessian Matrix)라고 부른다.

스칼라-행렬 미분

행렬을 입력으로 받고 스칼라를 출력하는 함수 y=f(X):Fm×nFy = f(\bold{X}) : F^{m\times n} \to F를 행렬로 미분하면 결과는 m×nm \times n 행렬이 된다. 이것은 행렬의 모든 요소로 함수를 스칼라-스칼라 미분을 수행하고 그 결과를 원래 행렬 형태로 만드는 것이 된다.
df(X)dX=dydX=[yx11yx12yx1nyx21yx22yx2nyxm1yxm2yxmn]X=[x11x12x1nx21x22x2nxm1xm2xmn]\begin{aligned} {d f(\bold{X}) \over d\bold{X}} = {d y \over d\bold{X}} &= \begin{bmatrix} {\partial y \over \partial x_{11}} & {\partial y \over \partial x_{12}} & \dots & {\partial y \over \partial x_{1n}} \\ {\partial y \over \partial x_{21}} & {\partial y \over \partial x_{22}} & \dots & {\partial y \over \partial x_{2n}} \\ \vdots & \vdots & \ddots & \vdots \\ {\partial y \over \partial x_{m1}} & {\partial y \over \partial x_{m2}} & \dots & {\partial y \over \partial x_{mn}} \end{bmatrix} \\ \bold{X} &= \begin{bmatrix} x_{11} & x_{12} & \dots & x_{1n} \\ x_{21} & x_{22} & \dots & x_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m1} & x_{m2} & \dots & x_{mn} \end{bmatrix} \end{aligned}

벡터 함수에 대한 미분

벡터를 출력하는 함수를 벡터 함수라고 한다.

벡터-스칼라 미분

스칼라를 입력으로 받고 벡터를 출력하는 함수 y=f(x):FFn\bold{y} = f(x) : F \to F^{n}를 스칼라로 미분하면 결과는 nn-차원 벡터가 된다. 미분하는 벡터를 행벡터로 사용하는 것과 달리 미분 당하는 벡터는 열벡터로 사용한다.
f(x)dx=dydx=[y1xy2xynx]y=[y1y2yn]\begin{aligned} {f(x) \over dx} = {d \bold{y} \over dx} &= \begin{bmatrix} {\partial y_1 \over \partial x} \\ {\partial y_2 \over \partial x} \\ \vdots \\ {\partial y_n \over \partial x} \end{bmatrix} \\ \bold{y} &= \begin{bmatrix} y_1 \\ y_2\\ \vdots \\ y_n \end{bmatrix}\end{aligned}

벡터-벡터 미분 (Jacobian Matrix)

벡터를 입력으로 받고 벡터를 출력하는 함수 y=f(x):FmFn\bold{y} = f(\bold{x}) : F^m \to F^n를 벡터로 미분하면 결과는 n×mn \times m 행렬이 된다. 이것은 미분하려는 벡터를 행벡터로 전치한 후 벡터의 모든 성분에 대해 벡터-스칼라 미분을 수행하고, 그 결과 열벡터를 차례대로 쌓아 행렬 형태로 만드는 것이 된다. 이 행렬을 특별히 야코비안 행렬(Jacobian Matrix)라고 한다.
df(x)dx=dydx=[y1x1y1x2y1xmy2x1y2x2y2xmynx1ynx2ynxm]=Jf(x)y=[y1y2yn]x=[x1x2xm]\begin{aligned} {df(\bold{x}) \over d\bold{x}^\top} = {d \bold{y} \over d\bold{x}^\top} &= \begin{bmatrix} {\partial y_1 \over \partial x_1} & {\partial y_1 \over \partial x_2} & \dots & {\partial y_1 \over \partial x_m} \\ {\partial y_2 \over \partial x_1} & {\partial y_2 \over \partial x_2} & \dots & {\partial y_2 \over \partial x_m} \\ \vdots & \vdots & \ddots & \vdots \\ {\partial y_n \over \partial x_1} & {\partial y_n \over \partial x_2} & \dots & {\partial y_n \over \partial x_m} \end{bmatrix} = \bold{J}_f(\bold{x}) \\ \bold{y} &= \begin{bmatrix} y_1 \\ y_2\\ \vdots \\ y_n \end{bmatrix} \\ \bold{x} &= \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_m \end{bmatrix}\end{aligned}
야코비안과 관련하여 흥미로운 설정이 있다. 예컨대 y=Ax\bold{y} = \bold{Ax} 형식의 선형 변환이 있다고 하자. 여기서 yFm×1,xFn×1,AFm×n\bold{y} \in F^{m \times 1}, \bold{x} \in F^{n \times 1}, \bold{A} \in F^{m \times n}이다. 이 경우 y\bold{y}에 대한 x\bold{x}의 도함수는 A\bold{A}가 된다.
이것을 이해하기 위해 y,x,A\bold{y}, \bold{x}, \bold{A}가 다음과 같이 정의된다고 하자.
y=Ax[y1y2ym]=[a11a12a1na21a22a2nam1am2amn][x1x2xn]\boldsymbol{y} = \bold{Ax} \Rightarrow \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix}
행렬 곱에 의해 yiy_i에 대해 다음의 관계가 성립한다.
yi=ai1x1+ai2x2++ainxny_i = a_{i1}x_1 + a_{i2}x_2 + \cdots + a_{in}x_n
이제 y\bold{y}x\bold{x}로 미분한 경우를 생각하자. 이것은 야코비안 행렬이다.
yx=[y1x1y1x2y1xny2x1y2x2y2xnymx1ymx2ymxn]\frac{\partial \boldsymbol{y}}{\partial \boldsymbol{x}} = \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \frac{\partial y_1}{\partial x_2} & \cdots & \frac{\partial y_1}{\partial x_n} \\ \frac{\partial y_2}{\partial x_1} & \frac{\partial y_2}{\partial x_2} & \cdots & \frac{\partial y_2}{\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial y_m}{\partial x_1} & \frac{\partial y_m}{\partial x_2} & \cdots & \frac{\partial y_m}{\partial x_n} \end{bmatrix}
여기서 yiy_ixjx_j로 편미분한 결과 yixj{\partial y_i \over \partial x_j}는 아래처럼 작성할 수 있다.
yixj=xj(ai1x1+ai2x2++aijxj++ainxn)=aij\frac{\partial y_i}{\partial x_j} = \frac{\partial}{\partial x_j} \left( a_{i1}x_1 + a_{i2}x_2 + \cdots + a_{ij}x_{j} + \cdots + a_{in}x_n \right) = a_{ij}
여기서 yi=ai1x1+ai2x2++ainxny_i = a_{i1}x_1 + a_{i2}x_2 + \cdots + a_{in}x_n이고, 이것을 xjx_j로 편미분하면 나머지 항은 0이되고 xjx_j의 계수 aija_{ij}만 남게 되기 때문이다.
이 결과를 이용하여 위의 야코비안 행렬을 작성하면 아래와 같다.
yx=[a11a12a1na21a22a2nam1am2amn]=A\frac{\partial \boldsymbol{y}}{\partial \boldsymbol{x}} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} = \boldsymbol{A}
결국 y\bold{y}에 대한 x\bold{x}의 전체 편미분 행렬(야코비안)은 A\bold{A} 자체가 된다. 이것은 선형 변환과 선형 대수학의 기본 원리에 기반한 방법으로 선형 시스템, 최적화 문제, 다변수 함수 분석에 매우 중요한 역할을 한다.
추가로 f(x)=xAxf(\bold{x}) = \bold{x}^\top\bold{Ax}와 같은 2차 형식에 대한 gradient는 다음과 같이 주어진다.
f(x)=2Ax\nabla f(\bold{x}) = 2\bold{Ax}

벡터-행렬 미분

행렬을 입력으로 받고 벡터를 출력하는 함수 y=f(X):Fm×nFp\bold{y} = f(\bold{X}) : F^{m \times n} \to F^p를 행렬로 미분하면 결과는 m×n×pm \times n \times p 크기의 3차 텐서가 된다. 행렬의 모든 요소에 대해 벡터-스칼라 미분을 수행하고, 그 결과 벡터를 안쪽부터 차례대로 쌓아 3차 텐서를 만드는 것이 된다. 아래 표기는 pp 크기의 열벡터가 nn개가 존재하는 형태인데, 이것은 n×pn \times p 행렬이 된다. 다만 이것을 행렬로 표현하려면 pp 크기의 열벡터는 행 벡터로 놓고 그것을 nn개 만큼 종으로 쌓아야 일반적인 행렬의 표기가 된다. 이는 맥락에 따라 p×m×np \times m \times n의 형태가 나올 수도 있다.
df(X)dX=dydX={{[y1x11y2x11ypx11],...,[y1x1ny2x1nypx1n]n},{[y1x21y2x21ypx21],...,[y1x2ny2x2nypx2n]n},...m}y=[y1y2yn]X=[x11x12x1nx21x22x2nxm1xm2xmn]\begin{aligned} {df(\bold{X}) \over d\bold{X}} = {d \bold{y} \over d\bold{X}} &= \left\{ \underbrace{\left\{ \underbrace{\begin{bmatrix} {\partial y_{1} \over \partial x_{11}} \\ {\partial y_{2} \over \partial x_{11}} \\ \vdots \\ {\partial y_{p} \over \partial x_{11}}\end{bmatrix}, ... , \begin{bmatrix} {\partial y_{1} \over \partial x_{1n}} \\ {\partial y_{2} \over \partial x_{1n}} \\ \vdots \\ {\partial y_{p} \over \partial x_{1n}}\end{bmatrix} }_{n} \right\}, \left\{ \underbrace{\begin{bmatrix} {\partial y_{1} \over \partial x_{21}} \\ {\partial y_{2} \over \partial x_{21}} \\ \vdots \\ {\partial y_{p} \over \partial x_{21}}\end{bmatrix}, ... , \begin{bmatrix} {\partial y_{1} \over \partial x_{2n}} \\ {\partial y_{2} \over \partial x_{2n}} \\ \vdots \\ {\partial y_{p} \over \partial x_{2n}}\end{bmatrix} }_{n} \right\} ,...}_{m} \right\} \\ \bold{y} &= \begin{bmatrix} y_1 \\ y_2\\ \vdots \\ y_n \end{bmatrix} \\ \bold{X} &= \begin{bmatrix} x_{11} & x_{12} & \dots & x_{1n} \\ x_{21} & x_{22} & \dots & x_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m1} & x_{m2} & \dots & x_{mn} \end{bmatrix} \end{aligned}

행렬 함수에 대한 미분

행렬을 출력하는 함수를 행렬 함수라고 한다.

행렬-스칼라 미분

스칼라를 입력으로 받고 행렬을 출력하는 함수 Y=f(x):FFm×n\bold{Y} = f(x) : F \to F^{m \times n}를 스칼라로 미분하면 결과는 m×nm \times n 행렬이 된다.
f(x)dx=dYdx=[y11xy12xy1nxy21xy22xy2nxym1xym2xymnx]Y=[y11y12y1ny21y22y2nym1ym2ymn]\begin{aligned} {f(x) \over dx} = {d \bold{Y} \over dx} &= \begin{bmatrix} {\partial y_{11} \over \partial x} & {\partial y_{12} \over \partial x} & \dots & {\partial y_{1n} \over \partial x} \\ {\partial y_{21} \over \partial x} & {\partial y_{22} \over \partial x} & \dots & {\partial y_{2n} \over \partial x} \\ \vdots & \vdots & \ddots & \vdots \\ {\partial y_{m1} \over \partial x} & {\partial y_{m2} \over \partial x} & \dots & {\partial y_{mn} \over \partial x} \end{bmatrix} \\ \bold{Y} &= \begin{bmatrix} y_{11} & y_{12} & \dots & y_{1n} \\ y_{21} & y_{22} & \dots & y_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ y_{m1} & y_{m2} & \dots & y_{mn} \end{bmatrix} \end{aligned}

행렬-벡터 미분

벡터를 입력으로 받고 행렬을 출력하는 함수 f(x):FpFm×nf(\bold{x}) : F^p \to F^{m \times n}를 벡터로 미분하면 결과는 p×m×np \times m \times n 크기의 3차 텐서가 된다. 이것은 벡터의 각 성분에 대해 행렬-스칼라 미분을 수행하고, 그 결과 행렬을 차례대로 쌓아 텐서 형태로 만드는 것과 같다.
df(x)dx=dYdx={[y11x1y1nx1ym1x1ymnx1],[y11x2y1nx2ym1x2ymnx2],,[y11xpy1nxpym1xpymnxp]p}Y=[y11y12y1ny21y22y2nym1ym2ymn]x=[x1x2xp]\begin{aligned} {df(\bold{x}) \over d\bold{x}} = {d \bold{Y} \over d\bold{x}} &= \left\{ \underbrace{\begin{bmatrix} {\partial y_{11} \over \partial x_{1}} & \dots & {\partial y_{1n} \over \partial x_{1}} \\ \vdots & \ddots & \vdots \\ {\partial y_{m1} \over \partial x_{1}} & \dots & {\partial y_{mn} \over \partial x_{1}} \end{bmatrix} , \begin{bmatrix} {\partial y_{11} \over \partial x_{2}} & \dots & {\partial y_{1n} \over \partial x_{2}} \\ \vdots & \ddots & \vdots \\ {\partial y_{m1} \over \partial x_{2}} & \dots & {\partial y_{mn} \over \partial x_{2}} \end{bmatrix} , \dots , \begin{bmatrix} {\partial y_{11} \over \partial x_{p}} & \dots & {\partial y_{1n} \over \partial x_{p}} \\ \vdots & \ddots & \vdots \\ {\partial y_{m1} \over \partial x_{p}} & \dots & {\partial y_{mn} \over \partial x_{p}} \end{bmatrix}}_{p} \right\} \\\bold{Y} &= \begin{bmatrix} y_{11} & y_{12} & \dots & y_{1n} \\ y_{21} & y_{22} & \dots & y_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ y_{m1} & y_{m2} & \dots & y_{mn} \end{bmatrix} \\ \bold{x} &= \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_p \end{bmatrix} \end{aligned}

행렬-행렬 미분

행렬을 입력으로 받고 행렬을 출력하는 함수 f(X):Fm×nFp×sf(\bold{X}) : F^{m \times n} \to F^{p \times s}를 행렬로 미분하면 결과는 p×s×m×np \times s \times m \times n 크기의 4차 텐서가 된다. 이것은 미분 하려는 행렬의 모든 성분에 대해 행렬-스칼라 미분을 수행하고, 그 결과를 차례대로 쌓아 4차 텐서를 만드는 것과 같다.
df(X)dX=dYdX={{[y11x11y1nx11ym1x11ymnx11],,[y11x1sy1nx1sym1x1symnx1s]s},...p}Y=[y11y12y1ny21y22y2nym1ym2ymn]X=[x11x12x1sx21x22x2sxp1xp2xps]\begin{aligned} {df(\bold{X}) \over d\bold{X}} = {d \bold{Y} \over d\bold{X}} &= \left\{ \underbrace{\left\{ \underbrace{\begin{bmatrix} {\partial y_{11} \over \partial x_{11}} & \dots & {\partial y_{1n} \over \partial x_{11}} \\ \vdots & \ddots & \vdots \\ {\partial y_{m1} \over \partial x_{11}} & \dots & {\partial y_{mn} \over \partial x_{11}} \end{bmatrix} , \dots, \begin{bmatrix} {\partial y_{11} \over \partial x_{1s}} & \dots & {\partial y_{1n} \over \partial x_{1s}} \\ \vdots & \ddots & \vdots \\ {\partial y_{m1} \over \partial x_{1s}} & \dots & {\partial y_{mn} \over \partial x_{1s}} \end{bmatrix}}_{s} \right\}, ...}_{p} \right\} \\\bold{Y} &= \begin{bmatrix} y_{11} & y_{12} & \dots & y_{1n} \\ y_{21} & y_{22} & \dots & y_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ y_{m1} & y_{m2} & \dots & y_{mn} \end{bmatrix} \\ \bold{X} &= \begin{bmatrix} x_{11} & x_{12} & \dots & x_{1s} \\ x_{21} & x_{22} & \dots & x_{2s} \\ \vdots & \vdots & \ddots & \vdots \\ x_{p1} & x_{p2} & \dots & x_{ps} \end{bmatrix} \end{aligned}

참조