while (1): study();

[논문 리뷰] Using the Output Embedding to Improve Language Models 본문

논문 리뷰

[논문 리뷰] Using the Output Embedding to Improve Language Models

전국민실업화 2021. 7. 13. 06:43
728x90

출처: https://arxiv.org/abs/1608.05859

 

Using the Output Embedding to Improve Language Models

We study the topmost weight matrix of neural network language models. We show that this matrix constitutes a valid word embedding. When training language models, we recommend tying the input embedding and this output embedding. We analyze the resulting upd

arxiv.org


* 하단 포스팅의 후속 포스팅입니다.

 

https://jcy1996.tistory.com/27

 

[논문 리뷰] The University of Edinburgh's Neural MT Systems for WMT17

출처: https://aclanthology.org/W17-4739/ The University of Edinburgh’s Neural MT Systems for WMT17 Rico Sennrich, Alexandra Birch, Anna Currey, Ulrich Germann, Barry Haddow, Kenneth Heafield, Anton..

jcy1996.tistory.com

 위 논문에서 Sennrich교수는 단일 CPU를 이용하여 최선의 성능을 끌어냈습니다. 여러가지 요소가 결합된 결과였지만 그 중에 Weight Tying이라는 기법이 있었죠. Input Embedding과 Output Embedding을 동일하게 가져간다는 요소가 상당히 흥미로워서 더 찾아보게 되었습니다.

 

1. Introduction

NNLM(Neural Network Language Model)은 기본적으로 다음과 같은 양상으로 학습됩니다.

 


1. 현재의 입력 단어를 원핫 벡터로 입력받습니다. 이를 C차원의 벡터 c라고 합시다.

2. Input Embedding matrix인 U와 곱해져 hidden size의 벡터, h2를 반환합니다.

3. Output Embedding matrix인 V는 h2와 곱해져 h3를 반환합니다. h3는 단어별 점수가 들어가 있을 것입니다.

4. Softmax를 취해 단어별 확률값을 반환합니다.


 이 때, U는 CxH 차원의 행렬일 것이고, V는 HxC 차원일 것입니다. 즉 전치만 해준다면 두 행렬의 크기는 완벽히 같아지게 됩니다. 저자들은 두 행렬이 비슷한 단어에 대해 비슷하게 작동할 것이라고 가정하고 실험을 진행합니다. 실제로 둘이 하는 일은 hidden size로 압축, 혹은 압축 해제이므로 직관적으로도 상당히 비슷하게 느껴집니다. 

 이 논문에서 주된 결과는 요약하면 다음과 같습니다.


1. word2vec에서는 output embedding은 input embedding보다 약간 저열합니다.

2. RNN기반 LM에서 output embedding은 input embedding보다 뛰어납니다.

3. Weight Tying을 하게 되면 tying된 행렬은 (input embedding보다) output embedding과 비슷하게 학습됩니다.

4. Weight Tying은 perplexity를 개선시킬 수 있습니다.

5. dropout을 사용하지 않을 경우 projection regularization을 사용할 수 있습니다.

6. Weight Tying을 사용할 경우, 성능을 유지하면서 모델의 크기를 기존의 절반 미만으로 가져갈 수 있습니다.


 자세한 내용은 차차 살펴보도록 하겠습니다.

 

 

3. Weight Tying

 

  크게 4가지 종류의 모델에 대해서 Weight Tying(이하 WT)를 사용해볼 것입니다.


1. Word2Vec Skip-gram

2. NNLM (large)

3. NNLM (small)

4. NMT


 Word2vec에서는 Goldberg와 Levy의 주장에 따르면 WT를 사용하는 것이 적절하지 못하다고 합니다. 이 부분은 설명이 적어서 두 사람 논문을 읽어봐야 알겠네요.

 

 해당 논문에선 두 종류의 LM을 제시하고 있습니다. 하나는 Large NNLM이며, 3개의 dropout을 이용하여 regularization합니다. 다른 하나는 small NNLM이며 dropout을 사용하지 않고, Projection regularization을 사용합니다.

 

더보기

 Projection Regularization이란, output embedding 직전에 HxH 차원의 projection matrix를 추가하고, 이 행렬의 놈을 손실함수에 더해주는 식입니다. 정확히는 $ \lambda $ $ ||P||_{2} $를 계산하여 손실에 더해주는 꼴입니다. $\lambda=0.15$라고 합니다.

 Vanilla untied NNLM의 경우 input embedding과 output embedding이 각각 다음과 같이 업데이트됩니다.

The update for row k of the input embedding
The update for row k of the output embedding

 중요한 것은 Input embedding의 경우 오직 현재의 input word($i_{t}$)에 대해서만 가중치를 업데이트합니다. 이는 즉 희소한 단어는 정말 업데이트가 잘 안된다는 뜻입니다. 반면 output embedding의 경우 매 타임스탭마다 모든 row에 대해서 업데이트합니다. 앞서 NNLM에서 input embedding보다 output embedding의 성능이 좋다고 했는데, 위의 업데이트 횟수와도 관련이 있을 것 같고, 또 decoding이 encoding보다 상대적으로 힘들다는 것도 한 몫 할 것 같은 느낌이 듭니다.

 

 한편 tied NNLM은 $U = V = S$로 둡니다. 여기서 S가 input embedding과 output embedding을 모두 수행하게 됩니다.

 $k \neq i_{t}$인 경우, 기존 output embedding과 같이 가중치를 업데이트합니다. 위에서도 확인했듯이 output embedding이 업데이트 횟수가 더 많아 희소한 단어에 대한 대응력도 높으므로, input embedding의 경우 파라미터를 동결시켜 줍니다.

 $k = i_{t}$인 경우, input embedding의 $k=i_{t}$일때의 식과 output embedding의 $k \neq o_{t}$일 때의 식을 사용합니다. 위의 케이스처럼 단순히 기존 output embedding의 업데이트 방식을 따를 경우 $k = i_{t}$일 때 $p_{t}(i_{t}|i_{1:t})$를 계산하게 됩니다. 한 문장에서 같은 단어가 두 번 나올 확률은 거의 0에 수렴하므로 input embedding의 계산식을 따오는 겁니다. 정리하자면 $k = i_{t}$인 경우를 제외하면 사실상 untied NNLM의 output embedding과 똑같다고 보면 되겠네요.

 

