플라스틱흉의 기대에 부흥하고자 쓰기 시작한 신경망 이론에 관한 글들이 거의 끝나가고 있다. 이번에 신경망의 분류랑 학습에 대해서 알아보구, 다음글에서 신경망 모델중에 하나인 퍼셉트론을 구현해볼꺼다. 그러면 끝이라능.
신경망의 분류
지금까지 나온 신경망 모델은 디게 많은데 아래와 같은 조건들로 구별해 볼 수 있다능
1. 계층수 : 단층 구조, 다층 구조
2. 출력 형태 : 순방향 구조, 순환 구조
3. 데이터 유형 : 디지털, 아날로그
4. 학습 방법 : 지도 학습, 자율 학습, 경쟁식
5. 활성화 함수 : 단극성, 양극성
이제 이것들에 대해서 하나씩 살펴볼꺼라능.
먼저 계층수에 대해서 살펴보자. 신경망은 계층 layer 의 수에 따라 단층과 다층으로 나뉜다. 일단 그림을 보자능
단층 single-layer 신경망은 가장 단순한 구조로 입력층 input layer 하구 출력층 output layer 으구 구성되 있다. 입력층 X는 외부로부터 입력을 받아들이는 역활을 하고 출력층 Y로 신경망에서 처리된 결과가 출력된다. 단층 신경망의 출력 y1....ym 은 이렇게 구한다. wij는 입력층 뉴런 j랑 출력층 뉴런 i와의 연결강도다.
다층 multi-layer 신경망 은 단층 신경망보다 계층의 수가 더 많다. 당연한가 -_-;;;;......아무튼 입력층과 출력층 사이의 계층을 은닉층 hidden layer 라구 하는데 신경망의 외부에서는 이게 있는지 업ㅂ는지 확인할 방법이 업ㅂ어서 그렇게 부른다. 그림에는 은닉층이 하나 밖에 업ㅂ지만 몇개가 되도 상관은 업ㅂ다능. 아무튼 다층 신경망의 출력은 이렇게 구한다. vij 는 입력층 뉴련 j랑 은닉층 뉴런 i와의 연결 강도다.
별다를꺼업ㅂ다 >_<.
순방향 신경망 feedforward network 과 순환 신경망 recurrent network 은 출력층의 출력이 다시 신경망의 입력으로 회귀 되는지 않되는지를 가지고 구별하면 쉽다. 그러니까 뭐 이런식이다.
출력이 다시 입력으로 들어간다. 꼭 조합논리회로랑 순차논리회로 그림이랑 비슷하다 >_<. 쪼금더 정확히 얘기하면 어떤 레이어의 출력이 더 앞에 있는 레이어나 자신의 입력으로 회귀되면 순환 신경망이다. 순환 신경망의 출력을 어떻게 구하는지는 대충 감이 올태니 그냥 넘어가자능.
데이터 유형에 따라 아날로그랑 디지털로 나누는거는 뭐...다 알태니까 대충 넘어가고 지도 학습 supervised learning 이랑 자율 학습 unsupervised learning, 경쟁식 학습 competitive learning 에 대해서 잠깐만 얘기하자능.
지도 학습은 신경망의 학습에 입력 패턴 x랑 그에 해당하는 목표치 d 를 사용하는 학습방법이다. x와 d의 쌍 (x ,d)를 학습 패턴쌍 traning pattern pair 이라구 한다. 쉽게 말하면 영문자 A의 그림을 보여주고 이건 A다 라구 가르쳐주는거다. 자율 학습은 학습 패턴쌍이 존제하지 않는다. 입력 패턴 x들을 마구 보여주면 지가 알아서 비슷한것끼리 분류해논다. 신기빵빵함. 경쟁식 학습은 지도 학습이랑 비슷한데...연결 강도를 변화시키는 과정에서 차이가 있다. 학습 과정에서 승자 뉴런 winner neron 이 정해지고 승저 뉴련 주변의 뉴런들에 속한 연결강도들만 변한다.
이제 활성화 함수 얘기를 해보자능. 활성화 함수는 단조 증가하는 함수여야 한다. 대충 3가지 기준으로 구분해 볼 수 있다.
1. 단극성 unipolar / 양극성 bipolar 함수
2. 선형 linear / 비선형 nonlinear 함수
3. 연속 continuous / 이진 binary 함수
활성함수 몇 개들을 수식으로 살펴보자능.
많이 쓰인다고 생각하는거 몇 개들만 써봤다능. 저거 말고도 많음 -_-;. 더 설명한거는 업ㅂ고....시그모이드 함수의 경우 람다가 무한대에 가까워지면 계단 함수랑 동일한 형태가 된다. 보통 람다값으로 1을 많이 쓴다고 한다능.
신경망의 학습
학습 방법의 분류는 위에서 봤으니까 일반적으로 학습이 어떤 단계를 거쳐서 이루어 지는지를 보자능. 먼저 지도 학습의 경우임.
1. 응용 목적에 적절한 신경망 구조를 설계한다.
2. 연결 강도를 초기화 한다.
3. 학습 패턴쌍 (x, d)를 입력하여 신경망의 출력 y를 구한다.
4. 출력 y랑 목표치 d를 비교해서 오차를 산출한다.
5. 오차를 학습 신호 발생기에 입력해서 연결강도 변화랑 Δw를 구한다.
5. 연결강도를 Δw만큼 변경한다.
7. 변화단 연결 강도에 대해서 3 ~ 6 단계를 반복한다.
8. 더 이상 연결 강도가 변하지 않으면 학습을 종료한다.
다음으로 자율 학습의 경우다
1. 응용 목적에 적합한 신경망 구조를 설계한다.
2. 연결 강도를 초기화한다.
3. 학습 패턴 x를 입력하여 신경망의 출력 y를 구한다.
4. 출력 y를 학습 신호 발생기에 입력하여 연결강도 변화랑 Δw를 구한다.
5. 연결강도를 Δw만큼 변경한다.
6. 변화단 연결 강도에 대해서 3 ~ 5 단계를 반복한다.
7. 더 이상 연결 강도가 변하지 않으면 학습을 종료한다.
경쟁식 학습의 경우는 지도 학습이랑 비슷하다구 위에서 썼고....연결 강도가 변경되는 방식을 쪼금 더 살펴보자능.
위에 그림에서 보면 연결 강도 변화량 Δw는 학습 신호 learning signal γ, 입력 패턴 x, 목표치 d, 학습률 learning rate α 와 관련이 있음을 알 수 있다. 구체적으로 이런 관계다. 여기서 학습률은 신경망 모델에 따라 다른 값으로 연결 가중치의 변화률을 말한다. 0에서 1사이의 값이다. 자율 학습일경우 d만 홀랑 빼버리면 된다. k번째 학습 단계에서 Δw는 다음과 같이 구할 수 있다능.
k+1번째 연결 강도를 구하는 공식두 나와있으니까 같이 보자능. 아무튼 신경망을 학습 시키는 방법은 신경망 모델에 따라 다른데 학습 신호를 발생 시키는 과정이 다를뿐이다. 어찌됐던 Δw는
자질구래한 얘기들은 다 건너뛰고 인공 신경망의 기초가 되는 뇌의 신경망에 대해서만 알아보자능. 신경계의 기능적 최소 단위는 뉴런 neuron 인데 이넘이 신경계의 흥분, 전달 같은일을 한다. 사람 뇌에는 졸 많은 뉴런이 있구 이 뉴런들이 졸 복잡해서 연결되어 있다. 이렇게 뉴런들이 연결된 형태를 신경망 neural network 이라구 부른다.
뇌의 여러 부위중에 대뇌 피질에 뉴런이 많이 있구 대뇌 피질의 부위 마따 다른 형태의 뉴런이 있는데....대뇌 피질의 각 부위마다 담당하는 기능이 틀려서 그렇다. 요걸 대뇌 피질의 기능 국재 localization of cerebrum 라구 한다. 뉴런들은 시세포, 승모세포, 추체세포, 운동 뉴런....뭐 이렇게 종류가 여러가 있는데 이 중에서 운동 뉴런을 살펴보자능. 아래 보이는게 운동 뉴런의 그림이다. 내가 대충 그렸다능 >_<.
운동 뉴런은 크게 세포체, 수상돌기, 축삭돌기의 3부분으로 나뉜다.
세포체 soma, cell body : 세포핵이 있고 많은 수상돌기랑 하나의 축삭돌기가 연결되 있다. 뉴런으로 들어온 자극은 일정시간동안 세포체내에서 가중된다.
수상돌기 dendrite : 세포체 주의의 가느다란 섬유들, 인접한 뉴런에서부터 들어오는 세포들의 통로, CE 틱하게 얘기하면 입력 스트림 정도 되겠다. 보는것처럼 수가 많다.
축삭돌기 axon : 한개의 가늘고 긴 섬유로 되있다. 인접 뉴런으로 세포의 흥분을 전달하는 역활을 한다. 랑비에 마디 node of Ranvier 가 있어서 흥분이 빠르게 전달되도록 한다. 1mm 간격으로 있다구 한다. 그리구 축삭 융기부 axon hillock 에서 재미난 현상이 일어나는데, 수상돌기로 부터 입력된 자극이 임계치를 넘으면 축삭돌기로 신경 흥분을 내보낸다. 자극이 임계치보다 작으면 반응이 일어나지 않는다.
그리구 축삭돌기의 끝 부분이랑 다른 신경세포의 수상돌기나 세포체가 만나는 부분을 시넵스 synapse 라구 한다(사실 떨어져 있다). 이거 덕분에 신경 흥분의 전달 속도가 더 빨라질 수 있다구 한다. 시넵스에는 흥분성 excitatory 과 억제성 inhibitory 의 두가지 종류가 있다. 대충 어떤 역활을 하는지는 이름만 보면 감이 올태니까 넘어가자능. 궁금하면 구글신께 물어보자.
뉴런이 활성화 되는데는 몇가지 조건이 있는데....다음과 같다.
1. 자극의 크기가 임계치 이상 커야 된다.
2. 자극이 일정 시간 이상 지속되야 한다.
3. 자극이 약할경우 자극을 반복해야 한다.
4. 일단 활성화된 뉴런은 일정 시간이 지나야 한다. (쿨타임)
그리고 편견 bias 도 활성화야 관여한다고 한다.
뇌에는 요런게 잔득 들어있어서 지들끼리 마구 연결되 있는데...기억된 정보는 뉴런간의 연결 강도, 그러니까 시넵스의 연결 강도의 형태로 저장되어 있다구 한다. 자극이 반복되면 그러니까 활성화가 반복되면 연결 강도가 변하게 된다. 이 변화 과정을 거쳐서 장기 기억이 되면 더 이상 연결 강도가 변하지 않게 된다. 물론 널리 인정되고있는 얘기가 그렇다는 거다능.
인공 신경망
바로 위에서 설명한 것들을 수학적으로 모델링한게 인공 신경망이다. 인공 신경망에서 뉴런의 기능적 모델은 다음과 같다.
NET는 입력들의 가중합 net input net weight 을 말하는거구 OUT는 당연히 출력이다.
생물학적 신경망은 뉴런 하나가 단독으로 기능하는게 아니라 여러개가 서로 상호작용 하고 있으니까 인공 신경망도 뉴런들을 마구 연결시켜 놔보면 대충 이런 그림이 된다.
저 동그라미가 뉴런이구 겹쳐 있어서 이상하게 보이겠지만 화살표가 연결이다. 한글로 써놓인까 이상하네 -_-;; 아무튼 그림을 보면 딱 감이 오지 않냐능. 버택스가 뉴런이구 엣지가 시넵스 연결강도인 방향성 가중치 그래프라능. 이런 방식으로 생물학적 신경망을 모델링한것을 인공 신경망 모델이라고 한다. 일반적인 신경망 모델을 또 한번 보자능.
그림에서 보면 하나의 뉴런에 입력들이 여러게 있구 입력 갯수만큼 연결 강도가 있고 출력이 하나 있다. 뉴런이 여러개 있으면 위에 위에 그림하구 똑같아 질꺼라능.....하악. 아무튼 일반적으로 입력하고 연결강도는 백터 형태로 표시 한다.
x = [ x1 x2 x3 ........ xn ]
w = [ w1 w2 w3 .......... wn ]
기존의 디지털 컴퓨터는 수치 계산 처럼 잘 정의된 업무 처리에는 굉장히 탁월한 성능을 보이지만 음성 인식, 영상 인식, 연상, 추론등에는 지지부진한 모습을 보인다. 이에 대해서 뭐라고 하고 싶은 사람도 있겠지만...수치 계산같은 일에 비해서 지지부진하다는 얘기다. 아무튼 그래서 나온게 뉴로 컴퓨터다. 인간 두뇌의 신경망 조직을 모델링한 것이 신경망 모델이며 엄밀한 의미의 뉴로 컴퓨터는 신경망 구조를 사용해서 만든 컴퓨터를 뜻하지만, 뉴로 컴퓨팅, 신경망, 신경 회로망등의 용어를 혼용해서 부른다고 한다.
아무튼 뉴로 컴퓨터랑 디지털 컴퓨터는 요렇게 다르다.
뉴로 컴퓨터
디지털 컴퓨터
처리 데이터
디지털, 아날로그
디지털
처리 방식
병렬 처리
순차 처리
기본 소자
뉴런
논리 소자
실행 근거
학습
프로그램
정보 저장
뉴련간 연결강도
기억장치
정보 검색
내용의 의함
주소 지정
응용 분야
연상, 추론, 인식
복잡한 계산
디지털 컴퓨터는 프로그램에 의한 고숙 순차처리를 하는 반면에 뉴로 컴퓨터는 어떤 일을 수행하기 위해서는 미리 학습이 필요하고 병렬로 업무를 처리한다. 신경망을 구성하는 뉴런들은 상대적으로 속도는 느리지만 병렬처리에 의해서 연상, 패턴 인식등을 빠르게 수행할 수 있다. 물론 컴퓨터 프로그램으로 시뮬레이션을 하게 되면 멀티 스레딩을 하지 않는 이상 순차처리다. -_-;;
그리고 정보의 저장에도 많은 차이가 있는데 뉴로 컴퓨터는 뉴련간의 연결강도에 의해 정보가 분산 저장된다. 덕분에 오류 감내 능력이 뛰어나다. 아무튼 이 연결강도를 변화시키는 과정을 학습이라고 하는데 신경망의 모델과 학습방법에 의해서 학습 시간이 길어질 수 도 있고 짧아질 수 도 있고 학습에 실패할 수 도 있다.
뉴로 컴퓨터의 근간이 되는 신경망 모델은 예전부터 많은 연구가 진행되던 것으로 굉장히 많은 신경망 모델이 존재하구 있다. 구현방법도 다양한데 VLSI로도 만들 수 있고, 레이저를 사용한 광학적 구현도 있지만 프로그램을 작성해서 시뮬레이션해보는게 가장 만만하다. >_<
뉴로 컴퓨터, 그러니까 신경망은 구조상 복잡한 계산 같은거에는 적합하지가 않다. 따라서 복잡한 계산은 디지털 컴퓨터로 처리하고 연상이나 추론과 같은 업부등을 뉴로 컴퓨터로 보조하는게 당연하다. 요걸 실제 응용하는데 고려할 것들은 다음과 같다.
1. 어떤 신경망 모델을 사용할 것인가?
2. 신경망의 구조는 어떻게 할 것인가?
3. 어떻게 효과적으로 학습시킬 것인가?
4. 학습 패턴의 특징은 어떻게 추출할 것인가?
5. 구현은 어떻게 할 것인가?
가장 먼저 어떤 신경망 모델을 사용할지 결정하구, 신경망의 뉴런은 몇개로 구성할지, 입력과 출력은 어떻게 할 것인지, 뉴런들의 연결은 어떻게 할것인지등등 신경망의 구조를 결정한다. 그 다음에 사용한 신경망의 종류에 따라 어떤 학습방법을 사용할 지를 결정한다. 그리구 나서 학습 패턴을 선정해야 되는데 지도학습 방법을 사용할 경우 입력과 출력 패턴의 짝을 학습 패턴이라고 하며, 자율학습의 경우는 입력 패턴만을 의미한다. 특징 추출이란 신경망이 사용되는 목적에 따라 패턴의 중요한 부분을 더 부각 시켜서 정보량으 줄이는 것이다. 그리고 구현을 하면 되는데....구현을 위에 쓴것처럼 여러가지 방법중에 하나로 하면 된다.
역사적 배경 그런건 쭉 쭉 쭉 다 건너뛰고 신경망의 응용분야는 음성 합성, 음성 인식, 문자 인식, 영상 처리, 시스템 제어, 연상 메모리, 전문가 시스템등등이 있다.
시험기간이지만 포스팅은 하고 싶었고......그래서 소스 코드만 올린다능.
시험 끝나고 퍼셉트론 학습법에 대해서 주저리 해볼꺼라능
루비로 구현했고....or-gate의 진리표를 학습패턴으로 사용해 학습시켰다. 따라서 입력 뉴런은 두개 출력 뉴런은 하나라능
양극성 계단함수를 활성함수로 사용했다. (1은 1로 -1은 0으로 보고 페턴을 이해하면 된다능)
3회 학습시킨 결과 or-gate를 완전히 학습시키는데 성공했다. 가끔 2회만에 끝나기도 한다. ^^
댓글을 달아 주세요