Coursera - Machine Learning week.2

Cost function

예를 들어서 다음과 같은 데이터셋이 있을때,
H(hypothesis) 가 다음처럼 나온다면


여기서 0 (Theta) 는 parameter 라고 부른다. 문제는, 상수를 어떻게 찾느냐인데, 아이디어는 간단하다. training set (x, y) 에 가까운 h(x) 를 찾으면 된다.
따라서 다음과 같은 식을 만들 수 있고,


J(01, 02) 를 최소화 하는 (01, 02) 를 찾으면 된다. 이 식을 cost function 또는squared error function 이라 부른다. 여기서 1/2m에서 1/m 으로 나누는 이유는 squared error 에 대해 mean 을 얻기 위한거고, 1/2 로 다시 나누는 이유는 미분했을때 나오는 2 를 제거하기 위해서다.


Cost Function: Intuition 1

Cost function 에서 만약에 0_0 이 제로라면 0_1 만 찾으면 된다. 따라서 다음과 같은 실제 데이터에서

J(0_1) 을 찾아보면, 다음과 같은 이차함수가 나온다.


당연히 이차함수이므로, 기울기가 0이 되는 지점은 J(0_1) 을 미분해서 찾으면 된다. (이래서 아까 1/2가 있던 것)


Cost Function: Intuition 2

Parameter 가 0_1 만 있었을때는, (0_0 = 0) J(0_1) 이 이차함수였지만, J(0_0, 0_1) 일때는 다음과 같은 모양을 보여준다.


여기서 J(0_0, 0_1) 값을 제외하고 (0_0, 0_1) 을 평면으로 나타내면 아래 사진에서 우측과 같은 여러 궤도가 나온다.


여기서 같은 궤도에 있는 (0_0, 0_1) 쌍은, 같은 J 함수를 만든다. 그리고 재밌는 사실은 궤도가 가장 좁은 타원의 중심에 있는 (0_0, 0_1) 가 가장 작은 J(0_0, 0_1) 를 만들어 낸다.


Gradient Descent

Gradient Descent 알고리즘은 Linear Regression 에만 쓸 수 있는건 아니고, 범용적인 알고리즘이다. cost function 의 최소값을 찾기 위해 사용할 수 있는데, 다음과 같은 J가 있을때,


높이를 비교해 가며 점점 낮은쪽으로 이동해 가면서 J 의 최소값을 찾을 수 있다. 식은 다음과 같은데,


여기서 := 는 assignment 다. a(alpha) 는 learning rate 라 부른다. 이때 (0_0, 0_1) 은 동시에 업데이트 되야한다. (Simultaneous update)


Gradient Descent: Intuition

이제 저 식을 분해하기 위해 J(0_1) 처럼 parameter 하나만 놓고 보면, 이차원 함수가 나올테다. 만약 현재 0_1 이 이차함수의 최저점 우측에 있다면, J(0_1) 을 미분한 값(Slope, 기울기) 에 양수 a 를 곱한 값을 0_1 에서 뻬면서 갱신하면 0_1 은 점점 최저점 쪽으로 간다,
반대로 0_1 이 J(0_1) 의 좌측에 위치한다면 우측으로 이동하고, 아래는 그걸 요약한 그림이다.


따라서 learning late a 가 너무 작으면 Gradient descent 가 너무 느려진다. 왜냐하면0 의 차이가 점점 작이지기 때문에 최저점에 도착할때 까지 너무 많은 단계가 필요하다.
반대로 너무 크면 최저점을 넘어갈 수 있다. 심지어 최저점에서 점점 더 멀어질 수 있다.
그런데 이 gradient descent 알고리즘의 문제는 local optimum 수 있다는 점이다. 왜냐하면 local optimum 에서도 J 의 derivative 가 0 이기 때문이다.


Gradient Descent For Linear Regression

이제 cost function 을 gradient descent 에 집어넣고, 정리하자. 0_0(Theta zero), 과 0_1(Theta one) 대해서 시그마 내부 제곱을 각각 미분해서 정리하면,


참고로 Convex function 은 Bowl shaped 처럼 local optima 가 없는 h(Hypothesis) 를 말한다. 따라서 convex function 을 선택할 수 있다면, 하는편이 낫다.
어떤 경우에는 gradient descent 같은 iterative algorithm 없이도 min J(0_0, 0_1)를 풀 수 있다.


References

(5) http://1ambda.github.io/machine-learning-week-1/

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리