2017년 겨울에 나온 논문으로 NIPS에 등재된, 기계번역을 공부한다면 공부했을 논문이다.
학부생 인턴 때도 공부하려다가 어영부영 넘어갔던 논문,, 드디어 각 잡고 공부하여 정리했다.
입력 문장을 하나의 벡터로 압축하는 과정없이, RNN과 CNN 구조를 활용하지도 않고
오직 Attention 기법을 적용한 Encoder, Decoder를 반복하였다. 이를 통해 연산량을 줄이고,
성능 역시 개선시킨 Transformer에 대한 논문이다.
모델 아키텍처는 위 사진과 같다.
가장 먼저 좌측과 우측에 각각 N번씩 반복되는 인코더와 디코더 구조가 눈에 띈다.
그림에서도 확인할 수 있듯이 Transformer 구조의 핵심은 다음과 같이 정리된다.
Positional Encoding
Encoder Self-Attention
Decoder Masked Self-Attention
Encoder-Decoder Attention
Multi-Head Attention
Scaled Dot-product Attention
+ Label Smoothing
해당 논문을 이해하기 위한 사전지식부터 paper 내용까지 하나씩 정리해보자.
사전지식
RNN - LSTM - Seq2Seq - Attention - Transformer - GPT1 - BERT - GPT3
(2014) (2015) (2017) (2018) (2019) (2020)
Seq2Seq까지는 Source 문장을 전부 고정된 크기의 Vector로 정보를 압축해야 한다.
Transformer부터는 RNN 구조 자체를 사용할 필요없이 Attention 기법으로만 모델을 구성
→ 입력 시퀀스 전체에서 정보를 추출하는 방향
Seq2Seq 모델의 문제점
Seq2Seq까지는 Source 문장을 전부 고정된 크기의 Vector에 정보를 압축해야 한다.
→ Bottleneck 발생 문제 → Decoder 부분에서 Context Vector를 계속 참조하게 만들면
성능이 개선되지만 여전히 Source 문장을 Context Vector 하나로 압축해야 한다.
(참고)
단어가 입력될 때마다 Hidden State 갱신, 마지막 단어가 들어올 때 h가 입력문장 전체 대표
Decoder 파트에서 하나의 문맥 벡터에 대한 정보만 활용하는 것이 아니라
출력 단어를 만들 때마다 소스문장의 출력값 전부를 입력으로 받으면 어떨까?
→ 출력 전부(hidden state)를 특정 행렬에 기록했다가 매번 출력할 때마다 이를 반영하자.
→ Decoder hidden state 갱신할 때 전단계 입력 파트의 hidden state 값과
행렬곱을 취해 묶음으로써 에너지 값 생성, 이를 softmax 활성화 함수를 통해
현재 단어를 출력하기 위해 source 문장의 어느 부분을 더 반영하면 되는지 고려
Seq2Seq with Attention : Decoder
i : 디코더가 처리하고 있는 인덱스
j : 인코더 파트의 출력 인덱스
- 에너지 : (i)번째를 위해 (i-1)번째까지의 디코더 정보와 인코더의 모든 출력값을 활용해서 구함
- 즉, 어떤 h값과 가장 많은 연관성을 가지는 지를 에너지 통해 구하고,
여기에 Softmax를 취해서 확률값을 구하여 이를 가중치로 활용 - 상기 가중치를 h값과 곱해서 가중치가 반영된 인코더의 출력 결과를 더해서 활용하는 것 !
에너지 : 소스 문장에서 나온 모든 출력 중 어떤 값과 가장 연관성이 있는지 나타낸 값
가중치 : 에너지에 Softmax를 취해 상대적인 확률값을 구한 것
-> 가중치를 각 입력 문장의 hidden state와 곱해서 더한 것을 디코더의 입력에 같이 넣겠다 !
+) 해당 Attention 가중치를 통해 각 출력이 어떤 입력을 주로 취하여 생성되었는지 시각화 가능
Paper
No RNN or CNN → 문장 내 각 단어의 순서 정보를 주기 어려움
Positional Encoding (Element-wise Summation)
Encoder의 Attention은 Self-Attention
각 단어가 서로에게 어떤 연관성을 가지는 지 구하기 위함
전반적인 입력 문장의 문맥을 학습하도록 만드는 것
성능향상을 위한 Residual Learning
ResNet처럼 특정 레이어 건너뛰어 입력하게 만드는 Residual Connection
→ 기존 정보 입력 받으면서 잔여된 부분만 학습
→ 학습 난이도 낮고, 초기 학습 속도 빠르고, Global Optima 찾을 확률 높고 !
Positional Encoding
Transformer는 RNN, CNN 모두 사용하지 않기 때문에 위치 정보를 따로 부여해야 한다.
나름 정리는 했지만 면접 질문이 들어왔을 때 대답하거나
누군가에게 설명할 수 있을 정도로 이해하진 못한 느낌이다.
더 읽어보고, 다른 사람들의 리뷰와 설명 영상들을 더 찾아봐야겠다.
[참고자료]
https://roytravel.tistory.com/107
https://welcome-to-dewy-world.tistory.com/108
https://www.youtube.com/watch?v=AA621UofTUA&t=1222s
'대외활동 > 포스텍 인공지능연구원 연구인턴 & 연장' 카테고리의 다른 글
[ 포스텍 인공지능연구원 연구인턴 ]Voice Conversion 개념 및 MaskCycleGAN-VC 논문 리뷰 (0) | 2022.06.06 |
---|---|
[ 포스텍 인공지능연구원 연구인턴 ]GAN 개념과 관련 논문 정리 (0) | 2022.06.05 |
[ 포스텍 인공지능연구원 연구인턴 ] Acoustic Feature, MelGAN 논문 정리 및 코드 실습 (0) | 2022.06.02 |
[ 포스텍 인공지능연구원 연구인턴 ] 블랙박스 영상 내 흔들림 탐지 (0) | 2022.05.26 |
[ 포스텍 인공지능연구원 연구인턴 ] 포항으로 (0) | 2022.05.24 |