그레디언트 부스트 이해를 위한 변분법 기초개념

2019-03-28

.

그림, 실습코드 등 학습자료 출처 : https://datascienceschool.net

# 변분법

  • 변분법은 calculus of variations라고 부른다. 미분하고 비슷하다. 기존의 미분은 함수를 다루는 것이었다. 함수는 실수가 들어갔을때 실수가 나오는 것이다. 실수의 크기는 벡터가 될수도 있고 행렬이 될 수도 있는데 어쨌든 숫자가 들어가서 숫자가 나오는 것이다.

실수 x -> 함수 -> 실수

  • 우리가 공부한 기댓값, 엔트로피 등을 계산할때는 함수를 입력하여 실수를 출력하게 된다. 이런식으로 함수를 입력받아서 실수를 출력하는 것을 범함수라고 한다. 쉽게말해 어떤 함수의 점수다.

함수 y(x) -> 범함수 -> 실수

예를들어서 기댓값이면 확률분포함수가 들어가서 얘는 요쯤이 중앙이라는 그 값이 실수로 나오게 되고, 엔트로피는 얘가 골고루 분포되어 있으면 엔트로피가 높은얘고, 얘가 어느 한부분만 굉장히 확률이 높으면 엔트로피가 낮은 얘이다. 이 모양을 평가한 점수가 나온다.

그래서 기호를 쓸때 함수는 소문자 f를 쓰고 범함수는 대문자 f를 쓰게 된다. 범함수는 보통 대문자로 표기하며 인자로 들어오는 함수를 소괄호가 아닌 대괄호로 감싼다. F[y(x)] = 함수 y(x)에서 도출해낸 실수값

  • 그리고 우리가 아는 대부분의 범함수는 적분으로 정의가 된다. 왜냐하면 함수전체를 갖고 숫자로 바꾸는 방법이 여러가지가 있는데 적분을 써야지 이 전체의 모양이 하나로 뭉쳐지게 되기 때문이다.

  • 함수를 왜 배우냐면 함수의 파라미터 또는 가중치를 어떤것을 쓰는것이 가장 좋을까라는 고민을 하기 위해서 공부한것이다. 그러면 변분법을 왜 알아야하냐면 위의 에이다 부스팅을 예로 들면 km을 찾아야 하는 것이다. 멤버가 되는 얘를 찾아야 하는데 멤버가 되는 얘는 x가 들어갔을때 y가 나오는 어떤 함수이다. 어떤 함수를 집어넣었을때 전체 위원회가 가장 좋게 될 것인가를 선택해야한다. 이것은 최적의 실수값을 찾는 것이 아니라 최적의 함수값을 찾는 것이다. 어떠한 함수를 집어넣어야지 이 최종적으로 나오는 범함수값이 제일 커지냐 혹은 제일 작아지느냐 이것을 하고 싶은것이다. 그래서 범함수의 미분을 알아야한다.

  • 함수에서는 x근처에서 엡실론 만큼 변한다고 하면 테일러 전개를 썼을때 아래와 같은 식으로 바뀌게 된다.

\[\ f(x + \epsilon) \approx f(x) + \dfrac{df}{dx} \epsilon\]

범함수에서는 어떻게 하는가. 일단 아래와 같은 식이 있다. F는 범함수가 아니라 함수이고 y도 함수가 아니라 변수이다. 즉 위에 식에서 기호만 바꾼것임을 주의한다.

\[\ F(y + \epsilon) \approx F(y) + \dfrac{dF}{dy} \epsilon\]

여기서 F가 단변수 함수가 아니라 y1,y2,…,yn(이렇게 디스크리트 한것은 벡터와 같은 것이다)이라는 n개의 실수 입력을 받는 다변수 함수라면 쉽게 말해서 n차원 벡터로 바꾼것이다. 그리고 테일러 전개식은 아래와 같이 변하게 된다.

\[\ \begin{eqnarray} F(y_1 + \epsilon_1, y_2 + \epsilon_2, \ldots, y_N + \epsilon_N) &\approx& F(y_1, y_2, \ldots, y_N) + \dfrac{\partial F}{\partial y_1} \epsilon_1 + \dfrac{\partial F}{\partial y_2} \epsilon_2 + \cdots \dfrac{\partial F}{\partial y_N} \epsilon_N \\ &=& F(y_1, y_2, \ldots, y_N) + \sum_{i=1}^{N} \dfrac{\partial F}{\partial y_i} \epsilon_i \end{eqnarray}\]

위와 같은 식일때 yi가 xi를 입력받아서 계산된 함수의 값 y(xi) 즉, yi = y(xi)이고, 엡실론i는 아래 식과 같이 xi를 입력으로 받는 임의의 함수 에타값 에타(xi)에 스케일을 조정하는 상수 엡실론을 곱한값이라고 하자.

\[\ \epsilon_i = \epsilon \eta(x_i)\]

그러면 위의 테일러 전개식은 아래와 같이 변하게 된다.

