트랜스포머 인코더 부분은 아래 참고
2021.05.26 - [Study/NLP] - [NLP/자연어처리] Seq2Seq(3) - 트랜스포머(Transformer)_Encoder
해당 글은 딥러닝을 이용한 자연어 처리 입문의 내용과 Jay Alammar의 시각화 자료를 함께 정리한 내용입니다.
저번 포스팅에서 인코더의 과정을 정리했다면, 이번 포스팅은 디코더의 과정을 정리할것이다.
디코더의 과정은 아래의 오른쪽의 내용과 같은데, 인코더 과정에 대해 잘 이해했다면, 디코더의 과정 또한 아주 쉽게 이해할 수 있을 것이다.
1. 디코더의 첫번째 서브층 : 셀프 어텐션과 룩어헤드 마스크
디코더도 인코더와 동일하게 임베딩 층과 포지셔널 인코딩을 거친 문장 행렬이 입력된다. Seq2Seq와 마찬가지로 교사 강요(Teacher Forcing)을 사용하여 훈련하므로 학습과정에서 디코더는 번역할 문장을 한번에 입력받는다. 그리고 디코더는 문장행렬로부터 각 시점의 단어를 예측하도록 훈련한다.
문제는, 트렌스포머가 문장행렬로 입력을 한번에 받으면 현재 시점의 단어를 예측하고자 할 때, 입력 문장 행렬로부터 미래 시점의 단어까지 참고할 수 있는 문제가 발생한다. "I am a" 다음 student가 올 단어를 미리 알아버린다는 것이다.
이를 위해서 트랜스포머의 디코더에는 현재 시점의 예측에서 현재시점보다 미래에 있는 단어들을 참고하지 못하도록 룩 어헤드 마스크(look-ahead mask)를 도입한다. 미래 시점에 대한 정보는 마스크를 씌운다는 뜻이다.
룩어헤드 마스크는 디코더의 첫번째 서브레이어에서 이루어진다. 인코더에서의 멀티 헤드 셀프 어텐션과 동일한 연산을 수행하나, 어텐션스코어 행렬에서 마스킹을 적용한다는 점만 다르다. 즉, K와 V간 연산을 하기 전에 미래시점의 단어는 마스킹하여 가리는 것이다. 각 원소의 자리에 마스킹할 원소는 -Inf를 더해준 후 소프트맥스 연산을 취하고 K와 V를 곱해주는건 인코더의 셀프 어텐션과 동일하다.
2. 디코더의 두번째 서브층 : 인코더-디코더 어텐션
디코더의 두번째 서브층은 멀티헤드 어텐션을 수행한다는 점에서는 셀프 어텐션들과 같지만, 궁극적으로 입력되는 Q는 디코더의 행렬이고, K, V는 인코더에서 출력된 행렬이라는 점에 서 가장 큰 차이를 가지고 있다. 그래서 셀프 어텐션이라고 할 수 없다. Q가 디코더 행렬, K가 인코더 행렬일 때 어텐션 스코어 행렬을 구하는 과정은 아래와 같다.
중간중간에 들어가는 Add&Normalize와 FeedForward Neural Network는 인코더에서의 과정과 동일하다.
3. 마지막 Linear Layer와 Softmax Layer
여러개의 decoder를 거치고 난 후에는 소수들로 이루어진 벡터 하나가 남게 되는데, 이를 어떻게 단어로 바꿀 수 있을까? 이 부분이 Linear와 Softmax layer가 하는 일이다.
Linear layer는 fully connected신경망으로 decoder가 마지막으로 출력한 벡터를 그보다 훨씬 더 큰 사이즈의 벡터인 logit 벡터로 투영시킨다. (약 vocabulary size만큼으로) 그 다음에 나오는 softmax layer를 이용해 이 점수들을 확률로 변환해주어 가장 높은 확률값을 가지는 셀에 해당하는 단어가 최종 결과물이 될 수 있도록 한다.
이렇게 트랜스포머에 대한 과정을 배우게 되었다.
간혹 인코더 부분만 가지고 분류 모델을 생성하는데 사용되는 모델도 있다.
Seq2Seq모델은 번역을하는 업계가 아닌 이상 잘 사용하지는 않는데, 배워놓으니 요약 모델 등을 만들 때 사용해도 괜찮을 듯 싶다.
실습으로 구현해보고 싶은데, 그것은 나중에 포스팅 하도록 하겠다.
'Study > NLP' 카테고리의 다른 글
[NLP/자연어처리] pre-trained model(2) - GPT-1(Generative Pre-Training of aLanguage Model)/OpenAI (0) | 2021.06.01 |
---|---|
[NLP/자연어처리] pre-trained model(1) - ELMo(Embeddings from Language Models) (0) | 2021.05.31 |
[NLP/자연어처리] Seq2Seq(3) - 트랜스포머(Transformer)_Encoder (0) | 2021.05.26 |
[NLP/자연어처리] Seq2Seq(2) - 어텐션 매커니즘(Attention Mechanism) (0) | 2021.05.24 |
[NLP/자연어처리] Seq2Seq(1) - RNN을 이용한 시퀀스 투 시퀀스 (0) | 2021.05.24 |