- gradient discent 추가 내용

다변수 선형회귀에서도 동일하게 gradient discent 알고리즘을 이용하여 cost function을 최소화하는 파라미터를 찾을 수 있다.

다변수 선형회귀에서의 gradient discent

선형회귀에 맞춰 gradient discent를 적용한 식은 위와 같다. hypothesis 대신 식을 풀어서 써본 다음 미분해보면 확인할 수 있다.

 

- Feature Scaling

각각의 feature들(x1, x2 , ..., x_n)이 동일한 scale을 갖도록 맞춰주는 방법이다.

이렇게 하면 gradient discent 알고리즘이 더 빠르게, 적은 iteration만으로 최적 parameter를 찾을 수 있다.

 

파라미터가 변경됨에 따라 cost function의 값이 변경되는 과정을 나타낸 그림이다.

왼쪽은 scale에 차이가 있는 경우, 오른 쪽은 거의 없는 경우이다. 

왼쪽의 경우 진동하며 더 많은 iteration이 필요한 것을 확인할 수 있다.

 

강의에서 이에 대해 수학적으로 자세히 풀지는 않았지만 직관적으로도 어느 정도 이해할 수 있다. 

우선은 feature scaling과 그 필요성에 대해 알아두는 것이 중요할 듯 하다.

 

* 일반적으로 -1 <= feature <= 1 정도로 통일하여 scaling하고, 근사적으로만 통일되어도 문제 없다고 한다.

 

Mean Normalization

i번째 feature들의 평균으로 빼주는 것. feature들의 평균이 대략적으로 0이 된다.

 

보통 feature scaling과 mean normalization을 함께 적용.

 

- Gradient Discent의 debugging

앞서 Gradient Discent를 적용할 때 learning rate(알파)를 지나치게 크게 설정하면 최적값을 찾는 것에 실패한다는 점을 확인했었다. 

 

그렇다면 알고리즘이 제대로 동작하고 있는지 확인하려면 어떻게 해야할까?

위 그림처럼 알고리즘을 반복하면서 cost function값의 변화를 확인하면 된다.

cost function이 계속하여 감소하지 않고, 증가하거나 진동한다면 learning rate가 크게 설정되어 동작하지 않는 경우이다.

 

* 2차 함수에서 learning rate가 클 때 파라미터가 발산하는 그래프를 떠올리며 굳이 cost function이 아니라, 파라미터의 변화만 보고도 판단할 수 있지 않을까 생각했지만, 앞서 feature scaling에서 사용된 그림을 보면 feature가 많을 때 파라미터는 커지거나 작아지는 과정이 교차될수도 있음.

 

- Learning Rate 설정

Learning Rate를 설정하는 것은 debugging 과정을 그대로 이용하면 된다.

(1) 너무 클 경우 : debugging과정에서 제대로 동작하지 않는 것을 알 수 있다. 줄이면 된다.

(2) 너무 작을 경우 : iteration이 지나치게 많아지게 된다. 키우면 된다.

 

보통 3배씩 키워가거나 줄여가면서 변화시킨다고 한다.

또한 동작하는 가장 큰 rate를 찾은 후 그것보다 약간 작은 값을 최종적으로 사용한다고 한다.

- Feature의 설정과 polynomial regression

feature를 재정의하는 것도 하나의 좋은 방법이다.

 

예를 들어, 가로 넓이와 세로 넓이를 둘 다 feature로 사용하는 것보다 둘을 곱하여 면적이라는 새로운 feature로 정의하여 사용해도 문제가 없다. 

 

또한 polynomial regression이라는 방법도 있다. 

한 feature의 제곱이나 세제곱, 루트 등을 새로운 feature로 사용하는 방법이다. 

이러한 방법을 통해 위와 같이 선형에 적합하지 않은 데이터를 설명할 수 있다.

 

* polynomail regression도 '선형' 회귀이다. 모델 입장에서는 그냥 feature가 3개인 것이다. 

위 그래프를 보면서 어떻게 선형 모델인지 헷갈렸지만, 관점? 또는 차원의 문제로 이해할 수 있을 것 같다.

(https://stats.stackexchange.com/questions/92065/why-is-polynomial-regression-considered-a-special-case-of-multiple-linear-regres)

 

 

- Normal Equation

Normal Equation은 선형 회귀의 최적 파라미터를 찾는 또 다른 방법이다.

단 하나의 계산으로 해결되어 간단하지만 gradient discent와 각각 장단점이 있다. ㅇ

 

기본적으로 선형 회귀에서 cost function은 convex 하기 때문에 각 파라미터에 대해 편미분하여 0이 되는 값을 찾으면 최적 parameter를 찾을 수 있다. 

 

일일히 편미분하지 않고 그러한 값을 찾는 수식이 아래의 normal Equation이다.

X의 행과 열이 어떻게 구성되는지 주의해야 한다. (각 행이 1개의 데이터 셋으로 이뤄지고, 1이 맨 앞에 추가된다)

n은 feature의 수, m의 데이터셋의 수라고 할 때 X는 m x (n+1) 행렬이 된다. 

이때 X의 전치행렬과 X를 곱한 행렬을 A라고 하면 A는 (n+1) x (n+1) 의 정방 행렬이 된다.

 

어떤 행렬의 역행렬을 계산하는 것은 대략 O(n^3)의 시간 복잡도를 갖고, 따라서 feature가 많아질수록 이 과정에서 많은 시간이 소모될 수 있다.

*n >= 100,000 정도부터는 gradient discent를 고려하는 것이 좋고, 그 이상부터는 사실상 gradient discent를 사용한다고 한다.

 

결과적으로 (n+1) x 1의 결과가 나온다. n개의 feature에 대한 parameter가 계산된다. n+1인 이유는 intercept도 계산되기 때문이다.

 

자세한 수학적 증명은 우선 생략하였고, 또한 역행렬이 존재하지 않는 경우도 pseudo inverse 함수를 사용하면 해결이 가능하다 정도로 이해하고 넘어가면 될 것 같다. 

 

 

 

두 알고리즘의 장단점 비교

 

+ Recent posts