마지막으로 NMT에 대해서, 기본적으로는 decoder의 input embedding과 output embedding을 동일하게 가져가는 방법론을 택합니다. 그러나 BPE 알고리즘을 사용하였을 때 대부분의 병렬 코퍼스에서 서브워드가 거의 일치하는 것을 확인했고, 따라서 이러한 관찰에 따라 TWWT(three-way weight tying)을 제안합니다. 이는 encoder의 input embedding, decoder의 input embedding, output embedding을 모두 하나로 가져가는 것을 말합니다.

 

4. Results

 두 Embedding을 통합함에 있어 어느쪽이 질(Quality)적으로 우월한가는 중요한 문제입니다. Simlex999, Verb-143, MEN, Rare-Word, MTurk의 총 5개 지표를 이용하여 정량적으로 성능을 평가하였습니다. word2vec은 다음과 같은 결과를 보였습니다.

 Input embedding과 Output embedding의 성능 차이가 거의 없는 것을 확인할 수 있습니다. 또한 Tied embedding의 경우 성능이 매우 낮은 것을 확인할 수 있는데, 위에서 "word2vec skip-gram모델에는 WT를 적용하는 것이 적절하지 못하다"라고 한 것이 경험적으로 입증되는 부분인 듯 합니다.

 

 한편 small NNLM(노드 200개)의 결과는 다음과 같습니다.

 확실히 skip-gram과는 양상이 다릅니다. 두 벤치마크 데이터셋에 대해서 모두 Output Embedding이 Input Embedding보다 좋은 점수를 받았습니다. 추가적으로 Tied Embedding은 항상 Output Embedding과 비슷한 점수를 받았습니다. 실제로 스피어만 순위상관계수를 확인해보아도 유사한 결과를 확인할 수 있습니다.

 word2vec은 Input embedding과 Output embedding이 강한 상관관계를 보이는 반면, NNLM은 크기와 상관없이 Output embedding과 Tied embedding이 강한 상관관계를 보입니다. 앞서 Tied matrix는 Output embedding과 유사하게 학습된다는 것도 여기서 확인이 되네요.

 

 그렇다면 실제로 WT를 적용한 결과도 확인해보겠습니다. 다음은 large NNLM(노드 1500개)에 WT를 적용한 결과입니다.

BD는 Bayesian dropout, RHN은 Recurrent Highway Network라고 합니다만, 핵심은 WT의 적용 여부입니다. 세 가지 케이스에 대해서 모두 WT를 적용했을 때 가중치 수를 20% 이상 줄일 수 있었던 반면, Valid set과 Test set에 대해서 PPL이 하락한 모습을 보입니다. 다만 Train set에 대해서는 PPL이 되려 상승한 모습입니다.

 따라서 WT는 총 2가지 측면에서 장점이 있다고 볼 수 있습니다.


1. Compact한 모델을 가능하게 하고, 따라서 훈련 시간도 줄어듭니다.

2. 일종의 가중치 제약으로서 일반화 성능을 향상시킵니다.


small NNLM도 마찬가지입니다. 다만 이 경우는 새롭게 제시한 Projection regularization(이하 PR)을 이용했습니다.

그냥 WT만 사용하면 성능이 오히려 더 안 좋아지는데, PR과 함꼐 사용하면 상당한 성능 향상을 보이네요. 

 마지막으로 NMT도 확인하겠습니다.

BLEU score의 변화는 거의 없습니다만, 모델의 크기가 획기적으로 줄어드는 모습이 보입니다. Decoder에만 WT를 적용했을 경우 약 28% 정도 크기를 줄일 수 있고, TWWT를 사용하면 절반 이상 줄어드는 모습입니다. Embedding layer자체가 (vocabulary size) x (hiddensize)이기 때문에 embedding layer 하나하나 가중치의 수가 많을 수밖에 없기 때문에 가능한거죠.

 

정리

 

 Rich Sennrich 교수의 논문으로부터 시작해서 여기까지 왔습니다만, 상당히 유용한 정보였다고 생각합니다. 특히 지금처럼 사용할 수 있는 자원이 제한적인 환경에서는 리소스를 효율적으로 사용하는 것이 중요할텐데, WT를 사용해보는 것이 어느 정도 도움이 될 듯 합니다.

 Sennrich 교수도 사용했기 때문에 믿는 편이지만, 똥인지 된장인지는 찍어먹어봐야 아는 법이므로 조만간 한번 모델에 직접 적용해봐야겠습니다.. 이때는 Seq2Seq뿐만 아니라 Transformer에도 적용해볼 예정(2018년에 나왔으므로 논문에서는 다루지 않음)인데, 기회가 되면 실험결과도 올리겠습니다.

728x90
Comments