일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- deep learning
- XOR
- Transformer
- pytorch
- Classificaion
- Attention
- neural net
- Set Transformer
- word2vec
- Self-loop attention
- overfitting
- elif
- machine learning
- NLP
- sigmoid
- GNN
- sentence embedding
- python practice
- abstraction
- Python
- Today
- Total
Research Notes
[Paper Review] Transformer: Attention is All you Need 본문
< Transformer: Attention is All you Need >
- Transformer는 구글이 발표한 논문인 "Attention is All you Need"에서 나온 모델이며, Encoder-Decoder를 따르면서도 Attention만으로 구현한 모델이며 자연어 처리의 한 획을 그은 개념입니다.
- 자연어처리(NLP: Natural Language Processing) 분야를 발전시킨 모델이며, BERT 등의 최신 Text 모델에서 기본적으로 사용하는 구조입니다.
- 이 논문을 읽는 이유: 모델을 Explainable하게 설계할 수 있는 Attention 개념을 공부하여, 이 개념이 적용된 다른 DL(Deep Learning) 알고리즘을 이해하여 응용하기 위함입니다.
< 목차 >
- 기존 자연어처리 모델의 한계
- Transformer
- Transformer의 동작 원리
1. 기존 자연어 처리 모델의 한계
- 기존 딥러닝 기반 기계 번역의 발전 과정은 아래와 같음
1) Seq2Seq의 한계
- Context Vector에 소스 문장의 정보를 압축함. 병목이 발생하여 성능 하락
- 하나의 문맥 벡터가 소스 문장의 모든 정보를 다 내포함 -> 성능 저하
2) Seq2Seq with Attention
- Seq2Seq의 한계를 해결하기 위해 나온 방법으로, 매번 소스 문장에서의 출력 전부를 입력으로 받음
- Seq2Seq 모델에 Attention 매커니즘을 사용함
- Decoder가 Encoder의 모든 출력을 참고한다는 뜻의 의미는 Encoder에 weighted sum(W Vector)가 모든 소스 문장 전체를 반영했다는 것. Decoder로 입력된 언어를 번역할 때, 이를 참고한다는 뜻임
- Seq2Seq with Attention: Decoder
- Decoder에서의 Attention 매커니즘: 인코더의 출력 중 어떤 단어가 중요한지 계산함.
- 에너지(Energy) : decoder에서 현재 처리하고 있는 단어가 어떤 기존에 학습된 encoder에 존재하는 단어 중 어떤 것과 연관성이 높은지 파악하기 위한 벡터
- s: decoder가 출력 단어를 만들기 위해 사용한 hidden state들, h: encoder의 hidden state
- i : 현재 Decoder가 처리중인 인덱스 / j : 각 Encoder가 출력한 인덱스
- 가중치(Weight) : encoder에 있는 단어 중, h와의 연관성을 비율로 나타낸 것. ( softmax를 취해서 각 단어별 확률을 구함)
- 가중치에 hidden State를 weighted sum 해서 Decoder에 넣어줌 (그림 참고)
2. Transformer
1) Transformer란?
- Transformer는 문장의 위치 정보를 표현하기 위해 Positional Encoding을 사용함
- Encoder와 Decoder로 구성되며, 다양한 Attention 과정을 N개의 레이어를 반복하여 학습함
3. Transformer의 동작 원리
1) 입력 값의 Embedding 과정
- 전통적인 embedding 과정
- 각 단어를 적은 차원으로 표현함. 아래의 그림과 같이 각 단어를 embedding dimension에 맞게 변형함
- Transformer의 embedding 방식: Positional Encoding
- Transformer는 위치 정보를 표현하기 위한 방법이었던 RNN, CNN을 사용하지 않음. 이를 위해 위치 정보를 포함하는 임베딩 방식인 Positional Encoding을 사용함
- 각 단어의 정보는 정보대로 layer에 입력해주고, 단어의 위치 정보는 positional encoding을 통해 행렬 형태로 입력함
- positional encoding은 주기 함수(sin, cos)를 활용한 공식을 사용하여 각 단어의 상대적인 위치 정보를 네트워크에 입력함
2) 인코더 (Encoder)
- encoder에서는 Attention과 Normalization 과정을 반복함
- 각 레이어별로 파라미터는 상이함 / 입력과 출력의 dimension은 동일함
- Encoder에서는 embedding이 끝난 이후에 Attention을 진행함 (입력 문장의 정보와 위치 정보를 받음)
- 또한 모델의 성능 향상을 위해 Residual Learning을 사용함
- Residual Learning이란 특정 레이어를 건너띄어서 입력된 값을 그대로 학습시키는 것. 원래는 레이어에서 입력 값이 갱신되지만, 한 레이어를 건너 띄어서 갱신되지 않은 잔여 부분을 학습함.
- Global Optimal한 값을 찾을 확률이 높아짐
- Transformer의 Encoder 동작 원리는 아래와 같음
- 여러 Layer를 반복하며 학습함
- 한 레이어에 Attention, Normalization, Residual Learning이 수행됨
- 또한, Encoder의 마지막 Layer Output이 Decoder에 입력됨
3) 인코더(Encoder)와 디코더(Decoder)의 구조
- 핵심: encoder 마지막 레이어의 output을 매번 Decoder의 각 Layer에 넣어줌
- 이러한 과정을 통해, decoder에 입력된 문장 중, encoder에 학습된 정보를 바탕으로 초점을 둬야하는 부분을 attention함
- encoder의 output: decoder의 layer의 input
- decoder의 output: 입력된 문장의 번역 값이 됨
- decoder의 한 layer에는 Attention이 두 개가 있음
- 첫 번째 Multi-head Attention: self-attention
- self-attention: decoder에 입력된 단어 간 서로 어떤 영향을 끼치는지 학습함
- 두 번째 Multi-head Attention: encoder-decoder attention
- encoder-decoder attention: decoder에 입력된 문장과 encoder에서 학습된 단어들간의 관계를 확인하는 attention 과정
- decoder도 encoder과 동일하게 여러개의 레이어로 구성됨
- 첫 번째 Multi-head Attention: self-attention
- 또한 encoder과 decoder에서는 문장 단위로 학습되기 때문에 처리 속도가 매우 빠름
4) 어텐션(Attention)
- encoder와 decoder는 Multi-Head Attention을 사용함
- Attention을 위해서는 세 가지 입력 요소가 필요함
- 쿼리(Query) : 물어보는 주체 (decoder에 입력된 값)
- 키(Key) : 물어보는 대상 (decoder에 입력된 값이 encoder에 있는 값 중 어떤 것과 연관이 높은지 질문하고자 하는 대상)
- 값(Value) : random variable
- 예를 들어, "I am a teacher" 이라는 문장을 입력받았다고 할 때, 각 단어가 다른 단어들과 어떤 연관성을 가지는지 파악하고 싶다고 하자
- 여기에서 "I"를 다른 단어와 연관성을 알고싶은 대상이라고 하면, 이것이 Query 이다.
- 이외 "I", "am", "a", "teacher"은 "I"와의 연관성을 파악하기 위한 대상이므로, Key 이다.
아래는 Attention 매커니즘의 구조이다.
- Scaled Dot-Product Attention 구조
- Query, Key의 행렬곱 → 스케일링 → 필요에 따라 마스킹 → Softmax로 각 Key들 중, 어떤 Key와 가장 높은 연관성을 가지는지 확률을 계산함 → 나온 확률과 Value 값을 행렬곱 함
- Multi-Head Attention 구조
- V, K, Q가 각각 Linear하게 존재하며, Scaled Dot-Product Attention이 각각의 h(Head) 수 만큼 존재함. 즉, h개의 서로 다른 K, V, Q로 구분된다는 뜻임. 이를 통해 h개의 attention concept이 학습됨
- 학습된 개별 attention들을 concat하고, Output을 Linear한 형태로 표현하여 output을 출력함
- Multihead(Q,K,V)를 수행하여도 차원이 동일하게 유지됨
- Attention 동작 원리 예시
- Attention의 종류
- Encoder Self-Attention : 입력된 문장에서 각 단어가 서로 어떤 연관성을 가지는지 전체 문장의 representation을 학습하는 것
- Masked Decoder Self Attention : decoder 파트에서 필요한 부분만 학습하도록 masking하여 학습하는 방법
- Encoder-Decoder Attention : Query(Decoder 입력)가 여러 Key/Value(Encoder 출력) 중, 어떤 것들과 가장 연관성이 높은지 Attention하는 방법
< Lessons Learned >
Attention이라는 개념이 복잡해보이지만, 사실은 엄청 심플했다. 번역을 위한 문장 중 단어 하나하나를 encoder에서 참고하여 각각의 Attention을 행렬곱으로 구하여 Decoder를 거친 후 번역이 되는 개념이다.
GAT (Graph Attention Network)를 공부하기 이전에 Attention을 공부하였다. Attention이 왜 자연어처리, 비전 등 다양한 분야에 적용되고 있는지 너무 잘 이해되었다. GAT는 Graph Data를 학습시킬 때, Attention 개념이 적용된 것이다. 아직 GAT를 공부하지는 않았지만, 유추해보자면 기존에 학습된 Graph 노드 중(Encoder) 연관성이 높은 노드들을 reference하여 예측하고자 하는 값을 Decoder를 통해 출력하는 컨셉일 것 같다.
Attention은 XAI(Explainable AI) 분야에서도 큰 획을 그었을 것 같다. Attention을 이용하면 encoder에서 참조한 부분이 어디인지 파악할 수 있기 때문에, 엄청 유용하게 사용될 것으로 보인다. Attention이 encoder에서 참조한 부분이 어떻게 표현될지도 궁금하다. Attention을 이용한 DL 알고리즘을 사용할 때, 내가 분석한 내용을 청중에게 어떻게 보여줄 수 있을지는 더 공부를 해봐야 할 것 같다.
< Reference >
Attention Is All You Need
The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new
arxiv.org
- Attention is All You Need 논문 리뷰 유튜브: https://www.youtube.com/watch?v=AA621UofTUA&t=1008s