Main Content

선형 신경망

이 섹션에서 다루는 선형 신경망은 퍼셉트론과 비슷하나, 전달 함수가 하드 리밋이 아니라 선형입니다. 따라서 퍼셉트론의 출력값은 0 또는 1로 제한되는 반면 이 신경망의 출력값은 어떤 값도 취할 수 있습니다. 선형 신경망은 퍼셉트론과 마찬가지로 선형 분리가 가능한 문제만 풀 수 있습니다.

주어진 입력 벡터 세트를 입력하면 이에 대응하는 목표 벡터를 출력값으로 생성하는 선형 신경망을 설계해 보겠습니다. 각 입력 벡터에 대해 신경망의 출력 벡터를 계산할 수 있습니다. 출력 벡터와 목표 벡터의 차이는 오차입니다. 오차 제곱합이 최소화되거나 특정 값 미만이 되도록 하는 신경망 가중치 및 편향의 값을 찾고자 합니다. 선형 시스템에는 오차 최솟값이 하나만 있으므로 이 문제는 간단하게 풀 수 있습니다. 대부분의 경우, 주어진 입력 벡터와 목표 벡터에 대해 오차가 최솟값이 되는 선형 신경망을 직접 계산할 수 있습니다. 그 밖의 경우에는 수치적 문제로 인해 직접 계산이 가능하지 않습니다. 다행히 언제든지 최소 평균 제곱(Widrow-Hoff) 알고리즘을 사용하면 신경망이 최소 오차를 갖도록 훈련시킬 수 있습니다.

이 섹션에서는 선형 계층을 만드는 linearlayer 함수와 특정 목적을 위해 선형 계층을 설계하는 newlind 함수를 소개합니다.

뉴런 모델

아래에는 입력값이 R개인 선형 뉴런이 나와 있습니다.

이 신경망은 퍼셉트론과 동일한 기본적인 구조를 갖습니다. 선형 뉴런은 선형 전달 함수 purelin을 사용한다는 것이 유일한 차이입니다.

선형 전달 함수는 전달받은 값을 반환하는 것만으로 뉴런의 출력값을 계산합니다.

α=purelin(n)=purelin(Wp+b)=Wp+b

이 뉴런은 입력값의 아핀 함수를 학습하거나 비선형 함수에 대한 선형 근사를 구하도록 훈련시킬 수 있습니다. 당연한 말이지만, 선형 신경망으로는 비선형 계산을 수행할 수 없습니다.

신경망 아키텍처

아래에 나와 있는 선형 신경망은 가중치 행렬 W를 통해 R개의 입력값에 연결된 S개의 뉴런으로 구성된 단일 계층을 갖습니다.

오른쪽 그림은 길이가 S인 출력 벡터 a를 정의하고 있습니다.

단층 선형 신경망이 나와 있습니다. 이 신경망은 그러나 다층 선형 신경망만큼 능력이 뛰어납니다. 각각의 다층 선형 신경망에는 그에 상응하는 동급의 단층 선형 신경망이 있습니다.

선형 뉴런 만들기(linearlayer)

입력값이 2개인 단일 선형 뉴런을 살펴보겠습니다. 다음 그림은 이 신경망의 도식을 보여줍니다.

이 경우에 가중치 행렬 W에는 하나의 행만 있습니다. 신경망 출력값은 다음과 같습니다.

α=purelin(n)=purelin(Wp+b)=Wp+b

또는

α=w1,1p1+w1,2p2+b

퍼셉트론과 마찬가지로 선형 신경망에도 순 입력값 n이 0이 되는 입력 벡터에 의해 결정되는 결정 경계가 있습니다. 아래에서 볼 수 있듯이 n = 0에 대해 방정식 Wp + b = 0은 이러한 결정 경계를 지정합니다([HDB96] 일부 인용).

오른쪽 상단 회색 영역에 있는 입력 벡터는 0보다 큰 출력값을 생성합니다. 왼쪽 하단 흰 영역에 있는 입력 벡터는 0보다 작은 출력값을 생성합니다. 따라서 선형 신경망은 사물을 2개의 범주로 분류하는 데 사용할 수 있습니다. 그러나 선형 신경망은 사물이 선형 분리 가능한 경우에만 이런 방식으로 분류할 수 있습니다. 따라서 선형 신경망에는 퍼셉트론과 동일한 제한 사항이 있습니다.

