ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Transformer
    CS 공부/AI 2023. 3. 22. 14:44

    Sequential Model


    - 길이가 달라지거나, 중간에 단어가 생략되거나, 밀리게 되면 모델링하기 힘듦

    - 이 문제를 해결하기 위해 Transformer 제안

     

     

    Transformer


    • Attention 모델을 기반으로 한 첫번째 sequence 변환 모델

    sequence to sequence 구조

    Encoder: n개의 단어를 한꺼번에 처리

    Encoder의 구조

    1. 각 단어를 기계가 해석할 수 있도록 특정 벡터로 표현
    2. Transformer가 각 단어를 특정 벡터로 인코딩함 (Self-Attention 사용)
      • Self-Attention은 나머지 n-1개의 x 벡터도 고려함 -> dependencies가 있음
      • Feed forward neural network는 dependency가 없고 평행함,  그냥 z1~z3를 한번 변환해주는 것에 불과함

     

    Self-Attention 계산 방법

    1. 각 단어를 기계가 해석할 수 있도록 특정 벡터로 표현 (embedding)
    2. 하나의 단어가 주어졌을 때 (Query, Key, Value) 세개의 벡터를 만듦
    3. Score 벡터: 인코딩을 하고자하는 단어의 Query 벡터나머지 모든 단어에 대한 Key 벡터내적
      • i번째 단어가 나머지 단어들과 얼마나 유사한지 측정하는 것과 같음
    4. Score 벡터를 normalize(정규화) 해줌
    5. Softmax 벡터: normalize 해준 score 벡터를 softmax를 취해줌
    6. Sum 벡터(최종 값): Softmax 벡터를 value 벡터와 weighted sum(가중치 합) 한다
    Decoder

    Decoder 하위계층(#1)은 encoder와 같음

    1. Transformer는 encoder의 가장 상위 layer의 K(key)와 V(value)를 decoder로 전송
    2. 출력 시퀀스는 자동 회귀 방식으로 생성됨
    3. Decoder의 self-attention의 softmax 단계 전에 미래 위치를 마스킹하여 미래의 정보를 활용하지 않도록 함
    4. Decoder의 Encoder-Decoder Attention layer은 아래 계층에서 Query 행렬을 만들고 인코더 스택에서 K,V를 가져온다는 점을 제외하고는 multi-head attention과 똑같이 작동
    5. Decoder 출력의 스택을 단어에 대한 분포로 변환
    6. softmax 계층은 점수를 확률로 바꿈. 확률이 가장 높은 셀이 선택되고 이와 관련된 단어가 출력이 됨

     

    행렬에서 Q,K,V 계산하기

    임베딩을 X에 압축하고 가중치 행렬( WQ,WK WV )에곱함

     

    Score벡터부터 Sum까지 수식 한줄로 표현 가능

    • Value의 차원이 Query 또는 Key의 차원과 달라도 됨
    • 입력이 고정되더라도 주변 입력에 따라 많은 것이 달라질 수 있음 (많은 computation 필요)
      • 단점: 입력이 길어질수록 처리하는데에 한계가 있음 + 메모리 차지

     

    Multihead Attention


    - 여러개의 attention

    1.  input 문장이 들어옴
    2. 각각의 단어를 embedding함
    3. 8개의 head로 나눔 (self-attention 8번)
    4. Q,K,V 사용해서 attention 계산
    5. 결과 z 행렬 여러개를 쌓은 후 가중치 행렬과 곱해서 output layer 만듦

    요약

    Positional encoding을 해주는 이유?


    • transformer의 특징상 같은 단어가 들어가면 순서가 바껴도 값이 똑같이 embedding 됨
    • 하지만 언어는 순서가 중요하기 때문에 순서 정보를 부여해야함
    positional encoding 방법 2가지
    1. 데이터에 0~1사이의 label을 붙인다. 0이 첫번째 단어, 1이 마지막 단어
      • I 0 / love 0.5 / you 1
    2.  time-step마다 선형적으로 숫자를 할당 (첫번째 단어 는 1, 두 번째 단어는 2..)
      • I 1 / love 2 / you 3

     

    Vision Transformer


    • 이전에는 언어적 측면에서만 Transformer를 사용했었는데 최근에는 vision에도 활용
    • DALL -E: 텍스트만으로 이미지를 생성하는 OpenAI 머신러닝 모델

     

     

    Further Questions


    • 앞서 소개한 RNN 기반의 모델들이 해결하기 힘든 문제들을 Transformer은 어떻게 다루나요?
    Sequential model이 길이가 달라지거나, 중간에 단어가 생략되거나, 밀리게 되면 모델링하기 힘든데 Transformer은 Attention 구조를 활용해 모든 단어를 한 번에 처리하고 다른 단어들과의 연관성까지 고려하기 때문에 이 문제를 해결할 수 있다.
    • Transformer 의 Query, Key, Value 는 각각 어떤 기능을 하나요? NMT 문제에서의 예시를 구체적으로 생각해보세요.
    하나의 문장을 번역하고자 할 때, encoder 내부의 attention 구조에서 번역하고자 하는 단어의 Query 벡터를 다른 단어들의 Key 벡터와 내적하여 유사도를 구하고 그 값을 정규화한 뒤 Value 벡터와 곱한 값을 모두 더해 다음 encoder로 넘긴다. 이런 식으로 반복하여 마지막 encoder 계층을 거친 값은 decoder를 통해 최종적인 값으로 생성된다. 

     

    참고 자료

     

    The Illustrated Transformer

    Discussions: Hacker News (65 points, 4 comments), Reddit r/MachineLearning (29 points, 3 comments) Translations: Arabic, Chinese (Simplified) 1, Chinese (Simplified) 2, French 1, French 2, Japanese, Korean, Persian, Russian, Spanish 1, Spanish 2, Vietnames

    jalammar.github.io

     

    'CS 공부 > AI' 카테고리의 다른 글

    Auto-regressive model  (0) 2023.03.23
    Multi Head-attention 구조 파악하기  (0) 2023.03.22
    torchvision에서 제공하는 transform 함수  (0) 2023.03.16
    DataLoader  (0) 2023.03.16
    Dataset  (0) 2023.03.15
Designed by Tistory.