Uploaded by jh j

NN1

advertisement
신경망 1
신경망 기초
 개관
– 현재 컴퓨터는 수치 연산에 있어서 인간보다 월등한 능력을 보이
지만 많은 사람들 속에서 특정 인물을 찾아내는 것과 같은 복잡
한 지각 문제에 대해서는 인간 능력이 훨씬 뛰어남
• 이러한 차이는 현대 컴퓨터의 von Neumann식 구조와 생물의 신경
체계 구조가 많이 다르기 때문임
– 인공 신경망은 생물체의 신경 회로망에서 출발한 것으로, 많은
수의 간단한 프로세서들이 서로 연결된 병렬 계산 시스템
– 인공 신경망은 인간의 뇌에서 사용된다고 생각되는 어떤 조직화
원리를 이용
• 이러한 시도는 역으로 생체 신경망을 인공 신경회로망으로 모형화
하여 생물학적인 작용을 이해하는데 도움을 줄 수 있음
신경망 역사
• 1943년: McCulloch와 Pitts가 신경세포 기능을 구현한 최초 모델을
발표
• 1949년: Hebb이 생물학적 학습 원리를 발견; 이것이 신경회로망의
학습에 관한 많은 연구를 촉진
• 1958년: Rosenblatt의 perceptron 수렴성 정리는 기존의 컴퓨터
알고리즘에 의한 연산으로 해결하기 어려운 문제를 효율적으로 접
근할 수 있음을 입증
• 그 이후 Widrow와 Hoff에 의해 Adaline (adaptive linear element)
이 제안
• 신경망 연구는 1969년에 Minsky와 Papert에 의해 단층 인식자가
XOR를 구현하지 못한다는 것이 증명됨으로써, 한 때 중단
• Werbos 등 많은 다른 연구자들에 의해 고안된 역전파 학습 방법을
사용한 다층 인식자에 의해 1980년대 중반 이후 다시 관심을 모으
게됨
신경망의 특징과 기능
 신경망은 단순한 기능을 가진 많은 뉴런들이 병렬 연
결된 구조
– 각 뉴런은 다른 뉴런들과 독립된 기능; 즉 출력이 자신의 연결
을 통하여 직접 전달되는 정보에만 의존하기 때문에 병렬처리
가 가능
– 뉴런 사이의 연결이 매우 많기 때문에 정보의 분산 표현과 처
리가 가능; 또한 중복성이 커서 오류의 영향을 크게 받지 않으
며, 연상 기억 특성을 가짐
– 학습이나 훈련을 통해 연결강도를 조절함으로써 새로운 정보
를 추가하거나 변경할 수 있는 적응 특성이 있음
신경망의 특징과 기능
 신경망은 순차적으로 처리하는 von Neumann 방식의
컴퓨터가 해결하기 어려운 다음 문제들에 적합
– 패턴 분류(pattern classification)
– 패턴 완성(pattern completion)
– 함수 근사(function approximation)
• 이 문제들은 수학적 표현으로 정의하기 어렵기 때문에 정해
진 알고리즘에 따라 해를 구하기 힘들지만, 문제에 대한 입
출력패턴의 예를 충분히 생성할 수 있으면, 이들로부터 일
반적인 관계 추출이 가능함
• 이를 위해 처리해야 할 데이터 양이 많기 때문에, 병렬 구조
를 지니고 있으며 많은 데이터를 사용하여 학습할 수 있는
신경회로망이 문제 해결에 적합
신경망의 구조와 종류
 신경망은 방향을 갖는 연결 그래프(뉴런이라는 노드와
연결강도를 갖는 간선으로 구성)
 연결 모양에 따라 신경망을 다음의 두 가지 그룹으로
분류할 수 있음
– 피드포워드(feedforward) 신경망: 그래프에 루프가 없음
– 회귀(recurrent 또는 feedback) 신경망: 피드백 연결에 의한
루프 존재
신경망의 구조와 종류
 피드포워드 신경망:
(a) 단층 피드포워드 신경망 (b) 다층 피드포워드 신경망
신경망의 구조와 종류
 피드포워드 신경망 중에서 가장 많이 쓰이는 다층 인
식자(multilayer perceptrons, MLP)는 뉴런들이 층을
이루면서 배열된 구조를 지니며, 그 층들 사이에는 한
방향으로의 연결만 존재
 회귀 신경망: (a) 경쟁(competitive) 신경망, (b) SOM
(self-organizing map), (c) Hopfield 네트워크 (d)
ART(adaptive resonance theory) 모델
신경망의 구조와 종류
 연결 구조가 다르면 네트워크의 성질도 달라짐
 일반적으로 피드포워드 신경망은 정적
– 피드포워드 신경망은 주어진 입력에 대해 하나의 출력만을 나
타내는 시스템
– 피드포워드 신경망의 반응은 이전의 네트워크 상태와 관련이
없기 때문에 기억이 없는 시스템으로 볼 수 있음
 회귀 신경망은 새로운 입력이 주어졌을 때 출력이 계산
되고, 다시 피드백 경로에 의해 각 뉴런으로의 입력이
갱신되는 구조
– 따라서 네트워크가 새로운 상태에 위치하게 됨으로 회귀 신경
회로망은 동적인 시스템
신경망의 구조와 종류
 신경회로망의 종류
– 단층 인식자 : 하나의 뉴런 층을 갖는 신경회로망; 선형적으로
분리 가능한 패턴을 분류할 수 있음
– 다층 인식자 : 두 개 이상의 뉴런 층을 가지는 신경회로망; 임
의의 함수를 표현할 수 있음
– 방사형 기저 함수 망 : 기저를 이루는 함수들로 이루어지는 은
닉 층을 가지는 다층 신경 망
– 부분 선형 신경 회로망 : 은닉 층은 기저 함수로 구성되며, 임
의의 함수를 구간별로 선형적으로 학습
– 자기 구성 신경 회로망 : 입력 패턴들의 이웃 관계를 보존하면
서 차원을 줄이는 사상을 스스로 구성할 수 있음
– 회귀 신경회로망 : 국부적 또는 대역적인 되 먹임 루프를 가짐
으로 인해 동적인 시스템 표현이 용이한 신경회로망
– ART : 과거의 중요한 학습 결과를 잊지 않으면서 새로운 정보
를 학습할 수 있는 신경회로망
단층 인식자
 뉴런의 계산모델