이 신경망은 linearlayer를 사용하여 만들고 입력값이 요소를 2개 갖고 출력값이 요소를 1개 갖도록 2개의 값을 사용하여 차원을 구성할 수 있습니다.

net = linearlayer;
net = configure(net,[0;0],0);

기본적으로 신경망 가중치와 편향은 0으로 설정됩니다. 다음 명령을 사용하여 현재 값을 확인할 수 있습니다.

W = net.IW{1,1}
W =
     0     0

b= net.b{1}
b =
     0

가중치에 원하는 임의의 값을 할당할 수도 있습니다. 예를 들어, 다음을 사용하여 가중치에 2와 3을 할당할 수 있습니다.

net.IW{1,1} = [2 3];
W = net.IW{1,1}
W =
     2     3

편향도 같은 방법으로 설정하고 확인할 수 있습니다.

net.b{1} = [-4];
b = net.b{1}
b =
     -4

특정 입력 벡터에 대해 선형 신경망을 시뮬레이션할 수 있습니다. 다음을 사용해 보십시오.

p = [5;6];

함수 sim을 사용하여 신경망 출력값을 구할 수 있습니다.

a = net(p)
a =
    24

정리하자면, linearlayer를 사용하여 선형 신경망을 만들고, 원하는 대로 그 요소를 조정하고, sim을 사용하여 시뮬레이션할 수 있습니다.

최소 평균 제곱 오차

퍼셉트론 학습 규칙과 마찬가지로, 최소 평균 제곱 오차(LMS) 알고리즘은 원하는 신경망 동작의 예제 세트와 함께 학습 규칙이 제공되는 지도 학습 훈련의 한 가지 예입니다.

{p1,t1},{p2,t2},{pQ,tQ}

여기서 pq는 신경망에 대한 입력값이고 tq는 이에 대응하는 목표 출력값입니다. 각 입력값이 신경망에 적용됨에 따라 신경망 출력값이 목표값과 비교됩니다. 오차는 목표 출력값과 신경망 출력값의 차이로 계산됩니다. 목표는 이러한 오차 합의 평균을 최소화하는 것입니다.

mse=1Qk=1Qe(k)2=1Qk=1Q(t(k)α(k))2

LMS 알고리즘은 평균 제곱 오차가 최소화되도록 선형 신경망의 가중치와 편향을 조정합니다.

다행히 선형 신경망의 평균 제곱 오차 성능 지수는 2차 함수입니다. 따라서 성능 지수는 입력 벡터의 특징에 따라 하나의 전역 최솟값을 갖거나 하나의 약한 최솟값을 갖거나 최솟값을 갖지 않습니다. 정확하게는 입력 벡터의 특징이 유일한 해가 존재하는지 여부를 결정합니다.

[HDB96]의 10장에서 이 주제에 대해 더 알아볼 수 있습니다.

선형 시스템 설계(newlind)

대부분의 다른 신경망 아키텍처와 달리 선형 신경망은 입력/목표 벡터 쌍이 알려져 있다면 직접 설계할 수 있습니다. newlind 함수를 사용하여 평균 제곱 오차를 최소화하기 위한 가중치 및 편향의 구체적인 신경망 값을 얻을 수 있습니다.

입력값과 목표값이 다음과 같다고 가정하겠습니다.

P = [1 2 3];
T= [2.0 4.1 5.9];

이제 신경망을 설계할 수 있습니다.

net = newlind(P,T);

신경망 동작을 시뮬레이션하여 설계가 올바르게 이루어졌는지 확인할 수 있습니다.

Y = net(P)
Y =
    2.0500    4.0000    5.9500

신경망 출력값이 원하는 목표값과 매우 가까운 것을 볼 수 있습니다.

Pattern Association Showing Error Surface 항목을 살펴보십시오. 이 예제에서는 특정 문제에 대한 오차 곡면을 보여주고, 설계에 대해 설명하고, 설계된 솔루션을 플로팅합니다.

