노는게 제일 좋습니다.

tensorflow 5 : Gradient Descent Algorithm 본문

Python/통계 및 데이터관련

tensorflow 5 : Gradient Descent Algorithm

노는게 제일 좋습니다. 2017. 1. 14. 00:05

https://www.inflearn.com/course-status-2/

이 주소에 있는 강의를 기반으로 공부하고 정리한 자료.


Gradient 경사

Descent 감소

Gradient Descent Algorithm : 경사(기울기)가 줄어드는 쪽으로 가는 알고리즘


그래프 그리는 사이트 https://www.desmos.com/calculator



위와 같은 그래프에서 최저점을 찾고 싶다고 하자.

아무 점이나 잡아서 기울기가 줄어드는 방향으로 이동하면된다.

\

예를 들자면 이렇다. 오른쪽 위에서 시작해서, 기울기가 줄어드는 방향으로 가다보니 최저점이 나왔다.

사실 이 그래프의 세로축은 cost(W,b)의 값, 가로축은 W의 값이다.

training set이 x=[1,2,3] y=[1,2,3] 일때 이런 개형의 그래프가 나온다.


이런 방식으로 최저점을 찾는 것이 Gradient Descent Algorithm 이다.

다시 이 알고리즘의 작동순서를 말하면 이렇다.

1. 아무점이나 잡는다. P( W,cost(W) )

2. 기울기가 줄어드는 방향으로 움직인다.

3. 최저점인지 판단해본다. 아니면 1,2를 반복한다. 최저점이면 끝!


위와 같이 최저점으로 가는 방향이 하나로 정해진 경우, 이것을 convex function이라고 할 수 있다.

convex가 아닌 cost function에 Gradient Descent Algorithm를 적용시키면 결과를 장담할 수 없다.


위와 같은 이차함수도 convex function인데, 이 경우 최저점이 현재 잡아놓은 P점에서 W방향으로 왼쪽에 있는지 오른쪽에 있는지 판단할 수 있다.

그 판단을 위해서는 기울기의 부호를 보면 된다.


기울기가 양수라면, 최저점의 W좌표는 P점의 W좌표보다 왼쪽에 있는 것이다. 따라서 P점의 W좌표값을 감소시켜야 한다.

음수라면, 최저점의 W좌표는 P점의 W좌표보다 오른쪽에 있다. 따라서 P점의 W좌표값을 증가시켜야 한다.



근데 어떤 머리좋은 사람이 이런걸 이미 수식으로 구현을 해버렸다.

https://www.inflearn.com/course-status-2/ 에서 가져온 스크린샷이다.


이제 이 식을 코드로 짜면 이렇게된다.

descent = W-tf.mul(a, tf.reduce_mean( (hypothesis-Y) * X))

update = W.assign(descent)


한 세션으로 update를 돌리고 트레이닛 셋을 던져주면 된다.

예를 들면 이렇게. sess.run(train, feed_dict={X:x_data, Y:y_data})


동작하는 전체 코드는 강의를 확인하면 나옴. 사실 4번포스팅에 약간만 추가하면됨.


Comments