Attention is all you need를 읽기에 앞서 간단한 자연어 처리 , RNN , seq2seq 구조, attention에 대한 사전지식을 공부했습니다.
1. RNN , Seq2Seq
attention, transformer란 애초에 자연어 처리를 목적으로 하여 만들어진 개념이기에 해당 분야에 대한 기본지식이 필요하다.
기본적으로 RNN이란 , CNN과 같은 신경망에서 순차적인 정보를 이해하지 못하는 것을 해결하기 위해 만들어진 기법이다.
(sung kim 거이 끝부분에서 한번 배웠는데 스터디원들과 다같이 이해는 안되었지만 어물쩍 넘어간 기억이 난다)

그림에서 볼 수 있는 것 과 같이 상대 h ( 표면적으로는 안보인다고 하여 hidden state h라고 부른다. 대충 deep learning의 hidden state같은 개념 )를 다음 시점으로 넘겨주고 그 다음 시점에서는 이전 시점에서 받은 h와 input x를 참조하여 output o를 만들어 내는 것을 알 수 있다 .
좌측 그림은 해당 과정을 재귀적으로 표현한 것이고, 우측은 그냥 해당 과정을 펼쳐놓은 것이다.

수식을 통해 이해해보자(perflexcity의 도움을 얻었다),
위 node로 표현된 그림에서 v,w,u를 연결해주는 부분에 각각 가중치가 붙어있다.
CNN과 같이 RNN 또한, 원하는 성능을 만들어내기 위한 해당 가중치를 얻는 것이 학습의 목적이 되는 것으로 생각할 수 있었다.
(정확하게는 RNN 단독으로는 backprop을 통한 학습이 어려워 후에 LSTM 등 보완된 구조가 제안되었다고 한다)
RNN에서 유의깊게 봐야 할 것은 해당 모델은 seqence 즉, 순서가 있는 것을 처리하는 모델이라는 점이다.
이어서 관련이 있는 seq2seq를 봐보자.
seq2seq 란 RNN을 활용하여 번역을 하는 것과 같은 task를 처리하는 모델을 말한다.
왜 seq2seq인가 하면 "나는 모니터입니다." 를 "I'm monitor" 로 바꾸어 주는 모델을 생각해보면 입력도 순서가 있는 순서가 입력 seqence 출력 또한 순서가 있는 출력 seqence 임을 알 수 있다. 따라서 seq2seq이다.
기본적으로 seq2seq 모델은 encoder - decoder 구조를 띈다.

encoder는 input seqence의 "의미"를 context vector로 압축한다.
그리고 decoder는 context vector를 사용해 출력 문장을 한개 토큰씩 생성한다.
Encoder가 만든 문장의 전체 의미 " context vector" 를 참조하고, 이전에 decoder 자기 자신이 만든 state( hidden state)를 참조하여 다음에 생성할 토큰 (output)을 생성하는 것이다.
(자꾸 토큰이라는 단어가 사용되는데, token은 모델이 처리하는 최소 단위의 simbol이라고 보면 된다.
때에 따라서 단어가 될 수 있고, 음절이나 숫자, 코드, 로봇의 행동 <MOVE> ,<TURN>등이 될 수 있다. 조합되는 기호의 단위 즉 가장 작은 퍼즐의 단위라고 보면된다. )
이러한 seq2seq 방법에서의 문제점은 초기 encoder가 input을 압축해 생성한 context vector가 input의 길이가 길어지는 경우 context vector가 해당 input을 전부 표현하지 못하거나, 중요한 정보가 소실되는 경우가 생긴다. 이를 해결하기 위해 나온게 attention이다.
2. attention
이전 seq2seq에서는 하나의 context vector로 문장 전체의 의미를 표현하려고 하다 보니, 정보의 손실과 표현의 한계가 발생하는 문제가 생겼었다.
다시 정리하면 encoder에서 나온 하나의 context vector를 사용해, 각 time(state)마다
이전의 state + 전체 문장의 한 개 context vector를 사용해 decoder에서 각 token을 생성해낸다.
여기서 attention 기법을 사용하면,
각 time step 마다
input sequence의 가공된 정보를 재참조한다. (context vector)
그런데 , 이 context vector는 단순히 이전 seq2seq에서 문장을 하나의 벡터로 다 표현한 context vector 가 아니라
해당 time step에서 주목할 부분에 대한 고려 attention을 참조해서 encoder에서 input seqence를 가공한
context vector이다.
정리하면, 매 step에서 전체 input 문장의 의미를 담은 축약본을 참고하는 것이 아닌,
해당 step에서 input 문장서 중요한 부분을 중심적으로 attention한 의미 표현 context vector를 참조한다는 것이다.

encoder의 hidden state와 decoder의 현재 state를 참조해 e를 만들어 낸다. (encoder의 각 state에 집중하는 정도 - scaler)
이에 대해 softmax 해주어 0~1 사이 확률값으로 만들어준다 (attention weights)
해당 확률값과 encoder의 hidden state를 weighted sum하여 해당 시점의 context vector를 만든다.
<encoder hidden state + decoder의 현재 state > -> e 부분은 MLP를 통해 구현
전체 과정은 backprop이 가능하여 학습이 가능하도록 한다.
'vision,deep learning' 카테고리의 다른 글
| [논문리뷰] Image-to-Image Translation with Conditional Adversarial Networks (1) | 2026.02.14 |
|---|---|
| [논문리뷰] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale - ViT (0) | 2026.01.12 |
| [논문리뷰]attention is all you need-2 (0) | 2026.01.05 |
| [논문리뷰]attention is all you need-1 (1) | 2025.12.29 |