다변수 미적분은 인공지능에서 수없이 사용되는, 필수적인 기초 수학 개념이다.
'Khan Academy'의 'Multivariable Calculus' 유튜브를 보고 내용을 정리해 둔다.
너무 기초적인 내용은 배제하고, 잊고 있었던 개념 위주로 정리할 예정이다.
https://www.youtube.com/watch?v=TrcCbdWwCBc&list=PLSQl0a2vh4HC5feHa6Rc5c0wbRTx56nF7
목차
1. Contour Plots
Contour Plot은 \(f(x, y) = z \) 3차원 그래프를 2차원에 표현할 수 있는 방법 중 하나이다.
한글로 '등치선도'라고 하고, 지도에서 산을 나타낼 때 사용하는 '등고선'을 떠올리면 쉽다.
그래프를 z=-2, z=-1, z=0, z=1, z=2, ... 등의 평면으로 자르고, 잘려서 평면에 나타나게 된 그래프(등치선, contour lines)들을 xy평면으로 압축하여 나타내면 아래와 같은 Contour plot이 완성된다.
물론, 위와 같은 contour plot으로는 원형 부분이 튀어나온 것인지, 들어간 것인지 알 수 없다. 따라서 각 등치선에 높이를 표시해줌으로써 어떤 형상인지 정확하게 파악할 수 있게 된다.
또다른 중요한 정보를 얻을 수 있는데, 바로 contour line 사이의 간격이다.
튀어나오는 부분일수록 간격이 넓어지는데, 이는 곧 경사가 완만해짐을 뜻한다.
높이가 낮을 때에는 함수값 1을 올리기 위해 조금만 움직여도 됐지만, 꼭대기 부분에서는 많이 움직여야 한다.
이러한 간격을 'stiffness(경사도)'라 한다.
그리고 동심원이 많이 그려진 부분은 보통 (local) minimum 또는 maximum이다.
2. Vector Field
벡터장은 기계 전공인 내게 반갑지만 여전히 복잡한 내용이다.
공업수학에서 처음 접하고, 유체역학 등에서 사용한 경험이 있지만, 내용을 다 까먹어서 다시 한 번 정리해본다.
(솔직히 인공지능 분야에서 많이 사용할 일은 없어 보인다.)
이제까지는 \(f(x, y) = z\)와 같이, 출력이 하나인 다변수 함수를 생각했다.
하지만 다음과 같이 입력이 2개, 출력이 2개인 함수를 생각해보자.
\(f(x, y) = \begin{bmatrix} y^3 - 9y \\ x^3 - 9x \end{bmatrix} \)
이런 함수를 시각화하려면 입력도 2차원, 출력도 2차원이므로 4차원 공간을 떠올려야 하는데, 일반적인 사람은 이것을 떠올리기가 쉽지 않다.
따라서, 먼저 입력 두 개만 떠올려보자.
2차원에서 xy 평면을 그리고, 특정 점의 입력에 대한 출력 벡터를 표현해볼 수 있다.
예를 들어, (1, 2)에 대한 그림을 다음과 같이 나타내볼 수 있다.
\( f(1, 2) = \begin{bmatrix} 2^3 - 9 \cdot 2 \\ 1^3 - 9 \cdot 1 \end{bmatrix} = \begin{bmatrix} -10 \\ -8 \end{bmatrix} \)
하지만 모든 점에 대해 위와 같이 표현하면 매우 복잡할 것이다.
따라서 여러 입력에 대해 벡터의 크기를 일정하게 나타내고, 방향만을 평면에 표시하면 아래와 같은 결과를 나타낸다.
이를 벡터장(Vector Field)이라 하고, 크기를 나타내기 위해 각 화살표를 크기에 따른 색으로 나타내기도 한다.
이를 확장시켜 3차원 입력에 대한 3차원 벡터를 출력하는 함수를 통해 3차원 벡터장을 생각해볼 수도 있다.
3. Gradient
편미분에 대한 지식이 있다고 가정한다.
1) Gradient의 계산
먼저, gradient의 계산 방법부터 알아보자.
변수를 두개 갖는 다음 함수를 생각해보자.
\( f(x, y) = x^2 \sin(y) \)
편미분을 알고 있다면, 다음과 같은 편도함수를 구할 수 있다.
\( \frac{\partial f}{\partial x} = 2x \sin(y), \frac{\partial f}{\partial y} = x^2 \cos(y) \)
이때 Gradient란, 두 개의 편도함수를 벡터로 만드는 것이다.
기호는 'nabla'를 사용하는데, 보통 'del(델) f' 또는 'gradient(그래디언트) of f'라고 말한다.
\( \nabla f(x, y) = \begin{bmatrix} 2x \sin(y) \\ x^2 \cos(y) \end{bmatrix} \)
이는 2차원 공간의 점을 2차원 벡터로 변환하는 개념으로 볼 수 있다.
입력 공간을 확장하면 다음과 같이 일반화할 수 있다.
\( \nabla f = \begin{bmatrix} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \end{bmatrix} \)
Gradient를 쉽게 이해하는 방법 중 하나는 '\(\nabla\)' 기호를 편미분 계수로 이루어진 벡터로 만드는 operator로 생각하는 것이다.
\( \nabla = \begin{bmatrix} \frac{\partial}{\partial x} \\ \frac{\partial}{\partial y} \\ \frac{\partial}{\partial z} \\ \vdots \end{bmatrix} \)
2) Gradient and Graphs
이번에는 기하학적으로 gradient를 이해해보자.
다음과 같은 간단한 다변수 함수를 그래프로 나타내보자.
\( f(x, yK) = x^2 + y^2 \)
이 함수의 gradient는 다음과 같다.
\( \nabla f(x, y) = \begin{bmatrix} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \end{bmatrix} = \begin{bmatrix} 2x \\ 2y \end{bmatrix} \)
위 식을 벡터장으로 xy 평면 상에 나타내면 다음과 같이 표현된다.
여기서, 파란색은 작은 크기의 벡터를 나타내고, 빨간색은 큰 크기의 벡터를 나타낸다.
이때 xy 평면상의 벡터들은 최대 경사의 방향을 가리킨다. (direction of steepest ascent)
즉, 그래프 상의 특정 점에서 벡터장의 벡터를 따라 가면, 그 방향이 경사가 가장 가파른 방향이라는 것이다.
반대로, 만약 그래프가 아래로 뻗어나간다면, (예를 들어, \(f(x, y) = - (x^2 + y^2) \)) 'direction of steepest descent'라고 말할 수 있을 것이다.
지금 당장은 벡터 값에 편도함수를 적용하는 것이 왜 최대 경사의 방향을 가리키는지 직관적으로 이해하기가 어렵다.
좀 더 잘 이해하기 위해 '방향도함수'라는 개념을 알아보자.
3) Directional Derivative
방향도함수는 편도함수(partial derivative)의 개념을 확장시킨 것이다.
다음과 같은 다변수 함수가 있다.
\(f(x, y) = x^2y \)
예를 들어 점(1, 2)에서 편도함수를 구한다는 것의 의미는 (1, 2) 점에서 x가 조금 변함에 따라 출력값 f가 얼마나 움직이나, y가 조금 변함에 따라 출력값 f가 얼마나 움직이는가를 나타내는 개념이다.
방향 도함수는 벡터의 개념이 도입된다.
다음 벡터 \(\mathbf{v}\)가 있다고 하자.
\(\mathbf{v} = \begin{bmatrix} a \\ b \end{bmatrix} \)
방향도함수는 특정 점에서 벡터의 방향만큼 (아주 조금) 입력이 변했을 때, 출력값 f가 얼마나 변하는지를 나타낸다.
위 벡터를 예로 들면, 매우 작은 상수 h에 대해 다음과 같은 식이 성립한다.
\( h \mathbf{v} = \begin{bmatrix} ah \\ bh \end{bmatrix} \)
이는 마치 x축 방향으로 ah, y축 방향으로 bh만큼 이동할 때와 같다고 생각할 수 있다.
벡터 \(\mathbf{v}\) 방향으로의 방향도함수를 표기하면 다음과 같다.
\( \nabla_{\mathbf{v}} f(x, y) = a \frac{\partial f}{\partial x} + b \frac{\partial f}{\partial y} \)
또는 \( \frac{\partial f}{\partial \mathbf{v}}, \partial_{\mathbf{v}} \) 등 다양하게 표현할 수 있다.
그런데, 위 식을 보면, 다음과 같이 내적으로 표시할 수 있다.
\( \begin{bmatrix} a \\ b \end{bmatrix} \cdot \begin{bmatrix} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \end{bmatrix} = \mathbf{v} \cdot \nabla f \)
위와 같이 표기함으로써 gradient에 첨자 없이 내적을 통해 계산법이 간단해지고, 함축적인 표기가 가능하다.
또한 쉽게 다양한 차원으로 확장할 수도 있다.
정리하자면, directional derivative는 주어진 벡터의 방향으로 매우 작은 값만큼 움직일 때 출력값이 얼마나 변하는지를 입력값의 이동과 출력값의 이동 비율로 알려준다.
그럼 방향도함수가 수학적 정의에 대해 알아보자.
먼저, 편미분의 정의는 다음과 같다.
\( \frac{\partial f}{\partial x} (a, b) = \underset{h \to 0}{\lim} \frac{f(a+h, b) - f(a, b)}{h} \)
여기서 이 정의를 벡터를 사용하여 표현해보면 다음과 같다.
\( \frac{\partial f}{\partial x} (\mathbf{a}) = \underset{h \to 0}{\lim} \frac{f(\mathbf{a}+h \hat{i}) - f(\mathbf{a})}{h} \)
x축의 partial derivative이므로, h에 x축 단위벡터를 곱해주는 것에 주목하자.
방향도함수는 일반적인 벡터에 대한 f의 변화이므로, 벡터 \(\mathbf{v}\)에 대해 적용하면, 방향도함수는 다음과 같이 정의된다.
\( \nabla_\mathbf{v} f = \underset{h \to 0}{\lim} \frac{f(\mathbf{a} + h \mathbf{v} - f(\mathbf{a})}{h} \)
4) Direction of Steepest Ascent(or Descent), Gradient
왜 gardient가 direction of steepest ascent(또는 descent)인지 알아보자.
gradient의 계산 부분에서 사용했던 예시를 다시 가져오면,
\( f(x, y) = x^2 + y^2 \)
gradient는 \( \nabla f = \begin{bmatrix} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \end{bmatrix} = \begin{bmatrix} 2x \\ 2y \end{bmatrix} \) 이다.
여기서 단위 벡터 \(\mathbf{v}\) 에 대해, 점(a, b)에서 f의 방향도함수는 다음과 같다.
\( \nabla_\mathbf{v} f (a, b) = \mathbf{v} \cdot f(a, b) \)
이를 통해 함수값 f가 가장 크게 움직이는 값을 찾아볼 수 있다.
\( \underset{||\mathbf{v}|| = 1}{\max} \mathbf{v} \cdot f(a, b) \)
내적은 projection의 개념이므로, gradient 벡터와 \(mathbf{v}\)가 나란할 때 (or 180도를 이룰 때) 내적의 크기가 가장 크다.
따라서, 최댓값을 내놓는 벡터 \(mathbf{v}\)는 gradient 자신이다.
이에 따라, direction of steepest ascent(descent) 가장 가파른 증가(감소) 방향은 다음과 같이 나타낼 수 있다.
\( \pm \frac{\nabla f (a, b)}{|| \nabla f(a, b) ||} \)
ascent를 예로 들어, 벡터 \(\mathbf{w} = + \frac{\nabla f (a, b)}{|| \nabla f(a, b) ||} \)를 정의하자.
그러면 gradient 방향으로의 방향미분계수는 gradient vector의 크기와 같아진다.
\( \nabla_\mathbf{w} f = \nabla f \cdot \mathbf{w} = \frac{\nabla f \cdot \nabla f}{|| \nabla f ||} = \frac{ || \nabla f ||^2 }{|| \nabla f ||} = || \nabla f || \)
따라서 gradient 방향으로 이동했을 때, 함수값의 변화율은 gradient 크기와 같다.
이제 gradient의 특징을 다음과 같이 정리해볼 수 있다.
- 다른 벡터와 내적할 경우, 방향미분계수를 나타낸다.
- gradient vector의 방향은 가장 가파른 증가(감소) 경로의 방향이다.
- gradient vector의 크기는 가장 가파른 증가(감소) 방향으로 이동했을 때, 함숫값의 변화율을 나타낸다.
이처럼, gradient 개념은 다변수 스칼라 함수의 핵심이다.
미분 연산을 여러 상황에 적용할 수 있도록 확장해준다.
등고선도(contour map)에 적용할 경우,
특정 contour line 상의 점에서 다음 contour line으로 이동하는 벡터 중 gradient vector가 가장 빠른 방향임을 알 수 있다.
최근댓글