입력과 출력: 인코더는 원본 입력 시퀀스를 받아들이고, 이를 하나의 context vector로 변환
디코더는 이 context vector를 입력받아 출력 시퀀스를 생성
작동 순서: 인코더는 입력 시퀀스를 처음부터 끝까지 순차적으로 처리한 뒤, 마지막에 context vector를 생성하고 디코더는 이 context vector를 받아, 출력 시퀀스의 각 시점을 순차적으로 예측함
목적: 인코더의 주된 목적은 입력 데이터를 압축하여 의미 있는 표현으로 변환하는 것이며, 디코더의 주된 목적은 이 표현을 바탕으로 새로운 시퀀스를 생성하는 것
Attention 메커니즘은 디코더가 출력의 각 단어를 생성할 때, 인코더의 모든 hidden state를 고려하여 가장 관련 있는 입력 단어에 집중할 수 있게 함.
기존 RNN의 Seq2Seq(Sequence-to-Sequence) 구조와 Attention 메커니즘이 추가된 Seq2Seq 구조의 주요 차이점은 어떻게 정보가 전달되고 사용되는지에 있음
- Encoder의 context vector: 입력 시퀀스의 전체 정보를 하나의 벡터로 압축한 것임. Attention이 없는 Seq2Seq 모델에서 사용됨.
- Decoder의 context vector (with Attention): 디코더가 출력 시퀀스의 각 단어를 생성할 때마다, 인코더의 모든 hidden state를 가중합하여 생성된 벡터임. 디코더가 각 시점에서 집중해야 할 입력 단어의 정보를 담고 있음.
Seq2Seq 모델의 기본 구조는 다음과 같음:
Encoder: 입력 시퀀스를 받아 하나의 context vector로 요약함. 이 벡터는 입력 시퀀스의 정보를 압축한 것으로, 디코더가 이 벡터를 기반으로 출력을 생성함.
Decoder: 인코더에서 전달받은 context vector를 기반으로 새로운 시퀀스를 생성함. 예를 들어, 영어 문장을 입력받아 한국어 문장으로 번역할 때, 영어 문장이 context vector로 요약되고, 디코더는 이 벡터를 사용해 한국어 문장을 생성함.
기본 Seq2Seq 모델에서의 문제점은 인코더가 입력 전체를 단 하나의 context vector로 요약한다는 점임. 이 벡터가 모든 중요한 정보를 담기 어려울 때, 디코더의 성능이 저하될 수 있음.
Attention 메커니즘은 이 문제를 해결하기 위해 고안됨. Attention은 디코더가 출력 시퀀스의 각 단어를 생성할 때, 인코더의 모든 hidden state에 "집중(attend)"할 수 있게 함. 즉, 각 출력 단어를 생성할 때 입력의 모든 단어를 다르게 "참조"하는 방식임.
따라서 RNN과 Attention을 사용한 Image Captioning은 다음과 같이 각 디코더의 타임스템프 마다 다른 컨텍스트 벡터를 사용해서 인풋 이미지의 각기 다른 파트를 주목할 수 있음

Encoder의 Context Vector: 인코더의 context vector는 기본적으로 인코더의 마지막 hidden state로, 입력 시퀀스 전체를 요약한 벡터임. 하지만 Attention 메커니즘이 없는 경우, 이 벡터는 입력 시퀀스 전체의 정보를 압축해서 전달해야 하기 때문에 정보 손실이 발생할 수 있음.
Decoder의 Context Vector (Attention에서의 Context Vector): Attention 메커니즘이 적용되면, 디코더는 고정된 하나의 context vector 대신 각 현재 시점에 맞게 생성한 새로운 context vector를 사용함. 이 벡터는 디코더가 특정 시점에서 출력 단어를 생성할 때 인코더의 모든 hidden state를 가중 합하여 만들어짐. 이 가중치는 디코더가 현재 생성하는 단어와 관련된 인코더의 단어에 따라 달라지며, 가장 관련성 높은 단어에 더 높은 가중치를 부여함.
Attention 메커니즘의 작동 원리는 다음과 같음:
인코더의 모든 hidden state: 인코더는 입력 시퀀스의 각 단어에 대해 hidden state를 생성함. 이 hidden state들은 입력 시퀀스의 모든 정보를 포함하고 있음.
디코더의 hidden state: 디코더는 출력 시퀀스의 각 단어를 생성하기 위해, 이전 단계에서 계산된 자신의 hidden state와 인코더의 context vector를 사용함.
가중치 계산: 디코더의 현재 hidden state와 인코더의 모든 hidden state 간의 유사도를 계산하여 가중치(weight)를 만듦. 이 가중치는 디코더가 현재 시점에서 어느 입력 단어에 더 집중해야 하는지를 나타냄.
context vector 생성: 인코더의 hidden state에 가중치를 곱하고 합산하여, 디코더의 현재 시점에 맞는 새로운 context vector를 생성함. 이 vector는 디코더가 다음 단어를 생성하는 데 사용됨.
쿼리(Query): 현재 주목하고 싶은 단어 또는 토큰의 표현 벡터임.
키(Key): 각 단어 또는 토큰의 특성을 나타내는 벡터로, 쿼리와의 유사도를 계산하는 데 사용됨.
값(Value): 각 단어 또는 토큰의 정보가 담긴 벡터로, 최종 어텐션 스코어를 사용해 가중합을 할 때 사용됨.
이 과정을 통해 쿼리와 가장 관련성이 높은 키-값 쌍을 찾아내어 최종 어텐션 스코어를 계산하고, 이를 활용하여 문장이나 시퀀스 내에서 각 요소 간의 중요도를 반영한 결과를 얻음.
Cross attention & Self attention 비교