– McCulloch와 Pitts는 인공 뉴런의 계산모델로 이진 문턱 값
(threshold)을 갖는 유니트를 제시
– 뉴런의 수학적 모델은 n개의 입력 신호의 가중 합을 취하여
문턱 값보다 크면 1, 작으면 0을 출력
단층 인식자
• 입력 xi, i=1,...,n는 대응되는 가중치 wi와 곱하고, 또 다른 입력 1
은 하나의 임계 값 b와 곱해 더함, 이렇게 얻어진 출력 net을 네
트 입력이라 하며, net
는 전달함수 f를 통과하는 방식으
로 뉴런 출력인 y을 생성
• 이러한 모형은 생체 뉴런과 유사성을 지니며, 내부의 연결 선들
은 축색(axon)과 가지 돌기(dendrite)에 해당되고, 연결강도는
연접(synapse)에 해당
• 양의 연결강도는 흥분성, 음의 연결강도는 억제성 연접에 해당
• 문턱 값 함수는 세포 내부의 활동과 관련; 실제 뉴런에는 적용되
지 않는 간략화 된 가정들이 많이 포함되어 있음
단층 인식자
 여러 가지 전달함수: (a) 문턱 값 함수 (b) 부분선형
함수 (c) S형 함수 (d) 가우스 함수
 McCulloch-Pitts 뉴런 모델은 여러 가지 방법으로 일반화
• 문턱 값 함수 대신 부분선형, S형 함수(sigmoid), 가우스 등과 같은
전달함수를 사용
 가장 대표적인 전달함수로 S형 함수를 들 수 있음; S형 함수는 단
조 증가 함수이고, 연속이며 0과 1에 접근하기 때문에 신경망에
서 가장 많이 사용됨
단층 인식자
• S형 전달함수의 표준형은 logistic 함수
* β는 기울기를 결정하는 매개변수
• Hardlim 함수: 문턱 값을 옵션으로 줄 수 있고, 없을 경우 0
단층 인식자
• 선형 전달함수의 출력
x = -5:0.1:5; y = linear(x);
plot(x, y), title('선형 전달함수'), xlabel('x'), ylabel('y')
• -1과 1 사이의 출력을 갖는 쌍곡선 탄젠트 전달함수
x = -3:0.01:3; y = tanh(x);
plot(x, y), title('쌍곡선 탄젠트 전달함수'), xlabel('x'), ylabel('y')
• 로지스틱 함수 생성을 위한 문장
x = -5:0.02:5; y = logistic(x);
plot(x, y), title('로지스틱 전달함수'), xlabel('x'), ylabel('y')
단층 인식자
• 미분 가능하지 않으면서 비선형 뉴런출력을 갖는 함
수로 threshold와 signum이 있음
– threshold는 0 또는 1의 뉴런출력, signum 함수는 -1 또는 1의
뉴런출력에 사용
– 이들은 퍼셉트론 및 경쟁 네트워크의 출력에
x=-5:0.01:5; y=thresh(x);
plot(x,y), title('임계 전달함수'),...
xlabel('x'), ylabel('y')
pause
y=signum(x);
plot(x,y), title('시그넘 전달함수'),...
xlabel('x'), ylabel('y')
단층 인식자
• 벡터 처리
x=[-1 0 1]; linear(x)
ans = -1 0 1
logistic(x)
ans = 0.2689 0.5000
0.7311
• 뉴런 출력은 입력과 가중치들의 벡터 곱셈을 사용하
고, 임계 값을 더하는 방식으로 계산
• 입력벡터가 x=[2 4 6], 가중치 벡터가 w=[0.5 0.25
0.33]이고, -0.8의 임계 값이 주어지고, 전달함수로 쌍
곡선 탄젠트 함수를 사용하는 경우에 뉴런 출력
x=[2 4 6]';
w=[0.5 -0.25 0.33];
b=-0.8; y=tanh(w*x+b)
y = 0.8275
학습 방법
 학습 능력은 지능의 매우 중요한 특징이지만 정의하기
가 어려움
 신경망에서 학습은 주어진 문제를 잘 해결할 수 있도록
구조와 연결강도를 갱신하는 것
– 신경망은 일반적으로 훈련 패턴들을 이용해서 연결강도를 학습
시킴; 이 때 주어진 예(훈련 패턴)들을 이용하여 자동 학습할 수
있다는 것이 큰 특징
– 신경망은 인간이 주는 규칙에 의해서가 아니라 주어진 예들을
통해 입출력간의 내재된 규칙을 찾아내기 때문에 기존의 전문
가 시스템에 비해 장점을 지니고 있음
 학습에는 지도(supervised : learning with teacher), 비
지도(unsupervised : learning without teacher), 복합
(hybrid)의 세 가지가 있음
학습 방법
– 지도 학습은 모든 입력패턴에 대해 정확한 답을 가지고 신경망
을 학습하는 방법; 연결강도는 신경망이 주어진 답에 최대한으
로 근접하는 답을 낼 수 있도록 결정
– 강화 학습은 지도학습과 비슷한 형태인데, 망에 정확한 답을 그
대로 주는 것이 아니라 망 출력이 정확한지에 대한 평가만을 함
– 비지도 학습에는 입력에 대한 정확한 답을 알 필요가 없음; 비지
도 학습은 입력 데이터에 내재된 구조나 그 사이의 관계를 파악
하고, 이 관계를 이용해서 패턴들을 분류
– 복합 학습은 지도 학습과 비지도 학습을 모두 사용하는 방법; 연
결강도의 일부는 지도 학습을 이용하여 갱신하고, 나머지는 비
지도 학습을 이용하여 얻음
학습 방법
 표본을 이용하여 학습할 때에는 학습 용량, 표본의 복