\[\ \begin{eqnarray} F \big( y(x_1) + \epsilon\eta(x_1), y(x_2) + \epsilon\eta(x_2), \ldots, y(x_N) + \epsilon\eta(x_N) \big) &\approx& F \big( y(x_1), y(x_2), \ldots, y(x_N) \big) + \epsilon \sum_{i=1}^{N} \dfrac{\partial F}{\partial y_i} \eta(x_i) \end{eqnarray}\]

여기에서 실수열의 크기 N을 무한대로 늘리면 x의 실수 구간이 되고 y는 이 정의역에 대한 함수 전체를 나타낸다고 볼 수 있다. F는 함수 전체를 받아서 실수를 출력하므로 함수가 아닌 범함수가 된다. 그러면 테일러 전개식은 아래와 같이 되고 이 수식이 범함수에 대한 테일러 전개이다.

\[\ F[y(x) + \epsilon \eta(x)] \approx F[y(x)] + \epsilon \int \dfrac{\delta F}{\delta y(x)} \eta(x) dx\]

여기서 \(\ \dfrac{\delta F}{\delta y(x)}\)는 범함수의 도함수 기호이다. y를 변수, F를 함수라고 놓고 미분하여 구한 도함수과 같은 의미지만 범함수를 함수로 미분하였다는 것을 표기하기위해 d 기호가 아니라 델타기호로 하였다.

  • 그러면 범함수에 대한 테일러 전개를 우리는 최적제어라는 개념에 적용할 수 있다. 최적제어는 범함수가 있을 때 이 값이 가장 커지도록 혹은 가장 작아지도록 하는 함수 y(x)를 찾는 것을 말한다. 즉 가장좋은 함수를 찾아내는 것이다.

  • 미분에서는 가장 함수의 값을 크게하거나 작게할때 도함수를 0으로 만드는 x값을 찾으면 되었었다. 범함수에서는 범함수의 도함수에 해당하는 \(\ \dfrac{\delta f}{\delta y}[y (x)] = 0\) 이 부분을 0으로 만들면 된다.

  • 대부분의 범함수는 적분형태로 되어있다. 그래서 대부분이 것들은 보통 아래의 수식처럼 계산된다.

\[\ F[y(x)] = \int G(y, x) dx\]

적분 기호안의 연산은 y(x) 와 x를 입력 변수로 받는 함수 G(y,x) 라고 할 수 있다. 이러한 범함수 F 의 도함수는 아래와 같이 계산할 수 있다.

\[\ \dfrac{\delta f}{\delta y} = \dfrac{\partial G}{\partial y}\]

따라서 어떤 함수 y(x) 가 범함수 값 F를 가장 크게 만들 수 있는 조건은 아래와 같다.

\[\ \dfrac{\partial G}{\partial y} = 0\]

그냥 함수를 y라는 것을 변수라고 생각하고 미분하게 된다. 원래는 함수이지만 변수인것처럼 편미분 하듯이 한것이다. 그러면 여기서 0으로 만드는 것이 결국은 범함수의 도함수를 0으로 만드는 것이다.

  • 우리가 보게될 범함수는 그냥 다 적분으로 되어있다. 그냥 y라는 글자가 들어가 있고 x라는 글자가 들어가 있는데 고 글자를 그냥 y라는 변수, x라는 변수 형태라고 생각하면된다.

  • 가우시안 노멀분포는 참고로 여러가지 특성이 있지만 가우시안 노멀분포는 실수분포중에서 제일 엔트로피가 큰 것이다. 단 분산값과 기댓값이 정해져있다는 가정이 있을때 가장 크다.

  • 변분법은 딥러닝에서 generative 모델 등에도 나오는데 가끔 안에 있는 내용이 y의 도함수도 같이 들어가 있는 경우도 있다. 이때는 아래와 같이 오일러-라그랑주 공식을 써야한다.

\[\ F[y(x)] = \int G(y, y', x) dx\]

y(x) 의 x 에 대한 도함수인 \(\ y'(x) = \frac{dy}{dx}\)도 입력변수로 받는 함수 \(\ G \big( y(x), y'(x), x \big)\)로 정의된 도함수도 가끔 있는 경우가 있는데 그럴 경우 위와 같이 도함수를 구할 수 있다.

그리고 이러한 범함수의 도함수는 아래와 같이 계산할 수 있다.

\[\ \dfrac{\partial G}{\partial y} - \dfrac{d}{dx}\left( \dfrac{\partial G}{\partial y'} \right)\]

여기서 어떤 함수 y(x)가 범함수 값을 가장 크게 만들 수 있는 조건은 아래와 같다.

\[\ \dfrac{\partial G}{\partial y} - \dfrac{d}{dx}\left( \dfrac{\partial G}{\partial y'} \right) = 0\]

여기에서는 y프라임이라는 글자로 편미분한 다음에 걔를 다시 x로 미분한 부분을 추가를 해줘야 한다.