함수 newlind를 사용하여 입력값에 지연이 있는 선형 신경망을 설계할 수도 있습니다. 이러한 신경망에 대해서는 지연이 있는 선형 신경망에서 설명합니다. 그 전에 먼저 지연에 대해 알아보아야 합니다.

지연이 있는 선형 신경망

탭 지연선

선형 신경망을 최대한 활용하려면 탭 지연선이라는 새로운 구성요소가 필요합니다. 아래에 탭 지연선이 나와 있습니다. 입력 신호가 왼쪽에서 입력되어 N-1개의 지연을 통과합니다. 탭 지연선(TDL)의 출력값은 현재 시점의 입력 신호, 이전 입력 신호 등으로 구성된 N차원 벡터입니다.

선형 필터

탭 지연선을 선형 신경망과 결합하여 다음 그림에 나와 있는 선형 필터를 만들 수 있습니다.

필터의 출력값은 다음과 같습니다.

α(k)=purelin(Wp+b)=i=1Rw1,ip(ki+1)+b

디지털 신호 처리 필드에서는 여기에 표시된 신경망을 유한 임펄스 응답(FIR) 필터[WiSt85]라고 합니다. 이와 같은 신경망을 생성하고 시뮬레이션하는 데 사용되는 코드를 살펴보겠습니다.

시퀀스 P와 2개의 초기 입력 지연 상태 Pi가 주어졌을 때 시퀀스 T를 출력하는 선형 계층이 필요하다고 가정하겠습니다.

P = {1 2 1 3 3 2};
Pi = {1 3};
T = {5 6 4 20 7 8};

newlind로 지연이 있는 신경망을 설계하여 입력값에 대한 적절한 출력값을 제공할 수 있습니다. 아래와 같이 지연 초기 출력값을 세 번째 인수로 지정합니다.

net = newlind(P,T,Pi);

설계된 신경망의 출력값은 다음을 사용하여 얻을 수 있습니다.

Y = net(P,Pi)

출력값은 다음과 같습니다.

Y = [2.7297] [10.5405] [5.0090] [14.9550] [10.7838] [5.9820]

위에서 볼 수 있듯이 신경망 출력값이 목표값과 정확하게 일치하지는 않지만 그에 가까우며 평균 제곱 오차가 최소화되었습니다.

LMS 알고리즘(learnwh)

LMS 알고리즘(Widrow-Hoff 학습 알고리즘)은 근사 최속강하법 절차를 기반으로 합니다. 여기서도, 선형 신경망은 올바른 동작의 예제에서 훈련됩니다.

Widrow와 Hoff는 각 반복에서 오차 제곱을 사용하여 평균 제곱 오차를 추정할 수 있다고 생각했습니다. k번째 반복에서 가중치와 편향에 대해 오차 제곱의 편도함수를 구하면 다음과 같습니다.

e2(k)w1,j=2e(k)e(k)w1,j

j = 1,2,…,R, 그리고

e2(k)b=2e(k)e(k)b

다음은 오차에 대한 편도함수입니다.

e(k)w1,j=[t(k)α(k)]w1,j=w1,j[t(k)(Wp(k)+b)]

또는

e(k)w1,j=w1,j[t(k)(i=1Rw1,ipi(k)+b)]

여기서 pi(k)는 k번째 반복에서 입력 벡터의 i번째 요소입니다.

이를 다음과 같이 단순화할 수 있습니다.

e(k)w1,j=pj(k)

e(k)b=1

마지막으로, 가중치 행렬을 변경하면 편향은 다음과 같이 됩니다.

2αe(k)p(k)

2αe(k)

이들 두 방정식이 Widrow-Hoff(LMS) 학습 알고리즘의 기초가 됩니다.

이러한 결과는 뉴런이 여러 개인 경우로 확장될 수 있으며, 다음과 같이 행렬 형식으로 표현할 수 있습니다.

W(k+1)=W(k)+2αe(k)pT(k)b(k+1)=b(k)+2αe(k)