잡도, 계산 복잡도에 대한 고려가 필요
– 학습 용량은 신경망이 얼마나 많은 패턴을 학습할 수 있는가
또는 어떤 함수나 결정 경계면을 학습할 수 있는가를 나타냄
– 표본 복잡도는 유효한 일반화 성능을 보장하기 위해 필요한
훈련 패턴의 수
– 패턴 수가 너무 적으면, 학습한 패턴에 대해서만 좋은 성능
을 보이고, 이와는 독립적인 시험 패턴에 대해서는 좋지 않
은 성능을 나타내는 과학습(overfitting)이 일어날 수 있음
– 계산 복잡도는 학습 규칙이 훈련 패턴들로부터 해를 계산해
내는데 걸리는 시간
퍼셉트론 학습
 퍼셉트론 학습은 오차-교정 학습의 일종; 퍼셉트론은
조절할 수 있는 여러 개의 연결강도(wj, j=1,2,...,n)와
임계 값 b를 갖는 하나의 뉴런
– 간단한 퍼셉트론은 하나의 임계 값을 갖는 threshold 전달함수
를 사용하므로 이진 출력
– 지도학습을 통해 훈련되고, 선형 분리 가능한 입력 패턴만을
분류
– 훈련은 가중치와 임계 값을 작은 난수들로 초기화 시키고, 입
력 데이터를 네트워크에 보내는 방식으로 처리
– 출력 y는 목표 출력(t=0 또는 t=1)과 비교되고, 가중치들은 다
음과 같은 헵 학습 규칙에 따라서 갱신
if y=target then w=w; % 옳은 출력이므로 가중치의 변화는 없음
else if y=0 then w=w+x; % target=1, 크기를 증가시킴
else
w=w-x;
% target=0, 크기를 감소시킴
퍼셉트론 학습
 뉴런 출력은 net가 양이면 1, 그렇지 않으면 0; 다음
의 선형 방정식은 퍼셉트론의 결정 경계면
 결정 경계면은 n차원 입력 공간에 있는 초 기하평면이며 공간
을 양분
 Rosenblatt의 퍼셉트론 학습 규칙
– 연결강도와 임계 값을 작은 임의의 수로 초기화
– 패턴 벡터 (x1, x2, ..., xn)에 대한 뉴런의 출력을 구함
– 연결강도를 다음 식에 의해 갱신
(d : 원하는 출력, t : 학습회수, η : 학습 이득)
퍼셉트론 학습
• Rosenblatt의 규칙에서는 학습이 퍼셉트론이 틀린 출력을 낼 때만 가
중치 갱신이 이루어짐; Rosenblatt는 선형적으로 분리 가능한 집단에
대해 퍼셉트론 학습이 유한한 시간 내에 수렴하는 것을 보였는데, 이
것이 퍼셉트론 수렴 정리
• 하나의 퍼셉트론은 단조 활성함수를 사용하여 선형적으로 분리되는
패턴을 구분할 수 있지만 실제로는 주어진 패턴들이 선형적으로 분
리 가능한 지 미리 알 수 없음; trainpt1()은 학습 알고리즘을 수행
[w, b]=trainpt1(x, t, w, b);
• 가중치와 임계 값이 무작위로 초기화되고, 입력 패턴과 목표 패턴이
다음과 같을 때
w=[0.3 0.7]; b=[-0.8]; x=[1;-3]; t=[1]; y=thresh([w b]*[x;1])
y=0
y의 출력이 옳지 않게 나타나므로 한번 순환시키면
[w,b]=trainpt1(x,t,w,b)
w = 1.3000 -2.3000 b = 0.2000
y=thresh([w b]*[x;1])
y=1
퍼셉트론 학습
 단층 퍼셉트론은 두 개 입력 패턴의 분류에 사용; 예를 들어 x1=[0, 1]
이 0, x2=[1, -1]이 1로 분류되는 것이라면, 초기 가중치와 임계 값을
선택하고, 다음과 같이 훈련시키는 문장이 필요
x1=[0 1]'; x2=[1 -1]'; t=[0 1]; w=[-0.1 0.8]; b=[-0.5];
y1=thresh([w b]*[x1;1]); y2=thresh([w b]*[x2;1]); 출력: y1 = 1, y2 = 0
 어떠한 출력도 목표와 대응되지 않으므로 먼저 x1을 학습시키고, x2
를 학습
[w,b]=trainpt1(x1,t,w,b) 출력: w = -0.1000 -0.2000 b = -1.5000
y1=thresh([w b]*[x1;1]); y2=thresh([w b]*[x2;1]); 출력: y1 = 0, y2 = 0
[w,b]=trainpt1(x2,t,w,b) 출력: w = 0.9000 -1.2000 b = -0.5000
y1=thresh([w b]*[x1;1]); y2=thresh([w b]*[x2;1]); 출력: y1 = 0, y2 = 1
 이러한 학습을 효과적으로 수행시키는 방법은 x=[x1 x2]와 같은 입
력패턴 행렬을 취할 수 있도록 trainpt1을 수정; 수정된 함수: trainpt()
퍼셉트론 학습
 한번의 학습 후에 옳게 분류된 결과가 출력되었지만,
항상 이러한 결과가 출력되는 것은 아니고, 옳은 출력
의 가중치 갱신을 위해 여러 번의 학습이 필요한 경우
가 많고, 이러한 사이클을 epoch라 함
 오직 하나의 패턴만을 옳게 분류하는 초기 가중치에
관해 훈련 전후의 의사 결정 경계
x1=[0 0]'; x2=[1 -1]'; x=[x1 x2]; t=[0 1];
w=[-0.1 0.8]; b=[-0.5];
plot(x(1,:),x(2,:),'*'), axis([-1.5 1.5 -1.5 1.5])
hold on
X=-1.5:0.5:1.5; Y=(-b-w(1)*X)./w(2);
plot(X,Y), title('퍼셉트론 의사결정 경계')
hold off
퍼셉트론 학습
 한 번 epoch후의 결정 경계
