본문 바로가기
Machine Learning

20. 뇌신경망을 이용한 머신러닝 예제 (Neural Networks)

by 대소니 2016. 7. 21.


이제 Neural Networks에 대해서 실제 예제들을 살펴보며 알아보겠습니다.

여기서는 어떻게 NNs가 복잡한 non-linear hypothesis를 처리할 수 있는지에 대해서 볼 수 있습니다.


아래 그림의 오른쪽과 같은 binary형태의 dataset이 있을때 뼈다귀 모양의 곡선으로 Decision Boundary를 정의할 수 있을 겁니다.

이것을 조금 심플하게 왼쪽과 같이 표현을 한다고 하면 x1과 x2의 XOR/XNOR의 결과로 표현을 할 수 있습니다.



역시 binary의 input data에 대해서 AND 연산에 대하여 예제를 보겠습니다.

x1, x2의 input data와 x0의 bias unit을 포함하여 생각합니다. 이때 각각의 weight를 -20, 30, 30으로 주어졌다고 합시다. 이때의 h 함수를 공식으로 표현하면 아래 파란색 공식과 같이 됩니다.


g의 함수는 sigmoid 함수임으로 그래프로 그리면 오른쪽 위의 그래프가 됩니다. z 값이 4.0이라면 h 값이 0.99로 1에 가까운 값이 되고, z 값이 -4.6이라면 h 값이 0.01로 0에 가까운 값이 됩니다.


이 공식 그대로 x1, x2 값을 대입하여 보면 오른쪽 표와 같이 x1=1, x2=1인 경우에만 h = 1되는 AND 연산이 되는 것을 확인할 수 있습니다.



이번에는 OR 연산에 대해서 알아보겠습니다.

weight가 -10, 20. 20으로 변경이 되었습니다. 이때 h 함수는 아래 파란색 공식과 같이 표현이 됩니다.

h 공식에 x1, x2를 각각 대입해 보면 x1=0, x2=0 일때만 y=0이 되며, 그외의 경우에는 y=1이 되는 OR 연산이 되는 것을 알 수 있습니다.


이번에는 Negation(not)에 대해서 알아보겠습니다.

weight가 10, -20으로 구성되어 있는 h 함수에 x1의 값을 대입해서 보면, x1=0일때 h=1이 되고, x1=1일때 h=0이 되어 NOT 연산이 잘되는 것을 알 수 있습니다.


이 NOT 연산을 이용해서 XNOR 연산이 가능합니다.



이제 x1 XNOR x2 연산을 만들어보겠습니다.

아래 그림의 3가지 연산 중에 왼쪽부터 순서대로 AND 연산(빨강색), NOT AND NOT 연산(하늘색), OR연산(녹색)입니다.

이 3가지 연산을 조합하여 Neural Network를 구성하면 밑에 그림과 같이 됩니다. 각각 색상이 해당 하는 연산으로 Layer 2의 unit이 됩니다.


input data인 bias, x1, x2를 통해서 AND 연산을 하여 layer 2의 a1이 되며,

다시 bias, x1, x2를 입력으로 하여 NOT AND NOT 연산을 하여 layer 2의 a2가 생성됩니다.

이것을 layer 3의 a1에서 OR연산을 함으로서 최종 결과인 h 가 됩니다. 오른쪽 표와 같이 x1,x2가 동시에 0 혹은 1이 될때만 1의 값을 갖게 되어 XNOR 연산이 되는 것을 볼수 있습니다. 



이렇게 만들어지는 NNs를 이용하여 

우편번호에 사용되는 손글씨 숫자를 판별하는 Handwritten digit classification을 구현한 내용을 보여주고 있습니다.

아래 큰 숫자가 손으로 쓴 입력값이 되고 이것을 왼쪽 세로로 구성된 각 layer에서 연산을 통해 분석하여 최종적으로 노랑색 박스에 answer에 결과값을 보여주고 있습니다.


글씨라고 보기 어려운 것도 잘 판별하는 것을 이어지는 이미지들을 통해서 볼 수 있습니다. 참으로 대단한 것 같습니다





Multiclass Classification


결과 값이 2개가 아닌 다수의 결과도 NNs를 이용해서 가능합니다.

아래 그림과 같이 4가지 유형의 이미지를 학습하여 결과를 vector의 형태로 구할 수 있습니다.


아래 그림에서는 4개의 layer로 구성된 NN(Neural Network)이 있습니다.

output layer를 보면 하나의 unit이 아닌 4개의 units로 구성이 되어 결과를 4개의 값을 갖는 vector로 주게 되어 있습니다.


h vector가 [1; 0; 0; 0]이 되면 pedestrian(보행자) 이미지로 분류된 것이고, [0; 1; 0; 0]이라면 car(자동차) 이미지로 분류가 된 것입니다. 마찬가지로 [0; 0; 1; 0]이 되면 motorcycle(오토바이) 이미지가 되며, 그외 나머지 결과들은 truck(트럭)으로 분류가 될 것입니다. 이전에 배운 one-vs-all 방식이 됩니다.


y에 대한 vector를 표현하면 아래 그림의 하단의 vector와 같은 결과 값으로 나타납니다.

이것은 그동안 보았던 y=1, 2, 3, 4와는 다른 형태이니 유념하시면 좋겠습니다.

h와 y의 값을 비교하기 위해서 y의 결과 값도 h 의 vector와 같은 형식으로 나타내 주어야 할 것 같습니다.



댓글