'편미분'에 해당되는 글 1건

  1. 2018.02.28 전미분, 편미분, Gradient에 대해 2

나와같은 수알못이지만 신경망을 공부하고 싶은 사람들을 위해 기초공사부터 지으려고 한다.

신경망 건물의 모퉁이 돌은 미분이다. 

미분을 모르면 남들이 만들어 놓은 망에 데이터를 넣어서 사용은 할 수 있겠지만,

망이 어떻게 동작하는지 이해할 수 없다.

그렇다고 해서 미분의 아주 심오한 부분까지 소개하려는 의도는 아니니 걱정마시길..

그런거는 나도 모른다...

(미분 무서워..)

1. 미분

어떤 공돌이가 위에 있는 그림같은 기계를 만들었다.

이 기계는 온도센서를 하나 가지고 있고 측정된 온도 a에 따라 전압 z를 출력한다.

그리고 전압 z와 온도 a사이의 관계는 f(a)와 같다.

이 기계에서는 온도 a가 만큼 변하면, 전압 z는 만큼 변한다.

바꿔 말하자면, 이 기계에서 a에 대한 z의 변화량은 와 같다고 쓸 수 있겠다.

그럼 여기서 문제! "를 알고 있을 때, a가 만큼 변하면 z는 얼마만큼 변할까?

아마 초등학교 의무교육을 마친사람이라면 누구나 대답할 수 있을 것 같다.

만큼 변한다.

어렵게 수식으로 썻지만 당연한 이야기다.

미분은 여기서 a가 변한 정도가 어마무시하게 째끔할 때인 경우를 이야기한다.

a가 어마무시하게 째끔 변한 량을 라고 해보자.

그럼 z도 어마무시하게 째끔 변한다.

째끔 변했다는 의미로 대신 d를 써보자. 그럼 위에서 쓴 수식은 아래와 같이 변한다.

윗 식에서 dz/da는 미분이라고 하고 a가 째끔 변할 때 z가 얼마나 째끔변했는지를 의미한다.

미분을 알고, a가 얼마나 째끔 변했는지 알 수 있다면 위 식으로 z가 얼마나 째끔 변했는지를 알 수 있다.

그런데 아래와 같이 2개의 input이 있는 경우는 어떻게 입력값과 출력값의 변화량 (미분)을 알 수 있을까?

 

(다! 변! 수!)

 

2. 다변수 함수의 미분 (편미분, 전미분)

누가 아래와 같은 기계를 또 만들어놨다. 왜 만들어 놨는지 모르겠지만 만들었다..

이 기계로 말씀드리자면(...)

이전 기계와 마찬가지로 온도 a를 측정하고, 여기에 추가로 무게 센서를 달아 무게 b를 측정한다.

그리고 온도 a와 무게 b를 고려하여 전압 z를 출력한다.

입력인 온도 a, 무게 b, 출력인 전압 z사이에는 f(a,b) = z의 관계가 있다.

 

골치가 아프다. 아까는 변하는게 온도 a 한개만 변했는데 이젠 무게 b까지 변한다.

하지만 단순화 시켜서 생각해보자면, 아래와 같이 두가지 경우로 나누어 생각할 수 있을 것 같다.

첫번째는 1개 변수만 변하는 경우. (편미분)

그리고 두번째는 모든 변수가 다 변하는 경우. (전미분)

 

첫 번 째로 변수 1개만 변하는 경우를 살펴보자

여기서는 a한개만 변한다. 그럼 이때, a가 쬐끔 변한다고 하면 z는 얼마나 째끔 변할까?

요렇게 쓰면 어떨까? 맞는것 같다.

그런데 여기에는 표기상의 문제가 있다. 앞서 살펴본 변수 1개만 있는 경우랑 똑같다는 것이다.

그래서 우리는 z가 다변수 함수라는 것,

그리고 다른 변수는 다 가만히 있는데 a만 움직인다는 것을 알리기 위해 아래와 같이 표기한다.

d가 살짝 꼬부라진 편미분 기호로 바뀌었다. 우리는 윗 식을 z의 a에 대한 편미분이라고 부르고,

이것을 통해 다변수 함수 f(a,b) = z에서 변수 a만 째끔 변할 때, z가 얼마나 째끔 변하는지 알 수 있다.

그럼 이전에 온도센서만 달린 기계에서 했던 것 처럼,

