Coursera - Machine Learning week.4

Non-Linear Hypotheses

다음과 같은 트레이닝 셋이 있을때, 두 집단을 classification 하는 hypothesis 를 찾는다고 하자.

 

많은 변수 x1^2, x1x2, x2^2 등을 넣는다고 하자. 트레이닝 셋에 적합한 가설을 찾을수는 있겠지만 단점이 있다.
1. 과적합이 발생할 수 있다.
2. 변수가 n 이라 할때, 모든 quadratic feature 를 도입하면 feature 수가O(n^2) (n^2/2)만큼 늘어난다. (아래 그림 참조) 계산 비용이 엄청나게 비싸진다.

 

그리고 변수를 줄이기 위해 x1^2, x2^2, x3^2 ... 등 2차 변수 만을 도입하고 나머지 parameter 를 버리면, hypothesis 가 underfit 할 수 있다.
만약 변수를 cubic 까지 도입하면 feature 수가 O(n^3) 으로 늘어나 계산시간은 어마어마하게 걸린다. 따라서 차수를 늘려 문제를 해결하려는 방법은 n 이 클때 좋은 방법이 아니다. 게다가 일반적으로 대부분의 문제들은 n 이 큰편이다.
자동차 이미지 인식 문제를 고려해 보자. 이미지는 픽셀이므로, 50 * 50 픽셀로 구성된 경우 n = 2500 이다.

                    












(http://blog.csdn.net/feliciafay)

이건 그레이스케일의 경우고 만약 RGB 라면 여기에 3을 곱해서 n = 7500 이 된다.quadratic 이면 7500^2 / 2, 대략 3 millions 개의 feature 를 가지게 된다. n 이 큰 classification 에 대해 사용할 수 있는 다른 방법은 없을까?


Model Representation

Neural Networks 에 대해 이야기 해 보자. 뇌를 모방한 알고리즘을 만들려면, 인간의 뇌가 어떻게 작동하는지 알아야한다. 뇌는 뉴런이라는 단위의 집합으로 구성되있다.



여기서 Dendrite 라는 부분이 input 이고, Axon 이 output 이다. 이걸 모델링하면,
위 그림에서 좌측에 있는 x1, x2, x3 가 input 이라 보면 되고, h0(x) 는 이전처럼 0^T * x 에 sigmoid function(곡선 함수) 을 적용한 것이다. 그리고 neural network 에서 parameter 대신 0(theta) 를 weights 라 부르기도 한다.
여기까지는 단일 뉴런을 모델링 한것이고, neural network 는 여러개의 뉴런들이 합쳐진 것이다. 간단히 그려보면,


여기서 layer 1 은 input layer, 마지막인 layer 3은 output layer 다. 그리고 가운데 있는 레이어들, 여기서는 layer2,  hidden layer 라 부른다. 


ai^j 는, j 번째 hidden layer 에서 i 번째 unit 이다. 0(theta)^j 는 layer j 와 layer j+1 사이에서 사용되는 weights 다. 이때 hidden layer 의 각 unit 마다 input 을 위한weight 를 가지고 있다고 하면 위의 그림에서 0 의 dimension 은 3 * 4 다. 
이제 output layer 를 잘 보면 이 Layer의 input 은 a^(2) 고, weight 로 0^2 를 가지고 있다. 따라서 h0(x) 는 위의 식처럼 된다.

Forward Propagation


위 그림처럼 x 를 받아, h0(x) 를 계산하는 방법을 forward propagation 이라 부르는데 vectorization 을 이용해서 간단히 해 보자.

sigmoid fucntion g 내부의 수식을 z 라 부르고 a^(1) = x 라 두면, 우측처럼 수식이 심플해진다. z^(2) = 0^(1) * a^(1) 이고, 여기에 sigmoid function 을 적용하면 a^(2) 가 나온다. 여기에 bias unit a_0^(2) = 1 을 더해 a^(2) 를 4차원 벡터로 만들면 다시 z^(3) 를 계산할 수 있다. 
위 그림에서 a^(1) 즉, layer 1 을 가려버리면 아래와 같은데


이때 h0(x) 를 계산하는 식을 구해보면, logistic regression 과 똑같다.
결국, neural network 가 하는 일은 logistic regression 이다. 단지 hidden layer 에서 x1,x2,x3 를 적당한 weight로 훈련시켜 새로운 feature a1^(2), a2^(2), a3^(2)를 만들어 내고, 그것으로 logistic regression을 할 뿐이다.
다시 한번 정리하자면 neural network 는 feature 를 훈련시켜 다른 값을 가진 feature로 바꾸는 과정을 통해 hypothesis 를 매우 고차의 다항식으로 만들지 않고도 n 이 매우 큰 경우의 classification 을 풀 수 있도록 한다. 항상 같은 개수의 feature 만 나오는건 아니고, 더 줄이거나 좀 더 늘릴 수도 있다. 아래의 그림을 보자.

Multiclass Classification


이제 multi-class 를 고려해 보자.

위 그림처럼 4개의 클래스가 있을 때, output 인 h(x) 를 4 * 1 vector 로 만들도록 하고, 각 클래스에 대해서 [1; 0; 0; 0], [0; 1; 0; 0], [0; 0; 1; 0], [0; 0; 0; 1]이 되도록 훈련시키면 된다. 기본적인 아이디어는 one vs all method 와 같다.

References

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리