Coursera - Machine Learning week.4
Non-Linear Hypotheses
다음과 같은 트레이닝 셋이 있을때, 두 집단을 classification 하는 hypothesis 를 찾는다고 하자.
많은 변수 x1^2, x1x2, x2^2 등을 넣는다고 하자
. 트레이닝 셋에 적합한 가설을 찾을수는 있겠지만 단점이 있다.
1. 과적합이 발생할 수 있다.
2. 변수가
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)
n = 7500
이 된다.quadratic 이면 7500^2 / 2
, 대략 3 millions 개의 feature 를 가지게 된다. n
이 큰 classification 에 대해 사용할 수 있는 다른 방법은 없을까?Model Representation
Neural Networks 에 대해 이야기 해 보자. 뇌를 모방한 알고리즘을 만들려면, 인간의 뇌가 어떻게 작동하는지 알아야한다. 뇌는 뉴런이라는 단위의 집합으로 구성되있다.
여기서 Dendrite 라는 부분이 input 이고, Axon 이 output 이다. 이걸 모델링하면,
위 그림에서 좌측에 있는
여기까지는 단일 뉴런을 모델링 한것이고, neural network 는 여러개의 뉴런들이 합쳐진 것이다. 간단히 그려보면,
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 와 같다.
댓글
댓글 쓰기