추론 기반 기법
지금까지 통계 기반 기법으로 단어의 분산 표현을 얻었는데, 이번에는 더 강력한 기법인 추론 기반 기법을 살펴보자. 추론 기반 기법의 추론 과정에서 신경망을 이용하는데 여기서 word2vec 이 등장한다.
우선 통계 기반 기법과 마찬가지로 추론 기반 기법도 그 배경에는 분포 가설이 있다. 통계 기반 기법의 문제점을 알아보고 그 대안인 추론 기반 기법에 대해서 알아보자.
통계 기반 기법의 문제
통계 기반 기법에서는 주변 단어의 빈도를 기초로 단어를 표현했다. 정확히는 동시발생 행렬을 만들고 그 행렬에 SVD를 적용하여 밀집벡터 즉 단어의 분산 표현을 얻었다. 그러나 실제로 다뤄야하는 말뭉치의 어휘 수는 너무 많다. SVD를 n X n 행렬ㄹ에 적용할때 시간 복잡도는 O(n^3)이다. 말뭉치의 어휘 수를 작게 잡아 100만개라고 해도 처리할 수 없는 수준이다.
추론 기반 기법에서는 학습 데이터의 일부를 사용하여 순차적으로 학습하는 미니배치 학습의 아이디어를 이용한다. 이러한 기법을 이용하면 GPU를 이용한 병렬 계산도 가능하기 때문에 학습 속도를 높일 수도 있다.
개요
추론 기반 기법에서는 추론이 주된 작업이다. 추론이란 아래와 같이 주변 단어 즉, 맥락이 주어졌을 때, [ ? ]에 무슨 단어가 들어가는지를 추측하는 작업이다.
추론 문제를 풀고 학습하는 것이 추론 기반 기법이 다루는 문제이다. 이러한 추론 문제를 반복해서 풀면서 단어의 출현 패턴을 학습하는 것이다.
추론 기반 기법에는 어떠한 모델이 등장고 이 모델로 신경망을 사용한다. 모델은 맥락 정보를 입력받아 출현할 수 있는 각 단어의 출현 확률을 출력한다. 이러한 틀 안에서 말뭉치를 사용해 모델이 올바른 추측을 내놓도록 학습시킨다. 그리고 그 학습의 결과로 단어의 분산 표현을 얻는 것이 추론 기반 기법의 전체 그림이다.
신경망에서의 단어 처리
던어를 있는 그대로 처리할 수 없으니 고정 길이의 벡터로 변환해야 한다. 이때 사용하는 대표적인 방법이 아래와 같이 단어를 one-hot 표현으로 변환하는 것이다.
입력층은 각 뉴런이 각 단어에 대응한다. 뉴런이 1이면 검은색, 0이면 흰색이다.
이런식으로 단어를 벡터로 나타내면 이제 신경망으로 처리할 수 있게 되어 아래와 같이 FCN을 통해 변환할 수 있다.
FCN에 의한 변환을 단순화하여 가중치를 7X3 크기의 W라는 행렬로 표현하면 아래와 같다.
이를 코드로 살펴보면 아래와 같을 것이다.
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)
#[[-0.70012195 0.25204755 -0.79774592]]
이 코드는 one-hot 표현을 FCN으로 통과시켜 변환하는 모습을 보여준다.
맥락 c와 가중치 W의 곱으로 해당 위치의 행벡터가 추출된다.
import sys
sys.path.append('..')
import numpy as np
from common.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)
#[[-0.70012195 0.25204755 -0.79774592]]
MatMul 계층에 가중치 W를 설정하고 forward() 메서드를 호출해 순전파를 수행한다.
'Drawing (AI) > DeepLearning' 카테고리의 다른 글
딥러닝 직접 구현하기 - (word2vec 학습) (0) | 2024.02.02 |
---|---|
딥러닝 직접 구현하기 - (word2vec) (0) | 2024.02.01 |
딥러닝 직접 구현하기 - (통계 기반 기법 개선) (1) | 2024.01.29 |
딥러닝 직접 구현하기 - (자연어처리) (1) | 2024.01.28 |
Udemy - 딥러닝의 모든 것(AutoEncoder구축하기) (0) | 2024.01.24 |