https://fastcampus.co.kr/data_online_aideep
1. Multivariate Scalar Function (다변수 스칼라함수 = 벡터변수 스칼라함수)
- 목적함수 (손실함수, 비용함수): 함수값을 줄이면 어떠한 목적이 달성되는 함수
- 대부분의 ML 알고리즘은 목적함수의 최소값을 만드는 point를 찾아내는 과정을 거침
- 목적함수들이 다변수 스칼라함수
- 입력이 여러 개이고 출력이 하나인 함수
- Input: Vector
- Output: Scalar
2. Gradient
Input Vector의 각 변수에 대해
Scalar Function을 편미분(Partial Derivative)한 값을 원소로 가지는 Vector
(Multivariate Scalar Function을 Vector에 대해 미분)
$\bigtriangledown f = \left [ \frac{\partial f}{\partial x_{1}}, \frac{\partial f}{\partial x_{2}},\cdots, \frac{\partial f}{\partial x_{n}} \right ]$
3. Gradient를 구하는 방법
1) $f(\textbf{x})$를 Scalar 형태로 전개 후 각 변수에 대해 편미분 (Partial Derivative)
$\left [ \frac{\partial f}{\partial x_{1}}, \frac{\partial f}{\partial x_{2}},\cdots, \frac{\partial f}{\partial x_{n}} \right ]$
- $f(\textbf{x})$를 Scalar 형태로 전개
- 각 변수에 대해 편미분 후 위의 식형태로 Vector 표현
ex) $y=f(x_{1}, x_{2}) = f(\left [ x_{1}, x_{2} \right ]) = f(\textbf{x}) = \textbf{x}\textbf{x}^{T}$
$\textbf{x}$는 Row Vector 이기 때문에 $\textbf{x}\textbf{x}^{T}$ 형태는 $\textbf{x}$ Vector 끼리 내적한 결과이다
$y=f(x_{1}, x_{2}) = f(\left [ x_{1}, x_{2} \right ]) = f(\textbf{x}) = \textbf{x}\textbf{x}^{T} = x_{1}^{2} + x_{2}^{2}$
$\bigtriangledown f = \left [ 2x_{1}, 2x_{2} \right ]$
2) $f(\textbf{x})$를 Vector 형태로 전개 후 $df = d \textbf{x} \cdot \frac{\partial f}{\partial \textbf{x}^{T}}$ 이용
$df = d \textbf{x} \cdot \frac{\partial f}{\partial \textbf{x}^{T}}$
- $f(\textbf{x})$을 Input Vector를 이용하여 전개
- $df = d \textbf{x} \cdot \frac{\partial f}{\partial \textbf{x}^{T}}$을 이용
- $df$를 구하고
- $d \textbf{x}$와 내적한 뒤의 값이 Gradient
즉, $df$를 구하고 $d \textbf{x}$뒤에 곱해진 것이 Gradient 이다
ex) $y=f(x_{1}, x_{2}) = f(\left [ x_{1}, x_{2} \right ]) = f(\textbf{x}) = \textbf{x}\textbf{x}^{T}$
$df=f(\textbf{x}+d\textbf{x}) - f(\textbf{x}) = (\textbf{x}+d\textbf{x})(\textbf{x}+d\textbf{x})^{T} - \textbf{x}\textbf{x}^{T}$
$=d\textbf{x}\textbf{x}^{T} + \textbf{x}d\textbf{x}^{T} $ 인데, $\textbf{v}\textbf{w}^{T}$ 형태는 Row Vector일 경우 내적이다
따라서 $d\textbf{x}\textbf{x}^{T}$와 $\textbf{x}d\textbf{x}^{T}$ 모두 값이 Scalar 이므로
해당 값을 Transpose 시켜도 본래 값과 동일하다
즉, $\textbf{x}d\textbf{x}^{T} = (\textbf{x}d\textbf{x}^{T})^{T} = d\textbf{x}\textbf{x}^{T} $ 이므로
$df=f(\textbf{x}+d\textbf{x}) - f(\textbf{x}) = (\textbf{x}+d\textbf{x})(\textbf{x}+d\textbf{x})^{T} - \textbf{x}\textbf{x}^{T} = 2d\textbf{x}\textbf{x}^{T} + d\textbf{x}d\textbf{x}^{T}$ 이다
여기서 $d\textbf{x}d\textbf{x}^{T}$는 생략 가능하다
- $d\textbf{x}d\textbf{x}^{T}$에서 각 원소는 $(d\textbf{x}_{n})^{2}$이다
- $d\textbf{x}_{n}$으로 나누어도 $d\textbf{x}_{n}$가 하나는 존재하므로 결국 0으로 수렴한다
따라서 $2d\textbf{x}\textbf{x}^{T}$에서 $d\textbf{x}$ 뒤에 있는 $2d\textbf{x}^{T}$가 Gradient 이다
4. $df$ 구하기
$df = \displaystyle \lim_{ \Delta x_{1}\to 0, \Delta x_{2}\to 0} f(x_{1}+\Delta x_{1}, x_{2}+\Delta x_{2}) - f(x_{1}, x_{2})$
$=\displaystyle \lim_{ \Delta x_{1}\to 0, \Delta x_{2}\to 0} f(x_{1}+\Delta x_{1}, x_{2}+\Delta x_{2}) - f(x_{1}, x_{2}) + f(x_{1}, x_{2}+\Delta x_{2}) - f(x_{1}, x_{2}+\Delta x_{2})$
$=\displaystyle \lim_{ \Delta x_{1}\to 0, \Delta x_{2}\to 0} \frac{f(x_{1}+\Delta x_{1}, x_{2}+\Delta x_{2}) - f(x_{1}, x_{2}+\Delta x_{2})}{\Delta x_{1}} \Delta x_{1} + \frac{f(x_{1}, x_{2}+\Delta x_{2}) - f(x_{1}, x_{2})}{\Delta x_{2}} \Delta x_{2}$
$=\frac{\partial f}{\partial x_{1}} \mathrm{d} x_{1} + \frac{\partial f}{\partial x_{2}} \mathrm{d} x_{2}$
$= \left [ dx_{1}, dx_{2} \right ] \cdot \begin{bmatrix}
\frac{\partial f}{\partial x_{1}} \\ \frac{\partial f}{\partial x_{2}}
\end{bmatrix}$
$=d\textbf{x} \cdot \frac{\partial f }{\partial \textbf{x}^{T}}$
결론: $df = d\textbf{x} \cdot \frac{\partial f }{\partial \textbf{x}^{T}}$
Tip: $df$를 곱의 미분법을 이용해 쉽게 구할 수 있다!
$(fg)^{'} = f^{'}g + fg^{'}$를 이용하자
$f = \textbf{x}\textbf{x}^{T}$라 할 때,
$df = d\textbf{x}\textbf{x}^{T} + \textbf{x}d\textbf{x}^{T} = 2d\textbf{x}\textbf{x}^{T} = d\textbf{x} \cdot 2\textbf{x}^{T}$ 이므로
$2\textbf{x}^{T}$가 $\frac{\partial f}{\partial \textbf{x}^{T}}$ 이자 gradient 이다