[w, b]=trainpt(x,t,w,b);
y=percpt(x,w,b);
plot(x(1,:),x(2,:),'*'),…
axis([-1.5 1.5 -1.5 1.5])
hold on
x = -1.5:0.5:1.5;
y=(-b-w(1)*X)./w(2);
plot(X, Y),
title('1차 학습후의 결정 경계')
y
y= 1 1
퍼셉트론 학습
 두 번 학습 후에 패턴은 옳게 분류
[w, b]=trainpt(x, t, w, b);
y=percpt(x, w, b);
plot(x(1,:),x(2,:),'*'),...
axis([-1.5 1.5 -1.5 1.5])
hold on
x=-1.5:0.5:1.5;
y=(-b-w(1)*X)./w(2);
plot(X, Y),...
title('2차 학습 후 결정 경계')
y
y=
0 1
퍼셉트론 학습
 퍼셉트론은 서너 개의 선형 분리 가능한 패턴을 분류하는 데 사
용될 수 있음
 percpt()는 20번의 epoch를 전후로 패턴이 옳게 분류될 수 있도
록 수정시킬 수 있음
 4개의 패턴 쌍에 관해 초기 퍼셉트론 의사결정 경계와 대응되는
문장
–
–
–
–
–
–
–
–
–
–
x=[0 -0.3 0.5 1;-0.4 -0.2 1.3 -1.3]; t=[0 0 1 1]; w=[-0.1 0.8];
b=[-0.5]; y=percpt(x,w,b); plot(x(1,1:2),x(2,1:2),'*'),...
axis([-1.5 1.5 -1.5 1.5])
hold on
plot(x(1,3:4),x(2,3:4),'+')
x=-1.5:0.5:1.5; y=(-b-w(1)*X)./w(2);
plot(X,Y), title('퍼셉트론 의사결정 경계')
t [출력] t = 0 0 1 1
y [출력] y = 0 0 1 0
hold off
 초기 가중치와 임계 값은 네 번째 패턴을 잘못 분류
퍼셉트론 학습
 5번 epoch 후의 의사결정 경계
퍼셉트론 학습
• 두 개의 입력을 갖는 퍼셉트론은 그것이 갖는 전달함
수가 하나의 선에 관한 방정식을 생성하도록 재 배열
시킬 수 있기 때문에 두 개의 영역으로 하나의 평면을
분리할 수 있도록 함
• 3차원적인 문제에서 방정식은 하나의 평면을 정의하
고, 고차원적인 문제에서는 하나의 초기하 평면을 정
의; 의사결정 경계는 항상 가중행렬과 직각
• 가중치 [1 2], 임계 값 1인 두 개의 입력을 갖는 퍼셉트
론의 의사결정 경계는 다음과 같고, 가중치 벡터 [1 2]
와 직각
퍼셉트론 학습
w=[1 2]; b=[1]; x=[-2.5:0.5:2.5];
y=(-b-w(1)*x)./w(2);
plot(x, y), text(0.5,-0.65,'의사결정 경계'),...
grid, title('퍼셉트론 의사결정 경계'), xlabel('x'), ylabel('y')
hold on
plot([w(1) -w(1)],[w(2) -w(2)]), text(0.5,0.7,'가중치 벡터'),
axis([-2 2 -2 2])
hold off
• 입력이 3 또는 4개의 클래스로 분류되는 것이라면, 두 개 뉴런을
갖는 퍼셉트론이 사용될 수 있음
• 출력은 분류 패턴 중의 하나에 속하고, 두 개 선이 분류 영역을
결정
• 예를 들어 입력이 이진 클래스 [0 1], [1 0], [0 0] 중의 하나에 속하
는 것이라면, 가중치는 행렬, 임계 값은 하나의 벡터로 하는 두
개의 라인이 생성
퍼셉트론 학습
• 퍼셉트론 의사결정 경계
퍼셉트론 학습
x=[0 -0.3 0.5 1; -0.4 -0.2 1.3 -1.3]; % 입력벡터
t=[0 0 1 1; 0 1 0 0];
% 목표벡터
w=[-0.1 0.8;0.2 -0.9];
% 가중치
b=[-0.5;0.3];
% 임계
y=percpt(x,w,b)
% 초기 분류
y= 0 0 1 0
1 1 0 1
t
t= 0 0 1 1
0 1 0 0
• 이러한 문장 출력에서 2개 패턴 t1과 t4가 잘못 분류됨을 알 수
있음
• 다음 퍼셉트론 알고리즘의 수행은 입력패턴을 목표패턴에 대응
되도록 옳게 분류
퍼셉트론 학습
[w,b]=trainpti(x,t,w,b)
Solution found in 6 epochs.
w = 2.7000 0.5000
-2.2000 -0.7000
b = -0.5000
-0.7000
y=percpt(x,w,b)
y= 0 0 1 1
0 1 0 0
plot(x(1,1),x(2,1),'*'), hold
plot(x(1,2),x(2,2),'+')
plot(x(1,3:4),x(2,3:4),'o'), axis([-1.5 1.5 -1.5 1.5])
X1=-1.5:0.5:1.5; Y1=(-b(1)-w(1,1)*X1)./w(1,2);
plot(X1,Y1)
X2=-1.5:0.5:1.5; Y2=(-b(2)-w(2,1)*X2)./w(2,2);
plot(X2,Y2), title('퍼셉트론 의사결정 경계'),...
text(-1,0.5,'A'), text(-0.3,0.5,'B'), text(0.5,0.5,'C')
퍼셉트론 학습
• 퍼셉트론 의사결정 경계
퍼셉트론 학습
 단층 퍼셉트론은 XOR-문제와 같은 선형 분리 가능하지 않은 문
