Coursera ML class – week02 Linear Regression with Multiple Variable part I

이 포스트는 Coursera Machine Learning 강의(Andrew Ng 교수)를 요약 정리한 것 입니다. 포스트에 사용된 이미지 중 많은 내용은 동영상 강의 자료의 이미지 캡쳐임을 밝힙니다.

Course Home: Coursera Machine Learning

 

 

  • Multiple features

우리는 여태까지 집의 크기(Size)를 사용해서 가격(Price)을 구하는 hypothesis에 대해 최소의 J(θ0, θ1) 값을 만드는 θ0, θ1 값을 구하는 방법에 대해 알아보았다. 그러나 실제 집의 가격을 구하는데 방의 크기라는 하나의 변수만 영향을 주지는 않을 것이다. 이번에는 변수가 여러 개일 때는 어떻게 계산할 수 있는 지 알아보도록 하겠다.

아래 그림에서보면 집의 가격은 집의 크기 뿐 아니라, 방의 개수, 층수, 집이 지어진 년도 등에 의해 결정된다.

1

여기서 n은 feature(크기, 방 갯수, 층수, 연식) 의 개수다. x(i)는 i번째 행을 가리키는 입력변수이다. 예를 들어 x(2)는 2번째 행인 1416, 3, 2, 40로 이루어진 4×1벡터이다.  xj(i) 는 i번째 행에서 j번째 인덱스(열)의 값이다. 위 그림에서 x1(2)은 1416이다.

 

  • Gradient Descent

지금까지 변수가 하나일 경우의 가설은 아래와 같았다. 이제는 변수가 여러 개 이기 때문에 각각이 모두 hθ(x)에 영향을 주게 되므로 아래와 같이 식을 세울 수 있다.

2

다시 한번 위의 식을 정리해보면 θ의 값은 (n+1)X 1 vector이다. X 역시 (n+1) X 1 형태의 vector (X0=1) 이기 때문에 두 벡터 간 곱은 불가능하다. 따라서 θ 값을 transpose(행과 열의 위치를 변환) 하게 되면 두 벡터간 곱이 가능해 진다, 따라서 최종 식은 hθ(x)= θTx 이다. 이것을 Multivariate Linear Regression 라 한다.

3

4

그러면 Multi features에 맞게 hypothesis, Cost function, Gradient descent를 정리해보자.

5

Gradient Descent도 기존과 변한 것은 없다, 단지 θ값이 많아졌고, 동시에 θ값이 업데이트 되어야 한다는 것은 동일하다.

6

 

  • Gradient Descent Practice – Feature Scaling

이번에는 Gradient Descent를 어떻게 사용하는지 활용방법에 대하여 알아보자.

Gradient Descent를 빠르게 진행하기 위한 몇 가지 방식을 알아보겠다. 그 첫 번째 방법이 Feature Scaling이다. 아래 왼쪽 그림을 보면 방의 크기(x1)의 범위는 (0 ~ 2000)feet2이고 방의 개수(x2)의 범위는 (1 ~ 5)개 이다. 이 때 x1의 범위가 상당히 크기 때문에 contour plots를 그렸을 때 위로 긴 그래프가 나올 것이다. 이럴 경우 global minimum을 찾는 시간이 오래 걸리게 된다. 그래서 변수들의 값을 해당 변수의 최대값으로 나누어 0~1 사이의 값으로 만들게 되면 contour의 그래프가 작아지게 되고 쉽게 global minimum에 도달할 수 있게 된다.

7

그래서 이것을 일반화 하기 위해 아래와 같이 모든 변수 x의 값의 범위를 -1≤ x ≤1로 만들어서 계산해 보자. 이미 x0 값은 1이므로 -1부터 1사이의 값이 되므로 상관이 없다. 물론 1보다 크거나 -1보다 작은 값으로 무조건 만들어야 되는 것은 아니다. 대략 적으로 비슷한 값으로 바꾸어주면 된다. 이때 너무 커서도 안되고 너무 작아서도 안된다. 너무 작게 되면 너무 작은 대로 global minimum을 찾기가 힘들어 진다.

8

Gradient Descent를 최적화하는 또다른 방식으로 Mean normalization이 있다.

아래와 같이 xi 를 xi – µi 로 바꾸고 범위(max-min) 값으로 나누는 방식이다. 이렇게 계산하면 -0.5보다 크고 0.5보다 작은 값 사이로 변환할 수 있다. 여기서  µi 는 값들의 평균이다. X0는 항상 1이므로 적용하지 않는다.

9

 

 

  • Gradient Descent practice – Learning rate

지금까지 Gradient descent를 빨리 찾는 방법을 알아보았다면, 지금부터는 Gradient descent가 잘 동작하고 있는지 디버깅하는 방법과 learning rate α 를 어떻게 선택하는지 알아보겠다.

10

x축을 반복횟수라 하고, y축을 J(θ)라고 두었을 때 반복되는 횟수가 늘어날수록 J(θ)값은 계속 감소해 나갈 것이다. 어느 순간이 되면 J(θ) 값이 더 이상 감소하지 않고 변화폭이 10-3 미만이라면 그 지점이 global minimum이 될 것 이다.

11

 

아래 그래프들은 gradient descent가 잘 동작하지 않는 예이다. 계산이 반복될 때 마다 J(θ)값이 증가한다면 이상한 일일 것이다. 이 때는 learning rate α 를 더 작은 값으로 선택해줘야 한다.

12

앞서, α값이 너무 작으면 global minimum을 찾는데 시간이 오래 걸리고, α값이 크면 minimum을 찾기 전에 다른 방향으로 가게 되어 global minimum을 찾는 데 실패한다고 설명했었다. 따라서 α값을 처음에는 작게 0.001정도로 잡고 디버깅을 해보고 감소하는 데 시간이 오래 걸린다 싶으면 α값을 증가시키며 다시 돌려보고 하면서 최적의 α값을 찾으면 된다.

13

(Coursera ML class –week02 Linear Regression with Multiple Variable part II로 이어집니다.)

 

 

Course Home: Coursera Machine Learning

Andrew Ng 교수님 소개: https://www.coursera.org/instructor/andrewng

One thought on “Coursera ML class – week02 Linear Regression with Multiple Variable part I

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.