기계번역 (Neural machine translation, NMT) - 입력된 언어를 다른 언어로 번역하는 Task e.g) 파파고
자연어와 컴퓨터언어 - 자연어, 사람이 이해할 수 있는 데이터 : 텍스트 형태 e.g) 이순신 장군은 우리나라의 영웅이다. - 컴퓨터 언어, 컴퓨터가 이해할 수 있는 데이터 : 숫자 형태 e.g) [2, 10661, 2073, 7339, 2079, 7073, 28674, 3]
인코더 (Encoder) - 사람이 이해할 수 있는 자연어를 컴퓨터가 이해할 수 있는 컴퓨터 언어로 변환해주는 장치 - 아래 그림과 같이, 입력 시퀀스 문장을 고정된 길이의 벡터 (Context vector)로 변환
디코더 (Decoder) - 컴퓨터가 이해할 수 있는 컴퓨터 언어를 사람이 이해할 수 있는 자연어로 변환해주는 장치 - 아래 그림과 같이, 고정된 길이의 벡터 (Context vector)를 입력으로 받아, 출력 문장으로 변환
Seq2Seq (Sequence to Sequence) 구조 - 인코더 (Encoder)와 디코더 (Decoder) 를 결합한 구조 - 기계번역 기준, 입력 언어를 고정된 길이의 벡터로 변환한 후에, (고정된 길이의 벡터를) 타깃 언어로 번역하는 구조
RNN (Recurrent Neural Network)
RNN
- 현재 타임 스텝 (t)에서 이전 스텝 (t-1)까지의 정보들을 기반으로 출력값을 계산하는 딥러닝 모델 - 입력값과 출력값의 갯수에 따라서 5가지로 나눔 - One-to-one , Vanilla RNN 예시로는 이미지분류 - One-to-many 예시로는 음악이나 텍스트 생성 - Many-to-one 예시 예시로는 언어모델 (Language Modeling), 감성 분류 - Many-to-many (Tx = Ty) 예시로는 개체명인식 (NER) - Many-to-many (Tx != Ty) 예시로는 기계번역 (NMT)
장점 - 시퀀스 (squence) 데이터의 시퀀셜한 (순서대로 나열되는) 특성을 학습 - 타임스텝마다 이전 매개변수를 공유하기 때문에 지난 정보들을 고려하여 계산 - 입출력 시퀀스의 길이가 다른 것이 가능하여, 다양한 길이의 입출력을 처리하는데 용이함
단점 - 시퀀스의 길이가 길어질수록 과거의 정보들을 잘 기억하지 못하는 장기 의존성 문제 (Long-term dependency)가 존재 - 시퀀스의 앞선 타임스텝들 계산에 대한 종속성으로 인하여 계산 속도가 느림 - 학습과정에서 그레디언트 소실 문제 (Gradient Vanishing Problem)가 발생
LSTM (Long-Short-Term-Memory)
- Vanilla RNN 의 단점인 장기 의존성 문제를 보완하여 나온 RNN 모델 - LSTM 은 cell state 에 핵심 정보들을 모두 담아두고, 각 타임 스텝 (time step)마다 필요한 정보만을 hidden state 에 업데이트하여 사용되도록 학습 - 오차역전파 (backpropagation) 진행시 RNN 은 그레디언트 소실 문제 (Gradient Vanishing Problem)가 있었지만, LSTM 은 이 문제를 cell state 와 게이트 (gate)라는 개념을 통해 그레디언트 소실 문제를 개선함
GRU(Gated Recurrent Unit)
- LSTM 모델 구조를 더 단순화한 RNN 모델 - LSTM 은 2가지 상태 (state)와 3가지 게이트 (gate)를 활용한 반면, GRU 는 1가지 상태 (state)와 2가지 게이트 (gate)를 활용함 - 다만 cell state 가 없이 하나의 state 만 사용하여, 장기 의존성 문제에는 LSTM 보다 취약함
Attention
사람이 사물을 보는 방식 - 사람은 사물을 볼 때, 시야 내의 모든 부분을 동일하게 보지않고 일부에 집중 (Attention)하게된다
RNN + Attention - Seq2Seq RNN 구조 위에 Attention 구조를 추가한 형태 - 디코더의 특정 예측 시점에서 디코더의 hidden state 가 인코더의 각 스텝의 hidden state 중 어느것에 유사한 지 계산하여, 디코더가 어디에 집중 (Attention)할 지 반영하는 형태로 학습을 고도화
Transformer
- “Attention is All you need” 논문에서 소개된 모델
기억해야할 포인트 - Seq2Seq Model - Multi-head Attention - Self-Attention - Positional Encoding
Self-Attention
- 같은 문장 (Self) 내의 토큰들끼리 어텐션을 취하는 것 - 기존 어텐션은 인코더-디코더간 어텐션이었던 반면, 인코더/디코더 각각에 입력된 문장 내에서 어텐션 진행 - 아래 과정을 통해서 Attention 이 동작하며, 기존 RNN + Attention 구조와 달리 RNN 이 존재하지 않는다.
Multi-head Attention
- 입력 문장의 토큰 간의 다양한 유형의 종속성을 포착하기 위해, Attention (Query, Key, Value) 을 여러 개의 Head 로 나눠서 병렬로 계산 - 도출된 Attention Value 들은 마지막에 concatenate 를 통해 하나로 연결 - 전체 hidden_size 를 num_attention_heads 로 나눠서 학습을 진행 - 단, hidden_size 가 num_attention_heads 로 나눠떨어져야함 e.g) hidden_size = 1,024 & num_attention_heads = 8 -> attention_head_size = 128 만약, num_attention_heads 가 7이면 에러 발생
Query,Key,Value 연산하기
1. 입력값 X 에 대해 가중치 (W_q, W_k, W_v)를 곱해서 Q, K , V 를 생성 2. Query 에 대해서 각각의 Key 와 내적하여 attention scores 계산 3. 내적한 값에 scaling 및 softmax 를 취해준다 4. softmax 까지 취해준 attention_probs 를 Value 에 곱해준다.
Positional Encoding - RNN, CNN 과 달리, (Transformer는) 입력 시퀀스의 단어들이 어떤 순서로 들어왔는지 에 대한 정보가 누락되기에 이를 보완하기 위해 추가된 기능 - sin,cos 과 같은 주기함수를 통해 주기를 가지는 값을 제공 - Input embedding 값에 더하여 인코더와 디코더의 입력값으로 입력