logo

미분의 일반화: 그래디언트 행렬과 행렬 미분 📂다변수벡터해석

미분의 일반화: 그래디언트 행렬과 행렬 미분

정의

스칼라 함수 $f : \mathbb{R}^{n \times n} \to \mathbb{R}$와 행렬 $\mathbf{X} = [x_{ij}] \in \mathbb{R}^{n \times n}$에 대해서, 그래디언트 행렬 $\nabla_{\mathbf{X}} f$를 다음과 같이 정의한다.

$$ [\nabla_{\mathbf{X}} f]_{ij} = \dfrac{\partial f}{\partial x_{ij}} \quad (i,j=1,\dots,n) $$

$$ \nabla_{\mathbf{X}} f = \dfrac{\partial f}{\partial \mathbf{X}} = \begin{bmatrix} \dfrac{\partial f}{\partial x_{11}} & \cdots & \dfrac{\partial f}{\partial x_{1n}} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial f}{\partial x_{n1}} & \cdots & \dfrac{\partial f}{\partial x_{nn}} \end{bmatrix} $$

설명

행렬이라는게 벡터의 모양을 바꾼 것이라 생각하면, 그래디언트로부터 자연스럽게 일반화 가능하다. 애초에 그래디언트라는 것도 벡터로 미분하는 것이 아닌, 벡터의 각 성분별로 미분한 것을 다시 벡터로 만든것에 불과하다. 그러면 행렬로 미분한다는 개념도 정말 행렬로 미분하는 것이 아니라 행렬의 각 성분으로 미분한 것을 다시 행렬로 만드는 것일 뿐이다. 본질적으로는 다변수 함수의 미분과 다를 것이 없다는 것을 기억하자. 물론 굳이 말하자면 이건 행렬"로" 미분하는 것이 맞고, 행렬"을" 미분하는 것은 이와는 또 다르니 주의하자. 행렬"을" 미분한다는 것은 행렬함수를 미분한다는 의미이다.

머신러닝, 딥러닝을 포함하여 데이터를 다루는 곳에서는 벡터와 행렬 계산, 그리고 이들의 미분값 계산이 빈번하게 등장하기 때문에 사용되는 표기법이라 생각해도 좋다. 연산자 $\nabla_{\mathbf{X}} = \dfrac{\partial}{\partial \mathbf{X}}$를 행렬 그래디언트, 계산된 행렬 $\nabla_{\mathbf{X}}f$를 그래디언트 행렬이라 부르면 적절할 것 같다.

같이 보기

일반화

위의 설명을 잘 생각해보면, 결국 본질적으로 미분당하는 값과 미분할 변수가 상수냐 다변수냐의 얘기이기 때문에 굳이 행렬에 국한할할 필요는 없다. 아래의 표와 같이 다양한 경우에 대해 정의할 수 있다.

변수 \ 값스칼라 $y$벡터 $\mathbf{y}$행렬 $\mathbf{Y}$
스칼라$\dfrac{\partial y}{\partial x}$$\dfrac{\partial \mathbf{y}}{\partial x}$$\dfrac{\partial \mathbf{Y}}{\partial x}$
벡터$\dfrac{\partial y}{\partial \mathbf{x}}$$\dfrac{\partial \mathbf{y}}{\partial \mathbf{x}}$
행렬$\dfrac{\partial y}{\partial \mathbf{X}}$

라고 했지만 사실은 새로운 개념이 아니라 기존의 것들을 보기 좋게 하나의 표기법으로 통일한 것이다.

변수 \ 값스칼라 $y$벡터 $\mathbf{y}$행렬 $\mathbf{Y}$
스칼라미분그래디언트행렬함수 미분
벡터벡터값함수미분자코비안
행렬행렬 그래디언트

여기서 자코비안이나 연쇄법칙을 생각하면 함숫값 $\mathbf{y}$는 열벡터, 변수 $\mathbf{x}$는 행벡터로 취급하는 것이 자연스럽다.

$$ \mathbf{y} = \begin{bmatrix} y_{1} \\ y_{2} \\ \vdots \\ y_{m} \end{bmatrix}, \quad \mathbf{x} = \begin{bmatrix} x_{1} & x_{2} & \cdots & x_{n} \end{bmatrix} $$

그래서 $\dfrac{\partial y}{\partial \mathbf{x}}$는 행벡터, $\dfrac{\partial \mathbf{y}}{\partial x}$는 열벡터이다. $\dfrac{\partial y}{\partial x}$가 스칼라이므로, 아래와 같이 자연스럽게 연쇄법칙 표현이 가능하다. 물리학 교재에서 그래디언트를 행벡터로 표기하는 것이 이러한 이유 때문이다. $y = y(\mathbf{x})$, $\mathbf{x} = \mathbf{x}(t)$라 하면,

