미분의 일반화: 그래디언트 행렬과 행렬 미분
📂다변수벡터해석 미분의 일반화: 그래디언트 행렬과 행렬 미분 정의 스칼라 함수 f : R n × n → R f : \mathbb{R}^{n \times n} \to \mathbb{R} f : R n × n → R 와 행렬 X = [ x i j ] ∈ R n × n \mathbf{X} = [x_{ij}] \in \mathbb{R}^{n \times n} X = [ x ij ] ∈ R n × n 에 대해서, 그래디언트 행렬 ∇ X f \nabla_{\mathbf{X}} f ∇ X f 를 다음과 같이 정의한다.
[ ∇ X f ] i j = ∂ f ∂ x i j ( i , j = 1 , … , n )
[\nabla_{\mathbf{X}} f]_{ij} = \dfrac{\partial f}{\partial x_{ij}} \quad (i,j=1,\dots,n)
[ ∇ X f ] ij = ∂ x ij ∂ f ( i , j = 1 , … , n )
∇ X f = ∂ f ∂ X = [ ∂ f ∂ x 11 ⋯ ∂ f ∂ x 1 n ⋮ ⋱ ⋮ ∂ f ∂ x n 1 ⋯ ∂ f ∂ x n 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}
∇ X f = ∂ X ∂ f = ∂ x 11 ∂ f ⋮ ∂ x n 1 ∂ f ⋯ ⋱ ⋯ ∂ x 1 n ∂ f ⋮ ∂ x nn ∂ f
설명 행렬 이라는게 벡터 의 모양을 바꾼 것이라 생각하면, 그래디언트 로부터 자연스럽게 일반화 가능하다. 애초에 그래디언트라는 것도 벡터로 미분하는 것이 아닌, 벡터의 각 성분별로 미분한 것을 다시 벡터로 만든것에 불과하다. 그러면 행렬로 미분한다는 개념도 정말 행렬로 미분하는 것이 아니라 행렬의 각 성분으로 미분한 것을 다시 행렬로 만드는 것일 뿐이다. 본질적으로는 다변수 함수의 미분과 다를 것이 없다는 것을 기억하자. 물론 굳이 말하자면 이건 행렬"로" 미분하는 것이 맞고, 행렬"을" 미분하는 것은 이와는 또 다르니 주의하자. 행렬"을" 미분한다는 것은 행렬함수 를 미분한다는 의미이다.
머신러닝, 딥러닝을 포함하여 데이터를 다루는 곳에서는 벡터와 행렬 계산, 그리고 이들의 미분값 계산이 빈번하게 등장하기 때문에 사용되는 표기법이라 생각해도 좋다. 연산자 ∇ X = ∂ ∂ X \nabla_{\mathbf{X}} = \dfrac{\partial}{\partial \mathbf{X}} ∇ X = ∂ X ∂ 를 행렬 그래디언트, 계산된 행렬 ∇ X f \nabla_{\mathbf{X}}f ∇ X f 를 그래디언트 행렬이라 부르면 적절할 것 같다.
같이 보기 일반화 위의 설명을 잘 생각해보면, 결국 본질적으로 미분당하는 값과 미분할 변수가 상수냐 다변수냐의 얘기이기 때문에 굳이 행렬에 국한할할 필요는 없다. 아래의 표와 같이 다양한 경우에 대해 정의할 수 있다.
변수 \ 값 스칼라 y y y 벡터 y \mathbf{y} y 행렬 Y \mathbf{Y} Y 스칼라 ∂ y ∂ x \dfrac{\partial y}{\partial x} ∂ x ∂ y ∂ y ∂ x \dfrac{\partial \mathbf{y}}{\partial x} ∂ x ∂ y ∂ Y ∂ x \dfrac{\partial \mathbf{Y}}{\partial x} ∂ x ∂ Y 벡터 ∂ y ∂ x \dfrac{\partial y}{\partial \mathbf{x}} ∂ x ∂ y ∂ y ∂ x \dfrac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂ x ∂ y 행렬 ∂ y ∂ X \dfrac{\partial y}{\partial \mathbf{X}} ∂ X ∂ y
라고 했지만 사실은 새로운 개념이 아니라 기존의 것들을 보기 좋게 하나의 표기법으로 통일한 것이다.
여기서 자코비안 이나 연쇄법칙 을 생각하면 함숫값 y \mathbf{y} y 는 열벡터 , 변수 x \mathbf{x} x 는 행벡터 로 취급하는 것이 자연스럽다.
y = [ y 1 y 2 ⋮ y m ] , x = [ x 1 x 2 ⋯ x n ]
\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}
y = y 1 y 2 ⋮ y m , x = [ x 1 x 2 ⋯ x n ]
그래서 ∂ y ∂ x \dfrac{\partial y}{\partial \mathbf{x}} ∂ x ∂ y 는 행벡터, ∂ y ∂ x \dfrac{\partial \mathbf{y}}{\partial x} ∂ x ∂ y 는 열벡터이다. ∂ y ∂ x \dfrac{\partial y}{\partial x} ∂ x ∂ y 가 스칼라이므로, 아래와 같이 자연스럽게 연쇄법칙 표현이 가능하다. 물리학 교재에서 그래디언트를 행벡터로 표기하는 것이 이러한 이유 때문이다. y = y ( x ) y = y(\mathbf{x}) y = y ( x ) , x = x ( t ) \mathbf{x} = \mathbf{x}(t) x = x ( t ) 라 하면,
∂ y ∂ t = ∂ y ∂ x d x d t = [ ∂ y ∂ x 1 ⋯ ∂ y ∂ x n ] [ d x 1 d t ⋮ d x n d t ] = ∑ i = 1 n ∂ y ∂ x i d x i d 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}
∂ t ∂ y = ∂ x ∂ y d t d x = [ ∂ x 1 ∂ y ⋯ ∂ x n ∂ y ] d t d x 1 ⋮ d t d x n = i = 1 ∑ n ∂ x i ∂ y d t d x i
표기법을 통일한 건 그렇다치고 이게 그래디언트인지 벡터값함수의 미분인지 헷갈리기 쉽다. 이럴 땐 ∂ ∂ x \dfrac{\partial }{\partial x} ∂ x ∂ 자체를 스칼라, ∂ ∂ x \dfrac{\partial }{\partial \mathbf{x}} ∂ x ∂ 자체를 벡터, ∂ ∂ X \dfrac{\partial }{\partial \mathbf{X}} ∂ X ∂ 자체를 행렬이라 생각하고, 위의 미분이 행렬의 크로네커 곱 ⊗ \otimes ⊗ 로 연결되어있다고 보면 계산이 쉽다. 자세한 내용은 아래를 참고하자.
스칼라를 스칼라로 미분 스칼라를 스칼라로 미분하는 경우는 보통의 미분 과 같다.
∂ y ∂ x = lim h → 0 y ( x + h ) − y ( x ) h
\dfrac{\partial y}{\partial x} = \lim\limits_{h \to 0} \dfrac{y(x+h) - y(x)}{h}
∂ x ∂ y = h → 0 lim h y ( x + h ) − y ( x )
크로네커 곱으로 표현하면,
∂ y ∂ x = ∂ ∂ x ⊗ y = ∂ y ∂ x
\dfrac{\partial y}{\partial x} = \dfrac{\partial }{\partial x} \otimes y = \dfrac{\partial y}{\partial x}
∂ x ∂ y = ∂ x ∂ ⊗ y = ∂ x ∂ y
벡터로 미분 이는 보통의 그래디언트 와 같다. 값이 스칼라, 변수가 행벡터이므로 그래디언트도 행벡터로 생각하는 것이 자연스럽다.
∂ y ∂ x = ∇ x y = [ ∂ y ∂ x 1 ⋯ ∂ y ∂ x n ]
\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}
∂ x ∂ y = ∇ x y = [ ∂ x 1 ∂ y ⋯ ∂ x n ∂ y ]
크로네커 곱으로 표현하면,
∂ y ∂ x = ∂ ∂ x ⊗ y = [ ∂ ∂ x 1 ⋯ ∂ ∂ x n ] ⊗ [ y ] = [ ∂ y ∂ x 1 ⋯ ∂ y ∂ x n ]
\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}
∂ x ∂ y = ∂ x ∂ ⊗ y = [ ∂ x 1 ∂ ⋯ ∂ x n ∂ ] ⊗ [ y ] = [ ∂ x 1 ∂ y ⋯ ∂ x n ∂ y ]
라플라시안 Δ y = ∇ 2 y \Delta y = \nabla^{2} y Δ y = ∇ 2 y 는 다음과 같다.
Δ y = ∇ 2 y = ∑ i = 1 n ∂ 2 y ∂ x i 2 = ( ∂ y ∂ x ) ( ∂ y ∂ x ) T = Tr ( ( ∂ y ∂ x ) T ( ∂ y ∂ x ) )
\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)
Δ y = ∇ 2 y = i = 1 ∑ n ∂ x i 2 ∂ 2 y = ( ∂ x ∂ y ) ( ∂ x ∂ y ) T = Tr ( ( ∂ x ∂ y ) T ( ∂ x ∂ y ) )
( ∂ y ∂ x ) T ( ∂ y ∂ x ) \left( \dfrac{\partial y}{\partial \mathbf{x}} \right)^{\mathsf{T}} \left( \dfrac{\partial y}{\partial \mathbf{x}} \right) ( ∂ x ∂ y ) T ( ∂ x ∂ y ) 는 헤시안 이 된다.
H ( y ) = ( ∂ y ∂ x ) T ( ∂ y ∂ x ) = [ ∂ 2 y ∂ x 1 2 ⋯ ∂ 2 y ∂ x 1 ∂ x n ⋮ ⋱ ⋮ ∂ 2 y ∂ x n ∂ x 1 ⋯ ∂ 2 y ∂ x n 2 ]
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}
H ( y ) = ( ∂ x ∂ y ) T ( ∂ x ∂ y ) = ∂ x 1 2 ∂ 2 y ⋮ ∂ x n ∂ x 1 ∂ 2 y ⋯ ⋱ ⋯ ∂ x 1 ∂ x n ∂ 2 y ⋮ ∂ x n 2 ∂ 2 y
행렬로 미분 위에서 정의한 행렬 그래디언트이다.
∇ X y = ∂ y ∂ X = [ ∂ y ∂ x 11 ⋯ ∂ y ∂ x 1 n ⋮ ⋱ ⋮ ∂ y ∂ x m 1 ⋯ ∂ y ∂ x m n ]
\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}
∇ X y = ∂ X ∂ y = ∂ x 11 ∂ y ⋮ ∂ x m 1 ∂ y ⋯ ⋱ ⋯ ∂ x 1 n ∂ y ⋮ ∂ x mn ∂ y
크로네커 곱으로 표현하면,
∂ y ∂ X = ∂ ∂ X ⊗ y = [ ∂ ∂ x 11 ⋯ ∂ ∂ x 1 n ⋮ ⋱ ⋮ ∂ ∂ x m 1 ⋯ ∂ ∂ x m n ] ⊗ [ y ] = [ ∂ y ∂ x 11 ⋯ ∂ y ∂ x 1 n ⋮ ⋱ ⋮ ∂ y ∂ x m 1 ⋯ ∂ y ∂ x m n ]
\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}
∂ X ∂ y = ∂ X ∂ ⊗ y = ∂ x 11 ∂ ⋮ ∂ x m 1 ∂ ⋯ ⋱ ⋯ ∂ x 1 n ∂ ⋮ ∂ x mn ∂ ⊗ [ y ] = ∂ x 11 ∂ y ⋮ ∂ x m 1 ∂ y ⋯ ⋱ ⋯ ∂ x 1 n ∂ y ⋮ ∂ x mn ∂ y
벡터를 스칼라로 미분 보통의 벡터값 함수의 미분 과 같다.
∂ y ∂ x = y ′ ( x ) = lim h → 0 y ( x + h ) − y ( x ) h
\dfrac{\partial \mathbf{y}}{\partial x} = \mathbf{y}^{\prime}(x) = \lim\limits_{h \to 0} \dfrac{\mathbf{y}(x+h) - \mathbf{y}(x)}{h}
∂ x ∂ y = y ′ ( x ) = h → 0 lim h y ( x + h ) − y ( x )
함숫값 y \mathbf{y} y 가 열벡터, 변수 x x x 가 스칼라이므로 계산 결과는 열벡터가 된다. 크로네커 곱으로 표현하면,
∂ y ∂ x = ∂ ∂ x ⊗ y = [ ∂ ∂ x ] ⊗ [ y 1 ⋮ y m ] = [ ∂ y 1 ∂ x ⋮ ∂ y m ∂ 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}
∂ x ∂ y = ∂ x ∂ ⊗ y = [ ∂ x ∂ ] ⊗ y 1 ⋮ y m = ∂ x ∂ y 1 ⋮ ∂ x ∂ y m
벡터로 미분 벡터를 벡터로 미분하는 경우는 자코비안 과 같다. 자코비안의 정의를 보면,
∂ y ∂ x = ∂ ( y 1 , y 2 , … , y m ) ∂ ( x 1 , x 2 , … , x n ) = [ ∂ y 1 ∂ x 1 ⋯ ∂ y 1 ∂ x n ⋮ ⋱ ⋮ ∂ y m ∂ x 1 ⋯ ∂ y m ∂ x n ]
\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}
∂ x ∂ y = ∂ ( x 1 , x 2 , … , x n ) ∂ ( y 1 , y 2 , … , y m ) = ∂ x 1 ∂ y 1 ⋮ ∂ x 1 ∂ y m ⋯ ⋱ ⋯ ∂ x n ∂ y 1 ⋮ ∂ x n ∂ y m
이는 크로네커 곱으로 표현한 것과 같은 결과이다.
∂ y ∂ x = ∂ ∂ x ⊗ y = [ ∂ ∂ x 1 ⋯ ∂ ∂ x n ] ⊗ [ y 1 ⋮ y m ] = [ ∂ y 1 ∂ x 1 ⋯ ∂ y 1 ∂ x n ⋮ ⋱ ⋮ ∂ y m ∂ x 1 ⋯ ∂ y m ∂ x n ]
\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}
∂ x ∂ y = ∂ x ∂ ⊗ y = [ ∂ x 1 ∂ ⋯ ∂ x n ∂ ] ⊗ y 1 ⋮ y m = ∂ x 1 ∂ y 1 ⋮ ∂ x 1 ∂ y m ⋯ ⋱ ⋯ ∂ x n ∂ y 1 ⋮ ∂ x n ∂ y m
행렬을 스칼라로 미분 이는 행렬 함수의 미분 와 같다. 크로네커 곱으로 표현하면,
∂ Y ∂ x = ∂ ∂ x ⊗ Y = [ ∂ ∂ x ] ⊗ [ y 11 y 12 ⋯ y 1 n y 21 y 22 ⋯ y 2 n ⋮ ⋮ ⋱ ⋮ y m 1 y m 2 ⋯ y m n ] = [ ∂ y 11 ∂ x ⋯ ∂ y 1 n ∂ x ⋮ ⋱ ⋮ ∂ y m 1 ∂ x ⋯ ∂ y m n ∂ 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_{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}
∂ x ∂ Y = ∂ x ∂ ⊗ Y = [ ∂ x ∂ ] ⊗ y 11 y 21 ⋮ y m 1 y 12 y 22 ⋮ y m 2 ⋯ ⋯ ⋱ ⋯ y 1 n y 2 n ⋮ y mn = ∂ x ∂ y 11 ⋮ ∂ x ∂ y m 1 ⋯ ⋱ ⋯ ∂ x ∂ y 1 n ⋮ ∂ x ∂ y mn