Main Content

방사형 기저 신경망

뉴런 모델

다음은 입력값이 R개인 방사형 기저 신경망입니다.

radbas 뉴런의 순 입력값에 대한 표현이 다른 뉴런의 순 입력값에 대한 표현과 다른 것을 볼 수 있습니다. radbas 전달 함수의 순 입력값은 가중 벡터 w와 입력 벡터 p 사이의 벡터 거리에 편향 b를 곱한 것입니다. (이 그림에서 || dist || 상자는 입력 벡터 p와 단일 행 입력 가중치 행렬을 받아서 그 둘의 내적을 생성합니다.)

방사형 기저 뉴런의 전달 함수는 다음과 같습니다.

radbas(n)=en2

radbas 전달 함수의 플롯은 다음과 같습니다.

방사형 기저 함수는 입력값이 0일 때 최댓값 1을 갖습니다. wp 사이의 거리가 줄어들면 출력값이 늘어납니다. 따라서 방사형 기저 뉴런은 입력값 p가 가중 벡터 w와 동일할 때마다 1을 생성하는 검출기로 동작합니다.

편향 b는 radbas 뉴런의 민감도를 조정할 수 있도록 해 줍니다. 예를 들어, 뉴런의 편향이 0.1이라면 이 뉴런은 가중 벡터 w에서의 벡터 거리 8.326(0.8326/b)에 있는 모든 입력 벡터 p에 대해 0.5를 출력합니다.

신경망 아키텍처

방사형 기저 신경망은 S1개의 뉴런으로 구성된 하나의 은닉 방사형 기저 계층과 S2개의 뉴런으로 구성된 하나의 출력 선형 계층으로 이루어집니다.

이 그림에서 || dist || 상자는 입력 벡터 p와 입력 가중치 행렬 IW1,1을 받아서 S1개의 요소를 갖는 벡터를 생성합니다. 요소는 입력 벡터와, 입력 가중치 행렬의 행으로부터 형성된 벡터 iIW1,1 사이의 거리입니다.

편향 벡터 b1|| dist ||의 출력값은 요소별 곱셈을 수행하는 MATLAB® 연산 .*을 사용하여 결합됩니다.

피드포워드 신경망 net의 첫 번째 계층의 출력값은 다음 코드를 사용하여 얻을 수 있습니다.

a{1} = radbas(netprod(dist(net.IW{1,1},p),net.b{1}))

다행히 이런 코드를 직접 작성할 필요는 없습니다. 이 신경망을 설계하는 데 필요한 모든 세부 사항은 설계 함수 newrbenewrb에 내장되어 있으며, sim을 사용하여 출력값을 얻을 수 있습니다.

입력 벡터 p를 신경망에 통과시켜 출력값 a2를 구해보면 이 신경망이 어떻게 동작하는지 파악할 수 있습니다. 이러한 신경망에 입력 벡터를 하나 입력하면 방사형 기저 계층의 각 뉴런은 입력 벡터가 각 뉴런의 가중 벡터와 얼마나 가까운지에 따라 값을 출력합니다.

따라서 입력 벡터 p와 현저히 다른 가중 벡터를 갖는 방사형 기저 뉴런은 0에 가까운 출력값을 갖습니다. 이처럼 작은 출력값은 선형 출력 뉴런에 미미한 영향만을 줍니다.

반면 입력 벡터 p와 가까운 가중 벡터를 갖는 방사형 기저 뉴런은 1에 가까운 값을 생성합니다. 뉴런이 출력값 1을 갖는 경우, 두 번째 계층의 출력 가중치는 두 번째 계층의 선형 뉴런으로 값을 전달합니다.

만약 오직 하나의 방사형 기저 뉴런만이 출력값 1을 가지며 다른 모든 뉴런이 출력값 0(또는 0에 매우 가까운 출력값)을 갖는다면 선형 계층의 출력값은 활성 뉴런의 출력 가중치가 됩니다. 그러나 이는 매우 극단적인 경우입니다. 보통은 항상 몇 개의 뉴런이 다양한 수준으로 발화되고 있습니다.

이번에는 첫 번째 계층이 어떻게 동작하는지 자세히 살펴보겠습니다. 각 뉴런의 가중 입력값은 입력 벡터와 그 가중 벡터 사이의 거리로, dist를 사용하여 계산됩니다. 각 뉴런의 순 입력값은 가중 입력값과 그 편향의 요소별 곱으로, netprod를 사용하여 계산됩니다. 각 뉴런의 출력값은 radbas를 통과한 순 입력값입니다. 뉴런의 가중 벡터가 (전치된) 입력 벡터와 동일하다면 가중 입력값은 0이고 순 입력값은 0이고 출력값은 1입니다. 뉴런의 가중 벡터가 입력 벡터에서 spread의 거리라면 가중 입력값은 spread이고 순 입력값은 sqrt(−log(.5))(또는 0.8326)이므로 출력값은 0.5입니다.