$$ \dfrac{\partial y}{\partial t} = \dfrac{\partial y}{\partial \mathbf{x}} \dfrac{d \mathbf{x}}{d t} = \begin{bmatrix} \dfrac{\partial y}{\partial x_{1}} & \cdots & \dfrac{\partial y}{\partial x_{n}} \end{bmatrix} \begin{bmatrix} \dfrac{d x_{1}}{d t} \\ \vdots \\ \dfrac{d x_{n}}{d t} \end{bmatrix} = \sum\limits_{i=1}^{n} \dfrac{\partial y}{\partial x_{i}} \dfrac{d x_{i}}{d t} $$

표기법을 통일한 건 그렇다치고 이게 그래디언트인지 벡터값함수의 미분인지 헷갈리기 쉽다. 이럴 땐 $\dfrac{\partial }{\partial x}$자체를 스칼라, $\dfrac{\partial }{\partial \mathbf{x}}$자체를 벡터, $\dfrac{\partial }{\partial \mathbf{X}}$자체를 행렬이라 생각하고, 위의 미분이 행렬의 크로네커 곱 $\otimes$로 연결되어있다고 보면 계산이 쉽다. 자세한 내용은 아래를 참고하자.

스칼라를

스칼라로 미분

스칼라를 스칼라로 미분하는 경우는 보통의 미분과 같다.

$$ \dfrac{\partial y}{\partial x} = \lim\limits_{h \to 0} \dfrac{y(x+h) - y(x)}{h} $$

크로네커 곱으로 표현하면,

$$ \dfrac{\partial y}{\partial x} = \dfrac{\partial }{\partial x} \otimes y = \dfrac{\partial y}{\partial x} $$

벡터로 미분

이는 보통의 그래디언트와 같다. 값이 스칼라, 변수가 행벡터이므로 그래디언트도 행벡터로 생각하는 것이 자연스럽다.

$$ \dfrac{\partial y}{\partial \mathbf{x}} = \nabla_{\mathbf{x}} y = \begin{bmatrix} \dfrac{\partial y}{\partial x_{1}} & \cdots & \dfrac{\partial y}{\partial x_{n}} \end{bmatrix} $$

크로네커 곱으로 표현하면,

$$ \dfrac{\partial y}{\partial \mathbf{x}} = \dfrac{\partial }{\partial \mathbf{x}} \otimes y = \begin{bmatrix} \dfrac{\partial }{\partial x_{1}} & \cdots & \dfrac{\partial }{\partial x_{n}} \end{bmatrix} \otimes \begin{bmatrix} y \end{bmatrix} = \begin{bmatrix} \dfrac{\partial y}{\partial x_{1}} & \cdots & \dfrac{\partial y}{\partial x_{n}} \end{bmatrix} $$

라플라시안 $\Delta y = \nabla^{2} y$는 다음과 같다.

$$ \Delta y = \nabla^{2} y = \sum\limits_{i=1}^{n} \dfrac{\partial^{2} y}{\partial x_{i}^{2}} = \left( \dfrac{\partial y}{\partial \mathbf{x}} \right) \left( \dfrac{\partial y}{\partial \mathbf{x}} \right)^{\mathsf{T}} = \Tr \left( \left( \dfrac{\partial y}{\partial \mathbf{x}} \right)^{\mathsf{T}} \left( \dfrac{\partial y}{\partial \mathbf{x}} \right) \right) $$

$\left( \dfrac{\partial y}{\partial \mathbf{x}} \right)^{\mathsf{T}} \left( \dfrac{\partial y}{\partial \mathbf{x}} \right)$는 헤시안이 된다.

$$ H(y) = \left( \dfrac{\partial y}{\partial \mathbf{x}} \right)^{\mathsf{T}} \left( \dfrac{\partial y}{\partial \mathbf{x}} \right) = \begin{bmatrix} \dfrac{\partial^{2} y}{\partial x_{1}^{2}} & \cdots & \dfrac{\partial^{2} y}{\partial x_{1} \partial x_{n}} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial^{2} y}{\partial x_{n} \partial x_{1}} & \cdots & \dfrac{\partial^{2} y}{\partial x_{n}^{2}} \end{bmatrix} $$

행렬로 미분

위에서 정의한 행렬 그래디언트이다.

