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로 표시한다.
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=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\bold{y}ii번째 성분을 yiy_i라 할 때, yiy_ix\bold{x}A\bold{A}ii번째 행의 선형 결합으로 표현할 수 있다.
yi=ai1x1+ai2x2+...+ainxny_i = a_{i1}x_1 + a_{i2}x_2 + ... + a_{in}x_n
y\bold{y}에 대한 x\bold{x}의 도함수(야코비안)을 구하기 위해 y\bold{y}의 각 성분에 대한 x\bold{x}의 각 성분에 대한 편미분을 계산하면 (위의 식 참조) 다음과 같이 구할 수 있다.
yixj=aij{\partial y_i \over \partial x_j} = a_{ij}
결국 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}

참조