정확한 설계(newrbe)

함수 newrbe를 사용하여 방사형 기저 신경망을 설계할 수 있습니다. 이 함수는 훈련 벡터에 대해 오차가 없는 신경망을 생성할 수 있습니다. 이 함수는 다음과 같은 방법으로 호출됩니다.

net = newrbe(P,T,SPREAD)

함수 newrbe는 입력 벡터 P로 구성된 행렬과 목표 벡터 T로 구성된 행렬 그리고 방사형 기저 계층의 산포 상수 SPREAD를 받습니다. 그런 다음 입력값이 P일 때 출력값이 정확히 T가 되도록 하는 가중치와 편향을 갖는 신경망을 반환합니다.

함수 newrbeP의 입력 벡터 개수와 동일한 개수의 radbas 뉴런을 만들고 첫 번째 계층 가중치를 P'로 설정합니다. 따라서 radbas 뉴런으로 구성된 계층이 존재하게 되며 각 뉴런은 서로 다른 입력 벡터에 대한 검출기로 기능합니다. 입력 벡터가 Q개이면 뉴런도 Q개가 됩니다.

첫 번째 계층의 각 편향은 0.8326/SPREAD로 설정됩니다. 이로 인해 가중 입력값 +/− SPREAD에서 0.5를 지나는 방사형 기저 함수가 생성됩니다. 이를 통해 입력 공간에서 각 뉴런이 반응하는 영역의 너비가 결정됩니다. SPREAD가 4이면 각 radbas 뉴런은 가중 벡터에서의 벡터 거리가 4 이내인 모든 입력 벡터에 대해 0.5 이상으로 반응합니다. SPREAD는 뉴런이 입력 공간의 중첩 영역에 강하게 반응할 수 있도록 충분히 커야 합니다.

두 번째 계층 가중치 IW 2,1(코드에서는 IW{2,1})과 편향 b2(코드에서는 b{2})는 첫 번째 계층 출력값 1(A{1})을 시뮬레이션한 후 다음 선형 방정식을 풀어서 구합니다.

[W{2,1} b{2}] * [A{1}; ones(1,Q)] = T

두 번째 계층의 입력값(A{1})과 목표값(T)을 알고 있고 계층이 선형입니다. 다음 코드를 사용하여 두 번째 계층의 가중치와 편향을 계산해 오차 제곱합을 최소화할 수 있습니다.

Wb = T/[A{1}; ones(1,Q)]

여기서 Wb는 가중치와 편향을 모두 포함하며, 편향은 마지막 열에 있습니다. 오차 제곱합은 아래에서 설명하듯이 항상 0입니다.

C개의 제약 조건(입력값/목표값 쌍)을 가진 문제가 하나 있습니다. 각 뉴런은 C+1개의 변수(C개의 radbas 뉴런으로부터 나온 C개의 가중치와 1개의 편향)를 가집니다. 제약 조건이 C개이고 변수가 C개를 넘는 선형 문제에는 오차 없는 해가 무한 개 있습니다.

따라서 newrbe는 훈련 벡터에 대해 오차가 없는 신경망을 만듭니다. 이때 요구되는 유일한 조건은 SPREAD가 충분히 큰 값이 되도록 하여 radbas 뉴런의 활성 입력 영역이 충분히 중첩되게끔 하는 것입니다. 그렇게 해야 언제든지 항상 몇 개의 radbas 뉴런이 상당히 큰 출력값을 가질 수 있습니다. 이는 신경망 함수를 더 매끄럽게 만들고, 설계에서 사용된 입력 벡터 사이에 발생하는 새 입력 벡터에 대해 더 나은 일반화 결과를 도출할 수 있습니다. (그러나 각 뉴런이 실질적으로 입력 공간의 큰 영역과 동일하게 대응될 만큼 SPREAD가 커서는 안 됩니다.)

newrbe의 단점은 입력 벡터 개수와 동일한 개수의 은닉 뉴런을 갖는 신경망을 생성한다는 것입니다. 이러한 이유 때문에 신경망을 올바르게 정의하기 위해 많은 입력 벡터가 필요한 상황이라면 (이런 경우 대부분 그렇듯이) newrbe가 수용 가능한 해를 반환하지 않습니다.

보다 효율적인 설계(newrb)

함수 newrb는 한 번에 하나의 뉴런씩 반복적으로 방사형 기저 신경망을 만듭니다. 뉴런은 오차 제곱합이 오차 목표 밑으로 내려가거나 최대 뉴런 개수에 도달할 때까지 신경망에 추가됩니다. 이 함수는 다음과 같이 호출합니다.

net = newrb(P,T,GOAL,SPREAD)

