일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 출력층
- 딥러닝
- 이미지 분류
- 텍스트 마이닝
- 프로그래머스
- 코딩테스트
- 클러스터링
- 성능 최적화
- 망각 게이트
- 임베딩
- 합성곱층
- 생성모델
- COLAB
- NLTK
- 풀링층
- 카운트 벡터
- 자연어 전처리
- 입력층
- 완전연결층
- cnn
- 과적합
- 양방향 RNN
- 원-핫 인코딩
- 시계열 분석
- 코랩
- 전이학습
- RNN
- 합성곱 신경망
- KONLPY
- 순환 신경망
Archives
- Today
- Total
Colab으로 하루에 하나씩 딥러닝
클러스터링_3.자기 조직화 지도 본문
728x90
자기 조직화 지도(Self-Organizing Map, SOM)
- 신경 생리학적 시스템을 모델링
- 입력 패턴에 대해 정확한 정답을 주지 않고 스스로 학습함
자기 조직화 지도 진행 과정
1. 초기화(Initialization)
- 모든 연결 가중치는 작은 임의의 값으로 초기화
2. 경쟁(Competition)
- 경쟁 학습을 이용하여 입력층과 경쟁층을 연결
- '승자 독점' 방식 사용: 연결 강도 벡터가 입력 벡터와 얼마나 가까운지 계산하여 가까운 뉴런이 승리
- 연결 강도 벡터와 입력 벡터가 가장 가까운 뉴런으로 계산되면 그 뉴런의 이웃 뉴런들도 학습을 하게 되는데, 이때 모든 뉴런이 아닌 제한된 이웃 뉴런들만 학습함
3. 협력(Cooperation)
- 승자 뉴런은 네트워크에서 가장 좋은 공간 위치를 차지하게 되며, 승자와 함께 학습할 이웃 크기를 정의함
4. 적응(Adaption)
- 승리한 뉴런의 가중치와 이웃 뉴런을 업데이트
자기 조직화 지도 실습
### Minisom 라이브러리 설치
!pip install 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은 시각화 기능이 거의 없는 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)
'딥러닝_개념' 카테고리의 다른 글
생성모델_2.변형 오토인코더 (0) | 2023.02.06 |
---|---|
생성모델_1.오토인코더 (0) | 2023.02.03 |
클러스터링_2.가우시안 혼합 모델 (0) | 2023.01.30 |
클러스터링_1.K-평균 군집화 (0) | 2023.01.27 |
성능 최적화_3.조기 종료를 통한 최적화 (0) | 2023.01.26 |