이 포스트는 책 '한국어 임베딩(자연어 처리 모델의 성능을 높이는 핵심 비결 Word2Vec에서 ELMo, BERT까지, 이기창 저)'을 기반으로 작성되었습니다.
구글 NIPS에서 공개한 트랜스포머 네트워크는 자연어처리에 큰 획을 그었다. 이후 개발된 BERT, GPT 등의 모델은 모두 이 트랜스포머 블록을 기본 모델로 사용하고 있다.
(논문 pdf : https://arxiv.org/pdf/1706.03762.pdf)
Scaled Dot-Product Attention
Transformer block의 주 요소 중 하나인 Scaled Dot-Product Attention은 아래 수식을 통해 계산된다.
행렬 형태인 입력 X는 (입력 문장 단어 수) * (입력 임베딩 차원 수) 크기를 가지고 있으며,
쿼리(Query), 키(Key), 값(Value)이 핵심으로 이루어져 있다.
이것이 단어들 사이 의미적, 문법적 관계를 도출해낼 수 있는 까닭은 다음과 같다.
- dot-product
: 코사인 유사도를 구할 때 내적을 이용하듯이, 쿼리와 키의 내적 계산을 통해 벡터 공간상 가까운 정도를 계산한다.
내적 값이 커지는 방향으로 학습이 진행된다. - attention
: 쿼리 단어들과 키 단어들이 일치하는 attention을 self-attention이라고 한다.
같은 문장 안에서 모든 단어 쌍 사이 의미, 문법적 관계 도출한다. - scale
: 키 행렬 차원 수 (d_k) 제곱근으로 나눠 스케일을 맞춰준다.
이는 쿼리-키 내적 행렬 분산을 줄여 softmax gradient가 지나치게 작아지는 것을 방지한다.
Attention을 계산하는 식에서 softmax 확률은 가중치 역할을 하며, 각 값 벡터를 가중합한다고 볼 수 있다.
각 값 벡터들이 쿼리-키 단어에 해당하는 softmax 확률에 곱해진 뒤, 모두 더해지는 것이다.
Self Attention의 장점
다른 모델 | Self Attention |
CNN : 특정 window 내 local 문맥만 확인 | 문장 내 모든 단어 쌍 사이 관계 파악 |
RNN : sequence 길이가 길면 vanishing gradient 문제 발생 |
Softmax의 vanishing gradient
Softmax의 gradient는 위 식에서 볼 수 있듯이, y에 민감하게 반응한다.
따라서 y 값 일부가 작으면 vanishing gradient 문제가 발생한다.
Multi-Head Attention
Multi-Head Attention은 Scaled Dot-Product Attention을 여러 번 시행하는 것이다.
앞에서 만든 쿼리(Q), 키(K), 값(V)에 Scaled Dot-Product를 h번 진행하고, 각 Attention 결과 행렬을 concatenate하여 W^O와 내적함으로써 행렬 크기를 입력 행렬과 맞춰준다.
입출력 행렬의 크기는 (입력 단어 수) * (hidden vector 차원 수)로 동일하다.
Position-wise Feedforward Networks
Position-wise Feedforward Networks layer에서는 앞의 Multi-Head Attention 출력 행렬을 행 벡터 단위로 수식을 적용한다. 즉, 단어 벡터 x 각각에 수식을 적용하는 것이다.
먼저 선형변환을 한 후, ReLU를 적용시킨 뒤 또 한번의 선형변환을 거쳐 계산된다.
이러한 트랜스포머 모델은 warm-up 전략으로 학습시킨다.
유저가 지정한 step까지 learning rate를 올린 뒤, 만족되면 learning rate를 감소시키는 방식으로 진행된다.
그렇기 때문에, 규모가 큰 데이터 또는 모델에 적합하다.
'DATA SCIENCE > NLP' 카테고리의 다른 글
[NLP] BERT (Bidirectional Encoder Representations from Transformer) (0) | 2020.06.24 |
---|---|
[NLP] ELMo (Embeddings from Language Models) (0) | 2020.06.23 |
[NLP] 잠재 디레클레 할당 (LDA) (0) | 2020.06.22 |
[NLP] Doc2Vec (0) | 2020.05.27 |
[NLP] 가중 임베딩 (0) | 2020.05.22 |