패턴인식 개론 Ch.13 신경세포 모델링-인공신경망
신경망의 발상과 전개 두 줄기 연구의 시너지 컴퓨터 과학 : 계산 능력의 획기적 발전으로 지능 처리에 대한 욕구 의학 : 두뇌의 정보처리 방식 연구 얼마간의 성과 (뉴런의 동작 이해 등) 뇌의 정보처리 모방하여 인간에 필적하는 지능 컴퓨터에 도전 인공 신경망 (ANN; Artificial Neural Network)이 대표적 신경망 특성 학습 가능 뛰어난 일반화 능력 병렬 처리 가능 현실적 문제에서 우수한 성능 다양한 문제 해결 도구 (분류, 예측, 함수 근사화, 합성, 평가, …)
생물학적 신경세포(뉴런) 수상돌기 (Dendrite) : 인접 뉴런으로부터 신경흥분이 세포체로 입력되는 통로 (Input). (output) (input) 수상돌기 (Dendrite) : 인접 뉴런으로부터 신경흥분이 세포체로 입력되는 통로 (Input). 축색돌기 (Axon) : 가늘고 긴 신경섬유로 신경흥분을 전달하는 역할 (Output). 세포체 (Cell body) : 일정시간 동안 입력된 자극을 세포체 내에서 가중되고 그 값이 임계치 이상이 되면 뉴런이 활성화 하여 축색돌기로 자극이 전달됨.
논리 유닛(Logistic Unit) X0 = 1 “Bias unit” 생물학젹 신경세포를 모델링한 뉴런이라는 매우 단순한 기능을 하는 유닛 (각 유닛과 가중치 모두 변수화). 유닛을 상호 연결하여 네트워크를 구성할 경우 간단한 논리 연산이 가능. w0 X1 w1 활성화함수 입력함수 X2 w2 inj g() a j wn Xn “Output layer” “Input layer” 입력값: 수치적으로 설정 입력 받는 과정: 입력값을 변수에 저장 가중치(뉴런간의 연결 세기) : 2차원 배열로 처리 (wji 여기에서 i = 입력 유닛번호, j = 출력 유닛번호) 바이어스: 신경세포가 가지는 일종의 편견을 바이어스로 구현 (바이어스는 1, 가중치 변경으로 구현) 세포체의 기능: 연산자를 통해 구현 활성화: 활성화 함수 구현(시그모이드 함수) Sigmoid Function :
ai(j) = “activation” of unit I in layer j X0 =1 ai(j) = “activation” of unit I in layer j a0(2) W(j) = matrix of weights controlling function mapping from layer j to layer j +1 X1 a1(2) X2 a2(2) a1(3) y = h(x) X3 a3(2) Layer 1 (Input layer) Layer 2 (Hidden Layer) Layer 3 (Output Layer)
AND, OR, NOT 구현 : 바이어스 입력(x0)을 포함하여 입력이 3/2 개, 출력이 1개인 구조, g(-30+20x1+20x2) g(-30) ~ 0 1 g(-10) ~ 0 g(10) ~ 1 W0=-30 W1=20 AND X1 W2=20 X2 X0 = +1 X1 X2 g(-10+20x1+20x2) g(-10) ~ 0 1 g(10) ~ 1 g(30) ~ 1 W0=-10 W1=20 OR X1 W2=20 X2 X0 = +1 W0=10 X1 g(10-20x1) g(10) ~ 1 1 g(-10) ~ 0 NOT X1 W1=-20
AND, OR, NOT 게이트는 선형 분리 가능한 결정 경계를 가짐, 하지만 결정 경계가 2개 필요한 XOR 구현은 1개 층으로는 불가능 평면은 연결 가중치로 결정
■ XNOR 게이트 구현 : 2개 층 구조로 구현가능 W0=-30 W0=10 X0 = +1 W0=-10 W1=20 W1=-20 W1=20 X1 X1 X1 W2=20 W2=-20 W2=20 X2 X2 X2 X1 AND X2 (Not X1) AND (Not X2) X1 OR X2 +1 -10 -30 x1 x2 a1 a2 y 1 +1 a1 20 20 X1 20 y 10 20 -20 X2 a2 -20
층수와 결정 영역의 특성 X1 X2 h(x) X3 Layer 1 Layer 2 Layer 3 Layer 4
Neural Network Classification y = h(x) Layer 1 Layer 2 Layer 3 X1 X2
역전파( BP: Back-Propagation ) 알고리즘 전체 학습 데이터에 대한 전체 오차를 최소화하는 방향으로 연결 강도를 갱신 입력 x에 대한 목표 출력이 y인 경우, 전체 오차는 어떻게 최소 오차점을 찾아 갈 것인가? = error between target output and computed output 경사 강하법(gradient descent) ① 최소 오차점을 찾기 위해서는 오차함수식 E(W)를 W에 관하여 편미분한 결과가 기울기의 크기를 의미함으로, ② 그 값이 음의 값을 가지면 그 기울기만큼 ΔW를 이전 연결 강도에 더함. ③ 양의 값을 가지면 그 기울기만큼 ΔW를 빼주는 과정을 반복하면 최소점에 도달할 수 있을 것임. ④ 이러한 방식으로 최적값을 찾아가는 방법을 경사 강하법(gradient descent)이라고 함.
역전파( BP: Back-Propagation ) 알고리즘 Back-propagation (역전파) algorithm 을 통해서 계산 오차함수의 기울기에 해당하는 gradient를 구하는 방법을 모르다가, 룸멜하트(Rumelhart)와 힌톤(Hinton)에 의해서 1980년대 후반에 개발된 다층 퍼셉트론에 대한 효율적 학습 방법인 역전파 알고리즘을 통해서, 많은 문제에 성공적으로 응용될 수 있는 계기를 만들고 신경망 연구가 부활하는 계기를 마련하게 되었다. 역전파 알고리즘 학습은 전향(forward) 단계와 후향(backward) 단계로 이루어진다. 학습에서 중요한 것은 연결 강도의 갱신인데 역전파 알고리즘은 후향 단계에서 연결 강도의 갱신이 이루어진다. 전향 단계는 신경 회로망에 입력 패턴(x)을 제시하고, 각 노드에 대해서 입력 함수와 활성화 함수를 이용하여 출력을 산출하는 단계다. 이 때 입력 신호는 전방향, 즉 출력층 방향으로만 전달된다. 초기에 임의로 정한 연결 강도(W)로 인해 출력층에서 출력값과 목표값이 일치하지 않고 큰 오차가 발생하게 된다. 후향단계는 역전파 알고리즘으로 그 오차로부터 gradient를 구하고, 이를 이용한 적절한 연결강도의 갱신을 수행한다.
Gradient Computation Given one training example (x,y) : 전향파(Forward-propagation) X1 X2 X3 Layer 1 (x) Layer 2 Layer 3 y = h(x)
Gradient Computation Back-propagation (역전파) algorithm y = h(x) Layer 1 (x) Layer 2 Layer 3 y = h(x)
MATLAB Simulation 실습 : 역전파 알고리즘 시뮬레이션 BP 시뮬레이션 : 필기체 숫자 0, 1, 2, 3에 대한 4-클래스 분류 문제를 해결하기 위하여 입력층 20개, 은닉층 10개, 출력층 4개로 구성된 3층 네트워크를 구성하여 학습과 인식을 수행하는 시뮬레이션이다. 단계 1: 초기화 루틴인 inibp.m 스크립트를 이용하여 연결 가중치, 입력, 은닉, 출력 유닛의 수, 학습과 평가 패턴의 수와 학습률를 초기화 한다. 단계 2: plotDigitPats.m 스크립트를 실행해 학습/평가용 데이터를 확인한다. 숫자 이미지의 각 픽셀이 정방형으로 처리되어 있다. 숫자 부분의 픽셀은 밝은 색으로 처리돼있고 배경부분은 어두운 색으로 처리되어 있다. 패턴은 한 패턴당 한 열로 각각 10개씩 모두 40개의 벡터 행렬로 구성되어 있다. 각 패턴은 5x4 픽셀 필기체 그레이-스케일 숫자 이미지이다.
MATLAB Simulation 실습 : 역전파 알고리즘 시뮬레이션 단계 3: runbp.m 에서 hiddenDeltas.m 과 outputDeltas.m 을 통하여 각각 은닉층과 출력층에 대한 델타를 계산하고 학습을 행한다. 이 과정은 모두 MATLAB의 장점을 발휘하기 위하여 행렬과 벡터 형식으로 프로그래밍 되어 있다. 학습 데이터 전체를 200번 돌게 되는 200번의 epoch를 반복하여 수행하면서 오차가 최소화 되는 것을 그래프로 확인할 수 있다. 학습/평가용 데이터의 수에 따라 인식 성능은 어떻게 차이가 나는가? 그리고 학습률의 변화에 따라 인식 성능은 어떻게 차이가 나는가? 학습률을 0.5보다 작은 경우와 0.3에서 0.5 사이의 값을 설정하여 성능을 비교해보자.