Colab으로 하루에 하나씩 딥러닝

클러스터링_3.자기 조직화 지도 본문

딥러닝_개념

클러스터링_3.자기 조직화 지도

Elleik 2023. 1. 31. 23:59
728x90

자기 조직화 지도(Self-Organizing Map, SOM)

  • 신경 생리학적 시스템을 모델링
  • 입력 패턴에 대해 정확한 정답을 주지 않고 스스로 학습함

자기 조직화 지도 진행 과정

1. 초기화(Initialization)

  • 모든 연결 가중치는 작은 임의의 값으로 초기화

2. 경쟁(Competition) 

  • 경쟁 학습을 이용하여 입력층과 경쟁층을 연결
  • '승자 독점' 방식 사용: 연결 강도 벡터가 입력 벡터와 얼마나 가까운지 계산하여 가까운 뉴런이 승리
  • 연결 강도 벡터와 입력 벡터가 가장 가까운 뉴런으로 계산되면 그 뉴런의 이웃 뉴런들도 학습을 하게 되는데, 이때 모든 뉴런이 아닌 제한된 이웃 뉴런들만 학습함

3. 협력(Cooperation)

  • 승자 뉴런은 네트워크에서 가장 좋은 공간 위치를 차지하게 되며, 승자와 함께 학습할 이웃 크기를 정의함

4. 적응(Adaption)

  • 승리한 뉴런의 가중치와 이웃 뉴런을 업데이트

자기 조직화 지도 실습

### Minisom 라이브러리 설치

!pip install minisom

Minisom 라이브러리 설치 완료


### 라이브러리 호출 및 데이터셋 내려받기

import numpy as np
from sklearn.datasets import load_digits
from minisom import MiniSom
from pylab import plot, axis, show, pcolor, colorbar, bone

digits = load_digits()  # 숫자 필기 이미지 데이터셋 내려받기
data = digits.data  # 훈련 데이터셋
labels = digits.target  # 정답(레이블)

### 훈련 데이터셋을 MiniSom 알고리즘에 적용

som = MiniSom(16, 16, 64, sigma=1.0, learning_rate=0.5) # 설명 1
som.random_weights_init(data)
print("SOM 초기화")
som.train_random(data, 10000)
print("\n. SOM 진행 종료")

bone()
pcolor(som.distance_map().T)
colorbar()

MiniSom 알고리즘에 적용한 결과

상세 설명

  • MiniSom은 시각화 기능이 거의 없는 SOM을 구현할 수 있는 라이브러리
    • 16: SOM에서 x축에 대한 차원
    • 16: SOM에서 y축에 대한 차원
    • 64: 입력 벡터 개수
    • sigma=1.0: 이웃 노드와의 인접 반경
    • learning_rate=0.5: 한번 학습할 때 얼마큼 변화를 주는지에 대한 상수

### 클래스에 대해 레이블 설정 및 색상 할당

labels[labels=='0'] = 0
labels[labels=='1'] = 1
labels[labels=='2'] = 2
labels[labels=='3'] = 3
labels[labels=='4'] = 4
labels[labels=='5'] = 5
labels[labels=='6'] = 6
labels[labels=='7'] = 7
labels[labels=='8'] = 8
labels[labels=='9'] = 9

markers = ['o', 'v', '1', '3', '8', 's', 'p', 'x', 'D', '*']
colors = ['r', 'g', 'b', 'y', 'c', (0,0.1,0.8), (1,0.5,0), (1,1,0.3), 'm', (0.4,0.6,0)]
for cnt, xx in enumerate(data): # 시각화 처리
  w = som.winner(xx)  # 승자(우승 노드) 식별
  plot(w[0]+.5, w[1]+.5, markers[labels[cnt]],  # 설명 1
       markerfacecolor='None', markeredgecolor=colors[labels[cnt]],
       markersize=12, markeredgewidth=2)
show()

실행 결과에 레이블과 색상 할당

상세 설명

  • BMU(Best Matching Unit)을 이용하여 승자를 식별하고 클래스별로 마커를 플로팅함
  • BMU는 MiniSom 알고리즘을 이용해서 모든 가중치 벡터의 데이터 공간에서 유클리드 거리를 측정해서 승자를 식별

 

참고: 서지영, 『딥러닝 텐서플로 교과서』, 길벗(2022)