여기서 오차 e와 편향 b는 벡터이고 α는 학습률입니다. α가 크면 학습이 빠르게 이루어지지만 지나치게 크면 불안정성이 발생할 수 있고 오차가 늘어날 수도 있습니다. 안정적인 학습을 위해서는 학습률이 입력 벡터의 상관 행렬 pTp의 가장 큰 고유값의 역수보다 작아야 합니다.

LMS 알고리즘과 이 알고리즘의 수렴에 대해 자세히 알아보려면 [HDB96]의 10장을 참조하십시오.

다행히 이 모든 계산을 자동으로 수행하는 툴박스 함수 learnwh가 있습니다. 함수는 가중치 변화량을 다음과 같이 계산하고

dw = lr*e*p' 

편향 변화량을 다음과 같이 계산합니다.

db = lr*e

앞에 나온 상수 2는 코드의 학습률 lr에 흡수되었습니다. 함수 maxlinlr은 이 최대 안정 학습률 lr을 0.999 * P'*P로 계산합니다.

이 두 함수에 대해 자세히 알아보려면 help learnwhhelp maxlinlr을 입력하십시오.

선형 분류(train)

함수 train을 사용하여 선형 분류를 수행하도록 선형 신경망을 훈련시킬 수 있습니다. 이 함수는 입력 벡터 세트에 있는 각각의 벡터를 적용하고 learnp에 따라 각 입력값으로 인한 신경망 가중치 및 편향 증분을 계산합니다. 그런 다음 모든 수정 사항의 합을 사용하여 신경망이 조정됩니다. 입력 벡터를 한 번 통과하는 것을 Epoch라고 합니다. 이는 각 입력 벡터가 입력될 때마다 가중치를 조정하는 adapt와 비교되는 지점입니다.

마지막으로, train은 새 신경망에 입력값을 적용하고, 출력값을 계산하고, 출력값을 그에 대응하는 목표값과 비교하고, 평균 제곱 오차를 계산합니다. 오차 목표가 달성되었거나 최대 Epoch 횟수에 도달하면 훈련이 중지되고 train이 새 신경망과 훈련 기록을 반환합니다. 그러지 못한 경우, train은 Epoch 1회를 더 진행합니다. 다행히도 LMS 알고리즘은 이 절차가 실행될 경우에 수렴합니다.

간단한 문제를 통해 이 절차를 살펴보겠습니다. 앞에서 소개한 선형 신경망을 다시 사용하겠습니다.

다음과 같은 분류 문제가 있다고 가정하겠습니다.

{p1=[22],t1=0}{p2=[12],t2=1}{p3=[22],t3=0}{p4=[11],t4=1}

입력 벡터는 4개입니다. 입력 벡터가 입력되면 이에 대응하는 출력값을 생성하는 신경망을 만들려고 합니다.

train을 사용하여 각 입력 벡터에 대해 올바른 목표값을 생성하는 신경망의 가중치와 편향을 구합니다. 기본적으로 새 신경망의 초기 가중치 및 편향은 0입니다. 오차 목표를 디폴트 값인 0 대신 0.1로 설정합니다.

P = [2 1 -2 -1;2 -2 2 1];
T = [0 1 0 1];
net = linearlayer;
net.trainParam.goal= 0.1;
net = train(net,P,T); 

이 문제는 Epoch 64회 동안 실행되며 평균 오차 제곱 0.0999를 달성합니다. 새 가중치와 편향은 다음과 같습니다.

weights = net.iw{1,1}
weights =
   -0.0615   -0.2194
bias = net.b(1)
bias =
    [0.5899]

다음과 같이 새 신경망을 시뮬레이션할 수 있습니다.

A = net(P)
A =
    0.0282    0.9672    0.2741    0.4320

오차를 계산할 수도 있습니다.

err = T - sim(net,P)
err =
   -0.0282    0.0328   -0.2741    0.5680

목표값이 정확하게 실현되지 않은 것을 볼 수 있습니다. 오차 목표를 더 작게 선택했더라면 완벽한 결과를 얻기 위해 문제가 더 오래 실행되었겠지만, 이 문제에서는 목표 0을 달성하는 것이 불가능합니다. 이 신경망은 역량이 제한적입니다. 다양한 제한 사항의 예는 제한 사항 및 주의 사항 항목을 참조하십시오.

