머신러닝 미적분 활용 - meosinleoning mijeogbun hwal-yong

- 수학에는 원래 자신이 없습니다. 오죽하면 이전에 인공신경망 공부를 할때, 학습 부분에 사용되는 미분에 대해 수식보다 코드를 보고 이해를 했죠...

하지만 약점일수록 더 제대로 봐야겠죠.

- 거의 몇개월간 IT 공부와 더불어 시간을 쪼개 중학 수학부터 다시 봤네요...

되도록 초보자도 이해하기 쉽도록, 제 수준에 맞춰서 쓴 글이지만, 혹여 공부 용도라면 정석책을 보시는 게 더 좋을지도 모르겠네요...

머신러닝에 사용되는 수학이라는 유튜브 강의를 보며 제 나름대로 정리한 것입니다.

 

 

[미분이란?]

- 미분 자체에 대한 정의는 동일 카테고리의 미분 글을 참고.

 

머신러닝 미적분 활용 - meosinleoning mijeogbun hwal-yong

 

: 쉽게 말하면, 기울기(초록색)를 구하는 것입니다.

 

x - (x+dx)는 dx죠?

dx에 대한 y값 변화량은f(x+dx) - f(x)입니다.

 

이러한 정보로 미루어봤을때,

f(x+dx) - f(x) / dx = dy / dx가 바로 그 공식입니다.

(x의 미세한 변화에 따른 y값의 변화)

 

dx는, 위에선 저렇게 큰데, 사실은 0에 가깝도록 작은 수입니다.

9에서 5로, 5에서 1로, 1에서 0.00000001로...

이렇게 매우 작은 수의 변화에 대한 기울기를 구하는 것입니다.

(그래야 x값이 현재값일때의 그 순간의 기울기를 구할수 있으니까요.)

 

- f`(x)는 x값일때, f(x)의 미분값을 말합니다.

예를들어 f(x) = x^2라는 함수에 대해,

f`(3)의 경우는,

((3+d)^2)-9 / d

입니다.

이를 계산해보세요.

간단히 d값에 어떤 값이라도 좋습니다.

1이면 7, 0.1이면 6.1, 0.01이라면 6.01...

아주 쉽죠?

d가 줄어들수록 점점 더 결과값이 작아지는데, 결국으 6에 가까워집니다.

결국 d값이 0에 수렴한다고 했으니, f`(3)은 6이라 할수 있겠네요.

 

- 위와 같은 미분 공식은, 이미 몇가지 정해진 것이 있습니다.

대표적으로, 위에서 우리가 계산한 데로, f(x) = x^2일때, f`(x)는 2x가 됩니다.

여기까지, 기본적인 미분 개념에 대한 설명을 마칩니다.

 

[미분 함수]

- 머신러닝에서 자주 사용되는 함수의 미분입니다.

f(x) = 상수  ->  f`(x) = 0

f(x) = e^x  ->  f`(x) = e^x

f(x) = e^-x  ->  f`(x) = -e^-x

f(x) = ax^n  ->  f`(x) = nax^n-1

f(x) = lnx  ->  f`(x) = 1/x

 

- 예시

f(x) = 3x^2 + e^x + 7   ->   f`(x) = 6x + e^x

f(x) = lnx + (1/x)   ->   f`(x) = (1/x) - (1/(x^2))

 

: 이는 미리 구해놓은 함수에 대한 미분값입니다. (다시 말하자면, 미분은 x값의 미세한 변화에 대한 y값의 변화 민감도)

우리가 위에서 직접 구해본 x^2는,

f(x) = ax^n  ->  f`(x) = nax^n-1

로 설명할수 있죠.

 

저처럼 수학 담쌓고 사신 분들은 함수가 생소할수도 있는데,

그럴경우, 자신이 직접 미분을 해보시거나, 혹은 미분 증명에 대한 자료를 찾아서 보세요.

사실 여기까지 오시면 간단한 미분 정도는 직접 할수 있는 것입니다.

보다 빠르고 쉽게 계산하기 위하여 공식과 유형을 몇개 외우는 것 뿐이죠.

 

 

[편미분]

- 편미분은 입력변수가 하나 이상인 다변수 함수에서, 미분하고자 하는 변수 하나를 제외한 나머지 변수들은 상수로 취급하고, 해당 변수를 미분하는 것입니다.

- 머신러닝에서 가장 중요한 개념입니다.

여러 특징을 지닌 입력값에서, 특정한 입력값에 대한 민감도를 알아보기 위해서, 편미분을 시행해야하죠.

- 위의 미분 공식에서 상수는 미분시 0이라 했죠?

그러니 편미분하고자하는 값을 제외한 부분의 미분값은 0이 됩니다.

- 편미분 기호가 따로 있지만, 여기선 임의로 p라고 하겠습니다.