$$ \nabla_{\mathbf{X}} y = \dfrac{\partial y}{\partial \mathbf{X}} = \begin{bmatrix} \dfrac{\partial y}{\partial x_{11}} & \cdots & \dfrac{\partial y}{\partial x_{1n}} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial y}{\partial x_{m1}} & \cdots & \dfrac{\partial y}{\partial x_{mn}} \end{bmatrix} $$

크로네커 곱으로 표현하면,

$$ \dfrac{\partial y}{\partial \mathbf{X}} = \dfrac{\partial }{\partial \mathbf{X}} \otimes y = \begin{bmatrix} \dfrac{\partial }{\partial x_{11}} & \cdots & \dfrac{\partial }{\partial x_{1n}} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial }{\partial x_{m1}} & \cdots & \dfrac{\partial }{\partial x_{mn}} \end{bmatrix} \otimes \begin{bmatrix} y \end{bmatrix} = \begin{bmatrix} \dfrac{\partial y}{\partial x_{11}} & \cdots & \dfrac{\partial y}{\partial x_{1n}} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial y}{\partial x_{m1}} & \cdots & \dfrac{\partial y}{\partial x_{mn}} \end{bmatrix} $$

벡터를

스칼라로 미분

보통의 벡터값 함수의 미분과 같다.

$$ \dfrac{\partial \mathbf{y}}{\partial x} = \mathbf{y}^{\prime}(x) = \lim\limits_{h \to 0} \dfrac{\mathbf{y}(x+h) - \mathbf{y}(x)}{h} $$

함숫값 $\mathbf{y}$가 열벡터, 변수 $x$가 스칼라이므로 계산 결과는 열벡터가 된다. 크로네커 곱으로 표현하면,

$$ \dfrac{\partial \mathbf{y}}{\partial x} = \dfrac{\partial }{\partial x} \otimes \mathbf{y} = \begin{bmatrix} \dfrac{\partial }{\partial x} \end{bmatrix} \otimes \begin{bmatrix} y_{1} \\ \vdots \\ y_{m} \end{bmatrix} = \begin{bmatrix} \dfrac{\partial y_{1}}{\partial x} \\ \vdots \\ \dfrac{\partial y_{m}}{\partial x} \end{bmatrix} $$

벡터로 미분

벡터를 벡터로 미분하는 경우는 자코비안과 같다. 자코비안의 정의를 보면,

$$ \dfrac{\partial \mathbf{y}}{\partial \mathbf{x}} = \dfrac{\partial (y_{1}, y_{2}, \dots, y_{m})}{\partial (x_{1}, x_{2}, \dots, x_{n})} = \begin{bmatrix} \dfrac{\partial y_{1}}{\partial x_{1}} & \cdots & \dfrac{\partial y_{1}}{\partial x_{n}} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial y_{m}}{\partial x_{1}} & \cdots & \dfrac{\partial y_{m}}{\partial x_{n}} \end{bmatrix} $$

이는 크로네커 곱으로 표현한 것과 같은 결과이다.

$$ \dfrac{\partial \mathbf{y}}{\partial \mathbf{x}} = \dfrac{\partial }{\partial \mathbf{x}} \otimes \mathbf{y} = \begin{bmatrix} \dfrac{\partial }{\partial x_{1}} & \cdots & \dfrac{\partial }{\partial x_{n}} \end{bmatrix} \otimes \begin{bmatrix} y_{1} \\ \vdots \\ y_{m} \end{bmatrix} = \begin{bmatrix} \dfrac{\partial y_{1}}{\partial x_{1}} & \cdots & \dfrac{\partial y_{1}}{\partial x_{n}} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial y_{m}}{\partial x_{1}} & \cdots & \dfrac{\partial y_{m}}{\partial x_{n}} \end{bmatrix} $$

행렬을

스칼라로 미분

이는 행렬 함수의 미분와 같다. 크로네커 곱으로 표현하면,

$$ \dfrac{\partial \mathbf{Y}}{\partial x} = \dfrac{\partial }{\partial x} \otimes \mathbf{Y} = \begin{bmatrix} \dfrac{\partial }{\partial x} \end{bmatrix} \otimes \begin{bmatrix} y_{11} & y_{12} & \cdots & y_{1n} \\ y_{21} & y_{22} & \cdots & y_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ y_{m1} & y_{m2} & \cdots & y_{mn} \end{bmatrix} = \begin{bmatrix} \dfrac{\partial y_{11}}{\partial x} & \cdots & \dfrac{\partial y_{1n}}{\partial x} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial y_{m1}}{\partial x} & \cdots & \dfrac{\partial y_{mn}}{\partial x} \end{bmatrix} $$