1-3 Parameter Learning: Gradient Descent 본문

ML & DL/Coursera-ML

1-3 Parameter Learning: Gradient Descent

eremo2002 2019. 1. 6. 00:15

Gradient descent는 비용함수 J 최소값을 구하기 위한 머신러닝 알고리즘이다.

이 알고리즘이 어떤 것인지 알아보자.








θ0, θ1 파라미터로 하는 비용함수 J 생각해보자.

여기선 2개의 파라미터만 존재한다고 가정했지만 실제론 굉장히 많은 파라미터가 존재할 것이다.












비용함수 J 다음과 같은 형태일  θ0, θ1 빨간 언덕위의 지점에서 초기화되었다고 해보자

지점에서 작은 보폭으로 언덕을 최대한 빠르게 내려가고자 어떤 방향으로 가는 가장 빠른 길일까?

일단 주위를 둘러보고 언덕을 내려가는 가장 빠른 길을 찾아 따라서 내려간다.











아래 지점으로 이동하였다. 다시 여기서 주위를 둘러보고 작은 보폭으로 가장 빠른 길을 찾아 내려간다.

이러한 방식으로 새로운 지점에서 다시 주위를 둘러보고 이동하고 다시 주위를 둘러보고 내려간다.













이렇게 작은 보폭으로 가장 빠른 길을 따라 내려오니 어떤 local 최소값 지점에 도달하였다.











이번엔 처음에 초기화 위치가 아닌 다른 위치에서 초기화 되었다고 가정하고 다시 경사를 따라 내려와보자












초기화 위치를 조금 다르게 잡았더니 다른 지역적 최소값에 도달하였다.












경사 하강 알고리즘의 수학적인 개념은 다음과 같다.

알파는 learning rate로 기울기를 따라서 얼만큼의 보폭으로 내려올 것인지 설정해주는 값이다.

알파값이 매우 크다면 언덕을 더 성큼성큼 내려올 것이다.

뒤에 곱해지는 값은 미분계수(기울기)이다. 












Gradient descent 알고리즘을 사용해서 우리는 비용함수의 파라미터 θ값을 업데이트 하게 된다.

위의 식을 계산해서 파라미터 값을 바꾸게 되었을 때 동시에 바꿔줘야 한다.

오른쪽의 순서로 업데이트 하는 것은 동시에 업데이트 하는 게 아니라 잘못된 업데이트 방식이다.

















Gradient Descent Intuition




Gradient Descent 알고리즘의 수학적 정의를 다시 보자.

알파는 learning rate이고, 여기에 비용함수 J의 미분계수(기울기) 값이 곱해진다.

Learning rate과 기울기에 따라 어떻게 달라지게 될까?












간단하게 파라미터가 θ1 하나인 비용함수 J를 예로 들어보자

비용함수의 그래프와  θ1의 위치가 위와 같을 때 θ1의 값은 Gradient descent 알고리즘에 의해 위 식의 값으로 update된다.

다시 말하지만 learning rate 뒤에 곱해지는 미분계수 값  d/dθ1 * J(θ1)는 현재 θ1의 위치에서 J의 기울기가 된다.

(learning rate은 항상 양수이다.)












이 기울기 값이 양수이기 때문에 새로 업데이트 되는 θ1 값은 기존 값보다 작아지게 된다.

따라서 θ1은 현재 위치보다 더 작은 값인 왼쪽으로 이동하게 된다.

즉 최소값의 위치로 이동하고 있는 것이다.









이번에는 θ1의 초기값이 달라서 기울기가 다른 경우를 생각해보자

θ1의 현재 위치에서 기울기 값은 음수이다.

결국 새로 업데이트되는 θ1의 값은 기존 값보다 커지게 된다.

이 경우에도 마찬가지로 최소값의 위치로 이동하게 된다.









이제 learning rate의 크기에 따라 어떤 변화가 있는 지 알아보자

만약 learning rate의 크기가 매우 작다면, gradient descent 알고리즘은 매우 느리게 작동할 것이다.

이렇게 되면 어떤 최소값에 도달하긴 하겠지만 도달하는데 너무 많은 시간이 소요된다는 문제점이 있다. 그리고 그렇게 찾은 지점이 반드시 global minimum이라는 보장도 없다. 

