Attention and Transformer

Minho Kim
3 min readApr 15, 2021

--

Attention

RNN 가장 큰 단점 장기 의존성, 이를 보안 한게 셀 구조인 LSTM, GRU 입니다.문장이 길어질 경우 앞 단어의 정보를 잃어버리게 되는 현상입니다.

하지만 LSTM, GRU로 개선하였더라도 문장이 길어지면 모든 단어 정보를 고정 길이의 Hidden state 벡터에 담기 어렵다는 단점을 가지고 있습니다. 많은 단어의 의미를 벡터 하나에 담기엔 부족하기 때문입니다.

즉, RNN의 경우 문장이 길어질 수록 앞 단어의 토큰 정보를 잃어버리게 됩니다. 층이 깊어 질수록 정보 손실이 잃어나게 되죠. 이를 장기의존성(Long-term dependency)문제 라고 합니다.

이런 문제를 해결하기 위해서 고안된 방법이 Attention 의 개념이 나오게 됩니다. 단계 마다 모든 히든 벡터를 넘겨주어서 학습을 하는 거죠.

하지만 이런 Attention 방법도 size가 큰 글자들을 번역하기에는 한계가 있습니다. RNN의 특성상 순차적으로 들어와 속도도 느립니다. 이를 보완하기 위해 나온 기술 중 하나는 구글에서 발표한 Transformer 입니다.

Transformer : Attention is All You Need

RNN의 개념은 완전히 배제하고 Attention 기반으로 알고리즘을 만들었습니다. “Attention is All You Need” 라는 말이 나오게 되었죠. 최근에는 자연어처리 뿐만 아니라 비전 쪽에서도 사용된다고 합니다.

앞서 말한, 글자가 순서대로 들어오는 RNN의 단점을 모든 단어를 병렬적으로 처리합니다.

인코더 블록은 크게 2개의 sub-layer

[Multihead (Self) Attention, Feed Forward]

디코더 블록은 3개의 sub-layer

[Masked Multihead (Self) Attention, Multihead (Encoder-Decoder) Attention Feed Forward]

이렇게 구성되어 있습니다.

Positional encoding

모든 단어가 동시에 입력되기 때문에 단어의 위치 정보 벡터를 만들기 위한 작업이 필요합니다.

Self-Attention

그 다음 문장 내부 요소의 관계를 잘 파악하기 위해서 Self-Attention적용 해야합니다.

입력 -> Query * Key -> Attention Score(숫자가 높을수록 연관성이 높아집니다.) -> softmax(score/squrt(key) -> 모두 더해준뒤 -> 최종벡터

이 최종벡터는 문장속에서 단어가 가진 전체적인 의미를 가진 벡터입니다.

Marked Self-Attention

디코딩부분에 Marked Self-Attention의 개념과는 조금 다릅니다.

디코딩의 경우 Auto Regressive로서 자기 회귀적으로 단어를 생성 해줍니다. 이때문에 타겟단어를 보지 않고 단어를 예측해야 합니다. 앞에서 포지셔닝 해준 순서대로 타겟 전의 값들만 가지고 비교를 하는 거죠. 뒤에 단어들이 self-attention에 영향을 주지 않도록 마스킹을 해줍니다. 즉, 지금까지 출력된 값들에만 적용하기 위해서 미래의 단어에 Attension을 주면 안되기 때문에 마스킹 개념이 나오게 됩니다.

….

--

--