본문 바로가기

데이터 사이언스 공부노트/머신러닝, 딥러닝

[코세라 강의 정리] 앤드류 응의 머신러닝 - Normal Equation

1. Normal Equation


지금까지 배운 Gradient Descent은 최솟값을 찾기 위해서 많은 반복을 한다. 하지만 Normal Equation은 최적의 \(\theta\) 값을 한 번에 구한다.

 

다음과 같은 cost function이 있다고 생각해보자. (\(\theta\)는 벡터가 아닌 스칼라라고 가정)

여기서 최솟값을 가지는 곳은 미분해서 기울기가 0이 되는 지점으로 쉽게 찾을 수 있다.

 

그렇다면 \(\theta\)가 실수가 아니라 (n+1)차원의 파라미터 벡터일 경우는 어떻게 할까?

아래 예시를 통해 확인해보자. (m=4인 training data)

가장 먼저 할 일은 모든 값이 1인 새로운 Feature \(x_0\)를 추가해주는 것이다. 그리고 다음과 같이 \(x, y\)에 대한 행렬 X와 벡터 y를 만들어준다.

행렬 X와 벡터 y

끝으로, 다음 공식에 대입해주면 cost function을 최소화하는 \(\theta\)가 나온다. 무척 간단하다.

$$\theta = (X^{T}X)^{-1}X^{T}y$$

(※ Normal Equation을 사용하면 Feature scaling을 따로 해주지 않아도 된다.)

 

그렇다면 Gradient Descent와 Normal Equation의 장단점을 비교해보자.

Gradient Descent

  • 단) 학습률 \(\alpha\)를 비교해가며 조절해줘야 한다.
  • 단) 많은 반복이 필요하다.(오래 걸림)
  • 장) Feature의 수가 많더라도 잘 동작한다.

Normal Equation

  • 장) 학습률 \(\alpha\)를 선택할 필요가 없고, 한 번의 연산으로 끝난다.
  • 단) 역행렬 식을 계산하는데 걸리는 시간은 \(O(n^3)\)이나 된다. 따라서 feature(n)가 많아지면 매우 느려진다. 

그렇다면 n의 수에 따라서 어떤 방법을 사용할지 갈린다는 말인데, n이 크다는 기준은 무엇일까?

 

앤드류 응 교수님은 n=10000개 정도라면 약간 애매하지만 그래도 요즘 컴퓨터로는 계산이 가능할 것이라고 한다. 하지만, 그 이상이라면 n이 크다고 봐도 된다고 한다. 예를 들어, n = \(10^6\) 이라면 Gradient descent를 사용하는 것을 추천한다.

 

선형 회귀에서 특정한 모델의 경우에는 Normal Equation이 훨씬 빠르다. 하지만 나중에 배울 classification 알고리즘(그중에서도 logistic 알고리즘) 같이 정교한 알고리즘에는 Normal Equation은 적합하지 않지만, Gradient Descent는 적합하다. 따라서 어떤 알고리즘을 사용하냐에 따라 적절하게 사용할 필요가 있다.

 

2. Normal Equation Noninertibility


Normal Equation을 사용하려면 역행렬을 계산해야 하는데, 만약 \(X^{T}X\)의 역행렬이 존재하지 않으면 어떻게 해야할지 의문이 생긴다.

 

실제로 \(X^{T}X\)의 역행렬이 없는 경우는 거의 없다고 한다. 그럼에도 불구하고, 역행렬이 없다면 다음 항목들을 체크해봐야 한다.

\(X^{T}X\)의 역행렬이 없을 때 원인은 대체로 두 가지 경우이다.

  • 불필요한 feature를 가지고 있는 경우
  • 너무 많은 feature를 가지고 있는 경우

첫 번째 경우의 예를 보면, \(x_1\) 과 \(x_2\) 가 단위만 다르고, 서로 같은 것을 의미한다. 1\(m\) = 3.28 \(ft\)이므로 둘은 선형적인 관계다 (\(x_1 = (3.28)^2x_2\)). 이런 경우는 역행렬이 존재하지 않는다.

 

두 번째 경우는 feature가 너무 많은 경우인데, 구체적인 예를 들자면 샘플의 수(m)보다 특성의 수(n)가 더 많은 경우다. 즉, m=10이고 n=100이라면 10개의 샘플로 101개의 특성을 표현해야 하는데 data가 충분하지 않다. 따라서 몇몇 특성을 지우거나 regularization이라는 기술을 사용해줘야 한다.

 

정리하면,

  • 우선 불필요한 feature가 있는지 확인하고, 있다면 지워준다.
  • 불필요한 feature가 없다면, feature 수가 너무 많은지 확인해서 지워주거나, regularization을 사용할지 고려해야 한다.

 

이번 강의에서는 \(\theta\)를 구하는 또 다른 방법인 Normal Equation에 대해서 알아봤다.

다음 강의에서는 분류(Classification) 문제에 대해 알아볼 것이다.

 

 

 

 

 

* 공부 정리 목적으로 쓴 글입니다. 오타나 수정사항이 있으면 바로 알려주세요.