일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MT-DNN
- Eliza
- scaled dot-product attention
- Transformers
- 취업
- multi-head attention
- fine-tuning
- beam search
- Transformer
- layer normalization
- KLUE-RE
- Chatbot
- ai-tech
- Relation Extraction
- FSML
- NLP
- BELU
- BoostCamp
- GPT-1
- pytorch
- huggingface
- Conversation System
- Dialogue System
- bert
- boj
- Prompt Tuning with Rules for Text Classification
- 백준
- BLEU Score
- KLUE
- text classification
- Today
- Total
dukim's blog
[WK07-Day031][21.09.14.Tue] Transformer 주요 내용 요약 및 구조 개선에 대한 후속 연구, 논문 선정 팁 본문
[WK07-Day031][21.09.14.Tue] Transformer 주요 내용 요약 및 구조 개선에 대한 후속 연구, 논문 선정 팁
eliza.dukim 2021. 9. 18. 13:57Intro
- 이번주는 명훈님 논문 읽기 모임 내용 + 강의 및 과제 내용 + 멘토링 논문 읽기로 계속 진행함
- NLP 논문 읽기 모임 - Transformer
- 피어세션 - Transformer
- 논문 읽기와 강의 내용을 따로 정리하지 않고 하나로 정리
- 멘토링 - 논문 읽기 - BART, XLNet
학습 내용
[논문 읽기 모임] 02. Transformer
- Transformer는 고전이다. 다시 볼 때마다 새롭고, 한 줄 한 줄 곱씹어야 될 만한 논문이기 때문. 이번 명훈님 발표 자료를 보니 내가 못 봤던 포인트들이 보였다. 한 번에 다 이해는 못 했지만 현재 이해한 수준에서만 몇 가지 정리해본다.
contribution
Sequence Transduction 문제에 대해 기존엔 Attention이 적용된 RNN or CNN 기반의 Encoder-Decoder 모듈을 적용해왔다.
RNN의 time step을 순차적으로 계산하기 때문에 병렬연산의 이점을 취하지 못 한다는 문제점이 있었음
Transformer에서는 RNN, CNN을 이용하지 않고 Attention만을 이용한 Encoder-Decoder 구조를 제안
병렬화로 학습 속도가 빨라졌으며, Neural 기반으로 기존 통계 기반 방식(PBSMT)을 뛰어넘는 SoTA 달성
2021 현재 NLP 분야 뿐만 아니라 AI 전반에서 중요한 아키텍쳐
Attention Mechanism
- Encoder-Decoder 기반 연구에 Attention Mechanism 추가해 성능 향상
RNNSearch(Bahdanau Attention), Neural Machine Translation by Jointly Learning to Align and Translate, ICLR 2015
Structured Attention Network, Structured Attention Network, ICLR 2017 - Transformer 이전에도 Attention 만을 이용한 논문이 존재했었다.
Decomposable Attention, A Decomposable Attention Model for Natural Language Inference, EMNLP 2016
End-to-End Memory Networks, End-to-End Memory Networks, NIPS 2015
[질문] 해당 논문에서의 multi-hop 개념이 transformer의 layer 적층 형태와 관련있는 건가?
- Encoder-Decoder 기반 연구에 Attention Mechanism 추가해 성능 향상
몇 가지 새로웠던 포인트들
Positional Embeddings vs. Positional Encodings
- Embedding: Learnable parameter
- Encoding: 고정된 상수값
- 이후 논문인 BERT에서는 Positional Embedding 사용함
- Absolute Positional Embedding : 최초 Input Embedding에 더하는 방식(huggingface 코드 링크)
- Relative Positional Embedding : Transformer Block의 Attention Matrix에 직접 주입하는 방식(huggingface 코드 링크)
Multi-Head Attention에서 Multi-Head를 쓰는 이유
- 직관: 입력 시퀀스의 서로 다른 부분을 참조, 다양한 표현, 앙상블
- 논문 내에선 이렇게 주장함: "Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions."
- 참고: Jay Alammar - The Illustrated Transformer
Multi-Head Attention에 대한 몇 가지 insight
Self-Attention은 symmetric 하지 않음
직관적인 이해와는 다르게, MHSA의 각각의 head는 subspace 뿐만 아니라 전체 정보를 보존한다는 연구 결과(즉 각각의 정보가 서로 다른 관점의 정보만을 가지는 것이 아님)
각각의 HEAD 마다 보존한 전체 정보 가운데 어떤 정보에 가중치를 둘지가 다르다는 연구 결과
- Voita et al., Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned, ACL 2019
- Multi-Head Attention을 Pruning하는 연구
- 중요한 head를 다음 세 가지로 파악
- positional(인접 토큰에 집중)
- syntactic(특정한 문법적 관계에 집중)
- rare words(잘 등장하지 않는 토큰에 집중)
- 이 논문은 읽어 볼 필요 있음
- 참고: Lena Voita - The Story of Heads
Multi-Head를 concat 후에 Attention Matrix는 low-rank.
- Cordonnier et al., Multi-Head Attention: Collaborate Instead of Concatenate, arXiv:2006.16362v2, 2020
- ICLR 2021에 제출되었으나 실험적 근거가 부족하여 기각된 논문
- 각 head들의 query/key representation 간에 redundancy 존재함을 밝힘(공통된 representation을 배우기 때문에 concat 한 attention matrix는 Low-Rank)
- 모델 퍼포먼스 손상 없이 기존 MHA의 비효율성 완화를 위한 방법 제시
- 참고 자료 : 오창대님의 논문 리뷰 포스트
Cross-Attention이 Multi-Head에 더욱 민감
- Michel et al., Are Sixteen Heads Really Better than One?, NIPS 2019
- transformer large 모델은 6개 레이어에서 16개 head를 사용
- 그러나 모든 head가 성능에 영향을 끼치는지에 대한 의문을 가지고 train과 test 타임 모두에서 head를 pruning하며 실험하였고, test 타임엔 대부분의 head가 나머지가 주는 정보와 중복되는 정보를 제공하며, train 타임엔 초기 1, 2epoch에선 대부분의 head가 동일하게 중요하나 이후 10 epoch 부터는 중요하지 않은 head가 어느정도 결정됨
- 기계 번역 케이스에서 cross-attention의 head 를 60% 이상 pruning하는 시점부터 성능이 급격하게 저하됨
- 참고 : 아기여우의 자기계발로그 - [논문리뷰] Are Sixteen Heads Really Better than One?
Softmax를 취한 후의 Attention Matrix는 Low-Rank
- Wang, Sinong, et al. Linformer: Self-attention with linear complexity. arXiv preprint arXiv:2006.04768, 2020
- 아래 수식에서 P의 domestic한 eigenvalue로 Self-Attention Matrix 복원(? 내용 파악 필요)
- Further Reading:
- Phil Wang의 linear attention transformer 구현체](https://github.com/lucidrains/linear-attention-transformer), 위에서 소개된 논문 이외의 구현체도 포함함
- 진명훈님 논문 리뷰
Skip-Connection & Two-Layer Feed Foward Network & Layer Normalization
- Rank Collapse
- Dong, Yihe, Jean-Baptiste Cordonnier, and Andreas Loukas. Attention is not all you need: Pure attention loses rank doubly exponentially with depth, ICML 2021
- Rank Collapse: MLP, Skip-Connection이 없으면 Attention Matrix가 기하급수적으로 1-rank matrix로 수렴하는 문제 발생
- Skip-Connection이 이러한 문제를 완화하는 역할
- Feed-Forward-Network 또한 해당 문제를 완화(hidden dimension을 4배 늘린 크기로 변환 후 다시 원래 크기로 변환)
- Layer Normalization은 Rank Collapse엔 도움이 되지 않음
- 참고 : RANK COLLAPSE IN DEEP LEARNING
- 이 부분은 정리를 다시 할 필요가 있음 아직 완전히 정리 안됌
Why Self-Attention
- Sequence transduction 문제에서 Recurrent와 Convolutional 방식에 비해 다음 세 가지 측면이 개선됨
레이어당 계산 복잡도
병렬 처리 가능한 연산량(즉 순차적 연산 수행의 최소 요구량)
장기 의존성 문제
아래 table 처럼 모든 self-attention layer는 각각의 위치가 직접 연결되어 있으므로 O(1)번의 연산만으로 접근 가능
계산복잡도의 관점에서 self-attention은 시퀀스 길이 $n$ 보다 representation dimensionality $d$가 작을 때, recurrent보다 더 빠름
더 긴 시퀀스 길이를 처리하기 위해서는 $r$개의 주변 단어에 대해서만 attention을 제한하는 방식으로 처리
(n * d) @ (d * n)의 연산 개수는 d 차원의 원소끼리 각각 곱하는 연산 d번을 n * n 번 수행하므로 레이어당 복잡도는 $O(n^2 \cdot d)$이 됨
Recurrent 방식은 매번 d차원의 hidden state vector와 $W_hh$를 곱하고 이를 n번 연산하므로 $O(n \cdot d^2)$
Convolutional 방식은 kernel width $k$가 $n$보다 작으면 input과 output의 모든 pair를 한 번에 보는 것이 불가능하므로 $O(n / k)$번의 커널을 쌓거나, dilated convolutions의 경우엔 $O(log_k(n))$개의 커널을 쌓아야함(가장 먼 두 지점을 한 번에 보기 위한 maximum path length)
Convolutional layer의 연산이 recurrent layer보다 비싼이유가 $k$가 곱해지기 떄문. (왜 $O(k \cdot n \cdot d^2)$가 나왔는지는 아직 파악 못 함)
Training
학습 데이터셋과 하드웨어 사양 및 학습 스케쥴에 대한 설명은 논문을 참고
Learning Rate Scheduling : Warm-up 기법 적용 여부가 학습에 민감하게 영향을 끼침(아래 후속 연구에서 나온 내용)
후속 연구(Xiong et al., On Layer Normalization in the Transformer Architecture, ICML 2020)
Post-Layer Normalization vs Pre-Layer Normalization에 대한 내용
Transformer 학습에서 learning rate warm-up이 학습에 필요한 이유가 weight에 대한 gradient scale이 크기 떄문이며 Layer Normalization 위치를 바꿔서 학습을 쉽게 할 수 있다고 보고함
Transformer의 Layer Normalization은 Post-Layer Normalization(MHSA과 FFN 뒤에 위치)으로 skip-connection 결과와 더한 뒤 적용하기 떄문에 activation 값의 scale이 일정하게 유지됨
Pre-LN을 쓸 경우에는 Normalization한 값을 계속해서 skip-connection한 값에 더해주므로 층수에 비례하여 값이 점점 커지게 되며, layer normalization의 scaling이 점점 줄어들게되고, 이에 따라 layer normalization의 gradient의 upper bound가 층수에 반비례하는 꼴이 되어 더 높은 층의 layer일수록 gradient scale이 작아짐
결론적으로 Pre-LN을 쓰면 learning rate를 warm-up 없이 학습 가능
그러나 일부 적용에 주의해야하는 경우도 있으니 (참고)[https://hsleeword.wordpress.com/2020/01/07/on-layer-normalization-in-the-transformer-architecture/]
아직 이 주제는 계속해서 논의가 되고 있는 내용으로 어느것이 확실히 좋다는 모름
Post-LN은 학습시 각 레이어의 출력결과 변동폭이 커서 대박 아님 쪽박이 될 수 있고 Pre-LN은 변동폭이 너무 작아 학습은 안정적이지만 최고 성능에 도달하지 못할 수 있다는 연구도 본 것 같은데 제목이 기억이 안납니다...
참고
Results
WMT14 En->Gr, En->Fr benchmark. (영독 번역이 더 어려운 점 참고)
Beam Search Setting
- Beam size $k$ = 4
- length penalty $alpha$ = 0.6
- Maximum output length = input length + 50
결과
- Checkpoint Averaging(Ensemble)을 적용한 결과
- 영독간 번역 성능에서 SoTA 달성(28.4), 영프간 번역에서는 기존 SoTA에 근접한 성능을 보이면서 더 적은 연산량 사용
제안하는 구조의 효과 확인을 위한 추가 실험(No chekcpoint averaging)
- (A): Attention Heads의 개수
- (B): Attention key size $d_k$를 줄일수록 성능 저하
- (C): Layer의 개수, $d_{model} & d_k & d_v$, $d_{ff}$의 크기: 모델 사이즈가 클 수록 높은 성능
- (D): Drop out 적용 여부: 더 높은 일반화 성능
- (E): Positional Embedding 적용 : Positional Encoding 방식과 큰 차이 없음
피어세션
Transformer 학습 내용 공유
Attention 종류
Additive Attention과 Scaled Dot-Product Attention
- 이론적인 복잡도는 동일하지만 Scaled Dot-Product Attention이 빠르고 메모리 효율적
- Additive Attention은 Query와 Key를 Concat 하므로 한 번에 메모리에 적재하는 양이 많아 비효율적
- Scaling을 안 해주었을 때는 Additive가 성능이 더 높다(논문에서는 이에 대한 분석은 하지 않고 주석을 추측 추가).
[멘토링]
- BART, XLNet에 대한 논문 리뷰: 별도 포스팅 예정
- 논문 리딩 팁
논문 리딩 팁
- 단어나 개념에 대해 막힌다고 해서 꼼꼼하게 찾지말고 일단 체크 후 스킵하면서 전체 흐름 읽기. 저자가 하려는 말을 파악하는 것이 중요
- 중요 논문은 여러번 읽기(e.g. Transformer)
- 논문을 1회 이상 보는 경우
- 이 문단의 어떤 점을 모르겠다 체크
- 소제목별 주장 정리해 구조화
- 논문을 2회 이상 보는 경우
- 수식 꼼꼼히(워딩과 수식, 코드와의 align), 타 논문과의 차이점에 집중
- 전체 그림을 읽고 디테일 채워가듯이 읽기
- 관심 분야에 대한 선택과 집중
특정 분야에서 어떤 논문을 읽어야할지 모르겠다면
- Papers with code에서 유명 벤치마크 데이터셋 기준 SoTA 논문 5개 정도 뽑아 main result table에서 중복이 가장 많이되는 논문 읽기
- "Awesome + 관심 분야"로 검색 후 최신 논문부터
- Conference "Call for paper"에서 관심 분야 논문 찾기
- 중요한 논문이 정해지면 최신 논문부터 읽어 내려갈 것(18, 19년도 부터 읽으면 비효율적, 어차피 최신 논문에서 related works에서 설명함)
- 위의 팁은 Downstream task 논문에 유용한 팁이고, PLM은 method가 계속 바뀌기 때문에 순서대로 읽는 게 용이하다.
과제 수행
선택과제 2
- fairseq을 활용해 transformer로 번역모델을 학습하는 문제
- 그냥 돌렸더니 BLEU score 20점대 기록
- Beam size $k$ = 5 -> 10으로 바꿔도 성능에 큰 차이가 없었음
- Transformer 논문에서 제안된 hyperparameter로 수정 후, 10 epoch(약 10,000 step)까지만 학습, Beam size k = 10일 때 BLEU 31 점 달성
학습 회고
- 논문 리뷰 모임 시간에 Layer Normalization에서 feature 방향으로 normalize한 후 feature 마다 affine transformation 하는 것이 어색하다. 해당 내용을 정리할 필요가 있다.
- Transformer의 구조 개선을 위한 후속 연구들을 다 이해하지 못 했다. 주요 연구 위주로 정리할 필요가 있다.
- Beam Search에서 length penalty 개념 정리가 필요하다.