ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Transformer
    카테고리 없음 2024. 3. 11. 20:23

    최근 NLP에서 빠지지않고 들어가는 Transformer에 대해서 리뷰해보겠다.

    Attention is all you need(2017)를 참조하여 작성하였다.

     

    1-1.I/O->Encoder

     

    input data가 인코더로 들어가는 과정이다. 

    이때 문장들의 sequences가 주어졌을 때, 가중치 행렬에 대하여 내적을 수행한다.(embedding)

    그 결과 각 문장들의 토큰들이 학습시 임베딩 레이어를 통해 벡터로 들어가게 된다.

     

    1-2.장점

     

    이로 인한 장점으로는 seq2seq는 RNN을 사용하여 순차적 데이터 처리과정을 밟게 되는데 반해

    transformer는 한 번에 내적을 수행함으로 기울기 소실 문제가 해결되게 된다.

     

    1-3.문제점과 해결책

     

    하지만 문장내에서 순서가 중요하고, 각 토큰에 유일한 값과 토큰 간 차이가 일정한 의미를 가져야한다.

    그래서 embedding된 vector에 대해서 PE_{pos,2i}=sin(pos/10000^{2i/d_model})같은 postional한 encoding를 

    한 번 더 거치게 된다.

     

    2-1.Multi-head Self Attention

     

    Multi-head Self Attetion에 대해 알아보겠다.먼저 기반이 되는 Attention

    주어진 질의에 대해 비슷한 key들을 찾아 그에 해당하는 value들을

    출력하게된다. 이러한 Attention들을 여러 Layer로 구성한다.

     

    2-2.구체적 과정

     

    3개의 vector를 copy하고(순서대로 Query,Key,Value), 각 토큰마다 d_{k}개만의 칸을 할당한다.

    3개의 vector에 Scaled-Dot-Product Attention을 진행한다.

    다음은 Scaled-Dot-Product Attetion 진행 과정이다.

    1.Q,K^{t}를 내적한다.

    2.내적 한 행렬을 \sqrt{d_{k}}만큼으로 스케일링한다.(논문에서 d_{model}는 512)

    3.d_{k}가 작으면 additive attention과 dot-product attention은 유사하고, 크면 가중치 소실 우려

    4.스케일링 한 행렬과 V 행렬을 내적한다.

    위 과정을 수식으로 나타내면 다음과 같다.

    Attetion(Q,K,V)=softmax(QK^{T}/\sqrt{d_{k}})*V

     

    3.Encoder(FFN, Feed Forward Net)

     

    FFN(x)=max(0,xW_{1}+b_{1})W_{2}+b_{2}로 정의되는데,

    이때 2번에서 구했던 행렬을 x로 두고 W와 b 행렬은

    각각 d_{model}*d_{hid},enc_seq_len*d_{hid}의 크기를 가진다.

    이 후 FFN을 진행한 행렬을 재귀적으로 2-3번을 반복하여

    encoder layer들을 형성한다.

     

    4.Output(Attention)

     

    Encoder와 유사하게 주어진 문장에 대해서 Query matrix를 형성한다.

    Encoder의 최종 행렬이 Query에 대해서 Multihead attention에서 Key^{T}와 Value다.

    Query와 내적을 진행 한 후 Softmax로 바꿔 weights를 만들고, Value와 내적한다.

    그 후 선형 변환 후 Softmax를 거친다. 

     

    5.결론

     

    Drop-out으로 신경망내 간선을 줄이거나, Label-smoothing을 진행하는게

    Regularization에 좋았고, 모델의 사이즈가 클 수록 성능이 좋아졌다.

    Key의 크기가 작으면 성능이 저하되고, Head가 너무 커지면 성능이 하락 되었다.

     

     

     

     

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.