2025. 5. 18. 16:11ㆍ개발/👽 졸업 논문
🌌 Attention
Attention Is All You Need
https://arxiv.org/pdf/1706.03762
🌱 기반 개념
CNN(Convolutional Neural Network)
CNN은 데이터가 input된 이후, Convolution -> Pooling의 과정을 여러번 거쳐 feature map을 추출한다
이후에 분류 예측이 필요한 경우, 추출한 feature map을 flatten한 뒤
MLP의 입력으로 넣어주면 feature가 축소되어 최종적으로는 분류하고자하는 클래스의 수만큼만 남게 된다
이 상태에서 분류 예측이 필요한 이미지를 입력해주면 각 클래스로 분류할 확률을 구하고 가장 확률이 높은 클래스를 결과로써 출력한다
Convolution
: 입력데이터에 필터를 적용하여 특정 패턴을 감지
: 필터는 가중치 행렬로, 학습을 통해 어떤 패턴(ex - 모서리, 색 변화, 단어 조합)을 뽑을지 결정됨
: 이때 비선형적 패턴을 학습시키기 위해 ReLU와 같은 활성화 함수를 사용함
Pooling
: Convolution을 통해 생성된 feature map을 가장 의미있는 값만 남기며 축소함
: Pooling을 통해 연산량 감소, 불변성 확보, 과적합 방지 가능
Feature Map
: CNN이 이미지에서 추출한 요약 정보
Flatten
: feature map을 1차원 벡터로 펼치는 과정
ex ) Feature Map : 32x3x3 -> Flatten: 32*3*3 = 288차원 벡터
MLP
: 펼쳐진 벡터를 MLP의 입력을 넣어주면 피처간의 상관관계를 학습하여 고차원적인 의미를 이해하게 되고
최종적으로 클래수 수만큼의 출력 노드만 남게 됨
RNN(Recurrent Neural Network)
RNN은 과거의 데이터가 포함된 hidden state와 현재 입력을 새로운 hidden state를 생성하는 방식으로 학습한다
과거의 데이터부터 순차적으로 학습하는 방식으로, 시계열 데이터에서 사용된다
Attention
Attention은 입력 데이터에서 현재 가장 중요한 부분에 집중하도록 가중치를 부여하는 역할을 한다
Transformer
Transformer는 Convolution의 과정 없이 Attention 메커니즘만을 사용한다
0. Abstract
기존의 문장 번역 모델들은 복잡한 RNN(순환 신경망)이나 CNN(합성곱 신경망)을 기반으로 하며,
인코더와 디코더를 포함하고 있다
인코더와 디코더를 Attention 매커니즘으로 연결하는 모델이 현재 가장 우수한 성능을 보이고 있다
인코더 - 디코더 연결을 왜 Attention으로?
: 디코더가 출력을 생성할 때, 입력 문장의 중요한 정보에 집중할 수 있도록 하기 위해서
Transformer는 전적으로 Attention 메커니즘에 기반하며, RNN과 CNN을 아예 제거한다
이를 통해 병렬 처리가 가능해지며, 훈련 시간이 단축된다
1. Introduction
1 ) 전통적인 RNN 계열 모델의 본질적 한계
RNN은 과거 데이터를 포함한 hidden state와 현재 입력을 기반으로 다음 hidden state를 생성한다
하지만 이같은 특성 때문에 병렬 처리에 제약이 있어 훈련하는 데 시간이 오래 걸리고
메모리의 제약으로 인해 배치 처리가 제한되어 긴 시퀀스를 처리하는 데에 한계가 있다
( 먼 과거의 데이터는 학습에 포함시키지 못함 )
2 ) Attention 메커니즘과 Transformer 모델
Attention 메커니즘은 시퀀스의 거리와 무관하게 중요한 의존성을 모델링할 수 있도록 해준다
이 논문에서는 Transformer라는 모델 아키텍처를 제안하며,
이 모델은 순환 구조를 버리고 대신 어텐션 메커니즘만을 전적으로 사용하여 입력과 출력 간의 전역적인 의존성을 모델링한다
2. Background
Extended Neural GPU, ByteNet, ConvS2S 등도 순차 계산 감소를 위해 CNN을 기반으로 한 병렬 구조를 제안
-> 입력, 출력 위치 간 신호를 연결하는 데 필요한 연산 수가 거리에 따라 증가 ( ConvS2S : linear / ByteNet : log )
-> 멀리 떨어진 위치들 간의 의존성 학습 여전히 어려움
Transformer는 순환 구조(CNN, RNN)를 아예 제거하고 Self-Attention 메커니즘을 사용한다
-> 연산 수를 상수로 줄였고, 정보 손실은 Multi-Head Attention으로 보완함
3. Model Architecture
Transformer 중 성능이 좋은 모델은 인코더 - 디코더 구조를 띄고 있다
인코더 : 입력 기호 표현의 시퀀스 연속적인 표현의 시퀀스 (z1,...,zn)
연속적인 표현으로 변환한다는 것은 입력 데이터를 컴퓨터가 이해할 수 있는 수치 벡터로 변환하는 것을 의미한다
디코더 : 연속적인 표현의 시퀀스 (z1,...,zn) => 기호의 출력 시퀀스 (y1,...,ym)
각 단계는 auto-regressive하게 진행된다.
즉, 다음 항목을 생성할 때 이전에 생성된 기호들을 추가 입력으로 사용한다
인코더
Transformer의 인코더는 여러개의 동일한 레이어로 구성된 스택으로 이루어져있다
각 레이어는 두개의 서브 레이어로 이루어져 있다
- Multi-Head Attention
- Feed Forward
또한 레이어를 한번 통과할 때마다 잔차 연결과 레이어 정규화를 진행한다
입력 -> [ 레이어 ( Multi-Head Attention => Feed Forward ) -> 잔차 연결 -> 레이어 정규화 ]
[ ] 를 여러 번 반복
잔차 연결
: 현재 입력과 과거 출력을 더해서 다음 레이어로 전달해줌
딥러닝 모델이 깊어질수록 기울기 소실 문제가 발생하게 된다
기울기 소실 문제
딥러닝의 학습과정 중 손실을 줄이기 위해 각 레이어가 얼마나 잘못했는지 계산하는 역전파 과정에서 기울기를 계산한다
기울기는 말 그대로 변화율 즉, 어떤 가중치를 조금 바꿨을 때, 손실값이 얼마나 변하는지를 의미한다
기울기 계산은 수학적으로 곱해지며 전파되는데
이렇게 각 층의 미분값(보통 0~1 사이의 값)을 계속 곱하다 보면,
초기에 가까운 층으로 갈수록 값이 지수적으로 작아진다 (→ 거의 0이 됨)
초기 층의 기울기 ≒ 0 → 학습이 거의 안 됨
이때 입력 x를 서브레이어 출력에 더하여 전하는 잔차 연결을 통해 이 기울기 소실을 방지한다
이렇게 되면 기울기가 거의 0이 되더라도 최소한 1은 항상 남아서 기울기가 너무 작아지지 않게 되며 초기 층의 학습을 돕는다
레이어 정규화
잔차 연결로 합쳐진 x+Sublayer(x)는 값의 크기가 커질 수 있으므로
LayerNorm(레이어 정규화)를 통해 분포를 정규화시켜서 모델학습을 안정화한다
디코더
Transformer의 디코더 또한 인코더와 마찬가지로 여러개의 동일한 레이어로 구성된 스택으로 이루어져있고
레이어를 한번 통과할 때마다 잔차 연결과 레이어 정규화를 진행한다
각 레이어는 세개의 서브 레이어로 이루어져 있다
- Masked Multi-Head Attention
- Multi-Head Attention
- Feed Forward
여기서 Masked Multi-Head Attention이 현재 위치보다 앞의 단어만 참조하도록 제한한다
💡 Attention은 Query와 Key 상관성을 계산하여 이를 Value에 곱함으로써 최종적인 Value를 구한다
Scaled Dot-Product Attention
개요
- 입력: Query, Key, Value 벡터
- Query와 Key는 차원이 dk, Value는 dv
- Attention 계산 방식:
동작 방식
- Query와 모든 Key의 내적을 구한다
- 결과를 √dk로 나누어 스케일링 (값이 너무 커져 softmax가 터지는 걸 방지)
- softmax로 확률화하여 attention 가중치로 만든 뒤,
- Value에 곱해 최종 attention 값을 계산
Multi-Head Attention
개요
- 단일 attention을 여러 번 병렬로 수행
- 각각 다른 투영 행렬로 Query, Key, Value를 변환한 후 attention 수행
- 결과를 이어붙여 다시 최종 projection
수식
파라미터
장점
- 서로 다른 표현 공간에서 정보를 병렬로 학습할 수 있음 → 다양한 관계 파악 가능
- 차원을 줄이기 때문에 전체 연산량은 크게 증가하지 않음
Attention의 3가지 적용 방식
1) Encoder-Decoder Attention
- Query는 이전 Decoder 레이어에서, Key/Value는 Encoder의 출력에서 나옴
2) Encoder Self-Attention
- Query / Key / Value 가 모두 이전 인코더 층의 출력에서 나옴
3) Decoder Self-Attention
- Decoder의 각 위치가 자기 이전 위치까지만 참고 가능 ( masking 사용 )
Position-wise Feed-Forward Networks (FFN)
구조
모든 위치에서 동일하게 적용되는 2-layer MLP:
- ReLU 활성화 함수 사용 -> 비선형관계 형성
- 차원:
- 입력/출력: dmodel = 512
- 중간(hidden): dff = 2048
Embeddings and Softmax
- 입력/출력 토큰을 dmodel 차원의 임베딩으로 변환
- 임베딩과 softmax 직전 가중치 행렬은 공유
- Embedding 벡터는 스케일 조정
Positional Encoding
왜 필요한가?
- Transformer는 RNN/CNN과 달리 순서를 고려하지 않음
- 위치 정보를 인코딩하기 위해 위치 인코딩 추가
방식 : 고정 사인 / 코사인 주파수
- 각 차원마다 서로 다른 주파수의 sin, cos 함수 사용
- 상대적인 위치 정보를 선형적으로 표현할 수 있음
4. Why Self-Attention
Self-Attention 메커니즘이 RNN(순환신경망) 또는 CNN(합성곱신경망) 계층에 비해 어떤 장점이 있는지 3가지 기준으로 비교
비교 기준 3가지
1. 레이어당 계산 복잡도 (Computational Complexity per Layer)
2. 병렬화 가능한 연산량 (Parallelization)
3. 장거리 의존성 학습을 위한 경로 길이 (Path Length between Dependencies)
- Self-Attention은 입력 시퀀스의 모든 위치를 서로 연결하므로 O(1)의 짧은 경로 길이를 유지하며 장거리 의존성 학습에 유리함
↔ RNN은 O(n), CNN은 O(n/k) 또는 O(logₖ(n))의 경로 길이를 가짐 - 계산 복잡도 측면에서, 시퀀스 길이 n이 표현 차원 d보다 작을 경우 대부분의 상황에서 Self-Attention이 RNN보다 더 효율적
- 병렬화 가능성 면에서, Self-Attention은 모든 위치를 동시에 처리할 수 있어 병렬화에 매우 유리함
↔ RNN은 순차적인 처리만 가능하므로 병렬화가 어려움 - 긴 시퀀스의 경우, 각 출력 위치 주변 r개 이웃만 참고하는 지역적 Self-Attention 사용 가능 → 이 경우 경로 길이 O(n/r)로 조절 가능
- CNN은 단일 레이어로는 모든 위치 연결이 어렵고, 여러 층을 쌓아야 하므로 깊은 네트워크가 필요 → 경로가 길어짐.
- Separable Convolution을 사용하면 복잡도는 줄어들지만 여전히 Self-Attention+FeedForward Layer 조합보다 더 비싸거나 동일한 수준.
- 추가 장점: Self-Attention의 주의(attention) 분포는 구조적으로 해석 가능성이 높아 문장의 구문적, 의미적 구조를 학습한 흔적을 보여줌.