본문 바로가기
Coursera 강의/Machine Learning

[Machine Learning] Computing Parameters Analytically

by 별준 2020. 8. 4.
해당 내용은 Andrew Ng 교수님의 Machine Learning 강의(Coursera)를 정리한 내용입니다.

[Normal Equation] : Method to solve for parameter  analytically

이번 시간에는 Normal Equation에 대해서 배워볼 것이다. 이 방법은 특정 Linear Regression(선형회귀)에서 파라미터 의 구하는데 효과적인 방법이다. 

지금까지의 Gradient Descent는 Cost Function의 값을 최소화하기 위한 것이었고, Gradient Descent를 여러 번 반복하고 나서야 최소값으로 수렴을 했었다. 하지만 Normal Equation은 Analytically(분석적으로) 단 한번의 연산으로 최소값을 구하는 방법이다.

 

예를 들어, Feature가 1개인 경우에는, Cost Funtion은 2차방정식의 꼴이 된다. 따라서 에 대하여 미분한 결과가 0이 되도록 설정하여 풀면 된다.

 

여러개의 feature를 이용하는 경우에도 같은 방식을 사용할 수 있다. 변수가 여러개이기 때문에 각 파라미터에 대하여 편미분하여 풀면 된다.

 

아래의 예를 보면서 어떻게 Normal Equation을 적용해야할 지 살펴보자.

위 표는 m = 4인 Training Set이다. 우리가 가장 먼저 해야할 것은 모든 값이 1인 Feature 를 추가하는 것이다. 그리고 각각 m, n+1 차원의 배열 X와 m차원의 배열 Y를 아래와 같은 배열로 표현할 수 있고, 우리가 원하는 값 를 계산해주면 된다.

일반적인 상황에서는 위와 같은 m x (n+1) 차원의 X와 m x 1 차원의 Y를 만들어 이를 계산하면 바로 값을 얻을 수 있으므로 Gradient Descent의 반복된 연산이 필요하지 않으며, Feature Scaling 또한 필요하지 않다.

 

Grandient Descent와 Normal Equation의 차이점은 아래와 같다.

두 알고리즘을 선택하는데 중요한 것은 n의 크기이다. n이 크다면 Gradient Descent가 적합하고, n이 작다면 Normal Equation이 적합하다.

보통 n이 10000이 넘는다면 Gradient Descent를 사용한다.(10000 x 10000 행렬부터 역행렬을 구하는게 느려지기 시작함)

 

이후에 배울 내용에 대해서 이야기하자면, Classification(분류) 알고리즘 중에서도 Logistic Regression 알고리즘 같은 정교한 학습 알고리즘에서 Normal Equation은 적합하지 않지만, Gradient Descent는 적합하다. 따라서 Gradient Descent는 알고있으면 매우 유용한 알고리즘이다.

 

 

[Normal Equation Noninvertibility]

를 구하기 위해서 를 계산해야 하는데, 만약 역행렬 이 존재하지 않으면 어떻게 될까?(역행렬이 존재하지 않는 행렬은 non-invertible matrix 비가역행렬, Singular matrix 특이행렬, 또는 Degenerate matrix 이라고 한다)

사실 X'X의 역행렬이 없는 경우는 거의 없으며, Octave는 역행렬을 구하는데 두 개의 함수를 제공한다. 하나는 pinv(), 다른 하나는 inv()이다. 이 둘은 기술적으로 차이점을 가지고 있는데, pinv는 pseudo-inverse라고 부르고, 하나는 inverse라고 부른다. pinv를 사용하면 역행렬이 존재하지 않더라도 를 정확하게 계산하는 것을 볼 수 있다. 두 함수의 차이점은 여기서 다루지 않는다. 

 

우리는 역행렬이 존재하지 않을때, 의미하는 것이 무엇인가에 초점을 맞출 것이다.

역행렬이 존재하지 않는 이뉴는 크게 두 가지로 나누어진다.

  1. 불필요한 feature를 가지고 있는 경우(두 특성이 서로 가깝게 연관되어 있는 경우) -> 불필요한 feature 제거
  2. 많은 feature를 가지고 학습 알고리즘을 사용하는 경우 -> feature를 제거하거나 Regularization(정규화)

1번은 어떤 Training Set에서 하나의 featrue는 제곱피트이고, 다른 하나의 feature는 제곱미터인 경우를 예로 볼 수 있다. 두 feature가 독립적으로 보일 수 있지만, 실제로는 1m = 3.28feet와 같으므로 동일한 데이터가 중복되어 있음을 볼 수 있다. 이렇게 불필요한 Feature를 가지고 있는 경우에 역행렬이 존재하지 않을 수 있다.

2번은 Training Set에 비해 Feature가 너무 많은 경우(m >= n)인 경우를 예로 들 수 있다. 이러한 경우에는 Feature를 제거하거나 Regularzation(정규화)를 통하여 문제를 해결할 수 있다. 

따라서, 역행렬이 없는 경우에는 서로 dependent한 feature들이 존재하는지 검사하여 존재한다면 제거하고, 그렇지 않은 경우에는 불필요한 feature들을 제거하거나 Regularization하면 된다.

 

하지만 위에서 언급했듯이 역행렬이 존재하지 않는 경우는 거의 존재하지 않으며, 역행렬이 없더라도 선형대수학 라이브러리를 사용하여 pseudo-inverse라 불리는 것을 사용하면 된다. 따라서 선형회귀에서 크게 문제가 되지 않을 것이다.

댓글