AndrewNg 재개!

딴짓이 그리워지는 시험기간을 맞아 한 달만에 수업을 다시 들으려니 다 까먹었다. week 2의 과제를 남겨두고 그만둔 터라 상황이 심각했다. 결국 복습이 필요하다.

무엇보다도 이 cost function이 중요한 건데, 왜 2로 나눠주는지를 도통 모르겠어서 한참을 헤맸는데, 수학적 의미가 있는 것은 아니었다. Derivative term에서 차수 2가 내려오면 자연스럽게 사라지도록 하는 편의상의 기능을 할 뿐이란다 ㅂㄷㅂㄷ

새로운 세타값들을 찾아나가는 것까지는 기억이 나는데 그 방법이 아리송하다. 알파는 시행이 되는 속도를 말하는 것일테고, 각 점에서 내린 접선의 기울기를 빼주는 듯한데, 왜 그렇지??


보아하니 예전에도 같은 의문을 가졌던 모양이다. 답은 위의 그래프를 위에서 바라봤을 때 찾을 수 있다. 강의에서도 이렇게 설명해줬다면 더 좋았을 듯 한데, J함수를 각 세타 변수로 편미분 해 주면, X자로 이어진 선의 한 단위의 방향이 등장하게 된다. 그 방향으로 알파만큼 곱해주어 각 세타변수에서 빼주게 된다면 다음 X자가 등장하는 것이다. 그렇게 단계단계 밟아간다면 최저점인 세타1로 도달한다는 것인데, 아직까지도 국소적 최저점인 세타0으로 도달하는 경우와 전역적 최저점 세타1로 도달하는 경우 둘을 구별할 수 있는지에 대한 의문은 남아있다.

과제로 나온 문제도 이런 방법들로 풀 수가 있다.
2번 문제는 Gradient Descent를 MatLab으로 표현하라는 문제인데, 문법만 익힌다면 문제없이 풀 수 있을 듯 하다.

먼저 cost function을 matlab으로 표현을 해야 하는데, 어려운 문법이 사용되는 것은 아니다. X, y, theta가 주어진 상황이므로 이들을 활용하여 차근차근 해결하면 된다.

문제에서 X와 theta 는 다음과 같이 설정되어 있다.

X = [ones(m, 1), data(:,1)]; 
theta = zeros(2, 1); 
X의 형식을 찾느라고 한참 걸렸는데... 항목이 모두 1인 (m x 1)행렬과 data의 첫 번째 열을 포함하는 행렬이므로

[1     x(1)]
[1     x(2)]
[1     x(3)]
.
.
.
[1     x(m)]

이런 꼴이라는 것을 유추할 수 있겠다.
세타는 초기값으로 (0,0)을 잡은 듯하다.

X와 theta 로 이루어진 h 함수는 강의에서 나와있듯이,

이므로,
X가 (m x 2)행렬, 세타가 (2 x 1)행렬임을 감안했을 때
h= X*theta ;
로 표현하면 충반하다. 물론 h함수의 초기값은 zeros(m, 1)이 될 것이다.

댓글

이 블로그의 인기 게시물

아두이노 - 안드로이드 블루투스 연결 및 실시간 그래프 표현 (1)

opencv feature matching 으로 월리 찾기

라즈베리3에 텐서플로 설치 & Python 3.6 설치