- gradient discent 추가 내용
다변수 선형회귀에서도 동일하게 gradient discent 알고리즘을 이용하여 cost function을 최소화하는 파라미터를 찾을 수 있다.
선형회귀에 맞춰 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개인 것이다.
위 그래프를 보면서 어떻게 선형 모델인지 헷갈렸지만, 관점? 또는 차원의 문제로 이해할 수 있을 것 같다.
- 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 함수를 사용하면 해결이 가능하다 정도로 이해하고 넘어가면 될 것 같다.
'머신러닝 > Machine Learning(Ng)' 카테고리의 다른 글
[5주차] Neural Network - 2 (0) | 2021.08.14 |
---|---|
[4주차] Neural Network (0) | 2021.08.11 |
[3주차-2] Regularization (0) | 2021.08.10 |
[3주차- 1] Classification, Logistic Regression (0) | 2021.08.10 |
[1주차] 머신러닝이란, model and cost function, (linear algebra) (0) | 2021.08.06 |