- 수식

f(x, y)를 변수 x에 대해 편미분하는 경우 -> pf(x, y) / px로 나타냄

- 예시

1. f(x, y) = 2x + 3xy + y^3, 변수 x에 대하여 편미분

pf(x, y) / px = p(2x + 3xy + y^3) / px = 2 + 3y

 

2. f(x, y) = 2x + 3xy + y^3, 변수 y에 대하여 편미분

pf(x, y) / py = p(2x + 3xy + y^3) / py = 3x + 3y^2

 

3. 체중 함수가 '체중(야식, 운동)' 처럼 야식/운동에 영향을 받는 2변수 함수라고 가정할 경우, 편미분을 이용하면 각 변수 변화에 따를 체중 편화량을 구할수 있음.

-> 현재 먹는 야식의 양에서 조금 변화를 줄 경우 체중의 변화 민감도 = p체중 / p야식

-> 현재 하고 있는 운동량에 조금 변화를 줄 경우 체중의 변화 민감도 = p체중 / p운동

 

 

[연쇄법칙 chain rule]

- 합성함수란, 여러 함수로 구성된 함수로서, 이러한 합성함수를 미분하려면 '합성함수를 구성하는 각 함수의 미분의 곱'으로 나타내는 연쇄법칙을 사용합니다.

 

- 합성함수 예시

f(x) = e^(3x^2)   ->   함수 e^t, 함수 t = 3x^2 조합

f(x) = e^-x   -> 함수 e^t, 함수 t=-x 조합

: 즉, 어떤 함수 값을 구하려면, 다른 함수 값을 먼저 구해야 하는 것입니다.

 

- 체인룰 예시

1. f(x) = e^(3x^2)을 체인룰로 미분하는 경우, t = 3x^2으로 놓으면, f(x) = e^t.

위에서 여러 함수를 미분의 곱으로 나타낸다고 했죠?

pf/px = pf/pt * pt/px = p(e^t)/pt * p(3x^2) / px = (e^t)(6x) = (e^(3x^2))(6x) = 6xe^(3x^2)

이렇게 나타낼수 있습니다.

이는 간단하게, t가 변화할때의 f의 민감도와, x가 변화할 때의 t의 변화도를 서로 곱해주는 것입니다.

 

풀이해볼까요?

f(x)에 대한 미분은, x값에 대한 f의 민감도를 나타내는 것이니, pf/px

-> f(x)의 미분은 pf / pt이고, 그것에 곱해야하는 합성 함수의 미분은 pt / px로, 둘을 곱해야합니다.

-> 이를, 실제 공식으로 풀어보면, p(e^t)/pt * p(3x^2) / px 가 됩니다. 실제 대입하면 이런 형태가 되죠?

-> 이제 각 값을 미분공식에 따라서 미분해보면, 각 식의 값이 나옵니다. (e^t)(6x)이렇게 말이죠.

-> 이제 미지수 t에 t = 3x^2를 대입하면, 6xe^(3x^2)이런값이됩니다.

 

2. f(x) = e^-x을 체인룰로 미분하는 경우, t = -x로 놓으면, f(x) = e^t.

위의 미분 공식에도 나온 것이죠? -x도 체인룰로 풀수 있습니다.

pf/px = pf/pt * pt/px = p(e^t)/pt * p(-x) / px = (e^t)(-1) = (e^-x)(-1) = -e^-x

 

 

//이러한 수학적 지식은 머신러닝의 학습시, '오차역전파법'이라는 기법에서 사용되는 매우 중요한 개념입니다.

요즘은 라이브러리가 굉장히 잘 나와있어서 앞으로 머신러닝 개발은, 사실 수학적 지식보다, 웹 개발과 같은 설계와 논리력이 더 중요하게 될수도 있으리라 생각하는데,

그럼에도 머신러닝 내부 개념에 대해 제대로 이해하고, 보다 잘 사용하기 위해서는 수학에 대한 공부가 필요할 것입니다.

사실 IT전반위 부분도 API를 쌓아올려 논리적으로 구성하는 작업이 되었는데, IT 근본에는 수학이 들어있습니다.

 

고로, 제대로 IT에 대해 공부하고 싶다면, 이러나 저러나 수학을 공부해서 나쁠건 없다는 것입니다.

공유하기

게시글 관리

구독하기Loner의 학습노트

저작자표시

'학문 > 수학 개인정리' 카테고리의 다른 글

편미분 개인 최종정리  (0)2019.12.12머신러닝 수치미분 개인정리 3  (0)2019.12.06자연상수 e란? (강의 리뷰)  (0)2019.08.21딥러닝 수학 기초 : 행렬의 곱  (0)2019.08.16극한에서의 엡실론이란?  (0)2019.08.12