일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- MT-DNN
- Conversation System
- Dialogue System
- Transformers
- pytorch
- huggingface
- bert
- Chatbot
- multi-head attention
- layer normalization
- Prompt Tuning with Rules for Text Classification
- Relation Extraction
- scaled dot-product attention
- 백준
- text classification
- NLP
- fine-tuning
- KLUE-RE
- BLEU Score
- GPT-1
- beam search
- Transformer
- KLUE
- BoostCamp
- BELU
- 취업
- boj
- Eliza
- ai-tech
- FSML
Archives
- Today
- Total
dukim's blog
[WK07-Day030][21.09.13.Mon] NLP 논문읽기 모임, Transformer (1) - Scaled Dot-Product Attention(Self-Attention) 본문
Boostcamp AI Tech 2th
[WK07-Day030][21.09.13.Mon] NLP 논문읽기 모임, Transformer (1) - Scaled Dot-Product Attention(Self-Attention)
eliza.dukim 2021. 9. 14. 02:08Intro
- 오전 시간에는 명훈님이 진행하시는 NLP 논문 읽기 스터디에서 다루는 "Neural Machine Translation by Jointly Learning to Align and Translate" 논문을 읽고 정리함
- 1시부터 2시까지 NLP 논문 읽기 스터디 참여
- 2시부터 4시까지 Transformer 강의 수강했으나 집중이 잘 되지 않음
- 4시부터 6시까지 피어세션 진행, 지난주 회고 및 이번주 피어세션 계획 세움
- 결국 낮 시간에 Transformer를 다 수강하지 못 하고 밤 시간에 보충했다. 면접에 반드시 나오는 질문이기 때문에 어떻게든 내 말로 설명해보려고 학습정리를 수정하고 수정하다 보니 시간이 오래 걸렸다.
학습 내용
[NLP 논문 읽기 모임] 01. Neural Machine Translation by Jointly Learning to Align and Translate
- 논문 읽는 방법에 대해 좋은 예시를 볼 수 있었음: 논문의 제목을 통한 내용 예상, Background 파트에서 task에 대한 파악과 기존 연구에 대한 배경지식 습득
- 신경망을 이용한 기계 번역 문제를 푸는데, 정렬(Align)과 번역(Translate)를 동시에 학습함으로서 푼다.
- 기존 NMT는 Encoder-Decoder 구조를 사용하는데, encoder에 입력된 source 문장의 정보를 고정된 차원의 벡터로 decoder에 전달하면서, 입력 길이가 길어질 때 정보의 손실이 발생한다는 추측에서부터 출발하여 문제에 접근한다.
- 기존 PBSMT(Phrase-Based Statistical Machine Translation) 방식이 존재했고, 해당 방법과 비슷한 성적을 거두는데 성공했다.
- Bahdanau Attention을 다루긴 했지만 자세한 구조는 다루지 않았고, 논문에 제시된 모델 구조, 그리고 실험 결과와 이후에 진행된 연구에 대해 다룸.
- 해당 연구가 NMT로도 PBSMT와 비슷한 성능을 달성했고, 이후 성능향상을 위한 연구 및 Attention 기법에 대한 추가 연구가 등장함.
- GNMT(Google Neural Machine Translation) 연구에 종합적으로 들어가 있으니 이걸 읽어보는 것을 추천
- 이후 Transformer에 의해 종결.
1. Transformer
- RNN 모델 또는 CNN 모델 자체를 대체하여 Attention 구조만으로 Sequence 데이터 처리를 가능하게 함.
RNN: Long-term dependency
- 멀리 있는 time step의 정보는 점점 손실되게 됨
- 개선 방안으로 Bi-Directional RNNs 제안, 각 방향으로 진행한 RNN의 각 time step의 hidden state를 concat함
Transformer: Long-Term Dependency
- Long-Term Dependency 개선: RNN과 달리 시퀀스 길이가 길어지더라도, attention score가 높다면 time step이 떨어져있는 정도완 관계없이 해당 토큰의 정보를 높은 비중으로 활용함
Transformer: Scaled Dot-Product Attention(Self-Attention)
- 입력 시퀀스의 각 토큰을 맥락 정보를 반영하여 임베딩하는 방법으로 기존 RNN, . 각 토큰의 임베딩을 자기 자신과 관련있는 토큰들의 임베딩을 반영하여 인코딩한다. 세부 절차는 아래와 같다.
Query가 1개인 경우의 Scaled Dot-Product Attention
- [참고] Query, Key, Value의 개념
- Query: 맥락 정보를 반영하여 인코딩하고자하는 토큰 임베딩, 해당 토큰을 기준으로 시퀀스 내 모든 토큰들에 대해 attention score를 계산함
- Key: Query와의 유사도를 계산하기 위한 토큰 임베딩
- Value: 최종 인코딩에 반영되는 정보가 담긴 토큰 임베딩
- Seq2seq with attention에서 Query는 decoder의 hidden state이고, Key, Value는 encoder의 hidden state.
- Scaled dot-product attention에서는 Query와 Key, Value가 모두 동일 시퀀스로부터 유래
- 입력: Query $q$, Key-Value ($k$, $v$) 쌍의 집합
- 출력: Query와 Key 벡터들 간의 가중치를 반영해 계산한 Value 벡터들의 가중합. 이때 가중치는 Query와 Key간의 내적으로 계산됨
- 아래 수식으로 계산됨, 여기서 Query, Key의 차원은 $d_k$로 동일, value의 차원은 $d_v$로 다를 수 있음.
Query가 여러개인 경우의 Scaled Dot-Product Attention
- query $q$가 여러개인 경우 행방향으로 쌓아 올려 행렬 $Q$의 형태로 한 번에 처리
- 아래 그림에서 앞의 $QK^T$의 연산 후 softmax를 취하여 각각의 query 별로 각각의value 벡터에 대한 가중치를 나타내는 행렬을 얻고(shape: $|Q| \time |K|$), 이를 Value에 대한 행렬 $V$와 행렬곱하여 각 Query를 Value vector의 가중합으로 나타낸 최종 출력값을 얻는다.
- 위 식에서는 scaling factor $\sqrt{d_k}$가 생략되어있는데, 아래 그림에서는 이를 포함하여 시퀀스 길이가 2이고 각 입력의 토큰의 임베딩 차원이 4, Query와 Key의 차원 $d_k$가 3이고 Value의 차원도 이와 동일할 때의 예시를 보여준다.
http://jalammar.github.io/illustrated-transformer/
Scaling factor $\sqrt{d_k}$의 의미
- $d_k$가 커질수록 $q$와 $k$의 내적값인 $q^Tk$의 분산도 커지는데, softmax를 구성하는 값들의 분산이 커질수록 softmax의 출력확률 분포가 하나의 큰 값에 쏠리는 형태로 나오게 되고, 분산이 작을수록 고른 분포를 보이게 됨.
- softmax의 출력확률 분포가 하나의 큰 값에 쏠리는 형태가 되면 gradient vanishing이 발생될 수 있는 위험이 있다(왜??)
- 내적 값에 분산을 일정하게 유지시켜줌으로써 학습을 안정화시켜 주기위해 scaling factor로 나눠줌
피어세션
- 모더레이터 : 김제우님
- 지난주 회고 : 팀 결성에 심적으로 힘들었던 한 주
- 이번주 피어세션 계획
- 화요일 :
- 3시반부터 시작
- 7강, 8강 수업리뷰(명훈)
- 7강, 8강 코드리뷰(제우)
- 멘토링 : 5시 ~ 6시 + extra 30min 7,8강 리뷰
- 수요일
- 9강 수업리뷰(준영)
- 10강 수업리뷰(우창)
- 9, 10강 코드리뷰(대웅)
- 목요일
- 선택과제2(전진),선택과제3 코드리뷰(동규)
- 금요일
- 멘토링
- 화요일 :
과제
- 오늘은 과제를 수행하지 않음
학습 회고
- 욕심을 너무 많이 부리는 걸까. 멘토님과의 논문 읽기 + 강의 내용 정리 + 실습 코드 + 선택과제 + 명훈님 논문읽기 모임 만으로도 시간이 모자라는 것 같다.
Reference
- 해당 포스팅의 이미지 및 수식은 별도의 출처표기가 없는 경우 boostcamp ai-tech의 교육 자료의 일부를 발췌한 것임을 밝힙니다.
'Boostcamp AI Tech 2th' 카테고리의 다른 글
Comments