우와 오랜만에 포스팅이다. 포스팅하면 좋은 것이... 할 때는 귀찮아도 나중에 오랫동안 생각 안해서 까먹고 있어도 되세길 거리가 있다는 것이 좋다. 그것도 내가 쓴 것이라 눈에 더 잘 들어온다는 장점도 있고. 아무튼!! 포스팅해보자.


오늘은 Self Organizing Map에 대해서 이야기하련다. SOM이라고 부른다. 우리가 기본적으로 Artificial Neural Network하면 Clustering보다는 Classification이 먼저 떠오른다. Artificial Neural Network를 이용해서도 Clustering을 할 수 있는데 그것이 SOM이다. SOM을 이용하면 high-dimension data를 low-dimension data로(1D, 2D, 또는 3D)표현할 수도 있는데 이는 포스팅을 읽으면 자연스렇게 알게 될 것이다.


우선 이해하기 쉽게 이렇게 설명해보자. 아래와 같이 농구골대가 여러개 있다고 해보자.


A선수는 슛을 쏠 때 슛이 길고 왼쪽으로 치우치는 경향이 있어서 보통 n1, n2골대에 공이 들어간다. 


반면, B선수는 슛이 짧고 오른쪽으로 치우치는 경향이 있어서 n15, n16 골대에 많이 들어간다. 


이제 A와 B선수 둘 중 아무나 랜덤으로 공을 던지고 우리는 누가 던졌는지 알아맞추기 놀이를 해보자. 한 사람이 10번 던졌는데 그 중 9번이 n1, n2 골대에 들어갔다. 누가 던졌을까? A가 던졌을 것이다. n1, n2는 A의 영역이니까. 


이런식으로 Clustering을 하는 것이다. 이제 조금더 이론적으로 이야기해보자. 우선 neuron을(농구골대) N개 만들어두자. 그리고 우리가 D개의 data가 있다고 해보자. 그 중에 sample로 몇개를(s개) 뽑아서 모든 neuron의 거리를 젤 것이다. 하나의 data에 대하여 모든 neuron간의 거리이다. (반대로 혼동하지 말자.) 그림으로 표현하면 아래와 같다.

data와 neuron 사이의 거리는 더 자세하게 말하면 data와 neuron의 weight 간의 거리이다. 각각의 neuron이 weight을 가지고 있는데 그 weight과 data간의 거리를 구한다는 말이다. 거리를 구하는 공식은 일반적으로 euclidean distance를 많이 쓰는데, 이 말은 data와 neuron의 weight은 같은 dimension을 가지고 있다는 뜻이다. 그렇다!! SOM에서 data와 neuron의 weight은 같은 dimension을 가져야 한다. 거리를 구해야 하기 때문이다. 하나의 데이터 d1과 모든 neuron의 weight 사이의 거리를 구하면 아래와 같이 나온다고 해보자. 우리는 그 중에서 제일 가까운 neuron만 update해줄 것이다. 이렇게 제일 가까운 neuron을 Best Matching Unit(BMU)라고 부른다.

BMU를 update 해주는 공식은 어디서 많이 본 공식이다. 이거는 Artificial Neural Network에서 각각의 weight이 update될 때 사용되는 공식이다. 


지금까지의 과정을 모든 sample S개에 대해서 반복을 하고 또 다시 Sample집단을 뽑아서 위의 과정을 계속 반복하는 것이 SOM이 training되는 방식이다.


여기에서 한 가지 이야기 안한 것이 있다면, neighbor에 대한 이야기이다. 하나의 data에 대하여 모든 neuron 간의 거리를 구하여 BMU를 구한 상황에서 BMU 하나만 update 시킨다고 했었는데, 사실 BMU의 neighbor들도 같이 update 해줘야 된다.


BMU의 neighbor은 말 그대로 neighbor이다. neuron이 아래와 같이 1차원으로 줄 지어져 있으면 neighbor은 양쪽 옆의 neuron들이고


neuron이 2차원으로 줄 지어져있으면 neighbor은 상하좌우 neuron들이다.


neighbor을 training시켜주는 공식은 위에서 설명한 update 공식과 같은데, 한가지 추가하자면 neighbor이니까 살짝 덜 update시키기 위해서 특정 공식을 아래와 같이 곱해준다.


위 공식은 각자 찾아보는 것으로 하자. 위 공식을 통해서 neighbor들이 살짝 덜 update된다는 것만 알면 된다. 폭탄이 터지면 그 주변부의 피해가 덜 하다는 것과 비슷한 논리다.


이 포스팅 시작할 때 SOM의 장점 중 하나가 high dimension data를 low dimension data로 변환해주는 것이라고 했다. 이제 이 말이 무슨 말인지 알 것이다. 정확히 말하면 변환해주는 것이 아니라, 각각의 data가 어떤 neuron과 가장 가까운지를 영역상으로 counting해준 것 뿐이다. low dimension에서의 low의 의미는 neuron들이 1D로 배열되어있으면 1D로(low), 2D로 배열되어있으면 2D로(low) counting 해준다는 것이다.


위의 사진에서 보면 몇몇 neuron들이 다른 neuron들보다 높게 솟아있다. 주어진 input data(high dimension)을 각각의 neuron과 거리를 비교하고 제일 가까운 neuron를 찾아서 그 neuron을 한칸 한칸 쌓아 올리는 것이다. 이런 의미에서의 high to low dimension transformation이다.


Clustering에서 중요한 것 중에 하나가 Visualization이다. SOM을 visualization하는 여러가지 방법이 있는데, 그 중에서 가장 많이 쓰이는 것이 u-matrix이다. unified distance matrix의 약자이다. u-matrix는 neighbor neuron들간의 거리를(정확히 말하면 각 neuron의 weight들 간의 거리) 측정하여 서로 거리가 멀면 밝은 색깔로, 서로 거리가 가까우면 어두운 색깔로 나타내는 것이다. 

위의 그림에서 우리는 3개의 cluster를 찾을 수 있다. 왼쪽 하단에 빨간 동그라미 하나, 오른쪽 하단에 초록 네모 하나 그리고 완전 오른쪽 하단에 파란 다이아 하나. 이렇게 3개이다. 그런데 왼쪽 상단부분이 아주 밝은 것을 볼 수 있다. 그 부분의 neuron들이 거리가 길다는 것이다. 따라서 이상적으로는 아래와 같이 clustering되면 아주 좋겠다.


실제로 c1과 c2영역에 data가 있어서 그렇게 나눠지면 아주 이상적인 clustering이 된다. cluster들 사이의 길이가 크고, 각각의 cluster 내부의 data는 똘똘 뭉쳐있으니까. 그런데 실제로 c1과 c2영역에는 data가 없다. 그래서 c3영역에 일정 페턴을 가지고 뭉친것이다. 그 일정 페턴이라는 것이... 빨간동그라미는 왼쪽 하단, 초록네모는 오른쪽하단 전체, 파란다이아는 오른쪽 하단끝이라는 것이다. 결국 초록네모와 파란다이아의 영역이 겹치기 때문에 좋은 clustering은 아니라는 뜻이다.


별로 어렵지도 않은 내용이었는데 제대로 이해하는데 쪼금 걸렸다. 아무튼 여기까지가 SOM 설명이다. 다음 포스팅은 Convolutional neural network나 Bayesian network가 됐으면 하는데 그게 언제가 될까...

Posted by 빛나유
,