모바일 앱 환경에서는 latex 수식이 깨져 나타나므로 가급적 웹 환경에서 봐주시길 바랍니다.
오늘은 Gradient descent에 대한 다른 관점에서의 분석을 살펴보고자 한다.
우선, 아래 링크의 글과 그 뒤에 이어지는 내용들에 대해서는 충분히 알고 있다고 전제할 것이며,
(벡터) 미적분학에서의 내용들은 필요한 만큼만 언급하겠다.
자세한 내용이 궁금하면 (벡터) 미적분학 책을 참고하기 바란다.
https://kyteris0624.tistory.com/20
Deep dive into optimization: Gradient descent (1)
"모바일 앱 환경에서는 latex이 깨져 나타나므로, 가급적 웹 환경에서 봐주시기 바랍니다.:)" 오늘부터 이제 본격적인 딥러닝 최적화 (Optimization)에 대한 이야기가 시작된다. 그 첫 번째 주제는 현
kyteris0624.tistory.com
먼저 대전제를 우선 언급하자. 우린 Euclidean space에 한정해서 이야기할 것이다.
그리고 다음과 같은 '미분 가능한' 함수에 대해서 이야기할 것이다. $f : \mathbb{R}^n \rightarrow \mathbb{R}$
manifold 와 같은 general, abstract space에 대해서는 우선 이 시리즈의 글에서는 논하지 않을 것이다.
그리고 inner product는 dot product라고 가정할 것이고, basis vector는 normal unit vector를 가정할 것이다.
즉, 좌표축을 직교좌표계로 설정한 것이다.
위 두 가정은 수학적 엄밀성을 갖추기 위함이다.
먼저 Directional derivative 부터 정의하자.
$z = f(x, y) : \mathbb{R}^2 \rightarrow \mathbb{R}$이면, 이들의 directional derivative는 다음과 같이 정의된다.
단위 벡터 $u = (a, b)$방향에 대해서,
$D_{u} f(x_0, y_0) = \lim_{h \rightarrow 0} \frac{f(x_0 + ha, y_0 + hb) - f(x_0, y_0)}{h}$
이는 흔히 말하는 Partial derivative를 일반화한 것으로도 볼 수 있다.
단위벡터 $u$가 standard normal (basis) vector이면, 위 정의는 정확하게 Partial derivative와 일대일 대응이다.
우리는 미분가능한 $f$만 고려할 것이므로, 모든 단위벡터 $u = (a, b)$에 대해서 $f$는 directional derivative를 갖고 이는 다음과 같이 바꿔서 표현할 수 있다.
$D_u f(x, y) = f_x(x, y) a + f_y (x, y) b$
이때 $f_x, f_y$는 각각 x에 대한, y에 대한 partial derivative이다.
이를 통해 우리는 directional derivative를 두 벡터의 내적으로 표현할 수 있다.
$D_u f(x, y) = (f_x, f_y) \cdot u$
이 내적에서 첫 번째 나오는 벡터는 특별한 이름을 붙일 수 있다.
이를 우리는 gradient vector라고 이름을 붙이고, $\nabla f$로 표기하며 'del f'라 읽는다.
즉, gradient vector는 다음과 같이 정의된다.
$\nabla f(x, y) = (f_x(x, y), f_y(x, y)) = \frac{\partial f}{\partial x} i + \frac{\partial f}{\partial y} j$
이 정리를 통해 우리는 방향도함수의 최댓값은 $|\nabla f(x)|$ 임을 알 수 있고, 이는 정확히 기울기 벡터 $\nabla f(x)$가 방향 벡터 $u$와 일치할 때이다.
즉, gradient vector의 방향은 함수가 최대한으로 증가하는 방향을 나타내고 그때 변화율은 gradient vector의 크기이다.
이 성질은 다른 관점에서도 설명 가능하다.
$f(x, y) = c$의 집합을 생각해보자. 이는 level set이라고 부른다. 이때 level set의 접벡터 (tangent line or tangent space)에 대해서 정확히 수직인 벡터가 gradient vector이다.
즉, level set의 접벡터 방향은 함숫값이 변화하지 않는 방향이고, 그것에 대해 수직이라 함은 함숫값이 최대로 변화하는 방향을 가리킨다. 이는 gradient의 정의와 일맥상통한다.
(내적값이 두 벡터 방향의 alignment를 나타냄을 생각해보면 된다.)
마지막으로 이번 시리즈의 글에서 핵심이 될 내용을 언급하고 마무리하겠다.
$\nabla f$는 $f$라는 potential function의 'gradient field'이다. 이 gradient field는 vector field의 구체적인 예시 중에 하나이며, 우리는 벡터 미적분학에서 이 field에서의 선적분, 면적분 그리고 Fundamental theorem of line integral 등등 다양한 개념들을 배웠다. 하지만 이에 대해선 본 글에서 언급하지 않겠다.
이러한 '미적분학' 관점에서 바라보면 우리는 gradient descent를 다음과 같이 정의할 수 있다.
"(continuous) gradient flow의 discretization" 알고리즘이다.
flow는 시간의 변화에 따른 연속적인 움직임을 나타내는 것이라고 볼 수 있고, 이를 우리는 ordinary differential equation을 활용해 분석해보고자 한다.
즉, 위 문장에서 'continuous', 'discretization'은 '시간 축'을 기준으로 이야기하는 것이다.
이것이 본 시리즈 글의 시작이다.
다음 글에서 위 관점으로 보는 것을 바탕으로 하여 gradient descent에 대한 이론적 분석에 대한 이야기들을 서술하고, SGD 또한 비슷한 관점으로 바라보는 것을 바탕으로 하여 이론적 분석에 대한 이야기들을 서술할 것이다.
SGD 또한 '(continuous) gradient flow의 discretization version'인데, 다만 'stochastic noise'가 추가된 것이다.
즉, 시간의 변화에 따른 움직임에 'randomness'가 영향을 미치는 것이고, 이는 우리를 Stochastic differential equation의 세계로 초대한다.
앞으로 이러한 내용들에 대해 하나하나 서술해보자.
'Deep dive into Optimization' 카테고리의 다른 글
Gradient descent 3. (심화) (1) | 2024.04.28 |
---|---|
Gradient descent 2. (심화) (2) | 2024.04.03 |
Optimization 심화 : Random process (4, Stochastic process) (1) | 2023.12.31 |
Optimization 심화 : Random process (3, Stochastic process) (1) | 2023.12.23 |
Optimization 심화 : Random process 2 (Stochatic process) (2) | 2023.12.13 |
댓글