예제 프로그램 Training a Linear Neuron에서는 선형 뉴런을 훈련시키고 훈련 중에 가중치 궤적과 오차를 플로팅합니다.

예제 프로그램 nnd10lc도 실행해 보십시오. 이 예제에서는 오랜 기간 흥미를 끌어온 고전적인 문제를 제시하고, 다양한 패턴을 분류하도록 신경망을 훈련시키는 방법을 보여주고, 잡음이 있는 패턴을 입력하면 훈련된 신경망이 어떻게 반응하는지 보여줍니다.

제한 사항 및 주의 사항

선형 신경망은 입력 벡터와 출력 벡터 사이의 선형 관계만 학습할 수 있습니다. 따라서 선형 신경망이 해를 구할 수 없는 문제도 있습니다. 그러나 완벽한 해가 존재하지 않더라도 선형 신경망은 학습률 lr이 충분히 작다면 오차 제곱합을 최소화합니다. 신경망은 신경망 아키텍처의 선형적인 성격으로 달성할 수 있는 가장 가까운 해를 구합니다. 이 속성은 선형 신경망의 오차 곡면이 다차원 포물선이기 때문에 성립합니다. 포물선은 하나의 최솟값만 가지므로 경사하강법 알고리즘(예: LMS 규칙)은 해당 최솟값에서 반드시 해를 생성합니다.

선형 신경망에는 그 밖에도 여러 제한 사항이 있습니다. 그중 몇몇은 아래에서 설명합니다.

과결정 시스템

과결정 시스템을 살펴보겠습니다. 요소를 1개 가진 입력 벡터 4개와 목표값 4개로 신경망을 훈련시킨다고 가정하겠습니다. 제약 방정식이 4개 있고 조정할 수 있는 가중치와 편향이 1개씩 밖에 없기 때문에 각 입력값에 대해 wp + b = t의 완벽한 해는 존재하지 않을 수 있습니다. 그래도 LMS 규칙은 여전히 오차를 최소화합니다. Linear Fit of Nonlinear Problem에서 오차가 어떻게 최소화되는지 살펴보십시오.

부족 결정 시스템

입력값이 1개인 단일 선형 뉴런을 살펴보겠습니다. 이번에는 Underdetermined Problem에서 요소를 1개 가진 입력 벡터 1개와 요소를 1개 가진 목표 벡터에 대해서만 훈련시킵니다.

P = [1.0];
T = [0.5];

단일 입력값/목표값 쌍에서 오직 하나의 제약 조건만 발생하지만, 변수는 가중치와 편향, 이렇게 2개가 있습니다. 제약 조건보다 변수가 많으면 무한개의 해를 갖는 부족 결정 문제가 발생합니다. Underdetermined Problem에서 이 주제를 살펴볼 수 있습니다.

1차 종속 벡터

일반적으로는 선형 신경망이 문제를 풀 수 있는지 여부를 간단하게 확인할 수 있습니다. 일반적으로 선형 신경망에 적어도 제약 조건의 개수(Q = 입력/목표 벡터의 쌍)만큼의 자유도(S *R + S = 가중치와 편향의 개수)가 있다면 이 신경망은 문제를 풀 수 있습니다. 이 명제는 입력 벡터가 1차 종속이고 편향 없이 신경망에 적용된 경우를 제외하면 참입니다. 이러한 경우에는 예제 Linearly Dependent Problem에서 볼 수 있듯이 신경망이 오차가 0이 되도록 문제를 풀 수 없습니다. Linearly Dependent Problem 항목을 살펴보십시오.

너무 큰 학습률

학습률이 충분히 작다면 언제든지 Widrow-Hoff 규칙으로 선형 신경망을 훈련시켜서 가중치와 편향에 대한 최소 오차 해를 구할 수 있습니다. 예제 Too Large a Learning Rate에서는 입력값 1개와 편향을 갖는 뉴런을 maxlinlr에서 권장하는 것보다 큰 학습률로 훈련시키면 어떤 일이 일어나는지 보여줍니다. 여기서는 너무 큰 학습률을 사용한 결과를 보여주기 위해 신경망이 서로 다른 2개의 학습률로 훈련됩니다.