• Attention is just calculated by dot product!

    • hidden state 간의 weighted sum! = attention 개념

    Untitled

    • L4 loss를 가장 줄일 수 있는 h1, h2, h3 형태는 무엇일까? S4 랑 h2랑 만났을 때

    • 어떤 단어를 가깝게 놓도록 선형 변환 해야 좋을까?

      • 하지만 기존 RNN+Attention은 encoder 쪽( 갈 수록 흐려지는 정보에) attention 하고 decoder 파트는 여전히 멀수록 잊혀진다. h1,2,3에 차곡 차곡 정보를 쌓지만 x1와 같은 앞단의 정보는 갈수록 잊혀질 것!
      • —> self-attention으로 해결!

      Untitled

      Untitled

      거리에 대한 문제점이 해결됨! attention을 self로도 사용하자

      하지만 decoder에서 미래 단어와의 attention은 컨닝이므로 제외!

  • query 랑 key랑 내적

    • weighted sum을 통해 가중치가 큰 key의 정보를 갖음
    • 양수로 만들기 위해 exp()
    • 각 전체 weight합으로 normalize 해서 전체 합이 1이 되게 만듬
    • =softmax(QK^T)
  • 위 가중치로 value랑 weighted sum = attention 결과는 key 의 가중치 합 이면서 간접적으로나마 query에 정보도 반영 = 왜냐면 가중치가 query와 만들어진 것이기 때문

    • 왜냐면 value 값은 key에 v를 통과시킨 값이기 때문
    • 같은 문장 내에서 (key)에서 문맥(순서)을 이해하기 위해 positional encoding (단어 순서마다 포스트잇 벡터를 붙여 주는 것!) —> 다음으로 h_new 계산방식과 같은 self attention 활용
  • Transformer의 동작/학습 + Masking

    • 첫번째 단어부터 차근차근 예측 (4번째 단어는 뭘까? 라는 식으로 예측 불가) = n 번째 단어를 예측 할때는 n-1단어까지 decoder에 input으로 넣음
    • 그래서 첫번째 단어로는 약속된 단어 start of sequence = sos 를 넣고 완성 후에 빼버림, end of sequence도 마찬가지 = 번역을 종료하도록
    • ~n-1 단어를 넣어서 n 단어를 예측 하는 방식으로 학습 시킴
    • 단어 길이 만큼 넣고 한칸씩 미는 방식으로 단어예측을 한번에 병렬 학습 가능
    • 학습 할 때 미래단어를 안 쓰기 위해서 뒤 단어 쓰지 않음 = masking
  • Multi-head attention: attention 의 의미/중요도가 사람마다 다를 수 있음

    • 그래서 서로 다른 사람의 시선으로 앙상블 하는 느낌
  • Masked Multi-headed attention

    • 실제 문장 예측을 해야되니까 뒷 단어에 masking(-inf) 를 주어서 모델에 입력하는 것
  • Encoder-decoder attention

    • 똑같은 MHA 를 사용하되 Q로는 해당 decoder layer에서 얻은 임베딩 벡터를 KV는 마지막 encoder layer의 출력 임베딩 벡터를 사용!
    • 다음 단어가 뭐가 출력되야 되는지 출력문장의 Q로 물어보고 입력문장의 KV를 보고 알아냄
  • Positional Encoding

    • 토큰의 순서 정보도 반영해서 encoding 하자
    • 위치 정보를 조금만 고려하게끔
      • 단어 임베딩 벡터에 * root(512) + 위치 임베딩
        • root(512)* “테슬라” + 다섯번째