Attention Is All You Need (NIPS 2017)

박상우·2022년 12월 29일
0

Paper Review

목록 보기
3/45
post-thumbnail

Transformer

배경

기계번역의 흐름

RNN - LSTM - seq2seq - Attention - Transformer

기존 Recurrence가 아닌 Attention 기법만으로 성능 향상을 이룬 transformer
입력 시퀀스 전체에서 정보를 추출하는 방향으로 발전

seq2seq 모델의 한계

고정된 크기의 context vector에 정보를 압축할 때, 병목이 발생해 성능 하락의 원인이 됨

그럼 소스 문장의 출력 전부를 디코더의 입력으로 받는다면?

즉 context vector와 encoder의 hidden state를 모두 사용한다면?

Attention

이를 각 hidden state의 softmax를 취해 어떤 값에 가중치를 두어야 하는지 설정하는 것이 바로 Attention

Decoder의 출력 하나 마다 decoder 출력 직전 값, encoder 출력들간의 연관성을 고려한 energy를 softmax해 weighted sum한 값으로 가장 높은 확률의 단어를 y로 결정하는 것

장점

Attention을 사용하면 성능 향상 뿐만이 아니라 어떤 값이 출력되었을 때 어떤 Input이 가장 큰 영향을 미쳤는지 알 수 있음

Attention is all you need

RNN, CNN이 아닌 attention 알고리즘 만으로 구성된 architecture라도 높은 성능을 얻을 수 있다
순서 정보는 positional encoding으로 대처

Architecture - encoder

embedding

단어 정보를 넣기 위해서는 embedding이 필수
전통적인 임베딩은 단어의 개수만큼 행 개수와 embedded_dim 만큼의 열로 구성된 matrix
RNN 기반 임베딩은 자연스레 순서가 embedding에 포함되어 있지만, attention에서는 위치 정보가 없음
이를 해결하기 위해 위치 정보가 포함 된 positional encoding을 수행

Positional Encoding

단어의 상대적인 위치정보를 네트워크에 입력

Sine 함수와 같은 주기 함수를 사용 (어떤 함수든 주기함수면 상관 X)

encoding layer

Input embedding Matrix에 positional encoding을 진행한 후, Input 끼리의 attention을 구하여 Input 간의 관계를 학습
추가적으로 residual learning 등과 함께 진행 (성능 향상과 속도 향상)

이후 add, Normalization 등을 통해 정규화하여 하나의 encoding layer를 완성하고 이러한 encoding layer를 중첩시켜 encoder를 완성

각각의 layer는 모두 다른 parameter를 가짐

Architecture - decoder

decoder의 layer들 또한 구성은 encoding layer와 동일하며 마지막 encoding layer의 출력을 함께 학습하는 attention 알고리즘을 수행

다만 하나의 decoding layer에는 두 개의 multi-head attention으로 하나는 decoder의 Input 사이의 관계를, 하는 encoding layer의 출력과의 관계를 학습하는 attention layer로 구성

decoding layer도 중첩하여 학습할 수 있음

보통 encoding layer와 decoding layer는 같은 개수로 설정

근데 그래서 multi-head attention이 뭔데?

Scaled Dot-Product attention

쿼리 (query)

연관성을 가지는지 물어보는 주체 - 즉 본 단어

키 (key)

답하는 주체 - 본 단어를 포함한 나머지 단어들

값 (value)

쿼리와 키의 행렬곱 한 값에 scailing 과 masking 후 Softmax로 확률 값을 구해 value 값과 행렬곱하는 것이 최종적인 attention mechanism

Multi-Head Attention

H개의 서로 다른 value, key, query를 행렬 곱으로 h개의 쌍들을 구하고 이를 concat, linear layer를 통해 차원을 Input과 동일하게 함

수식을 보는것이 이해가 편함

mask matrix

Attention energy matrix에 음의 무한으로 곱해주면, softmax를 했을 때 출력이 0에 가까워지게 하는 것

즉 특정 단어에 attention을 수행하지 않게 함

attention의 종류

Encoder Self-Attention

Encoder의 Input들 끼리의 연관성을 학습

Masked Decoder Self-Attention

Decoder의 Input들 끼리의 연관성을 학습하는데, 뒤에 나올 것 까지 attention을 수행하는 것은 일종의 cheating 이므로, masking 해 앞의 단어들만 학습에 사용

Encoder-Decoder Attention

Decoder의 값이 query가 되어 encoder의 key, value를 학습하는 것

Self-Attention

시각화를 통해 attention score를 구할 수 있음

같은 문장 사이의 단어와 어떤 단어가 연관성이 있는지 알 수 있음

나는 감자다

profile
세상아 덤벼라

0개의 댓글