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

[밑바닥부터 시작하는 딥러닝 2] Chapter 3. word2vec

Jesse 2024. 7. 7. 20:43

3.1 추론 기반 기법과 신경망

단어를 벡터로 표현하는 방법

  • 통계 기반 기법
  • 추론 기반 방법

3.1.1 통계 기반 기법의 문제점

통계 기반 기법 - 학습 데이터를 한번에 처리(배치 학습)

추론 기반 기법 - 학습 데이터의 일부를 사용하여 순차적으로 학습(미니배치 학습)

3.1.3 신경망에서의 단어 처리

신경망에서 단어를 사용하기 위해 고정 길이의 벡터로 변환

  • one-hot 벡터 - 벡터의 원소 중 하나만 1, 나머지는 모두 0인 벡테

"You say goodbye and i say hello" 의 one-hot 표현 예시

3.2 단순한 word2vec

CBOW(continuous bag-of-words) 모델의 추론 처리

CBOW - context(주변 단어)로부터 Target(중앙 단어)을 추측하는 용도의 신경망

다중 클래스 분류 신경망

  • 맥락에 포함시킬 단어가 N개일 경우 입력층도 N개

CBOW 모델의 신경망 구조(노드 값의 크기 흑백의 진함으로 표현)

완전연결계층에 의한 첫 번째 입력층을 h1ℎ1 으로 변환 / 두 번째 입력층을 h2ℎ2로 변환했다고 할 때 은닉층의 뉴런 : 12(h1+h2)12(ℎ1+ℎ2)

은닉층의 뉴런 수를 입력층의 뉴런 수보다 적게 하는것이 핵심

  • 단어 예측에 필요한 정보를 간결하게 담을 수 있음
  • 밀집벡터 표현을 얻을 수 있음
  • 은닉층의 정보는 인간이 이해할 수 없는 코드(인코딩)
  • 은닉층의 정보로부터 원하는 결과를 얻는 작업(디코딩)
import numpy as np

class MatMul:
    def __init__(self, W):
        self.params = [W]
        self.grads = [np.zeros_like(W)]
        self.x = None

    def forward(self, x):
        W, = self.params
        out = np.dot(x, W)
        self.x = x
        return out

    def backward(self, dout):
        W, = self.params
        dx = np.dot(dout, W.T)
        dW = np.dot(self.x.T, dout)
        self.grads[0][...] = dW
        return dx

c0 = np.array([[1,0,0,0,0,0,0]])
c1 = np.array([[0,0,1,0,0,0,0]])

#가중치 초기화
W_in = np.random.randn(7,3)
W_out = np.random.randn(3,7)

#계층 생성
in_layer0 = MatMul(W_in)
in_layer1 = MatMul(W_in)
out_layer = MatMul(W_out)

#forward
h0 = in_layer0.forward(c0)
h1 = in_layer1.forward(c1)
h = 0.5 * (h0+h1)
s = out_layer.forward(h)

print(s)