ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [n424] Transformer
    AI 부트캠프 2021. 12. 29. 14:00

    Transformer

    Transformer는 기계 번역을 위해 Attention 매커니즘을 이용하여 뛰어난 번역 성능을 낸다. RNN 기반 모델은 단어가 순서대로 들어온다는 치명적인 단점이 있다. 즉, GPU의 장점을 활용하지 못하고 연산시간이 길다. 이를 해결하기 위해 Transformer는 RNN을 사용하지않고 병렬화를 통해 빠르게 연산한다. 병렬 연산을 위해 모든 토큰을 동시에 입력받아 GPU를 활용한다. 

    왼쪽 회색 블록이 인코더, 오른쪽이 디코더이다. 인코더 블록에는 Multi-Head (Self) Attention, Feed Forward로 구성되어 있으며,

    디코더 블록에는 Masked Multi-Head (Self) Attention, Multi-Head (Encoder-Decoder) Attention, Feed Forward로 구성되어 있다.

    Attention 매커니즘
    1. 단어 행렬과 준비된 가중치 행렬을 내적하여 쿼리, 키, 밸류 행렬을 만든다.
    2. 쿼리 행렬과 키 행렬을 내적한다.
    3. 계산하여 나온 값을 (쿼리, 키, 밸류) 벡터 차원의 제곱근에 해당하는 값으로 나눈다.
    4. 계산하여 나온 값에 소프트맥스 함수를 취한다.
    5. 계산하여 나온 값과 밸류 행렬을 곱한다.

     

    Positional Encoding (인코딩)

    트랜스포머는 병렬 연산을 하기 때문에 모든 단어를 동시에 입력 받는다. 즉, 단어의 각 위치 정보가 필요한데 이를 위해 수행하는 것이 Positional Encoding이다. Transformer에서는 Positional encoding을 위해 sin, cos함수를 사용한다.

     

    Self-Attention (셀프 어텐션)

    번역하려는 문장 내부 요소의 관계를 잘 파악하기 위해 트랜스포머는 문장 자신(self)에 대해 어텐션(Attention) 메커니즘을 적용했다.

    쿼리, 키, 밸류의 아이디어를 이용하였다. 

    • 쿼리 : 분석하고자 하는 단어에 대한 가중치 벡터
    • 키 : 각 단어가 쿼리에 해당하는 단어와 얼마나 연관있는 지를 비교하기 위한 가중치 벡터
    • 밸류 : 각 단어의 의미를 살려주기 위한 가중치 벡터
    Self-Attention의 매커니즘
    1. 특정 단어의 쿼리 벡터와 문장 내 모든 단어의 키 벡터를 내적한다. 이 값이 Attention score이다.
    2. 트랜스포머에서는 이 가중치를 key 벡터 차원인 제곱근 dk로 나눈다. (계산 보정: 가중치값 조절하는 정규화 작업)
    3. Softmax를 취하여 가중치를 정규화하고, 각 단어와의 관계의 비율을 구한다. 각 단어에 대한 attention 가중치이다.
    4. 각 단어의 밸류 벡터에 attention가중치를 곱하여 가중 평균을 계산한다. => Self Attention 출력값

     

    Multi-Head Attention

    Multi-Head Attention은 각 Head마다 동시에 Self-Attention을 병렬적으로 실행하는 것이다. 각 Head마다 다른 Attention 결과를 내어준다. (마치 앙상블과 같음).

    출력된 행렬 Zn을 가로로 이어 붙인다 (concatenate). 행렬 Wo와 내적을 통해 최종 결과인 행렬 Z를 만든다.

     

    Layer Normalization & Skip Connection

    Layer Normalization은 Batch normalization과 유사하게 학습이 훨씬 빠르고 잘 되게 한다.

    Skip Connection을 통해서 역전파에서 정보 손실을 막을 수 있다. 

     

    Feed Forward Neural Network (FFNN)

    은닉층의 차원이 증가했다가 원래 차원으로 줄어드는 2층 신경망이다.

     

    Masked Self-Attention

    디코더 블록에 있는 Self-Attention는 타겟 뒤에 있는 단어들을 마스킹 하는 역할을 한다.  디코더는 왼쪽 단어를 보고 오른쪽 단어를 예측하며 단어를 생성하기 때문에 타겟 단어 이후에 있는 단어들은 보지 않고 단어를 예측해야 하므로 마스킹 한다.

     

    Encoder-Decoder Attention

    번역할 문장과 번역된 문장의 정보 관계를 엮어주는 부분이다. 

     

    'AI 부트캠프' 카테고리의 다른 글

    [n431] CNN과 전이학습  (0) 2021.12.31
    [n425] 자연어 처리 요약  (0) 2021.12.30
    [n423] RNN, LSTM  (0) 2021.12.28
    [n422] Distributed Representation  (0) 2021.12.27
    [n421] Count-based Representation  (0) 2021.12.24

    댓글