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:08

Intro

  • 오전 시간에는 명훈님이 진행하시는 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

  1. 논문 읽는 방법에 대해 좋은 예시를 볼 수 있었음: 논문의 제목을 통한 내용 예상, Background 파트에서 task에 대한 파악과 기존 연구에 대한 배경지식 습득
    • 신경망을 이용한 기계 번역 문제를 푸는데, 정렬(Align)과 번역(Translate)를 동시에 학습함으로서 푼다.
    • 기존 NMT는 Encoder-Decoder 구조를 사용하는데, encoder에 입력된 source 문장의 정보를 고정된 차원의 벡터로 decoder에 전달하면서, 입력 길이가 길어질 때 정보의 손실이 발생한다는 추측에서부터 출발하여 문제에 접근한다.
    • 기존 PBSMT(Phrase-Based Statistical Machine Translation) 방식이 존재했고, 해당 방법과 비슷한 성적을 거두는데 성공했다.
  2. 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$로 다를 수 있음.
    image

Query가 여러개인 경우의 Scaled Dot-Product Attention

  • query $q$가 여러개인 경우 행방향으로 쌓아 올려 행렬 $Q$의 형태로 한 번에 처리
    image
  • 아래 그림에서 앞의 $QK^T$의 연산 후 softmax를 취하여 각각의 query 별로 각각의value 벡터에 대한 가중치를 나타내는 행렬을 얻고(shape: $|Q| \time |K|$), 이를 Value에 대한 행렬 $V$와 행렬곱하여 각 Query를 Value vector의 가중합으로 나타낸 최종 출력값을 얻는다.
    image
  • 위 식에서는 scaling factor $\sqrt{d_k}$가 생략되어있는데, 아래 그림에서는 이를 포함하여 시퀀스 길이가 2이고 각 입력의 토큰의 임베딩 차원이 4, Query와 Key의 차원 $d_k$가 3이고 Value의 차원도 이와 동일할 때의 예시를 보여준다.
    image
    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의 교육 자료의 일부를 발췌한 것임을 밝힙니다.
Comments