Search
Duplicate

수학/ 행렬의 미적분

Derivatives

스칼라-인자 함수 f:RRf : \mathbb{R} \to \mathbb{R}을 생각하자. 점 xx에서 도함수(derivative)는 다음으로 정의한다.
f(x)limh0f(x+h)f(x)hf'(x) \triangleq \lim_{h\to 0} {f(x+h) - f(x) \over h}
이것은 입력 공간 xx에서 작은 거리를 움직일 때 출력이 얼마나 빠르게 변하는지를 측정한다. (즉, 함수의 ‘변화율’이다.) 따라서 f(x)f'(x)f(x)f(x)에서 접선(tangent)의 기울기로 해석할 수 있다.
위와 같은 형태가 일반적이지만, 다음과 같이 center와 뒤의 것을 기준으로 도함수 정의할 수도 있다.
f(x)=limh0f(x+h)f(x)hforward difference=limh0f(x+h/2)f(xh/2)hcentral difference=limh0f(x)f(xh)hbackward difference(7.241)\begin{aligned} f'(x) &= \underbrace{\lim_{h\to 0}{f(x+h) - f(x) \over h}}_{\text{forward difference}} \\ &= \underbrace{\lim_{h\to 0}{f(x+h/2) - f(x-h/2) \over h}}_{\text{central difference}} \\ &= \underbrace{\lim_{h\to 0}{f(x) - f(x - h) \over h}}_{\text{backward difference}} \end{aligned} \tag{7.241}
더 작은 단계 hh는 추정을 더 잘 할 수 있다. 그러나 hh가 너무 작으면 수치적 취소(cancellation) 때문에 에러가 나올 수 있다.

Gradients

도함수의 표기를 벡터-스칼라 함수 f:RnRf : \mathbb{R}^n \to \mathbb{R}를 다루기 위해 확장할 수 있다. xix_i 관점에서 ff의 편미분은 다음처럼 정의한다.
여기서 ei\bold{e}_iii번째 단위 벡터이다.
fxi=limh0f(x+hei)f(x)h{\partial f \over \partial x_i} = \lim_{h \to 0} {f(\bold{x} + h\bold{e}_i) - f(\bold{x}) \over h}
x\bold{x}에서 함수의 기울기(gradient)는 그것의 편도함수의 벡터이다.
g=fx=f=(fx1fxn)(7.243)\bold{g} = {\partial f \over \partial \bold{x}} = \nabla f = \left( \begin{matrix}{ {\partial f \over \partial x_1}} \\ \vdots \\ {\partial f \over \partial x_n} \end{matrix} \right) \tag{7.243}
기울기(gradient)가 평가되는 지점을 강조하기(emphasize) 위해 다음과 같이 작성할 수 있다.
g(x)fxx(7.244)\bold{g}(\bold{x}^*) \triangleq {\partial f \over \partial \bold{x}}|_{\bold{x}^*} \tag{7.244}
연산자 \nabla(’nabla라고 부른다)가 함수 f:RnRf : \mathbb{R}^n \to \mathbb{R}를 또 다른 함수 g:RnRn\bold{g} : \mathbb{R}^n \to \mathbb{R}^n에 대응하는 것을 볼 수 있다.
g()\bold{g}()는 벡터-스칼라 함수이기 때문에 이것은 벡터 장(vector field)라고 부른다. 대조적으로 도함수 ff'는 스칼라 장(scalar field)라고 한다.

Directional derivative

방향 도함수(directional derivative)는 함수 f:RnRf : \mathbb{R}^n \to \mathbb{R}가 방향 v\bold{v}를 따라 공간에서 얼마나 변화하는지를 측정한다. 이것은 다음처럼 정의된다.
Dvf(x)=limh0f(x+hv)f(x)hD_\bold{v} f(\bold{x}) = \lim_{h \to 0} { f(\bold{x} + h\bold{v}) - f(\bold{x}) \over h}
이것을 nn에 관계 없이 ff의 함수를 2번 호출하여 수치적으로 근사할 수 있다.
대조적으로 표준 기울기 벡터에 대한 수치적 근사는 n+1n+1 호출을 취한다. (또는 중심 미분을 사용한다면 2n2n)
v\bold{v}에 따른 방향 도함수는 기울기 g\bold{g}와 벡터 v\bold{v}의 스칼라 곱임에 유의하라.
Dvf(x)=f(x)vD_\bold{v}f(\bold{x}) = \nabla f(\bold{x})\cdot \bold{v}

Total derivative

f(t,x(t),y(t))f(t, x(t), y(t))와 같이 함수의 일부 인자가 서로 의존적이라고 가정하자. tt에 관하여 ff의 전미분(total derivative)는 다음처럼 정의한다.
dfdt=ft+fxdxdt+fydydt{df \over dt} = {\partial f \over \partial t} + {\partial f \over \partial x}{d x \over dt} + {\partial f \over \partial y}{dy \over dt}
만일 양쪽에 미분 dtdt를 곱하면, 전미분(total differential)을 얻을 수 있다.
df=ftdt+fxdx+fydydf = {\partial f \over \partial t}dt + {\partial f \over \partial x}dx + {\partial f \over \partial y}dy
이것은 tt를 변화시킬 때 ff가 얼마나 변하는지를 측정한다. ff에 대한 tt의 직접적인 영향 뿐만 아니라, xxyy에 대한 tt의 간접적인 효과도 측정할 수 있다.

Jacobian