Cross attention 예시

- Attention Layer는 입력 데이터 간의 관계를 학습하며, 주로 인코더-디코더 구조에서 사용 ( Cross-Attention (Encoder-Decoder Attention) )
- 디코더가 출력을 생성할 때는 입력 시퀀스의 정보를 사용해야 함. 이때, 디코더는 인코더에서 나온 hidden state(즉, 인코더가 입력 시퀀스를 처리해 얻은 결과)와 현재 시점에서 디코더의 상태를 함께 사용하여 다음 단어를 예측함. 이 과정이 Cross-Attention !
- Query는 디코더의 상태, Key와 Value는 인코더의 출력
- Query (Q): 디코더의 현재 상태에서 나오는 Query
- Key (K)와 Value (V): 인코더의 hidden state에서 나오는 값들로, Key와 Value로 사용
- 입력 X: 인코더의 출력(hidden states)이나 다른 소스에서 가져온 벡터들
- Query (Q), Key (K), Value (V): 해당 입력에 맞는 학습 가능한 가중치 행렬과 곱해져 생성
- Query 벡터 (Q): 현재 단어가 다른 단어들과 어떤 관련이 있는지를 묻는 질문 역할.
- Key 벡터 (K): 다른 단어들이 현재 단어와 관련이 있는지 평가하기 위한 기준 정보.
- Value 벡터 (V): 실제로 최종 출력에 영향을 주는 정보.
이 벡터들은 모두 입력 단어로부터 학습된 가중치 행렬을 통해 생성되며, 이들이 서로 상호작용하는 방식(즉, Query와 Key 간의 유사도 계산, 그리고 이 유사도를 사용한 Value 벡터의 가중합)이 Attention 메커니즘의 핵심임
Attention score = Attention Map * value
Attention Map: self-attention 메커니즘을 통해 생성됨. 입력의 각 부분에 대해 쿼리(Q), 키(K), 값(V) 벡터를 생성하고, 쿼리와 키 간의 유사도(키, 밸류 곱해서 루트(차원)으로 나눈것을 소프트맥스 함수에 넣어서 확률값 얻음)를 계산하여 가중치를 얻음
즉 이는 출력값이 어느정도 기여를 가지는지를 나타내는 값

문장 "I love you"가 있다고 가정, 각 단어가 하나의 입력이 됨: X₁ = "I", X₂ = "love", X₃ = "you".
각 단어 X₁, X₂, X₃가 갖는 Query 벡터 (Q₁, Q₂, Q₃)와 Key 벡터 (K₁, K₂, K₃)는 Attention 메커니즘에서 중요한 역할을 하는 벡터들로, 입력 데이터와 관련된 정보를 담고 있음.
- Self-Attention Layer는 입력 시퀀스 내의 각 요소가 다른 요소들과의 관계를 학습하며, 주로 Transformer 모델에서 사용
- 각 입력 X는 Query (Q), Key (K), Value (V) 세 가지로 변환(이들은 서로 다른 행렬과 곱해져서 만들어지는데, 이 변환 행렬들은 학습 과정에서 모델이 학습함)
- Query, Key, Value 모두가 동일한 입력 데이터에서 나옴

Self-Attention 메커니즘의 순열 등변성(Permutation Equivariance) 성질:
입력 벡터의 순서를 바꾸더라도 그에 맞게 동일한 연산이 적용
이 특성 덕분에 Self-Attention 메커니즘은 입력의 순서에 덜 의존적인, 보다 유연한 모델링이 가능


아래 과정을 통해 새로운 feature 를 생성하고 키와 쿼리의 유사도 계산을 통해 소프트맥스 확률값으로 나온 Attention Weights를 실제 Value값에 곱하여 어디에 더 집중할 것인가 확인


먼서 self attention을 통해 각 시퀀스간의 interact, risidual connection, 이후 layer normalization 진행, 각 벡터에 대해 MLP 로 연결, risidual connection, layer normalization 해서 아웃풋 냄

Transformer Block의 연속


첫번째 레이어 ( visualize filters )

높은 층의 레이어일 수록 추상화된 특징

마지막 레이어(FC layer) : 분류작업에 사용
CNN이 특정 클래스를 예측할 때, 어떤 픽셀들이 중요한 역할을 했는지를 역전파를 통해 알아내는 방법임. Saliency Map을 통해 모델이 어떤 부분에 주목했는지를 시각화


조건부 인스턴스 정규화(Conditional Instance Normalization)는 하나의 신경망을 여러 스타일에 사용할 수 있게 하는 기법. 이 방법은 스타일 변환(Style Transfer) 작업에서 특히 유용함