함수 newrb는 입력 벡터 P의 행렬과 목표 벡터 T의 행렬 그리고 설계 파라미터 GOALSPREAD를 받습니다. 그런 다음 원하는 신경망을 반환합니다.

newrb의 설계 방법은 newrbe의 설계 방법과 비슷합니다. newrb는 뉴런을 한 번에 하나씩 만든다는 점이 다릅니다. 각 반복에서, 신경망 오차를 가장 크게 낮춘 입력 벡터가 radbas 뉴런을 만드는 데 사용됩니다. 새 신경망의 오차가 확인되고, 오차가 충분히 낮으면 newrb가 종료됩니다. 그렇지 않으면 다음 뉴런이 추가됩니다. 오차 목표가 달성되거나 최대 뉴런 개수에 도달할 때까지 이 과정이 반복됩니다.

newrbe에서와 마찬가지로, 산포 파라미터의 크기가 radbas 뉴런이 입력 공간의 중첩 영역에 반응할 만큼 충분히 크면서 동시에 모든 뉴런이 사실상 동일하게 반응할 정도로 지나치게 크지는 않게 하는 것이 중요합니다.

표준 피드포워드 신경망 대신 항상 방사형 기저 신경망을 사용하지 않는 이유는 무엇일까요? 방사형 기저 신경망은 newrbe를 사용하여 효율적으로 설계된 경우에도 은닉 계층에 tansig 또는 logsig 뉴런이 있는 동급의 피드포워드 신경망보다 몇 배나 더 많은 수의 뉴런을 갖는 경향이 있습니다.

이는 시그모이드 뉴런이 입력 공간의 큰 영역에 걸쳐 출력값을 가질 수 있는 반면 radbas 뉴런은 입력 공간의 상대적으로 작은 영역에만 반응하기 때문입니다. 따라서 (입력값의 개수와 입력값이 분포되는 범위의 측면에서) 입력 공간이 크면 클수록 radbas 뉴런이 더 많이 필요합니다.

다른 한편으로는, 방사형 기저 신경망을 설계하는 데는 시그모이드/선형 신경망을 훈련시키는 것보다 훨씬 시간이 적게 걸리며, 때로는 결과적으로 더 적은 수의 뉴런이 사용되기도 합니다. 이는 다음 예제에서 볼 수 있습니다.

예제

예제 방사형 기저 근사에서는 함수를 피팅하는 데 방사형 기저 신경망이 어떻게 사용되는지 보여줍니다. 여기서는 5개의 뉴런만 사용하여 문제를 풉니다.

예제 Radial Basis Underlapping Neurons 항목과 Radial Basis Overlapping Neurons 항목에서는 산포 상수가 방사형 기저 신경망의 설계 절차에 어떤 영향을 주는지 살펴봅니다.

Radial Basis Underlapping Neurons에서는 방사형 기저 근사 항목과 동일한 문제를 풀기 위해 방사형 기저 신경망을 설계합니다. 단, 이번에는 산포 상수 0.01이 사용됩니다. 따라서 각 방사형 기저 뉴런은 가중 벡터에서의 거리가 0.01 이상인 모든 입력 벡터에 대해 0.5 이하를 반환합니다.

훈련 입력값의 간격은 0.1이므로 하나의 입력값에 대해 강한 출력값을 갖는 방사형 기저 뉴런이 둘 이상 존재하지 않습니다.

Radial Basis Underlapping Neurons 항목은 산포 상수가 너무 작으면 설계에서 사용된 입력/목표 벡터로부터 일반화되지 않는 해가 구해질 수 있음을 보여줍니다. 예제 Radial Basis Overlapping Neurons 항목은 그 반대의 문제를 보여줍니다. 산포 상수가 충분히 크면 방사형 기저 뉴런은 신경망을 설계하는 데 사용된 모든 입력값에 대해 (1.0에 가까운) 큰 값을 출력합니다.

모든 방사형 기저 뉴런이 항상 1을 출력한다면 신경망에 입력되는 모든 정보가 손실됩니다. 입력값이 무엇이든 간에 두 번째 계층은 1을 출력합니다. 함수 newrb는 신경망을 찾으려고 시도하지만, 이 상황에서 발생하는 수치적 문제 때문에 찾지 못합니다.

여기서 깨달을 수 있는 점은 양질의 일반화를 얻기 위해 인접한 입력 벡터 사이의 거리보다 큰 산포 상수를 선택하되 전체 입력 공간을 가로지르는 거리보다는 작게 선택해야 한다는 것입니다.

이 문제에서는 입력값 사이의 간격인 0.1보다 크고 왼쪽 끝에 있는 입력값과 오른쪽 끝에 있는 입력값 사이의 거리인 2보다 작은 산포 상수를 선택해야 할 것입니다.