제에 대해서는 사용될 수 없음
– 이러한 문제는 다층 네트워크로 분리 가능; 2개의 입력, 2개 뉴런을
갖는 하나의 은닉 층 및 하나의 출력을 갖는 네트워크는 2차원 공간
에서 2개의 라인을 정의
 단순 퍼셉트론에 관한 대부분의 제한 사항은 다층 구조, 이진 출
력이 아닌 전달함수 및 보다 복잡한 학습 알고리즘을 사용하여
처리될 수 있음
– threshold 전달함수를 갖는 다층 퍼셉트론은 퍼셉트론 학습 규칙으
로 학습될 수 없고, 함수가 미분 가능하지 않기 때문에 기울기 감소
와 같은 알고리즘을 적용할 수 없어서 유용하지 못 함
 Widrow Hoff 네트워크로 일컬어지는 Adaline(adaptive linear) 네
트워크는 threshold 전달함수가 아닌 선형 전달함수 층으로 구성
된다. 따라서 연속적인 값의 출력을 가질 수 있기 때문에 델타
규칙으로 지도 학습될 수 있음
다층 신경망
 하나 이상의 은닉 층을 갖는 신경망을 다층 신경망 또
는 다층 퍼셉트론이라 함
– 보통 네트워크의 각 은닉 층은 같은 유형의 전달함수, 출력
층의 전달함수는 시그모이드 또는 선형을 사용
– 시그모이드 형의 뉴런에 관한 출력은 쌍곡선 탄젠트인 경우
에 [-1 1], 로지스틱인 경우에는 [0 1]로 제한
– 선형 출력의 뉴런은 제한을 받지 않으며, 어떠한 크기의 값도
출력할 수 있음
 하나의 비선형 은닉 층을 갖는(시그모이드 형의 뉴런
인) 피드포워드 다층 퍼셉트론은 바람직한 정도의 정
확성을 갖는 어떠한 연속함수의 근사에 사용
– 즉 다층 퍼셉트론은 범용적인 근사자
다층 신경망
• 다층 신경망 구조
다층 신경망
 은닉 층에 어느 정도의 뉴런이 필요하고, 바람직한 오
차의 크기를 갖는 가중행렬이 무엇인지는 규명되지
않았음
 네트워크의 크기는 함수 및 관심 영역의 복잡성에 종
속되므로 네트워크의 학습은 계산적으로 조절할 수
있음
– 예컨대 f(x1, x2)=x1·x2와 같은 비선형 함수는 x1과 x2의 범위가
커질수록 많은 뉴런을 요구
 일반적인 근사를 위해서 다층 퍼셉트론의 은닉 층은
보통 시그모이드 형의 뉴런을 사용
– 선형 은닉 층이 거의 사용되지 않는 이유는 선형 변환
(h=W1x, y=W2h, 여기서 W1과 W2는 m×1 벡터 x를 h로, h를
y로 변환시키는 변환행렬)이 필요하기 때문; W= W1W2, y=
W1W2x =Wx
다층 신경망
• 3개 입력에 관해 하나의 은닉 층을 갖는(3개의 쌍곡선 탄젠트 뉴
런들인) 다층 퍼셉트론 출력은(2개의 선형출력 뉴런들인) 다음
행렬대수를 사용하여 계산될 수 있음
• 더미 노드를 사용해서 가중치 행렬에 임계 값을 삽입하는 확대
된 행렬 표현을 사용할 수 있음, 즉
다층 신경망
x=[2 4 6]';
w1=[0.2 -0.7 0.9;2.3 1.4 -2.1;10.2 -10.2 0.3];
w2=[0.5 -0.25 0.33;0.2 -0.75 -0.5];
b1=[0.5 0.2 -0.8]';
b2=[0.4 -1.2]';
y=w2*tanh(w1*x+b1)+b2
y = 0.8130 0.2314
또는
w1=[0.5 0.2 -0.7 0.9;0.2 2.3 1.4 -2.1;-0.8 10.2 -10.2 0.3];
w2=[0.4 0.5 -0.25 0.33;-1.2 0.2 -0.75 -0.5];
y=w2*[1; tanh(w1*[1; x])]
y = 0.8130 0.2314
역전파 학습
 다층 퍼셉트론의 전개에 따른 가중치 및 임계 값들에
관한 해를 반복적으로 구하는 일반적인 방법
 작은 학습률이 사용되는 경우에 아주 안정적인 최속
강하 법에 속하지만, 수렴속도가 처지는 단점을 가지
고 있음
– 역전파 학습의 성능을 높이기 위한 방법으로 모멘트 항의 추
가, 가변적인 학습률의 적용 등이 고려될 수 있음
 가중치 및 임계 값들의 해를 얻기 위한 다른 방법들은
아주 복잡한 알고리즘을 포함하고 있음
– 이들은 대부분 뉴톤 방법을 근거로 하고 있지만, 실제 적용에
있어서는 뉴톤 방법과 최속 강하법의 절충형에 속함
역전파 학습
 역전파 학습 알고리즘을 유도하는 데 있어서 전달함
수의 미분 전개가 필요
– 보편적으로 사용되는 전달 함수인 로지스틱, 탄젠트 시그모
이드, 선형 함수에 관한 미분
– 여기서 는 기울기 인자로 보통 1이 사용, 이러한 미분은 출력 f(x)
가 이전 단계에서 이미 계산되기 때문에 보다 쉽게 계산될 수 있음
– 로지스틱 함수 및 그것의 미분에 관한 그래프 출력
x=-5:0.1:5; y=1.0./(1.0+exp(-x)); dy=y.*(1-y);
subplot(2,1,1), plot(x, y),...
title('로지스틱 함수'), subplot(2,1,2), plot(x,dy),...
title('로지스틱 함수의 미분값')
역 전파 학습
역 전파 학습
 역전파 알고리즘은 오차 제곱합(목표 값과 네트워크
출력 값의 차이를 제곱)인 목적함수를 최소화시키는
방식으로 가중치와 임계 값을 계산: e2 = [tq - fqk]2
 앞의 그림에서 t는 목표, f는 네트워크 출력, i, j, k의 라
