[4.1 word2vec 개선-1]

[4.1.1 Embedding 계층]

Untitled

⇒ 가중치 매개변수로부터 단어ID에 해당하는 벡터를 추출하는 계층 생성(Embedding 계층)

[4.1.2 Embedding 계층 구현]

class Embedding:
'''
forward 계층 : 가중치 W의 특정 행 추출
인스턴스 변수 idx에는 추출하는 행의 인덱스(단어ID)를 배열로 저장
backward 계층 : 출력 층으로부터 전해진 기울기를 입력 층으로 흘려줌
가중치 기울기 dW를 꺼낸 다음, dW[...]=0문장에서 dW의 원소를 0으로 덮어씀
출력 층으로부터 전해진 가중치 기울기를 가중치 기울기 dW의 특정 행에 설정
'''
    def __init__(self,W):
        self.params = [W]
        self.grad = [np.zeros_like(W)]
        self.idx = None
    def forward(self,idx):
        W, = self.params
        self.idx = idx
        out = W[idx]
        return out
		def backward(self,dout):
		    dW, = self.grads
		    dW[...] = 0

				for i, word_id in enumerate(self.idx):
				# dh의 각 행의 값을 dW의 해당 행에 더해준다.
					dW[word_id] += dout[i]
		    return None