이제 우리는 z의 a에 대한 편미분과 a가 얼만큼 째끔 변했는지 da를 알고 있다면,

아래와 같이 z가 얼마나 째끔 변했는지 알 수 있다.

 

그럼 모든 변수가 변하는 경우, z는 얼마만큼 변할까?

정답은 개별 변수가 변할 때, 변하는 dz를 모두 더한것 만큼 변한다.

수식으로 써보자면 이렇다. 그리고 우리는 이걸 전미분이라고 부른다.

 

수식으로 보자면 어려운데, 이렇게 설명해 보면 좀 더 쉬울 것 같다.

온도는 1도 올라갈 때 전압이 1V올라간다.

무게는 1kg 올라갈때 전압이 2V 올라간다.

그럼 온도를 1도 올리고 무게를 2kg올리면 전압은 얼마나 높아질까? 5V가 높아진다.

 

때때로 수학기호는 당연한 이야기를 어렵게 전달하기도 한다...

 

3. Gradient

Gradient의 정의는 아래와 같다.

여기서 v는 f가 가지는 입력변수를 의미한다. (때때로 v를 생략하기도 한다.)

는 nabla라고 하는 연산기호로 아래와 같은 식을 의미한다.

위 온도센서, 무게센서를 가진 기계에서는 f는 a, b두가지 변수를 가지므로 v는 a, b라고 보면 된다.

Gradient의 각 요소는 모든 개별 입력변수에 대한 함수 f의 편미분 값이이다.

 

좀 어려워 지는것 같은데 사실 어려울 것이 없다.

정의라고 했으니까 이건 그냥 Gradient를 이렇게 쓰기로 하겠다는 약속이다.

따라서 그냥 우리는 이걸 받아들이면 되는거다.

 

중요한 것은 Gradient의 성질이다.

사실 다음 줄의 말을 하려고 구구절절 미분 부터, 편미분, 전미분을 이야기 한 것이기도 하다.

 

"입력변수 평면의 한 점에서 구한 Gradient는 해당 위치에서 f가 가장 크게 증가하는 방향을 가리킨다."

"그리고 그 Gradient의 크기는 얼마나 크게 f가 해당방향으로 변하는지 알려준다."

 

개인적으로는 신경망 알고리즘에서 가장 중요한 내용이 이게 아닌가 싶다.

그림으로 설명해 보자면 이렇다.

 

위 그림은 f의 그래프다.

f가 입력변수 2개를 가지고 있으니까 위와 같이 z축이 f값, x,y 축이 각각 a,b인 3차원 그래프가 될 것이다.

하지만 f가 입력변수를 100개 가진 함수라고 해도 뭐 상관 없다.

z축을 f 값, x,y 평면의 한 점이 (x1, x2, x3, ... , x100) 에 해당하는 한 입력세트라고 생각하면 된다.

여튼 이때 A점에 해당하는 입력값 v는 A에서 바닥평면에 수직으로 내려 찍은 한 점이 된다.

그리고 이 점에서 f에 대한 gradient는 검정 화살표가 된다.

 

근데 이 화살표는 f가 가장 많이 증가하는 방향을 가리키고 있다.

화살표의 크기가 크면 클 수록 더 크게 해당방향으로 증가한다고 보면 된다.

 

B점에서는 어떨까?

B점에 해당하는 입력변수 v는 A에서와 마찬가지로 점 B에서 바닥평면에 수직으로 내려 찍은 한 점이 된다.

여기서는 f가 대체로 완만하게 변하기 때문에 빨간 gradient 벡터 의 크기는 작다

물론 여기서도 gradient 벡터의 방향은 해당 지점에서 f가 가장 크게 증가하는 방향을 가리킨다.

 

별거 아닌것 같은 성질이지만, 이 Gradient의 성질이 모든 신경망을 낳았다. 꼭 기억해 두자. 

다음에 SGD (stochastic gradient descent) 기법을 설명하면서,

왜 Gradient가 모든 신경망을 낳았다고 하는지  다시 설명하도록 하겠다..

 

'이론 > 신경망' 카테고리의 다른 글

He 초기화 구현 in tensorflow  (0) 2018.09.19
tensorboard 간단 요약  (0) 2018.09.13
인공신경망과 학습  (0) 2018.03.05
공부할 때 참고한 자료들  (0) 2018.02.27
신경망 글을 시작하면서..  (0) 2018.02.26
Posted by 굿쟌
,