[week2] vectorization
1. 가설을 계산할 때 방법이 두 가지다. 반복문을 통해 계산을 하거나, 아니면 각각의 가설의 파라미터와 데이터를 벡터화 한후, 행렬곱을 하는 것이다. 무엇이 더 빠르냐? 당연히 행렬곱이 훨씬 빠르다. 한줄이면 되니까.
1. 경사 하강법을 쓰기 위해서는 각각의 세타를 동시에 갱신해야 한다. 왼쪽 상단의 방법이 3줄로 갱신을 하는 방법이다.
2. 여기서의 핵심은 한 줄의 벡터화 코드로 축약하는 것이다.
[세타0; 세타1; 세타2] := [세타0; 세타1; 세타2] - 학습률[델타0 ; 델타1; 델타2] 로 축약할 수 있다. 이 식을 통해 벡터 세타가 수렴하는 벡터를 찾는 것이다.
이때 벡터 델타는 중앙의 파란색으로 쓰여진 공식과 같다. 벡터 델타의 원소는 각 관측치의 해당 피쳐의 값과 오차의 곱의 합의 평균이 되게 된다. 예를 들면 1번 데이터의 1번 피쳐의 값을 1번 데이터에 대하여 가설을 적용했을 때의 오차에 곱하고, 2번, 3번...m번에 대해서도 똑같이 각 관측치의 1번 피쳐의 값을 곱한 후 모두 더한 뒤에 평균을 내어 준 것이 델타의 1번 원소가 된다.
델타의 2번 원소 그렇다.
그리고 이 벡터에 학습률인 알파를 곱하고, 본래의 세타에서 빼주게 되면 세타는 갱신된 값을 얻게 되고, 해당 세타에 대하여 다시 동일 과정을 반복한다.
위의 공식이 왼쪽 상단의 세 줄의 갱신식을 한번에 줄인 것이 된다. 결국 같지만 더 빠르다는 것이다. 자꾸 햇갈릴 수도 있겠지만, 우리가 경사하강법을 위하여 부분미분을 했기에 저러한 공식이 나왔다는 것을 잊어서는 안된다.
그렇기에 벡터 델타는 분홍색 박스와 같이 실수와 벡터의 곱으로 표시될 수 있게 된다.
X0의 값의 비율을 나타내는 세타0를 갱신하기 위해서, 각관측치의 X0와 각관측치의 가설과 실제값의 차를 곱해 더한 후 m으로 나눈 것이 벡터 델타의 1번 델타가 된다. 그리고 이 델타는 일종의 기울기로 알파가 곱해진 뒤, 본래의 세타의 값에 빼짐으로써 경사가 하강되게 된다.
이렇게 모여진 일련의 델타가 벡터 델타가 되고, 중앙의 파란색 식과 같이
[세타0; 세타1; 세타2] := [세타0; 세타1; 세타2] - 학습률[델타0 ; 델타1; 델타2]
라는 형식으로 표현될 수 있게 된다. 이로써 동시에 이루어지는 모든 세타의 갱신은 행렬의 곱으로 표현할 수 있다.