벡터를 다른 벡터로 매핑하는 함수 f:RnRm\bold{f}: \mathbb{R}^n \to \mathbb{R}^m에 대해 1번 편미분한 값을 갖는 행렬을 야코비 행렬(Jacobian matrix)이라고 한다.
출력 f\bold{f}와 같은 방향으로 결과를 늘어 놓는다는 것에 유의하라.
Jf(x)=fx(f1x1...f1xnfmx1...fmxn)=(f1(x)fm(x))\bold{J}_\bold{f}(\bold{x}) = {\partial \bold{f} \over \partial \bold{x}^\top} \triangleq \begin{pmatrix} {\partial f_1 \over \partial x_1} & ... & {\partial f_1 \over \partial x_n} \\ \vdots & \ddots & \vdots \\ {\partial f_m \over \partial x_1} & ... & {\partial f_m \over \partial x_n} \end{pmatrix} =\begin{pmatrix} \nabla f_1(\bold{x})^\top \\ \vdots \\ \nabla f_m(\bold{x})^\top \end{pmatrix}
야코비안-벡터 곱(Jacobian vector product, JVP)는 야코비안 행렬 JRm×n\bold{J} \in \mathbb{R}^{m \times n}과 벡터 vRn\bold{v} \in \mathbb{R}^{n}의 오른쪽 곱에 해당하는 연산으로 정의된다.
따라서 f\bold{f}를 단지 2번만 호출하면 이를 수치적으로 근사할 수 있는 것을 볼 수 있다.
Jf(x)v=(f1(x)fm(x))v=(f1(x)Tvfm(x)Tv)\bold{J}_\bold{f}(\bold{x})\bold{v} = \left( \begin{matrix} \nabla f_1(\bold{x})^\top \\ \vdots \\ \nabla f_m(\bold{x})^\top \end{matrix} \right) \bold{v} = \left( \begin{matrix} \nabla f_1(\bold{x})^T \bold{v} \\ \vdots \\ \nabla f_m(\bold{x})^T \bold{v} \end{matrix} \right)
벡터-야코비안 곱(vector Jacobian product, VJP)는 야코비안 행렬 JRm×n\bold{J} \in \mathbb{R}^{m \times n}과 벡터 vRm\bold{v} \in \mathbb{R}^{m}의 왼쪽 곱에 해당하는 연산으로 정의된다.
uJf(x)=u(fx1,...,fxn)=(ufx1,...,ufxn)\bold{u}^\top\bold{J}_\bold{f}(\bold{x}) = \bold{u}^\top \left( {\partial \bold{f} \over \partial x_1}, ... ,{\partial \bold{f} \over \partial x_n} \right) = \left( \bold{u} \cdot {\partial \bold{f} \over \partial x_1}, ... , \bold{u} \cdot {\partial \bold{f} \over \partial x_n} \right)
mnm \geq n일 때 JVP가 더 효율적이고 mnm \leq n일 때는 VJP가 더 효율적이다.
때때로 두 함수의 구성의 야코비안을 취하는 것은 유용할 수 있다. h(x)=g(f(x))h(\bold{x}) = g(f(\bold{x}))라 하자. 미적분학의 체인 룰에 의해 다음과 같다.
Jh(x)=Jg(f(x))Jf(x)\bold{J}_h(\bold{x}) = \bold{J}_g(f(\bold{x}))\bold{J}_f(\bold{x})
예컨대 f:RR2f : \mathbb{R} \to \mathbb{R}^2이고 g:R2R2g : \mathbb{R}^2 \to \mathbb{R}^2라고 가정하면 다음과 같다.
gx=(xg1(f1(x),f2(x))xg2(f1(x),f2(x)))=(g1f1f1x+g1f2f2xg2f1f1x+g2f2f2x)=gffx=(g1f1g1f2g2f1g2f2)(f1xf2x)\begin{aligned} {\partial \bold{g} \over \partial x} &= \begin{pmatrix} {\partial \over \partial x} g_1(f_1(x), f_2(x)) \\ {\partial \over \partial x} g_2(f_1(x), f_2(x)) \end{pmatrix} = \begin{pmatrix} {\partial g_1 \over \partial f_1}{\partial f_1 \over \partial x} + {\partial g_1 \over \partial f_2}{\partial f_2 \over \partial x} \\ {\partial g_2 \over \partial f_1}{\partial f_1 \over \partial x} + {\partial g_2 \over \partial f_2}{\partial f_2 \over \partial x} \end{pmatrix} \\ &= {\partial \bold{g} \over \partial \bold{f}^\top}{\partial \bold{f} \over \partial x} = \begin{pmatrix} {\partial g_1 \over \partial f_1} & {\partial g_1 \over \partial f_2} \\ {\partial g_2 \over \partial f_1} & {\partial g_2 \over \partial f_2} \end{pmatrix} \begin{pmatrix} {\partial f_1 \over \partial x} \\ {\partial f_2 \over \partial x} \end{pmatrix} \end{aligned}

Hessian

벡터를 스칼라로 매핑하는 함수 f:RnRf: \mathbb{R}^n \to \mathbb{R}에 대해 두번 미분 가능하면, 두 번째 편미분 결과를 (대칭적인) n×nn \times n 행렬으로 헤시안 행렬(Hessian matrix)를 정의할 수 있다.
Hf=2fx2=2f=(2fx12...2fx1xn2fxnx1...2fxn2)\bold{H}_f = {\partial^2 f \over \partial \bold{x}^2} = \nabla^2 f = \begin{pmatrix} {\partial^2 f \over \partial x_1^2} & ... & {\partial^2 f \over \partial x_1 \partial x_n} \\ \vdots & \ddots & \vdots \\ {\partial^2 f \over \partial x_n \partial x_1} & ... & {\partial^2 f \over \partial x_n^2} \end{pmatrix}
헤시안은 야코비안의 기울기로 볼 수 있다.

참조