본문 바로가기
AI 수학/최적화

벡터 함수를 행렬로 미분하기

by 세인트워터멜론 2021. 3. 27.

다변수 스칼라 함수를 벡터로 미분한 것을 그래디언트(gradient), 벡터 함수를 벡터로 미분한 것을 자코비안(Jacobian), 스칼라 함수를 벡터로 두 번 미분한 것을 헤시안(Hessian)이라고 한다.

 

 

이번에는 스칼라 함수를 행렬로 미분해 보자.

\( X=\begin{bmatrix} x_{11} & \cdots & x_{1n} \\ \vdots & \ddots & \vdots \\ x_{m1} & \cdots & x_{mn} \end{bmatrix} \in \mathbb{R}^{m \times n}\) 가 행렬이고 스칼라 함수 \(f(X)\)가 주어졌을 때 \(f(X)\)에 대한 \(X\)의 미분은 다음과 같이 정의한다.

 

\[ \frac{d f}{d X} = \begin{bmatrix} \frac{\partial f}{\partial x_{11}} & \frac{\partial f}{\partial x_{12}} & \cdots & \frac{\partial f}{\partial x_{1n}} \\ \frac{\partial f}{\partial x_{21}} & \frac{\partial f}{\partial x_{22}} & \cdots & \frac{\partial f}{\partial x_{2n}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f}{\partial x_{m1}} & \frac{\partial f}{\partial x_{m2}} & \cdots & \frac{\partial f}{\partial x_{mn}} \end{bmatrix} \ \ \ \in \mathbb{R}^{m \times n} \]

 

정의에 의하면 스칼라 함수를 행렬의 모든 구성 성분별로 미분하면 된다.

예제로서, \(X \in \mathbb{R}^{n \times n}\)와 \(W \in \mathbb{R}^{n \times n} \) 가 각각 정방 행렬이고 스칼라 함수가 \(f(X)=trace(WX)\)로 주어졌을 때, \(f(X)\)를 \(X\)로 미분하면 다음과 같다.

 

\[ \begin{align} \frac{d f}{d X} & = \frac{d}{dX} ( w_{11} x_{11} + w_{12} x_{21} + \cdots + w_{1n} x_{n1} \\ \\ & \ \ \ \ \ \ \ \ \ \ + w_{21} x_{12} + w_{22} x_{22} + \cdots + w_{2n} x_{n2} \\ \\ & \ \ \ \ \ \ \ \ \ \ + \cdots + w_{n1} x_{1n} + w_{n2} x_{2n} + \cdots + w_{nn} x_{nn} ) \\ \\ & = \begin{bmatrix} w_{11} & w_{21} & \cdots & w_{n1} \\ w_{12} & w_{22} & \cdots & w_{n2} \\ \vdots & \vdots & \ddots & \vdots \\ w_{1n} & w_{2n} & \cdots & w_{nn} \end{bmatrix} \\ \\ & = W^T \end{align} \]

 

그렇다면 벡터함수를 행렬로 미분하면 어떻게 될까.

스칼라 함수를 벡터로 미분하면 그 결과가 벡터로 나오고, 벡터를 벡터로 미분하면 결과가 행렬로 나오므로, 벡터 함수를 행렬로 미분하면 결과가 3차 텐서로 나올 것으로 예상된다. 그래디언트와 자코비안 그리고 스칼라 함수에 대한 행렬 미분의 정의와 맥락이 일치하도록 벡터에 대한 행렬 미분을 정의해 보자.

 

 

먼저 스칼라 함수 \(f\)에 대한 벡터 \(\mathbf{x}\)의 미분은 스칼라 함수를 벡터의 구성 성분으로 미분한 것으로 정의하였다.

 

 

미분의 결과인 그래디언트의 길이는 벡터 \(\mathbf{x}\)의 길이와 같다.

그리고 벡터 함수 \(\mathbf{f}\)에 대한 벡터 \(\mathbf{x}\)의 미분은 자코비안 행렬의 한 열(coulumn)을 벡터 함수의 각 구성 성분인 스칼라 함수를 벡터로 미분한 것으로 정의하였다.

 

 

미분의 결과인 자코비안 행렬의 행은 벡터 \(\mathbf{x}\)의 길이와 같고, 열은 벡터 함수 \(\mathbf{f}\)의 길이와 같다.

한편 스칼라 함수 \(f\)에 대한 행렬 \(X\)의 미분은 스칼라 함수를 행렬의 구성 성분으로 미분한 것으로 정의하였다.

 

 

미분의 결과인 행렬의 사이즈는 행렬 \(X\)의 사이즈와 같다.

그렇다면 벡터 함수 \(\mathbf{f}\)에 대한 행렬 \(X\)의 미분은 3차원 텐서의 한 행렬을 벡터 함수의 각 구성 성분인 스칼라 함수를 행렬로 미분한 것으로 정의하면 될 것이다.

 

 

미분의 결과인 3차원 텐서의 사이즈는 행과 열은 행렬 \(X\)와 같고, 깊이(depth)는 벡터 함수 \(\mathbf{f}\)의 길이와 같다.

이와 같은 벡터 함수에 대한 행렬의 미분은 역전파(backpropagation) 알고리즘으로 신경망을 학습할 때 연쇄법칙에 의한 미분 관계식을 단순하게 만들어 준다.

 

 

 

댓글0