operator01.jpg



안녕하세요? LGS입니다.

과학자나 공학자들은 자연으로부터 많은 영감(아이디어)을 얻습니다.

특히 생명체는 수십억년의 진화과정을 거쳐 정말 경이로울 정도의 탁월한 방법으로 주어진 환경에서 살아남는 방법을 가지고 있습니다.

Genetic Algorithm 강좌에서도 잠시 소개했던 동영상을 한번 더 보시죠~ ^^



오늘 소개할 Artificial Neural Network (인공신경망)도 고도로 진화된 생명체의 그 무엇인가를 (수학적으로) 모방했습니다.
무엇을 모방하였냐면 바로바로바로 뇌(腦 Brain)의 동작방법을 모방했습죠~ 
본격적으로 ANN(Artificial Neural Network)을 이야기 하기 전에 뇌가 어떻게 작동하는지 알 필요가 있습니다.

ANN0101.png

(이미지 출처: http://en.wikipedia.org/wiki/Brain)

뇌를 잘라서 현미경으로 보면 아래와 같은 수많은 (뇌)세포들이 무수한 그물(Network)을 형성하고 있습니다.

뇌세포 하나가 많게는 1000개의 자신의 주변 뇌세포들과 연결되어 있는 경우도 있습니다.
(중간 중간 공처럼 조금 불록한 모양을 가진것이 모두 하나하나의 뇌세포입니다.)

ANN0102.png
(이미지 출처: http://en.wikipedia.org/wiki/Neuron)

뇌세포 하나를 때어서 자세히 관찰하면 아래처럼 도식적으로 표현할 수가 있구요.

ANN0103.png

(이미지 출처: http://www.ieaecell.org/epilepsy-02.html)

위의 뇌세포(신경세포) 하나를 Neuron 이라고 부릅니다.
Neuron과 Neuron은 시넵스(Synapse)라는 작은 틈을 가진 녀석으로 연결되어 있구요~

즉 한 Neuron에서 발생한 신호를 저 시넵스를 통해 다른 뉴런으로 전달 한다는 말이죠.. ^^
참고로 사람의 뇌는 약 1000억개 이상의 Neuron을 가지고 있고 10^14개정도의 Synapse가 형성되어 있습니다.
Neural Network의 원리를 이해하기 위해서는 Neuron과 Synapse의 딱 두가지의 특징만 잘 이해하시면 됩니다.

첫번째로 Neuron의 가장 큰 특징은 역치(Threshold)를 가지고 있다는 것 입니다.
예를 들어 한 Neuron의 역치가 1.2라면 주변 Neuron으로부터 시넵스를 통해 들어오는 자극의 정도가(자극의 합이) 
0.8,, 0.9, 1.0 , 1.1 까지는 아무런 반응이 없다가 자극의 합이 1.2가 넘어가는 순간!! 자기 스스로 활성화(흥분)되어 
주변 Neuron에게 신호(자극)을 전달합니다. 여기서 1.2를 Threshold (역치)라고 그래요


Threshold의 특징을 잘 표현하는 함수는 여러개 있습니다.
Threshold를 표현하기 위해  가장 대표적으로 많이 사용되는 함수는 Sigmoid와 actan (tan-1)입니다.
Sigmoid 함수를 그래프로 그려보면 왜 Threshold를 잘 표현하는지 바로 이해가 가실 겁예요.

ANN0104.png


특히 Sigmoid 함수의 경우 2차 미분이 가능하기 때문에 수학적으로 다루기도 적합하다 이 말입습죠

다음으로 Synapse의 가장 큰 특징은 신호를 전달하기 위한 신경전달물질(neurotransmitter, 神經傳達物質)이 한쪽 방향으로만 전달된다는 것입니다.
(전자부품중 한쪽으로만 전류를 흐르게 하는 다이오드(Diode)랑 성격이 비슷합니다.)
참고로 담배, 마약, 확각제 등등은 모두 Neurotransmitter(신경전달물질)과 모양과 구조가 비슷해서 뇌의 시넵스 사이에 끼어들어 
사람의 정신을 흐릿하게 하는 것 입니다.

Synapse의 또 하나의 특징은 각 시넵스마다 '연결 강도'를 가지고 있다는 점입니다.
예를 두어 두 Neuron의 Synapse 연결이 강하다면 한쪽 Neuron에서 1의 신호를 전달해도 받아들이는 Neuron에서는 2로 느낄 수도 있구요
연결의 강도가 약하다면 똑 같이 1의 신호를 전달해도 받아들이는 Neuron에서는 0.5로 느낄 수도 있습니다.

학습이라는 것이 각 Neuron간의 연결의 강도를 조절하는 것과 다르지 않습니다.
여러분이 공부를 하고 기억을 하고 무엇에 익숙해진다는 것은 이 Neuron간의 연결이 강해지고 약해지고 연결이 이어졌다가 끊어지고의 과정입니다.

자~ 위에서 설명한 Neuron과 Neuron들 사이의 그물망과 같은 연결(Network)을 수학적으로 Modeling 한 것이 바로 Neural Network입니다.

Neural Network를 도식적으로 표현하면 아래와 같이 표현할 수 있구요.


ANN0105.png


위의 도식에서 동그라미 하나하나가 Neuron을 나타내구요 화살표 선이 Synapse를 나타냅니다.

Input data가 들어가는 Neuron 층을 Input Layer, Output data가 나오는 Neuron 층을 Output Layer
Input Layer와 Output Layer를 제외한 우리가 볼 수 없는 Neuron 층을 Hidden Layer라고 합니다.
Hidden Layer는 여러 층이 될 수도 있습니다.


그럼 Neural Network로 무엇을 할 수 있을까요? 
예를 들어 Input #1 , #2, #3, #4를 각각 키, 몸무게, 가슴둘레, 허리둘레 라고 하고 Ouput이 0.5이상이면 남자, 0.5 이하이면 여자라고 한다면
수백명의 Input 데이터(키, 몸무게, 가슴둘레, 허리둘레 )를 가지고 Synapse의 강도를 잘 조절해서
적절한 Output(남자 or 여자)이 나오게 할 수 있을 겁니다.
(우리는 이미 그 사람이 남자인지 여자인지 알고 있으므로 Input에 대해 어떤 Output이 나와야 되는지 알고 있습니다.)

일단 한번 Neural Network를 한번 학습시켜 놓으면 이제 어떤 사람이 남자인지 여자인지 모르른 상태에서 그 사람의 
키, 몸무게, 가슴 둘레, 허리 둘레만 알면 Input으로 각 데이터를 넣고 Neural Network로부터 계산되어져 나온 Output을 보고 
그 사람이 남자인지 여자인지 판단할 수 있다는 거죠.
실제로 은행에서는 여러사람의 신용도, 재산, 세금 등의 데이터와 그 사람들이 대출을 얼마나 잘 갚았나 사이의 관계를 
Neural Network로 학습시켜 놓고 학습된 Neural Network에 대출을 하러온 사람의 정보만 넣어서 나오는 값을 보고 
대출을 해줄지 말지 바로 판단합니다. (실제로 쓰이고 있어요 -_-;;)


문자인식에도 Neural Network를 쓸 수 있겠죠?
이렇게 생긴 녀석은 '1', 요렇게 생긴녀석은 '2', 저렇게 생긴녀석은 '3' 이런 식으로 이미지와 숫자를 매칭시켜 놓고
Neural Network를 학습시킨 후 학습된 Neural Network에 이미지만 보여주면 Output을 보고 1,2,3.. 숫자를 바로 찾아내는 겁니다.
실제로 Q&A 게시판에 문자인식 관련 문제를 질문 받았었는데 Neural Network를 사용하여 잘 해결하였습니다. =(=^ㅅ^=)=
(아래 그림은 실제 답변 내용입니다. 잘 보세요 각 숫자가 글꼴도 다르구요 크기도 다릅니다.)

StudioLGS.png

자~ 위와 같이 문제지(Input)와 답안지(Output)을 주고 학습시키는 것을 Supervised Training이라고 그러구요
반대로 문제지(Input data)만 덜렁 주고 알아서 분류하도록 하는 것을 Unsupervised Training이라고 합니다.
MATLAB을 사용하시면 이 Neural Network를 아주~ 쉽게 하실 수 있어요  (Neural Network Toolbox)

다음 시간에는 본격적으로 MATLAB으로 Neural Network를 사용해보도록 하죠~ o(^o^)o
(backpropagation 등의 이론적 배경 셜명은 생략합니다.)

ANN0106.png


다음 시간에 뵙겠습니다.
이만 뿅~

profile