이번 CBOW의 설명은 '밑바닥부터 시작하는 딥러닝2'의 내용을 기반으로 작성하였습니다. 이번 글에서는 CBOW의 모델 추론과 학습에 대해 설명합니다.
CBOW 모델 추론
CBOW와 Skip-gram은 개념은 비슷하기 때문에 이제 부터는 CBOW 모델을 기준으로 살펴보도록 하겠습니다. 앞에서 설명했듯이 CBOW는 맥락(주변 단어)으로부터 타겟(중앙 단어)을 추측하는 용도의 신경망입니다.
그림에서 입력층이 2개인 이유는 맥락의 고려할 단어를 2개로 정했기 때문입니다. 첫번째 입력층이 $ ℎ_{1} $으로 변환, 두 번째 입력층이 $ ℎ_{2} $ 로 변환되었다고 하면, 은닉층 뉴런은 $ \frac{1}{2}(h_{1}+h_{2}) $가 됩니다.
여기서 가중치 $ W_{𝑖𝑛} $는 단어의 분산 표현을 나타냅니다. 단어가 얼마나 동시 발생했는지를 나타내는 거죠. 학습을 진행할수록 맥락에서 출현하는 단어츨 잘 추출하는 방향으로 분산 표현들을 갱신하게 됩니다. 결과적으로 단어의 의미가 잘 녹아들어가게 됩니다. CBOW 신경망의 특징은 활성화 함수를 사용하지 않는 간단한 구성으로 이루어져 있다는 것입니다.
CBOW 모델 학습
CBOW 모델에서의 학습은 입력, 출력 두개의 가중치를 업데이트하는 작업입니다.
- 입력 측 가중치($𝑊_{𝑖𝑛}$) : 각 단어의 분산 표현
- 출력 측 가중치($𝑊_{𝑜𝑢𝑡}$) : 단어의 의미가 인코딩된 벡터가 저장
최종적으로 이용하는 단어 분산 표현은 word2vec(특히 skip-gram)에서는 입력 측 가중치만 이용하는 것이 가장 대중적 선택입니다. 참고로 GloVe에서는 두 가중치를 더했을 때 좋은 결과를 얻었습니다.
1. 학습 데이터 준비
말뭉치에서 맥락과 중심 단어를 위한 원-핫 벡터를 구하는 과정을 수행합니다.
- 대규모 documents → 전처리(preprocess) → 말뭉치(corpus)
- 맥락(contexts)과 타깃(target) 생성 → contexts, target 분리
- 원핫 인코딩(convert_one_hot) → context vectors, target vectors
문서를 전처리해서 말뭉치로 바꾸고 거기서 맥락과 타겟을 얻습니다. 이 맥락이 입력이 되고, 타겟이 정답 레이블이 되는 형태입니다. 맥락과 타겟이 단어ID로 구성되어 있으므로 원핫벡터로 변환됩니다. 여기서 중요한 것은 다차원 배열이라 형상에 주목해야 합니다.
2. CBOW 모델 구현 및 역전파(backpropagation)
- 어휘수(vocab_size)와 은닉층의 뉴런수(hidden_size)를 받음
- 가중치 $ W_{in}, W_{out} $ 두개를 생성
- 입력 측 MatMul 계층 2개, 출력 측 MatMul 계층 하나, Sortmax with Loss 계층으로 구성
- 역전파(backpropagation)는 기울기를 순전파 때와 반대 방향으로 전파
- 1 → ds → da → 0.5 * da(서로 바꿔) → 0.5 * da(그래도 통과)
* 함께 읽으면 좋은 글
'딥러닝' 카테고리의 다른 글
순환신경망(RNN) 학습, Truncate BPTT (0) | 2024.04.01 |
---|---|
순환신경망(RNN)이 언어 모델로 사용된 이유 (0) | 2024.03.27 |
Word2Vec의 아이디어와 역할 (0) | 2024.03.25 |
통계 기반 기법 vs 추론 기반 기법의 차이점 (0) | 2024.03.22 |
통계 기반 언어 모델 특징 및 한계점(feat. 시소러스, WordNet) (1) | 2024.03.18 |