머신 러닝을 공부하다보면 항상 벡터 미분이라는 개념이 등장하고,
신경망 구조의 backpropagation의 근본 원리이기 때문에 아주 중요한 개념이 된다.
다만, 일반적인 미분과 달리 의미와 정의부터 매우 생소하고,
미분 결과에서 전치(transpose)가 붙는 규칙을 이해하기 힘들어 종종 애를 먹는 경우가 있다.
이번 포스팅에서는 매우 기초적인 예제를 중심으로 벡터 미분의 의미와 트랜스포즈가 붙는 이유를 설명하려고 한다.
벡터로 미분 정의
다음과 같은 열벡터 \(x\)를 생각해보자. 일반적으로 벡터라하면 열벡터를 의미한다.
$$ x = (x_1, x_2, ... , x_n)^T $$
벡터 \(x\)와 관계를 가지는 함수 \(f(x)\)를 생각해보자. 여기서 이 함수\(f(x)\)의 출력 값은 스칼라, 벡터, 행렬 형태 모두가 될 수 있는데, 모든 경우에 대해 정의는 다음과 같이 내려진다.
$$ \frac{\partial f(x)}{\partial x} = ( \frac{\partial f(x)}{\partial x_1}, \frac{\partial f(x)}{\partial x_2}, ... ,\frac{\partial f(x)}{\partial x_n}) $$
이 식 하나만 확실히 기억하면 된다! 결과는 일단 각 \(x_i\)요소에 대하여 행 벡터 형태로 나온다!
참고 : 분자형, 분모형 두 가지 벡터 미분 정의가 있는데(wikipedia 영어 문서 참조), 여기서는 분자형으로 정의한 경우이다!
벡터 미분 의미
의미는 사실 미분의 원래 정의대로 간단하게 생각하면 된다. 각 \(x_i\) 성분이 해당 값 근방에서 아주 작게 변화할 때, \(f(x)\)가 어떤 기울기로 변화하는지를 각 \(\frac{\partial f(x)}{\partial x}\)의 i번째 원소가 나타낸다고 생각하면 된다.
스칼라를 벡터로 미분
예를 들어, \(f(x) = x_1^2 + 2 x_2 - 3 x_3\) 라는 출력 값이 스칼라인 경우를 예로 들어보자.
$$ \frac{\partial f(x)}{\partial x} = (2x_1, 2, -3) $$
이 된다는 것을 편미분 방법을 생각하면 쉽게 이해할 수 있다.
벡터를 벡터로 미분
이번에는 \(f(x) = (x_1^2 + 2 x_2 - 3 x_3, x_1 - x_2^2 + x_1x_3)^T\) 라는 출력 값이 2 * 1 차원의 벡터인 경우를 생각해보자.
일단 각 \(x_i\) 요소에 대하여 미분 한 결과는
$$ \frac{\partial f(x)}{\partial x_1} = (2 x_1, 1 + x_3)^T $$
$$ \frac{\partial f(x)}{\partial x_2} = (2, -2 x_2)^T $$
$$ \frac{\partial f(x)}{\partial x_3} = (-3, x_1)^T $$
형태로 등장한다. 이제 각 2 * 1 차원 벡터 3개를 행 순서대로 배치해주면 된다.
다음 결과가 최종 output이 된다.
행렬을 벡터로 미분
행렬을 벡터로 미분하는 방법은 자코비안 형태를 생각하면 된다.
$$ f(x) = (f_1(x), f_2(x), ..., f_m(x)) $$
라고 가정하면,
처럼 행렬 미분이 정의가 된다.
각 미분 원소 성분은
$$ (\frac{\partial f}{\partial x})_{ij} =\frac{\partial f_i}{\partial x_j} $$
로 정의할 수 있다.
벡터 미분 예제
cs224n 강좌를 수강하면서 lecture 3에 벡터 미분에 관한 내용이 등장한다.
여기서 다루었던 내용을 가지고 이에 관한 간단한 풀이를 작성하면서 예제를 다루어보겠다.
Transpose가 붙지 않는 예제
이제 벡터 미분의 식을 보면서 transpose가 붙는 원리를 간단히 파헤쳐보려 한다.
첫 번째로, 가장 간단한 경우인 \( f = Wx + b \)를 살펴보자.
형상을 맞추기 위하여, \( W \)는 m * n 차원, \( x \)는 n * 1차원(열벡터), \( b \)는 m * 1차원(열벡터)이라고 가정해보자.
여기서 \(\frac{\partial f}{\partial x} = W\)로, transpose가 붙지 않는 값이 벡터 미분 결과로 등장하는데,
정의에 입각해서 유도를 해보자, \( f \)도 m * 1차원의 벡터이고, 행렬 곱 전개 과정을 생각해보면 \( f \)는 다음과 같다.
$$ f = (W_{11}x_1 + ... + W_{1n}x_n + b_1, ..., W_{m1}x_1 +\; ...\; + W_{mn}x_n + b_m)^T$$
이제 벡터 미분 정의인 다음 식을 생각하고 각 원소를 풀어내보면,
$$( \frac{\partial f(x)}{\partial x_1}, \frac{\partial f(x)}{\partial x_2}, ... ,\frac{\partial f(x)}{\partial x_n}) $$
$$ = ((W_{11}, ..., W_{m1})^T, ... , (W_{1n}, ..., W_{mn})^T) $$
$$ = W $$
로 형상이 \( W \)와 완전히 같음을 알 수 있다. 즉, 이래서 트랜스포즈(전치)가 최종 결과에 붙지 않는 것이다.
Transpose가 붙는 예제
이번에는 \( f = u^T h \)를 생각해보자. 여기서 u에 대해 미분을 진행할 텐데,
u와 h는 원래 모두 n * 1 차원의 열 벡터이고 이 둘 간의 내적을 하는 경우라 생각하면 된다.
여기서 여기서 \(\frac{\partial f}{\partial u} = h^T\)로 transpose가 붙는 형상이 벡터 미분 결과로 나온다.
역시 행렬 곱 전개 과정으로 \( f\)를 풀어보면,
$$ f = u_1h_1 + ... + u_nh_n$$
이 될 것이고, 마찬가지로 벡터 미분 정의에 입각하여 미분 결과의 각 원소를 풀어보면,
$$( \frac{\partial f}{\partial u_1}, \frac{\partial f}{\partial u_2}, ... ,\frac{\partial f}{\partial u_n}) $$
$$ = (h_1, h_2, ..., h_n) $$
$$ = h^T $$
가 되는 것을 확인해볼 수 있다!
즉, 벡터 미분 결과가 기본으로 행 벡터 형태로 정의(분자형 정의에서)되기 때문에 원래 형상에서 전치된 결과로 나타난다 정도로 이해해주면 되고, 다른 경우들도 유도를 해보면서 transpose가 붙는지 여부를 체크해보면 된다! 몇 가지 경우에 대한 공식 예시가 있기는 하지만 외우기 너무 복잡하기에 그럴때는 이렇게 유도를 진행해보자!
'수학' 카테고리의 다른 글
하모닉 수(조화수, Harmonic number) (0) | 2021.11.03 |
---|