이번 포스팅에서는 많은 변수에 대한 경사하강법(Gradient Descent), 즉, feature가 여러 개 있는 경우의 경사하강법에 대해 알아보겠다. 이전에 포스팅했던 경사하강법은 feature가 하나인 경우만 다뤘지만 저번 포스팅에서도 말했듯이 feature가 하나인 경우는 거의 없기 때문에 여러 feature인 경우에는 어떻게 되는지 보도록 하자. 사실 크게 다르지는 않다.
먼저 이전 포스팅에서 봤던 식들을 복습해보자. 위 그림에도 나와있듯이 feature가 여러 개인 경우는 hθ(x) = θ^T * x = θ0 + θ1*x1 + θ2*x2 + ... + θn*xn로 쓸 수 있다고 했다.
또한 Paramameters도 여러 개(θ0, θ1, ..., θn)이지만 이를 n+1차원의 가중치(weight) 벡터로 표현하여 θ 벡터로 정의했다. 이전 포스팅으로 돌아가기 귀찮으신 분들을 위해 보여드리자면
이렇게 표현한다. Cost Function도 보면, J(θ0, θ1, ..., θn)을 n+1차원의 가중치(weight) 벡터로 표현하여 θ 벡터로 써서 J(θ)로 표현한 것이고 그 오른쪽의 (1/2m)*(∑(hθ(x^(i) - y^(i)))^2)이 궁금하다면 "Cost Function (비용 함수) (1)" 포스팅을 참고하기 바란다.
그 아래 Gradient descent 역시 J(θ0, θ1, ..., θn)을 n+1차원의 가중치(weight) 벡터로 표현하여 J(θ)로 쓴 것을 볼 수 있고 경사하강법 식에 의해 θj를 변화시키는 걸 알 수 있다. 이 Gradient descent에 대해 좀 더 자세하게 알아보자.
보면 왼쪽은 단일 feature인 경우이고 오른쪽은 feature가 여러 개인 경우이다. 이 식들을 봤을 때 J'(θ) 부분들이 (1/m)*(∑(hθ(x^(i) - y^(i))))*x^(i)인 것을 보고 바로 맞다고 느꼈다면 여러분은 이해를 잘 하고 있는 것이다. 하지만 왜 저렇게 되는지 궁금하신 분들을 위해 부연설명을 해보겠다.
아까 복습하는 과정에서 Cost Function은 (1/2m)*(∑(hθ(x^(i) - y^(i)))^2)로 쓴다고 했다. 그런데, 위 그림을 보면 분모에 2는 사라져있고 θ0를 제외한 θ1이나 θj에는 뒤에 x^(i)나 xj^(i)같은 것들이 곱해져 있다. 혹시 왜 저렇게 되는지 이해를 하였는가? 그 이유는 저 부분이 J'(θ)이기 때문이다.
즉, (1/2m)*(∑(hθ(x^(i) - y^(i)))^2)를 미분한 식이 (1/m)*(∑(hθ(x^(i) - y^(i))))*\*xj^(i)인 것이다. 이건 수학을 좀 알아야 이 식이 왜 이렇게 나오는지 이해할 수 있는데, 너무 어려우면 그냥 J'(θ) 부분이 '어떤 수학적인 것에 의해 저렇게 표현되는구나' 하고 넘어가면 된다.
만약 이 부분이 이해가 간다면 한 번 따라와보기 바란다. 먼저 편미분이라는 개념을 알아야 이 식을 이해할 수 있으므로 간단하게 편미분에 대해 알아보면
[출처 : https://ywpop.tistory.com/11]
이렇게 하나의 y식에 변수가 x만 있는 것이 아니라 x1, x2 이렇게 2개가 있다. 따라서, 어느 변수를 기준으로 하느냐에 따라 미분값이 달라지게 되는데 풀이 부분을 보면 x1을 기준으로 미분을 하는 경우와 x2를 기준으로 미분을 하는 경우가 나와있다.
먼저 x1을 기준으로 미분하는 경우를 보면 x1을 기준으로 미분하므로 x1를 제외한 모든 변수들은 상수취급이 된다. 즉, x2가 상수취급이 되어 "12x1^3 + 4x1x2^2"이 되는 것이다. x2가 헷갈리면 그냥 아무 상수나 넣어서 생각하자.
예를 들어 x2 = 2로 해보겠다. 따라서, y = 3*x1^4 + 2*x1^2*2^2 + 7*2^4 를 미분한다고 생각하면 된다. 이러면, y' = 12*x1^3 + 4*x1*2^2 = 12*x1^3 + 4*x1*x2^2가 되므로 결국 똑같아진다.
x2를 기준으로 미분할 때도 마찬가지다. x2를 기준으로 미분하므로 x2를 제외한 모든 변수들은 상수취급이 된다. 이 경우는 x1이 상수취급이 되는 것이다. 이 역시 헷갈리면 x1에 아무 상수나 넣고 다 계산한 다음 다시 x1으로 되돌리면 된다. 이 원리를 생각하면서 Cost Function이 어떻게 미분되는지를 보면 이해가 될 것이다.
J(θ)은 Cost Function이고 이를 θj를 기준으로 미분하여 이렇게 된다. 이 식에는 사실 생략된 게 조금 있다. 독자가 직접 미분해보면서 이 식을 도출할 수 있다면 여러분은 이 식을 완벽하게 이해하고 있는 것이다!! 혹시나 수학을 어려워하는 분들이 있을 수도 있기 때문에 어떻게 저렇게 나왔는지 즉, 생략된 부분을 아래에 적어놨다.
필자 생각엔 아마 (hθ(x^(i)) - y^(i))' = xj^(i)가 어떻게 됐는지 궁금해하시는 분들이 많을 거라고 생각한다. 이에 대한 해답을 위 그림에 자세히 적어놨으니 하나하나 직접 써보면서 생각해보길 바란다.
다시 돌아와서
왼쪽의 Previously (n=1)인 경우, 즉, 단일 feature인 경우에 θ는 "Gradient Descent (경사하강법) (1)" 포스팅에서 설명한 내용들인데, 이 식들이 그대로 feature가 여러 개일 때, 즉, 오른쪽의 New algorithm (n>=1)일 때도 똑같이 적용된다.
혹시 조금 다르다고 느꼈는가? 조금 다르다고 느낄 수 있다. 왜냐하면 왼쪽의 Previously (n=1)에서 θ0가 업데이트되는 과정과 θ1이 업데이트되는 과정이 식만 보면 약간 다르기 때문이다. 하지만, 사실상 같다. 왜냐하면, "Multiple Features in Linear Regression" 포스팅에서도 말했고 오른쪽 New algorithm (n>=1) 의 중간 부분에도 적혀있듯이 x0^(i)는 편의를 위해 1로 정의했기 때문이다. 즉, 왼쪽 Previously (n=1)의 θ0식의 끝부분에 x0^(i)가 생략되어 있는 것이다.
또한, Previously (n=1)의 θ1을 보면 끝부분에 x^(i)로 되어 있는데 이는 파란색 글씨로도 적혀있듯이 정확히는 x1^(i)이다. 결국 오른쪽의 New algorithm (n>=1)에 있는 θ1과 똑같은 식이다.
이 식들을 자세히 뜯어보느라 글이 상당히 길어졌는데 사실 결론은 단일 feature인 경우나 다중 feature인 경우나 θ를 업데이트하는 원리는 같고 θ의 갯수에 대한 차이가 있을 뿐 정의된 모든 θ에 대해 업데이트를 적용하는 것도 결국 똑같다고 할 수 있다.
'Machine Learning' 카테고리의 다른 글
Multiple Features in Linear Regression (= Multivariate linear regression(다변량 선형회귀)) (0) | 2020.08.11 |
---|---|
Gradient Descent (경사하강법) (2) (feat. Learning rate) (0) | 2020.07.31 |
Gradient Descent (경사하강법) (1) (0) | 2020.07.16 |
Cost Function (비용 함수) (2) (0) | 2020.06.14 |
Cost Function (비용 함수) (1) (0) | 2020.06.12 |
댓글