amazon.com

예전부터 이름만 듣고 무슨 내용인지 몰랐는데 엊그제 사이먼 헤이킨(Simon Haykin)의 <Neural Networks>(신경망) 책에서 친절하게도 한 장 짜리로(453-454쪽) 요약해준 내용을 봤습니다. 자기조직하는 본뜨기(또는 자기조직화 사상; SOM)는 임의의 차원의 연속적인 입력 공간을 1 또는 2차원의 띄엄띄엄한 출력 공간으로 본뜨되 이를 적응적으로(adaptively) 한다고 합니다. '적응적'이라는 말을 제가 써놓고도 적응이 되지 않습니다.

입력 공간의 차원을 m이라고 하면 그 공간의 한 점을 m차원 벡터 x로 나타냅니다. (벡터 표시는 일단 생략;;;) 이런 x가 많이 있다고 합시다. 출력 공간은 예를 들어 1차원 격자 위의 각 뉴런입니다. 그런데 이 각 뉴런은 입력 공간의 m차원 벡터에 대응됩니다. 처음(t=0) 각 뉴런의 벡터, 즉 w(0)의 각 요소는 랜덤하게 주어집니다. 헷갈릴 수 있는데요, 각 뉴런은 두 개의 좌표를 갖는다고 이해하면 됩니다. 하나는 m차원 입력 공간에서의 좌표(즉 w)이고 다른 하나는 1차원 출력 공간에서의 좌표(이건 i라고 부릅시다)입니다.

이제 입력 공간에서 어떤 x를 고릅니다. 이 x와 가장 가까운 w를 찾습니다. 그 w에 해당하는 뉴런이 출력 공간에서는 i라는 위치에 있다고 합시다. 이제 모든 뉴런(각 뉴런의 위치를 j라고 합니다)에 대해 다음과 같이 각 w를 업데이트합니다.

$$\vec w_j(t+1)=\vec w_j(t) + \eta(t)h_{j,i}(t)[\vec x(t)-\vec w_j(t)]$$

이런 식으로 업데이트를 되풀이할텐데 매번 x를 새로 골라야 합니다. t는 업데이트 횟수입니다. 그리고 학습률(learning rate) η와 이웃함수(neighborhood function) h는 다음과 같다고 합니다.

$$\eta(t)=\eta_0 \exp\left(-\frac{t}{\tau_2}\right),h_{j,i}(t)= \exp\left(-\frac{|j-i|^2}{2\sigma^2(t)}\right)$$

$$\sigma(t)=\sigma_0 \exp\left(-\frac{t}{\tau_1}\right)$$

업데이트를 다시 말로 풀면, 모든 뉴런의 입력 공간 좌표를 x쪽으로 접근시키되 그 접근하는 비율은 출력 공간에서 i와 가까울수록 커지고 i에서 멀어질수록 줄어든다, 그리고 업데이트를 할수록 학습률과 i의 이웃 범위(σ)도 줄어든다. 지수함수가 세 개나 나와서 지저분한데, 일단 η와 σ를 상수라고 생각합시다. 그럼 h만 남는데, 출력 공간에서 i와 가까운 뉴런일수록, 즉 i의 이웃일수록 입력 공간에서의 좌표가 x에 더 빨리 접근한다... 즉 출력 공간에서 이웃인 뉴런들이 입력 공간에서도 가까워진다, 또는 가까워지는 경향이 있다는 말입니다. 이런 성질을 '위상적인 순서를 유지한다(in a topologically ordered fashion)'고 부르는 것 같습니다(446쪽). 이렇게 x를 계속 뽑아서 업데이트하다가 더이상 눈에 띄는 변화가 생기지 않으면 중단합니다.

머리 속에 떠오르는 그림은 거대한 바다 위에서 바다속으로 (움직일 수 있는) 닻을 여러 개 내리는데 그 닻들은 하늘에 떠 있는 격자 모양의 비행체;;의 각 격자에 연결되어 있는 겁니다. 물론 밧줄이 꼬이면 귀찮아지므로 서로 통과;;;할 수 있다고 하고요. 처음에는 닻을 바다속의 랜덤한 위치(3차원 좌표공간)에 내립니다. 그리고 바다속의 어떤 지형이나 생물이나 뭐가 됐든 어떤 분포로 생각할 수 있는 대상을 정합니다. 예를 들어 보물선들이라고 하면 그 중 하나를 뽑고, 그 보물선에 가장 가까운 닻을 보물선 쪽으로 움직이되 격자에서도 가까운 닻들을 보물선 쪽으로 움직입니다. 보물선을 계속 뽑아가면서 이런 일을 충분히 오래 반복하고 나면, 각 닻이 있는 위치는 보물선들이 많이 모여 있는 영역에 있을테고 그 영역의 보물선들을 하나의 덩어리(클러스터; cluster)로 인정할 수 있습니다. 바로 옆 동네의 보물선 영역에는 또다른 닻이 내려져 있을테고 등등. 이게 맞는 그림인가요?;;;