벨은 각각 입력, 은닉, 출력 층에 해당되고, 각 층은 m,
n, r개 뉴런을 가지며, 각 층의 뉴런은 각각 h, p, q의
인덱스로 표현
– Xh는 h-번째 입력 뉴런에 입력되는 값, whp.j는 은닉 층의 p-번
째 뉴런과 입력 층의 h-번째 뉴런과의 연결 가중치
– Ip.j는 은닉 층의 p-번째 뉴런에 유입되는 값들의 합인 내부 전
달 활동
– fp.j는 은닉 층의 p-번째 뉴런의 출력 값으로 내부 전달활동이
전달함수에 대입된 값
역 전파 학습
 두 개 층이 모두 로지스틱 함수를 사용하는 네트워크에 관한 출력
• 여기서 x는 입력벡터, w1는 첫 번째 층의 가중치 행렬, w2는 두
번째 층의 가중치 행렬, b1과 b2는 각각 첫 번째와 두 번째 층의
임계 벡터
 입력되는 벡터는 임계 값에 대응되는 성분인 1을 포함하는 방식으
로 나타낼 수 있음; 즉 두 개 층이 모두 로지스틱 함수를 사용하는
네트워크에 관한 출력
역 전파 학습
 은닉 및 출력 층에 관한 전달함수로 로지스틱이 사용되고, 다음
과 같은 초기 가중치와 임계 값을 사용하는 경우
x=[0.4;0.7]; % 행=입력 개수=2, 열=패턴 개수=1
w1=[0.1 -0.2; 0.4 0.2]; % 행=은닉 뉴런의 개수=2, 열=입력 개수=2
w2=[0.2 -0.5]; % 행=출력 개수=1, 열=은닉 뉴런 개수=2
b1=[-0.5;-0.2]; % 행=은닉 뉴런 개수=2
b2=[-0.6]; % 행=출력 뉴런 개수=1
 <초기 가중치에 관한 네트워크 출력>
X=[1;x]; W1=[b1 w1]; W2=[b2 w2];
output=logistic(W2*[1;logistic(W1*X)]);
X [출력] X = 1.0000 0.4000 0.7000
W1 [출력] W1 = -0.5000 0.1000 -0.2000
-0.2000 0.4000 0.2000
W2 [출력] W2 = -0.6000 0.2000 -0.5000
output [출력] output = 0.3118
역 전파 학습
 출력 층의 가중치 갱신
– 출력 층의 가중치들은 가중치에 관한 오차 제곱의 음의 기울기
에 비례하여 변화되며, 이러한 가중치 변화는 연쇄 규칙을 사
용하여 계산
– 다음은 각 층이 logistic 전달함수를 갖는 두 개 층의 네트워크
에 관한 미분
• 네트워크 출력은 logistic 함수를 갖는 경우에 [0 1]의 범위
역 전파 학습
 출력 뉴런에 관한 가중치 갱신


네트워크의 은닉 층에 관한 출력은 fp.j= h= [0.48 0.57]
목표 출력이 t=0.1일 때, 오차, 출력 가중행렬에 관한 기울기 벡
터의 계산, alpha=0.5을 사용한 가중치 갱신은 다음과 같이 진
행
• 오차 계산
h=logistic(W1*X); % 은닉 뉴런 출력
H=[1;h];
% 확대된 은닉 뉴런 출력
t=0.1;
% 목표 출력
Out_err=t-logistic(W2*H)
Out_err =
-0.2118 갱신
역 전파 학습
• 출력 가중행렬에 관한 기울기 벡터
output=logistic(W2*[1;logistic(W1*X)])
output = 0.3118
delta2=output.*(1-output).*Out_err % logistic 함수의 미분 값
delta2 = -0.0455
• alpha=0.5 에서 가중치 갱신
lr=0.5;
del_W2=2*lr*H'*delta2 % 가중치 변화
del_W2 = -0.0455 -0.0161 -0.0239
new_W2=W2+del_W2 % 가중치 갱신
new_W2 = -0.6455 0.1839 -0.5239
Out_err=t-logistic(new_W2*[1;logistic(W1*X)]) % 새로운 출력 오차
Out_err = -0.1983
한번 학습 후에 가중치 행렬은 오차를 0.2118에서 0.1983으로 감소
역 전파 학습
 은닉 층의 가중치 갱신
– 은닉 층의 출력은 어떠한 목표도 가지지 않기 때문에 오차를 최
소화 시키는 방식으로 가중치 갱신을 위해 출력 층 오차를 은닉
층 뉴런으로 역 전파 시키는 절차가 요구
– 이러한 작업의 수행을 위해서 가중치에 관한 기울기 방정식과 연
쇄 규칙을 사용
역 전파 학습
 결과적으로 가중치 변화에 따른 오차의 변화
 가중치 갱신에 관한 식
역 전파 학습
 기울기 항을 은닉 층으로 역 전파
[numout, numhid]=size(W2);
delta1=delta2.*h.*(1-h).*W2(:,2:numhid)'
[출력] delta1 = -0.0021 0.0057
 은닉 층 가중치 변화의 계산(임계 값에 관련된 역 전파는 무시)
del_W1=2*lr*delta1*X'
[출력] del_W1 = -0.0021 -0.0008 -0.0015
0.0057 0.0023 0.0040
new_W1=W1+del_W1
[출력] new_W1 = -0.5021 0.0992 -0.2015
-0.1943 0.4023 0.2040
 새로운 출력 값의 계산
output=logistic(new_W2*[1;logistic(new_W1*X)])
output = 0.2980
 출력 값 0.298은 초기 출력 0.3118에 비교했을 때, 목표 0.1에 근접;
학습률 크기는 훈련의 안정성 및 수렴에 영향을 미침
역 전파 학습
 일괄 처리 학습
