[선형대수학] 행렬미분 (Matrix Calculus)

행렬 미분과 관련된 내용을 정리합니다. (Updating)

익숙한 함수의 형태는 $\text { scalar } x \rightarrow \text { scalar } f$와 같이 입력과 출력이 스칼라인 경우이다. 입력/출력이 여러개인 다변수함수를 벡터/행렬의 관점에서 이해해보자.

함수와 벡터/행렬

Matrix or vector derivatives

1. 입력변수/독립변수가 여러개인 함수의 경우, 벡터와 행렬을 입력으로 가진 것으로 생각할 수 있다.
  • $\text { vector } x \rightarrow \text { scalar } f$ : $f\left(\left[\begin{array}{l}
    x_{1} \\
    x_{2}
    \end{array}\right]\right)=f(x)=f\left(x_{1}, x_{2}\right)$

벡터 ⇒ 행렬로 확장하면 다음과 같이 나타낼 수 있다.

  • $\text { matrix } x \rightarrow \text { scalar } f$ : $f\left(\left[\begin{array}{ll}
    x_{11} & x_{12} \\
    x_{21} & x_{22}
    \end{array}\right]\right)=f(X)=f\left(x_{11}, \cdots, x_{22}\right)$
2. 출력변수/종속변수가 여러개인 함수의 경우, 여러개의 함수를 합쳐놓은 것으로 생각할 수 있다.
  • $\text { scalar } x \rightarrow \text { vector } f$ :
    $f(x)=\left[\begin{array}{l}
    f_{1}(x) \\
    f_{2}(x)
    \end{array}\right]$

  • $\text { scalar } x \rightarrow \text { matrix } f$ : $f(x)=\left[\begin{array}{ll}
    f_{11}(x) & f_{12}(x) \\
    f_{21}(x) & f_{22}(x)
    \end{array}\right]$

3. 출력변수와 입력변수 모두 여러개인 함수는 벡터/행렬을 입력과 출력으로 가진 것으로 이해할 수 있다.
  • $\text { vector } x \rightarrow \text { vector } f$ : $f(x)=\left[\begin{array}{l}
    f_{1}\left(x_{1}, x_{2}\right) \\
    f_{2}\left(x_{1}, x_{2}\right)
    \end{array}\right]$

  • $\text { vector } x \rightarrow \text { matrix } f$ : $f(x)=\left[\begin{array}{ll}
    f_{11}\left(x_{1}, x_{2}\right) & f_{12}\left(x_{1}, x_{2}\right) \\
    f_{21}\left(x_{1}, x_{2}\right) & f_{22}\left(x_{1}, x_{2}\right)
    \end{array}\right]$

1,2,3과 같이 입력 혹은 출력이 행렬인 함수를 미분하는 것을 행렬미분 matrix differentiation이라고 한다. (⇒ 실제로는 편미분 partial derivative에 해당함)

행렬 미분

머신러닝에서 출력이 스칼라고, 입력이 벡터인 다변수 함수를 사용하는 경우가 많기 때문에, 편미분이 $\frac{\partial f}{\partial x_{1}}, \frac{\partial f}{\partial x_{2}}, \cdots$ 여러 개가 존재할 수 있다.

행렬미분의 표현법

행렬미분을 표기함에 있어 Numerator-layout notation 분자중심 & Denominator-layout notation 분모중심 2가지가 있다.

📓 정리한 표는 다음과 같다

행렬 미분 - 분모중심표기법

분모중심 표기법으로 결과의 형태를 살펴보면 다음과 같다.

  • 스칼라를 벡터로 미분 ⇒ 열벡터 (gradient vector 그래디언트 벡터) : $\nabla y=\frac{\partial y}{\partial \mathbf{x}}=\left[\begin{array}{c}
    \frac{\partial y}{\partial x_{1}} \\
    \frac{\partial y}{\partial x_{2}} \\
    \vdots \\
    \frac{\partial y}{\partial x_{n}}
    \end{array}\right]$

  • 벡터를 스칼라로 미분 ⇒ 행벡터 : $\frac{\partial \mathbf{y}}{\partial x}=\left[\begin{array}{llll}
    \frac{\partial y_{1}}{\partial x} & \frac{\partial y_{2}}{\partial x} & \cdots & \frac{\partial y_{m}}{\partial x}
    \end{array}\right]$

  • 벡터를 벡터로 미분 ⇒ 행렬 : $\frac{\partial \mathbf{y}}{\partial \mathbf{x}}=\left[\begin{array}{cccc}
    \frac{\partial y_{1}}{\partial x_{1}} & \frac{\partial y_{2}}{\partial x_{1}} & \cdots & \frac{\partial y_{m}}{\partial x_{1}} \\
    \frac{\partial y_{1}}{\partial x_{2}} & \frac{\partial y_{2}}{\partial x_{2}} & \cdots & \frac{\partial y_{m}}{\partial x_{2}} \\
    \vdots & \vdots & \ddots & \vdots \\
    \frac{\partial y_{1}}{\partial x_{n}} & \frac{\partial y_{2}}{\partial x_{n}} & \cdots & \frac{\partial y_{m}}{\partial x_{n}}
    \end{array}\right]$

  • 스칼라를 행렬로 미분 ⇒ 행렬 : $\frac{\partial y}{\partial \mathbf{X}}=\left[\begin{array}{cccc}
    \frac{\partial y}{\partial x_{11}} & \frac{\partial y}{\partial x_{12}} & \cdots & \frac{\partial y}{\partial x_{1 q}} \\
    \frac{\partial y}{\partial x_{21}} & \frac{\partial y}{\partial x_{22}} & \cdots & \frac{\partial y}{\partial x_{2 q}} \\
    \vdots & \vdots & \ddots & \vdots \\
    \frac{\partial y}{\partial x_{p 1}} & \frac{\partial y}{\partial x_{p 2}} & \cdots & \frac{\partial y}{\partial x_{p q}}
    \end{array}\right]$

행렬미분법칙

선형 모형 미분

선형 모형 미분 ⇒ 가중치 벡터
$y=w^{T} x$ ⇒ $\nabla y=\frac{\partial w^{T} x}{\partial x}=\frac{\partial x^{T} w}{\partial x}=w$

이차 형식(Quadratic Form)

이차 형식 미분 ⇒ 행렬과 벡터의 곱
$y=x^{T} A x$ ⇒ $\nabla y=\frac{\partial x^{T} A x}{\partial x}=\left(A+A^{T}\right) x$

스칼라 미분 vs 벡터/행렬 미분

스칼라 미분 벡터/행렬 미분
$ax \rightarrow a$ $\quad w^{T} x \rightarrow w$
$a x^{2} \rightarrow 2 a x$ $\quad x^{T} A x \rightarrow\left(A+A^{T}\right) x$

Source&Reference : 데이터사이언스스쿨