Self Organizing Maps

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS
SelfOrganizingMaps 방법은 "Kohonen feature map"으로도 알려져 있으며, 높은 차원의 데이타(high-dimensional data)를 시각화(visualization)시키는 "artificial neural network algorithm" 으로서 "unsupervised learning" 의 일종이다.

이 알고리즘의 주된 활용은 데이터의 Clustering을 하면서, 시각화하기 쉬운 2차원의 표시(display)를 얻는 것이다.

먼저 'node'에 대한 geometry를 선택하고, 이것의 node 는 k-dimensional space 로 mapping 된다. 각각의 반복(iteration)에 랜덤하게 data point P를 고르고 node를 P의 방향으로 이동한다. 가장 가까운 노드는 가장 많이 움직이고 다른 노드는 보다 적게 움직인다. 이러한 방법에서 처음의 geometry에서 인접한 점들은 k-dimensional space에서 인접한 점으로 mapping 되는 경향이 있다. 이 과정은 20,000-50,000 번의 반복을 요한다.

이 방법은 "training data" 의 토폴로지를 유지하는 mapping을 구성하여, 인접한 node 들은 'related' clusters 가 되는 경향이 있으며, 직사각형의 grid 에 근거한 SelfOrganizingMaps 은 인접한 구획이 비슷한 곤충을 보유하는 곤충학자의 표본장과 같다.

링크를 따라가 보시면 대강은 이해가 되실 겁니다. 실제 구현하는 것은 수식으로 보아선 좀 복잡한 듯 합니다. 지상은이 이해한 이 방법의 가장 큰 장점은 다차원적인 것을 2차원에 표시할 수 있다는 것입니다. 이것은 마치 GraphTheory에서 나오는 "Gray code" 와도 비슷한 개념이라고 이해하시면 될 듯 합니다. 인접한 것끼리는 최소한으로 다르게 배열하는 것이지요. 이로 말미암아 Clustering을 하면서 바로 옆에 있는 cluster 들끼리는 자연스럽게 비교할 수 있다는 장점이 있는 것 같습니다.

SelfOrganizingMaps은 Neural Network의 일종 변형이므로 역시 NN의 한계를 태생적으로 갖고 있습니다. Unsupervised Learning이라는 차이가 있긴 하지만. 그리고, Clustering을 할 때는 데이타의 성격에 따라 방법을 알맞게 선택해야 합니다. Decision Tree로 충분한 걸 SelfOrganizingMaps으로 하려면 어리석은 일이겠죠.

재미있는 주제라 생각되서 좀 차분히 읽어보려했는데, 사실 기본 특징-N차원의 자료를 1 혹은 2차원으로 표시 혹은 Ordering한다는 기본 아이디어와 이어지는 링크사이의 연관성을 찾기가 참 힘들었습니다. 나름대로 공부해본 결과를 간단히 정리해봅니다.

오더링을 해야되는, N차원의 데이타,X_i,i=1,...,M가 있습니다.

X_i = {x_1,x_2,...x_N}^T

이 M개의 벡터들을 2차원 평면상에 Clustering을 하고 싶은거죠. 어디에 어떤 특성을 가진 것들이 배치될 것인지는 이 2차원 평면상에 배치된 NEuron들의 초기 특성에 의해 대략(?) 정해질 수 있습니다. 각각의 Neuron들은 자신의 특성을 나타낼, X_i와 같은 차원을 갖는 벡터,m(t)와 자신의 위치를 나타내는 벡터{r_row, r_col}, 두 개의 요소-component-로 이루어져 있습니다. 즉 m(t)

m(t) = {m_1, m_2, ..., m_N ; r_row, r_col}

로 표현할 수도 있을 겁니다.

"Unsupervised Learning"이라는 것은 어떤 NEuron의 특성 벡터 m(t)_j와 그 주변의 뉴론들이 매 iteration step-즉 t-이 증가할 때마다, 각각의 Learning Step에서 사용된 입력 X_i와 닮아가도록 학습된다는 건데, 이 때 학습이 되는 것들은 입력 X_i와 가장 닮은 것과 그 주변에 위치한 것들이 됩니다.

즉 어떤 X_i가 주어졌을 때, 2차원 배열로 이루어진 각 뉴론들은 X_i와 자신의 m(t) 값을 비교해보고, 이들 중 가장 근접한 놈이 winning neuron으로 설정,let m(t)_0되고 이 neuron과 그 주위의 몇 개 뉴론,m(t)_j,j=1,2,...L,들은

m(t+1)_j = m(t)_j + h_c(X_i)(X_i-m(t)_j)

라는 규칙에 의해서 학습이 되는 겁니다.

결국 수 많은 입력을 통해 학습이 이루어지게되면, 비슷한 특성을 가진 입력들이 Neuron 배열의 한 부분에 대한 학습을 강화시켜주게되고 결국 그 부분의 NEuron은 입력과 비슷한 특성을 가지게 되는 거죠. 다른 특성이 가진 넘들은 다른 곳을 강화시키게 되고...

입력,출력 관점에서 문제를 바라보는 습관이 있는데, 처음 이 문제를 보았을 때, 무엇이 입력인지, 출력인지 종잡지를 못해서 한동안 해멨습니다. 입력은 학습을 시키는 X 들이고, 출력은 학습을 하게되는 Neuron의 배열이라고 되려나요? 일정한 정도로 학습을 수행했을 경우, 새로운 입력을 주었을 경우, Neuron의 배열은 이 입력과 가장 비슷한 부분이 강화되는 모습을, 즉 스스로 조직화하는 모습을 보여줄 수 있겠죠.

좀 더 쉬운 설명은 이게 아닐까 싶습니다.
[http]Self-Organizing-Maps-by-Tom_Germano
[http]Using_SOM...
[http]PicSOM 여기는 SOM을 이용해서 비슷한 그림을 찾아내는 예를 보여주고 있는데요, 위노나 라이더가 들어있는 그림 2장하고 여자 독사진 두 장을 더 이용해서 그림을 Ordering 일종의 Sorting을 해주더군요. 다른 위노나 라이더 사진들이 막 튀어나오더라는...

노스모크에서 많이 줏어듣고 있습니다. 고마운 맘에 한 번 적어봅니다.

Vivlavie





"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>