Neuron Network - Supervised

Theory 2010. 11. 4. 22:02


신경망에 대해서 수업을 들었지만 사실 이해가 잘 가지 않는다. 
되는대로;; 간략히 정리하자면

사람의 뇌가 Synapse 끼리의 의사소통으로 정보를 전달하는 것은 모두 알고 있을 것이다.


하나의 시냅스에 여러 입력이 들어오고, 그에 따라 단복수의 아웃풋이 있을 것인데,
사람의 이런 인지 메커니즘을 따와서 모델링 한 것이 신경망이다. Perceive + Neuron 으로 Perceptron 이라고도 한다.

다음과 같은 이미지가 될 것이다 .


X1, X2, X3는 인풋이고, F는 시냅스에서 할 내부적인 작업, 그리고 O는 아웃풋이다.
이 아웃풋이 다른 F의 X1, X2, X3가 될 것이다.

그런데 X1, X2, X3는 이대로 들어올 수도 있지만, 시냅스마다 인풋마다 다른 가중치를 적용 할 수도 있다. 그렇게 되면 이미지는

와 같은 형태가 된다.

F의 입장에서, 자신이 가지고 있는 정보는

X_vector = [ x1 x2 x3 ] , W_vector = [ w1 w2 w3 ] 이며,
w1x1 + w2x2 + w3x3 = 0 과 같은 직선의 식을 형성하게 된다. (각 시냅스 별로)

여기서 직선의 식을 형성한다는 말은, Classify에서 각 Class 간을 구분짓는 직선을 만드는 것이 이 초창기 신경망의 주 목적이라는 점을 생각하면 된다.
숫자 인식이라면, 0, 1, 2 ,...9 의 10가지 class가 있는데, 0 그룹들은 2차원(사실 feature에 따라 2차원보다 훨씬많지만) 평면에 맵핑시켰을때 왼쪽 구석에 몰려있었고, 9는 오른쪽 하단 구석에 몰려있었다면, 그 중앙에 직선을 그어주면 된다.
신경망은 직선을 어디에 그을지 학습을 하는 녀석이고,
테스트시에 받은 입력을 갖다가 feature 그래프에 맵핑시켜보니 왼쪽구석에 있었다면 0이라고 출력해주는 형태이다.

예컨데, feature 1과 feature 2 를 특징으로 가지고있고, 이에 따라 확연히 구분되는 O와 X를 고려해보자.


이 둘을 나누기 위한 직선은 무수히 많지만, 그 중 하나를 고를 수 있다.

이 예제는 대단히 classify 하기 쉽지만, 실제 데이터는 이렇게 정갈하지 못한 것이 일반적이다.


위와 같은 분포에서는 불가피하게 두개 이상의 직선을 그릴 수 밖에 없다. 이와 같은 직선을 Peicewise - linear라고 한다.
그러나 위와 같은 linear도 대단히 좋은 경우다.
사실 feature에 따라 엄청나게 복잡한 곡선을 그려야 하며, 인공지능 연구자들은 보다 효율적인 방안을 강구해 내야 했다.

1985 . PDP의 등장

사실 사람이 어떤 정보를 저장할때 3이라는 숫자를 기억한다고하면 "3" 전체를 하나의 세포에 우겨 넣는 것이 아니라,
3을 몇개로 쪼개서 세포 하나하나에 저장한다.

글자 3에서 끝부분이 마저 적어져 있지 않아도 "이건 3이구나!"라고 알아낼 수 있는것도,
어떤 친구가 모자를 안쓰다가 쓰고왔다고 해서 못알아보는 일은 없는것도 이런 PDP(Parallely Distributed Processing)의 속성때문이다.

Neuron Network는 PDP를 충분히 활용한 사례다.
Layer의 노드들이 각각 어떤 정보의 일부분을 저장하고 있으며, 복잡하게 얽혀서 (Massively Connected)그 정보를 저장하고 있다.

Neuron Network의 구조는 다음과 같다.


위와같은 네트워크에서 식은 x1*w11 *a(output레이어로의 간선) + x1*w12*b + x2*w21*a  + x2*w22*b = o 와 같은 형태가 된다.
히든레이어수와 노드가 많아질 수록 식은 훨씬 복잡해지고, 다양한 직곡선을 그릴 수 있게 된다.

학습시키는 방법은 ,

먼저 w들의 값을 초기값으로 아무렇게나 주고, 입력과 아웃풋의 결과를보고 그 MSE( min sqaure error )를 확인,
만약 MSE가 크다면 w들의 값을 조금씩 수정해가는 형태다.
먼저 O의 결과를 보고 A와 B의 간선으로(최종히든레이어 두개) 에러값 만큼 수정 요구를 하면 ,
그 히든레이어는 역시 에러값을 앞으로 전파(propagation)하여 학습을 한다.

'Theory' 카테고리의 다른 글

TCP/IP State Diagram  (0) 2015.02.09

메뉴판 인식 - MenuBoard Recognition For foreign

Developed Program/Windows Mobile 2010. 10. 19. 18:10


인터페이스쪽에서의 특징이라면
먼저 Camera 와 Image, 양쪽 입력영상을 사용하는데 있겠다.
Windows Mobile의 카메라 여는 함수를 이용, 메뉴판을 캡쳐
(preprocessing이 좀 허술해서 제대로 하려면 실제 배경이 있는 메뉴판에서 텍스트 디텍션을 해야겠지만 
A4에 메뉴만 인쇄하여 이를 이용한다) 하여 이진화, 분할 , 인식, DB결과 출력을 거친다.

한글의 자모분리에서 떨어진 문자는 영상처리에서 흔히들 사용하는
Labeling(Connected Component) 알고리즘을 이용해서 쉽게 분리할 수 있지만

Labeling Algorithm



와 같이 연결성이 있는 화소들에 고유 숫자를 매기는 알고리즘.

필자는 GrassFire(잔디에서 불이 퍼져나가는 모양과 유사하다하여 붙여진 이름, 일종의 재귀 함수)를 이용했었다.

'거' 와 같이 자음과 모음이 접촉 되어 있는 경우 이를 분리할 알고리즘이 문제였다.
Fuzzy - 인공지능 -  같은 방법을 이용해 학습시켜 분리할 수도 있지만 뉴런 쪽을 전혀 배운 적이 없었기 때문에 다른 방법을 이용해야 했다.

여러 논문들을 찾아보고 난 뒤에 이용할 만한 정보를 얻을 수 있었는데,
한글의 유형을 분리한 뒤,특정 유형에 따라 나눈 것에서 부터 시작했다.

한글의 유형



만약 1 유형이라면 접촉모음은 반드시 수직모음이다.
2 유형에서 접촉모음이 있다면 그 모음은 반드시 수평모음이다.
그렇다면 자음과 모음이 만나는 점에서 쪼개버리면 된다.


유형을 나누는 부분도 꽤 골치가 아픈데, 유료 논문의 알고리즘인만큼 여기서 언급하기는 곤란하고, 궁금하다면 직접 돈주고 구매하기 바란다. ( 저 같은 경우는 학교에서 미리 다 결제를 해놨기 때문에 별도 요금없이 볼 수 있었습니다 )




위 이미지는 자모를 분리한 결과이다.


최종 산출물의 결과는
슬라이드 쇼를 확인하기 바란다.

                                    
012345678