https://fastcampus.co.kr/data_online_aideep
혁펜하임의 AI DEEP DIVE (Online.) | 패스트캠퍼스
카이스트 박사, 삼성전자 연구원 출신 인플루언서 혁펜하임과 함께하는 AI 딥러닝 강의! 필수 기초 수학 이론과 인공지능 핵심 이론을 넘어 모델 실습 리뷰까지 확장된 커리큘럼으로 기초 학습
fastcampus.co.kr
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 이다