– 지금까지의 순차 처리 학습에서는 각 패턴이 출현한 후에 가중
치들을 갱신하는 방법을 사용
– 이런 방식은 패턴이 무작위 선택되었다는 의미에서 다소간 확률
적이지만 지역적인 최소 점에 빠질 가능성을 감소시킴
– 일괄처리 학습은 모든 훈련패턴이 가중치 갱신에 앞서 처리; 예
컨대 4개의 패턴으로 구성되는 훈련집합을 사용하는 경우에
x=[0.4 0.8 1.3 -1.3;0.7 0.9 1.8 -0.9]; t=[0.1 0.3 0.6 0.2];
[inputs, patterns]=size(x); [outputs, patterns]=size(t);
% 행=은닉뉴런 개수=2, 열=입력 개수+1=3
W1=[0.1 -0.2 0.1;0.4 0.2 0.9];
W2=[0.2 -0.5 0.1]; % 행=출력 개수=1, 열=은닉뉴런 개수+1=3
X=[ones(1,patterns); x]; h=logistic(W1*X); H=[ones(1,patterns);
h];
e=t-logistic(W2*H)
[출력] e = -0.4035 -0.2065 0.0904 -0.2876
역 전파 학습
 오차 제곱합의 계산
SSE=sum(sum(e.^2)) [출력] SSE =
0.2963
 기울기 벡터의 계산
output=logistic(W2*H)
[출력] output = 0.5035 0.5065 0.5096 0.4876
delta2=output.*(1-output).*e
[출력] delta2 = -0.1009 -0.0516 0.0226 -0.0719
 Alpha=0.5를 사용한 가중치 갱신
lr=0.5; del_W2=2*lr*delta2*H'
[출력] del_W2 = -0.2017 -0.1082 -0.1208
new_W2=W2+del_W2
[출력] new_W2 = -0.0017 -0.6082 -0.0208
 새로운 오차 제곱 합 계산
e=t-logistic(new_W2*H); SSE=sum(sum(e.^2)) [출력] SSE = 0.1926
역 전파 학습
 출력 층 가중치 및 임계 값 변화로 인해 SSE는 0.1926로 감소;
