Main Content

얕은 신경망 데이터 구조 이해하기

이 항목에서는 입력 데이터 구조의 형식이 신경망 시뮬레이션에 어떤 영향을 주는지 설명합니다. 먼저 정적 신경망을 살펴보고 이어서 동적 신경망을 알아보겠습니다. 다음 섹션에서는 데이터 구조의 형식이 신경망 훈련에 어떤 영향을 주는지 설명합니다.

입력 벡터에는 두 가지 기본적인 유형이 있습니다. 하나는 동시에(또는 특정한 시간 시퀀스 없이) 발생하는 벡터이고, 다른 하나는 시간 단위로 순차적으로 발생하는 벡터입니다. 동시 벡터는 순서가 중요하지 않으며 다수의 신경망이 병렬로 실행 중이면 각 신경망에 하나의 입력 벡터를 입력할 수 있습니다. 순차 벡터의 경우, 벡터가 나타나는 순서가 중요합니다.

정적 신경망에서 동시 입력값을 사용한 시뮬레이션

가장 간단한 상황의 신경망 시뮬레이션은 시뮬레이션할 신경망이 정적(피드백 또는 지연이 없음)인 경우입니다. 이 경우 입력 벡터가 특정 시간 시퀀스로 발생하는지 아닌지를 신경 쓸 필요가 없으므로 입력값을 동시 벡터로 취급하면 됩니다. 또한 신경망에 입력 벡터가 하나만 있다고 가정하면 문제가 더 단순해집니다. 다음 신경망을 예로 사용하겠습니다.

이 선형 피드포워드 신경망을 설정하려면 다음 명령을 사용하십시오.

net = linearlayer;
net.inputs{1}.size = 2;
net.layers{1}.dimensions = 1;

문제를 단순화하기 위해 가중치 행렬을 W = [1 2]로, 편향을 b = [0]으로 할당합니다.

할당을 위한 명령은 다음과 같습니다.

net.IW{1,1} = [1 2];
net.b{1} = 0;

신경망 시뮬레이션 데이터 세트가 Q = 4개의 동시 벡터로 이루어져 있다고 가정하겠습니다.

p1=[12],p2=[21],p3=[23],p4=[31]

동시 벡터는 신경망에 단일 행렬로 입력됩니다.

P = [1 2 2 3; 2 1 3 1];

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

A = net(P)
A =
     5     4     8     5

동시 벡터로 구성된 단일 행렬이 신경망에 입력되고, 신경망은 동시 벡터로 구성된 단일 행렬을 출력값으로 생성합니다. 4개의 신경망이 병렬로 동작하고 각 신경망이 입력 벡터를 하나씩 받아서 출력값을 하나씩 생성하더라도 결과는 동일할 것입니다. 입력 벡터가 서로 상호 작용하지 않으므로 순서는 중요하지 않습니다.

동적 신경망에서 순차 입력값을 사용한 시뮬레이션

신경망에 지연이 있는 경우, 일반적으로 신경망에 대한 입력값은 특정 시간 순서로 발생하는 입력 벡터 시퀀스가 됩니다. 이 사례를 설명하기 위해, 다음 그림에서는 하나의 지연을 포함하는 단순한 신경망을 보여줍니다.

다음은 이 신경망을 만드는 명령입니다.

net = linearlayer([0 1]);
net.inputs{1}.size = 1;
net.layers{1}.dimensions = 1;
net.biasConnect = 0;

가중치 행렬을 W = [1 2]로 할당합니다.

명령은 다음과 같습니다.

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

입력 시퀀스는 다음과 같다고 가정하겠습니다.

p1=[1],p2=[2],p3=[3],p4=[4]

순차 입력값은 신경망에 셀형 배열의 요소로 입력됩니다.

P = {1 2 3 4};

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

A = net(P)
A = 
    [1]    [4]    [7]    [10]

입력 시퀀스를 포함하는 셀형 배열을 입력하면 신경망은 출력 시퀀스를 포함하는 셀형 배열을 생성합니다. 입력값이 시퀀스로 입력될 때는 순서가 중요합니다. 이 경우에는 현재 출력값은 현재 입력값에 1을 곱하고 직전 입력값에 2를 곱한 다음 결과를 합하여 얻은 것입니다. 만약 입력값의 순서를 변경한다면 출력값에서 구해지는 수치가 변경될 것입니다.

