Main Content

얕은 다층 신경망 생성, 구성 및 초기화하기

이 항목에서는 일반적인 얕은 다층 신경망 워크플로의 일부를 보여줍니다. 자세한 내용과 그 밖의 단계는 얕은 다층 신경망과 역전파 훈련 항목을 참조하십시오.

데이터를 수집했다면 신경망 훈련의 다음 단계는 network 객체를 만드는 것입니다. 함수 feedforwardnet은 다층 피드포워드 신경망을 만듭니다. 이 함수를 입력 인수 없이 호출하면 구성되지 않은 디폴트 network 객체가 생성됩니다. 그 결과 생성되는 신경망은 configure 명령을 사용하여 구성할 수 있습니다.

한 가지 예로, 파일 bodyfat_dataset.mat는 입력 벡터와 목표 벡터로 구성된 미리 정의된 세트를 포함합니다. 입력 벡터는 사람들의 신체적 특성과 관련 있는 데이터를 정의하고, 목표값은 사람들의 체지방률을 정의합니다. 다음 명령을 사용하여 데이터를 불러옵니다.

load bodyfat_dataset

이 파일을 불러오면 변수 2개가 생성됩니다. 입력 행렬 bodyfatInputs는 252명의 신체적 특성 변수 13개로 구성된 열 벡터 252개로 이루어져 있습니다. 목표 행렬 bodyfatTargets는 이에 대응되는 252개의 체지방률로 이루어져 있습니다.

다음 단계는 신경망을 만드는 것입니다. 이어서 feedforwardnet을 호출하면 은닉 계층에 10개의 뉴런이 있는 2계층 신경망이 생성됩니다. (구성 단계 중에 출력 계층의 뉴런 개수가 각 목표 벡터의 요소 개수인 1로 설정됩니다.)

net = feedforwardnet;
net = configure(net, bodyfatInputs, bodyfatTargets);

feedforwardnet에 선택적 인수를 제공할 수 있습니다. 예를 들어, 첫 번째 인수는 각 은닉 계층의 뉴런 개수를 포함하는 배열입니다. (디폴트 설정은 10으로, 이는 10개의 뉴런이 있는 은닉 계층 1개를 의미합니다. 은닉 계층 1개는 일반적으로 뛰어난 결과를 생성하지만, 1개를 사용한 결과가 충분하지 않다면 2개의 은닉 계층을 시도하는 것이 좋습니다. 은닉 계층의 뉴런 개수를 늘리면 신경망의 성능은 높아지지만 더 많은 계산이 필요하며 과적합을 생성할 가능성이 커집니다.) 두 번째 인수는 사용할 훈련 함수의 이름을 포함합니다. 아무런 인수도 제공하지 않을 경우 디폴트 계층 개수는 2이고 은닉 계층의 디폴트 뉴런 개수는 10이고 디폴트 훈련 함수는 trainlm입니다. 은닉 계층에 대한 디폴트 전달 함수는 tansig이고 출력 계층에 대한 디폴트 전달 함수는 purelin입니다.

configure 명령은 network 객체를 구성하며, 이에 더해 신경망의 가중치와 편향을 초기화하므로 신경망이 훈련을 시작할 준비가 됩니다. 가중치를 다시 초기화하거나 사용자 지정 초기화를 수행해야 하는 경우가 있습니다. 가중치 초기화하기(init)에서 초기화 프로세스에 대해 자세히 설명합니다. 구성 단계를 건너뛰고 곧바로 신경망 훈련으로 넘어갈 수도 있습니다. train 명령을 사용하면 자동으로 신경망이 구성되고 가중치가 초기화됩니다.

그 밖의 관련 아키텍처

2계층 피드포워드 신경망은 어떠한 입력-출력 관계도 학습할 수 있지만 더 많은 계층을 갖는 피드포워드 신경망은 복잡한 관계를 더 빠르게 학습할 수 있습니다. 대부분의 문제에서는 2계층으로 시작한 다음 2계층의 성능이 만족스럽지 않다면 3계층으로 늘리는 것이 좋습니다.

함수 cascadeforwardnet은 캐스케이드 포워드 신경망을 만듭니다. 캐스케이드 포워드 신경망은 피드포워드 신경망과 비슷하나, 입력값에서 각 계층까지, 그리고 각 계층에서 후속 계층까지 가중 연결이 있다는 점이 다릅니다. 예를 들어, 3계층 신경망의 경우 계층 1에서 계층 2까지, 계층 2에서 계층 3까지, 그리고 계층 1에서 계층 3까지 연결이 있습니다. 3계층 신경망에는 입력값에서 각 계층까지도 연결이 있습니다. 이러한 추가적인 연결은 신경망이 원하는 관계를 학습하는 속도를 높일 수 있습니다.

함수 patternnet은 마지막 계층에서 tansig 전달 함수를 사용한다는 점만 제외하면 feedforwardnet과 매우 유사한 신경망을 만듭니다. 이 신경망은 주로 패턴 인식 문제에 사용됩니다. 다른 신경망의 경우 동적 관계 또는 시계열 관계를 학습할 수 있습니다.

가중치 초기화하기(init)

피드포워드 신경망을 훈련시키기 전에 먼저 가중치와 편향을 초기화해야 합니다. configure 명령은 자동으로 가중치를 초기화하지만, 그럼에도 다시 초기화해야 할 수 있습니다. 이 경우 init 명령을 사용합니다. 이 함수는 network 객체를 입력값으로 받아서 모든 가중치와 편향이 초기화된 신경망을 반환합니다. 다음은 신경망 초기화(또는 다시 초기화) 방법입니다.

net = init(net);