728x90
반응형

통계 기반 기법의 문제점

  • 통계 기반 기법은 대규모 말뭉치를 다룰 때 문제가 생긴다.
  • 현업에서 다루는 말뭉치의 어휘 수(예) 영어)는 100만을 훌쩍 넘는다.
  • 거대 행렬에 SVD는 적합하지 않다, 현실적이지 못하다.
  • 통계 기반은 말뭉치 전체의 통계(동시발생 행렬, PPMI 등)을 이용해 1회의 처리(SVD 등)만에 단어의 분산 표현을 얻지만
  • 추론 기반 기법은 신경망을 이용하는 경우 미니배치로 학습하는 것이 일반적이다.
    • 미니배치에서는 소량의 학습 샘플씩 반복해 학습하며 가중치를 갱신해간다.

 

통계기반 기법과 추론 기반 기법 비교

[그림1] 통계기반 기법과 추론 기반 기법 비교

 

  • 통계 기반은 학습 데이터 한꺼번에 처리
  • 추론 기반은 데이터의 일부를 순차적으로 처리

 

 

추론 기반 기법 개요

  • '추론'이란 주변 단어(맥락)가 주어졌을 때 "?"에 무슨 단어가 들어가는지를 추측하는 작업이다.

 

주변 단어들을 맥락으로 사용해 "?"에 들어갈 단어를 추측

[그림2] 주변 단어들을 맥락으로 사용해 "?"에 들어갈 단어를 추측

 

 

추론 기반 기법 : 맥락 입력시 모델은 각 단어의 출현 확률 출력

[그림3] 추론 기반 기법

 

 

신경망에서의 단어 처리

  • 단어를 있는 그대로 처리할 수 없으니 '고정 길이의 벡터'로 변환해야 한다.
  • 대표적 방법
    • 단어를 원핫(one-hat)표현(또는 원핫 벡터)으로 변환하는 것
    • 원핫 표현은 벡터의 원소 중 하나만 1이고 나머지는 모두 0인 벡터를 말한다.

 

입력층의 뉴런

  • 각 뉴런이 각 단어에 대응(해당 뉴런이 1이면 검은색, 0이면 흰색)

[그림4] 입력층의 뉴런

 

 

완전연결계층에 의한 변환

  • 입력층의 각 뉴런은 7개의 단어 각각에 대응(은닉층 뉴런은 3개를 준비)

[그림5] 완전연결계층에 의한 변환

 

 

완전연결계층에 의한 변환 파이썬

# 완전연결계층에 의한 변환 파이썬 

import numpy as np

c = np.array([1,0,0,0,0,0,0]) # 입력
W = np.random.randn(7,3) # 가중치
h = np.matmul(c, W) # 중간 노드

print(h)
# 단어 ID가 0인 단어를 원핫 표현으로 표현핫 다음 완전연결계층을 통과시켜 변환한다.
# 행렬의 곱은 np.matmul()이 계산해준다.

[그림6] 완전연결계층에 의한 변환 결과

 

 

# 완전연결계층에 의한 변환 파이썬 
import sys
sys.path.append('..')
import numpy as np
from layers import MatMul

c = np.array([1,0,0,0,0,0,0]) # 입력
W = np.random.randn(7,3) # 가중치
layer = MatMul(W)
h = layer.forward(c) # 중간 노드

print(h)

[그림7] 완전연결계층에 의한 변환 

 

 

 

출처 : 밑바닥부터 시작하는 딥러닝2

https://www.hanbit.co.kr/store/books/look.php?p_code=B8950212853

 

밑바닥부터 시작하는 딥러닝 2

이 책은 『밑바닥부터 시작하는 딥러닝』에서 다루지 못했던 순환 신경망(RNN)을 자연어 처리와 시계열 데이터 처리에 사용하는 딥러닝 기술에 초점을 맞춰 살펴본다. 8장 구성으로 전체를 하나

www.hanbit.co.kr

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기