동적 신경망에서 동시 입력값을 사용한 시뮬레이션

동일한 입력값을 입력값 시퀀스가 아니라 동시 입력값 세트로 적용하면 완전히 다른 응답 변수를 얻게 됩니다. (동적 신경망에서 이렇게 해야 할 이유는 딱히 없다고 할 수 있습니다.) 마치 각 입력값이 별도의 병렬 신경망에 동시에 적용된 것과 마찬가지일 것입니다. 이전 예제 동적 신경망에서 순차 입력값을 사용한 시뮬레이션에서 동시 입력값 세트를 사용한다면 입력값은 다음과 같습니다.

p1=[1],p2=[2],p3=[3],p4=[4]

이는 다음 코드를 사용하여 만들 수 있습니다.

P = [1 2 3 4];

동시 입력값을 사용하여 시뮬레이션하면 다음과 같은 결과를 얻습니다.

A = net(P)
A =
     1     2     3     4

결과는 각 입력값을 별도의 신경망에 동시에 적용하여 하나의 출력값을 계산한 경우와 동일합니다. 신경망 지연에 어떤 초기 조건도 할당하지 않았으므로 초기 조건은 0으로 가정되었습니다. 이 경우에는 현재 입력값에 곱해지는 가중치가 1이기 때문에 출력값은 1에 입력값을 곱한 것입니다.

어떤 특수한 경우에는 여러 개의 서로 다른 시퀀스에 대해 동시에 신경망 응답을 시뮬레이션해야 할 수도 있습니다. 이때는 동시에 발생하는 시퀀스 세트를 신경망에 입력해야 할 것입니다. 예를 들어, 신경망에 다음과 같은 2개의 시퀀스를 입력하려고 한다고 가정하겠습니다.

p1(1)=[1],p1(2)=[2],p1(3)=[3],p1(4)=[4]p2(1)=[4],p2(2)=[3],p2(3)=[2],p2(4)=[1]

입력값 P는 동시에 발생하는 두 시퀀스의 요소 2개를 각 요소로 가지는 셀형 배열이어야 합니다.

P = {[1 4] [2 3] [3 2] [4 1]};

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

A = net(P);

결과로 생성되는 신경망 출력값은 다음과 같습니다.

A = {[1 4] [4 11] [7 8] [10 5]}

여기서 볼 수 있듯이 각 행렬의 첫 번째 열은 앞 예제에서 사용되었던 첫 번째 입력 시퀀스에 의해 생성된 출력 시퀀스를 구성합니다. 각 행렬의 두 번째 열은 두 번째 입력 시퀀스에 의해 생성된 출력 시퀀스를 구성합니다. 이 둘의 동시 시퀀스 간에는 상호 작용이 없습니다. 마치 각 시퀀스가 병렬로 실행되는 별도의 신경망에 각각 적용된 것과도 같습니다.

다음 도식은 시간 스텝이 TS인 동시 시퀀스가 Q개 있을 때 신경망 입력값 P의 일반적인 형식을 보여줍니다. 이 도식은 입력 벡터가 1개인 모든 경우를 다룹니다. 셀형 배열의 각 요소는 동시 벡터로 구성된 행렬로서, 각 시퀀스의 동일한 시점에 대응됩니다. 입력 벡터가 여러 개 있다면 셀형 배열에는 복수의 행을 가지는 행렬이 포함될 것입니다.

이 항목에서는 순차적이고 동시적인 입력값을 동적 신경망에 적용했습니다. 정적 신경망에서 동시 입력값을 사용한 시뮬레이션에서는 정적 신경망에 동시 입력값을 적용했습니다. 정적 신경망에 순차 입력값을 적용하는 것도 가능합니다. 이렇게 해도 신경망의 시뮬레이션된 응답은 변경되지 않지만, 신경망이 훈련되는 방식에는 영향을 줄 수 있습니다. 이러한 점은 신경망 훈련 개념에서 더 명확하게 알 수 있습니다.

얕은 신경망의 입력값과 출력값 구성하기 항목도 참조하십시오.