은닉 층에 관한 가중 행렬 변경을 위해 다시 은닉 층으로 역 전
파
[numout, numhidb]=size(W2);
delta1=h.*(1-h).*(W2(:,2:numhidb)'*delta2)
[출력] delta1 = 0.0126 0.0065 -0.0028 0.0088
-0.0019 -0.0008 0.0002 -0.0016
 은닉 층의 가중치 변화
del_W1=2*lr*delta1*X'
[출력] del_W1 = 0.0250 -0.0049 0.0016
-0.0041 0.0009 -0.0003
new_W1=W1+del_W1
[출력] new_W1 = 0.1250 -0.2049 0.1016
0.3959 0.2009 0.8997
h=logistic(new_W1*X);
H=[ones(1,patterns);h];
logistic(new_W2*H);
SSE=sum(sum(e.^2)) [출력] SSE = 0.1917
e=t-
 새로운 SSE의 값은 0.1917, 이 값은 0.1926의 SSE보다 작은 것;
따라서 은닉 층의 가중치 변화는 SSE를 조금 더 감소시킴
적응 학습
 신경망을 반복 학습시키는 경우에 학습율을 자체적으로
변화시키는, 즉 적응성을 갖도록 하는 것이 효과적
 학습율은 오차 기울기 하강 단계의 크기로 아주 작은 크
기를 취하는 경우에 오차 최소화를 위한 보장이 확실해지
나, 시간이 아주 오래 걸리는 단점
 구간 크기 결정 방법으로 경험적 방법이 사용
– 학습이 잘 진행되면(오차가 계속 감소되는), 구간 크기를 증가
(lr=lr*1.1)
– 학습이 빈약해지면(오차가 증가되는), 구간 크기를 감소(lr=lr*0.5)
– 오차가 감소되는 경우에만 가중치 갱신
 학습을 시작하기에 앞서 가중치들은 아주 작은 값으로 초
기화되고, 입력 또한 유사한 크기로 감소시켜서 logistic
뉴런들이 포화상태에 빠질 가능성을 줄여야 함
훈련 데이터 변환
 다음 두 가지 측면에서 변환될 필요가 있음
– 첫째 각 입력 데이터의 중요도는 동일한 것이어야 하며, 로지
스틱 형의 전달함수가 조속히 포화상태에 빠지는 것을 방지
하기 위함
– 둘째로 출력 또는 목표 데이터는 출력 전달함수가 가질 수
있는 범위에 놓여야 하기 때문에
 변환되지 않은 데이터는 해당 범위에서 대응될 수 없
는것
 입력 데이터의 변환에 관해 선형변환 및 z-점수 변환
이 사용될 수 있음
– 먼저 선형변환은 보통 0.1에서 0.9의 범위로 데이터를 변환
시키는 것
– 함수 scale()은 훈련 패턴행렬의 행이 패턴, 열이 입력인 경우
에 있어서 선형 변환에 사용
스크립트 bptrain
 일괄처리 역 전파 학습 수행
– 2개의 층을 갖는 다층 퍼셉트론 네트워크 학습; 은닉 층은 로지스틱, 출
력 층은 선형 전달함수
– 입력과 목표 출력은 하나의 파일로 저장될 필요가 있음; x에 관한 행의
개수는 패턴 개수, 즉 size(x)=(patterns, inputs), 열의 개수는 입력의 개
수
– t에 관한 행 개수는 패턴 개수, 즉 size(t)=(patterns, outputs), 열 개수는
출력 개수
 bptrain 실행은 단순히 bptrain을 입력하는 방식으로 수행; 이때 다음
과 같은 메시지 출력
입출력 데이터를 포함하는 파일 이름: _
– data8을 입력하고 반환 키를 누르면, 다음과 같은 메시지가 출력
은닉 층 뉴런 개수? _
– 은닉 층에 사용될 뉴런 개수 입력; 이때 입력 데이터 변환 방법으로 z-점
수 사용은 z, 선형변환은 I, 어떠한 방법도 사용하지 않을 경우에 n을 입
력하는 선택 문장이 나타남
입력 변환 방법: zscore=z, linear=l, none=n ?[z, l, n]: _
스크립트 bptrain
 다음으로 선택 변수 사양에 관한 문장이 나타남
출력 오차한계(각 출력에 따른 RMS) = .1
최대 반복횟수 = 5000.
초기 학습율 = 0.1.
이러한 선택을 사용할 것인지? [y, n]: _
– 출력 오차 허용한계 0.1, 학습 최대 반복횟수 5000, 초기 학습율 0.1
의 디폴트 값 사용에 따른 y키를 누르면 다음과 같은 메시지가 출력
네트워크 사양:
1개 입력 뉴런, 20개 은닉 뉴런, 1개 출력 뉴런
훈련집합으로 11개 입출력 쌍을 사용
– 즉 네트워크는 하나의 입력 뉴런과 20개의 은닉 뉴런, 하나의 출력
뉴런으로 구성되어 있으며, 훈련집합으로 11개 패턴 쌍이 사용된다
는 것을 의미
일반성
 일반성은 훈련집합에 포함되지 않았던 입력에 관해
네트워크가 옳은 출력을 줄 수 있는 능력
 네트워크는 훈련공간의 외부에서 일반화될 수 없고,
훈련 데이터의 외부 데이터로부터 생성된 출력은 어
떠한 신뢰성도 제공할 수 없음
load weights8
x=0:0.1:10;
t=2*x-0.21*x.^2;
output=W2*[ones(size(x));logistic(W1*[ones(size(x));x])];
plot(x, t, x, output), title('함수근사'), xlabel('입력'), ylabel('출
력')
– 출력에 의하면 네트워크는 입출력 함수관계에 대한 학습 행
위를 잘 반영, 즉 일반성을 잘 나타내고 있음
– 보다 작은 오차 목표에 대한 장시간의 학습은 네트워크의 성
능을 개선시킬 수 있을 것
일반성
헵 학습
 헵 학습은 가장 오래되고 단순한 형태의 학습 규칙
– 이 규칙은 만약 연접 양쪽의 뉴런이 동시에 또 반복적으로
활성화되었다면 그 두 뉴런 사이의 연결강도가 강화된다는
관찰에 근거
– 수학적인 식
• xi와 yj는 뉴런 i와 j의 출력, 이들은 wij에 의해 연결, η는 학습
률, xi는 wij의 입력도 됨
• 연접의 변화가 인접한 두 뉴런의 상태에 의해서만 결정되기
때문에 학습은 국부적으로 일어남
헵 학습
 헵 학습은 여러 가지 변형된 형태로 사용되기도 하는
데, 대표적인 것이 instar와 outstar 학습 규칙
 instar의 경우 연결강도는 다음과 같은 학습 규칙에
의해 조정
여기서 xj는 정규화된 입력, y는 출력, d는 목표 출력이므로
위 식은 지도 학습
헵 학습
 다음 식은 비지도 학습: outstar 학습 규칙은 instar
학습 규칙과 매우 유사
 CemTool을 이용한 Hebbian 학습
Hebbin 규칙을 이용하여 다음 패턴을 학습해 보자.
CEMTool>> pattern = [1 0 0 0 0; 0 1 0 0 1;
0 0 1 1 0; 0 0 1 1 0];
CEMTool>> target = pattern;
헵 학습
– 단층 앞 먹임 신경망이므로 "genlayer" 함수를 이용하여 초기화하
고, 바이어스는 -0.5로 고정
CEMTool>> w = genlayer(pattern, target, [-0.1 0.1]);
CEMTool>> b = -0.5*ones(1,5);
– 학습률 0.2, 감쇄율 0.05, 최대 학습회수를 50로 두고 학습 수행
CEMTool>> w = trainheb(w, pattern, target, 50, 0.2, 0.05);
– 학습 결과
CEMTool>> output=simulnet(w, b, "hardlim", pattern)
1
0
0
0
0
0
1
0
0
1
0
0
1
1
0
0
0
1
1
0
헵 학습
– 모든 출력 결과가 target과 일치하는 것을 볼 수 있음; 학습된
연결강도의 출력
CEMTool>> w
0.9673
0.0000
0.0000
0.0000
0.0000
0.0000
0.6230
0.0000
0.0000
0.6230
0.0000
0.0000
2.4096
2.4096
0.0000
0.0000
0.0000
2.4096
2.4096
0.0000
0.0000
0.6230
0.0000
0.0000
0.6230
– 입력과 출력이 동일하므로, w도 대각성분이 큰 값을 가지는
모양으로 학습되었음을 알 수 있음
헵 학습
% Hebbian 학습 데모(demo_hebb.cem)
// define 100, 5-element input vectors.
pattern = [1 0 0 0 0; 0 1 0 0 1; 0 0 1 1 0; 0 0 1 1 0];
target = pattern; msgprint(" ");
msgprint(" 학습 패턴");
pattern
msgprint(" "); msgprint(" 목표 출력패턴");
pattern
// generate a network
w = genlayer(pattern, target, [-0.1 0.1]);
[n m]=size(target);
b = -0.5*ones(1,m);
msgprint(" "); msgprint(" weight 초기화");
w
헵 학습
// train the network using the Hebbian learning rule.
// the input and the target are the same
// learning rate is 0.2, decay rate is 0.05
w = trainheb(w, pattern, target, 50, 0.2, 0.05);
// test the network
output=simulnet(w, b, "hardlim", pattern);
e = errornet(w, b, "hardlim", pattern, target);
msgprint(" ");
msgprint(" (네트워크 출력) - (목표 출력)");
output - target
msgprint(" ");
msgprint(" 평균제곱오차 : ");
e
Download