어찌됐든 여기서 중요한 것은 learning rate의 크기가 작다면 매우 천천히 움직이게 된다.











반대로 learning rate의 크기가 매우 크다면 어떻게 될까?

θ1의 초기 위치가 다음과 같을 때 learning rate이 매우 크다면 최소 지점을 지나칠 수 있다.

그런데 문제는 이동한 뒤에 그 위치에서 기울기의 크기가 이전 지점에서 기울기의 크기보다 크다는 게 문제가 된다.

이렇게 되면 앞선 이동보다 더 많이 움직이게 된다.










이러한 문제가 반복되면 결국 최소지점으로 이동하지 못 하고 overshoot 되는 문제가 발생하게 된다.











만약 초기 파라미터의 위치가 어떤 지역적 최소 지점에서 시작한다면 어떻게 될까?

이 경우엔 현재 위치에서 기울기가 0이기 때문에 업데이트된 값이 기존 값과 같게 된다.

즉 이동하지 않고 제자리에 머물게 된다.












learning rate이 고정된 값이라고 할지라도 gradient descent는 local minimum에 수렴할 수 있다.

이 경우엔 이동할 때마다 기울기의 크기가 작아져서 이전보다 더 작은 거리를 이동하게 된다.

따라서 기울기가 0인 어떤 최소값에 도달하기 위해 여러 번 이동해야 하지만 어쨌든 local 최소값에 도달할 수 있을 것이다.















Gradient Descent For Linear Regression 



선형회귀에서 가설 h(x)와 이에 대한 오차제곱합으로 비용함수 J를 만들었다.

이제 Gradient descent 알고리즘을 Linear Regression에 적용해보자

Gradient descent 알고리즘의 수학적 정의에서 볼 수 있듯이 비용함수 J에대한 기울기를 구해서 이용하는 것이 핵심이다.

즉 우리가 배웠던 선형회귀의 비용함수 J의 기울기를 구해서 적용하면 된다.










선형회귀의 비용함수를 풀어서 적어보면 위와 같이 쓸 수 있다.

우선 우리는 파라미터가 2개인 가설을 사용했으므로 θ0, θ1에 대한 각각의 미분계수를 구해줘야 한다.










각 파라미터에 대한 미분계수를 구했을 때.









위에서 구한 미분계수를 Gradient descent 알고리즘 공식에 넣었을 때.

우리는 파라미터 θ0, θ1을 동시에 update해줘야 한다.










선형회귀의 비용함수는 항상 볼록한 형태를 띈다는 것을 다시 상기하자.

이러한 convex function은 local minimum값이 존재하지 않으며 하나의 최적인 minimum값만 존재한다.













θ0가 900, θ1이 -0.1인 가설 h(x)와 그에 대한 비용함수 J가 있을 때 Gradient descent를 적용해보자











Gradient descent알고리즘에 따라 비용 값이 더 낮은 지점으로 이동하였고 이동한 지점에 대한 파라미터 값으로 업데이트된 가설에 따라 h(x)의 모양도 조금 바뀌었다. Gradient descent를 좀 더 해보자











비용함수의 최소값에 다다를 수록 가설 h(x) 그래프의 모양이 처음보다 data를 잘 반영하는 모습으로 바뀌고 있다.









Gradient descent 알고리즘에 따라 우리는 Global 최소값에 도달하였고 cost가 가장 적으면서 data를 잘 나타내는 model을 찾았다.

이렇게 찾은 model을 사용해서 누군가 size가 1250인 집 값은 얼마인가요?라고 물어본다면 우리는 $ 250,000라고 좋은 답변을 해줄 수 있다.












우리는 여기까지 Gradient descent 알고리즘을 집 값 예측을 위한 선형회귀 문제에 적용해보았다.

이렇게 각 step에서 모든 train sample을 고려하여 update를 하는 것을 "Bach" Gradient Descent라고 한다.

앤드류 응 교수님은 이 Naming이 별로 좋은 것 같지는 않다고 말씀하신다.








이렇게 기계학습의 대표적인 알고리즘을 배우게 되었다.

우리는 Gradient descent알고리즘은을 이용해서 다른 기계학습 문제도 풀 수 있을 것이다.






Comments