인공지능/공부

transformer, attention 정리 3

이게될까 2024. 4. 11. 15:52
728x90
728x90

2024.04.11 - [인공지능/공부] - transformer, attention 정리 2

 

transformer, attention 정리 2

seq2seq - RNN기반 모델 = vanishing gradient problem, 고정된 벡터에 모든 정보 압축하다 보니 정보 손실 발생 이 구조는 입력 문장이 길면 품질이 떨어지게 된다! -> attention 등장 attention value - 단어가 얼마

yoonschallenge.tistory.com

여기 이어서 계속 되는 자료입니다.

자연어 처리에서 순서가 중요하다는 것을 알기 때문에 순서를 집어 넣어준다!

위치정보가 반영된다! 근데 positional encoding을 하면 I가 다른 단어의 embedding과 동일하게 변하는 경우도 생기지 않나...?

도와줘 GPT
Transformer에서 positional encoding을 진행하면 embedding된 토큰이 다른 단어로 변할 가능성도 있지 않아? he is a boy라는 문장에서 he에 positional encoding을 더했더니 우연히 boy라는 단어의 embedding이 될 수 있는 거잖아

Transformer 모델에서 positional encoding은 토큰의 embedding에 위치 정보를 추가하기 위한 목적으로 사용됩니다. 이 과정에서 기존의 단어 임베딩 벡터에 위치 정보를 나타내는 벡터를 더하게 되는데, 이는 각 단어의 고유한 의미를 변형시키는 것이 아니라 단순히 위치 정보를 부가하는 역할을 합니다.

Positional encoding은 고정된 패턴을 따라 계산되며, 이를 통해 모델은 문장 내에서 각 단어의 순서를 인식할 수 있게 됩니다. 그러므로, "he is a boy"라는 문장에서 "he"에 positional encoding을 더한다고 해서 "boy"라는 단어의 embedding이 되는 것은 아닙니다. 대신, positional encoding은 각 단어에 고유한 위치 정보를 더해주어 문장 내의 상대적인 위치를 모델이 이해할 수 있도록 돕습니다. 

실제로 positional encoding을 더한 후의 벡터가 다른 단어의 임베딩 벡터와 정확히 같아지는 경우는 매우 드물며, 모델은 이러한 위치 정보를 활용하여 문장 내에서 단어 간의 관계를 더 잘 이해할 수 있게 됩니다. Transformer 모델은 이러한 positional encoding을 통해 순서가 중요한 자연어 처리 작업을 효과적으로 수행할 수 있습니다.

 

쿼리와 키가 같다. - 문장 내에서 단어의 중요도를 계산한다.

seq2seq의 어텐션

 

Self attention

이 전에 임베딩 차원보다 작은 차원을 가지게 된다.

q k 하면 유사도가 나온다! 이 때 sqrt(dk)로 나눠준다.

dk가 뭐지?

Transformer에서 self attention을 진행할 때 Attention Score를 계산하는 과정에 대해 자세히 설명해줘 
q와 k를 내적해서 유사도를 구하는 것은 알겠는데 뭐로 나누는 거야?

Transformer에서 self-attention 메커니즘은 입력 시퀀스의 각 토큰이 시퀀스 내 다른 토큰과 얼마나 관련이 있는지를 계산하는 과정입니다. 이 과정에서 주요 계산 요소는 Query(Q), Key(K), Value(V)입니다. Attention score를 계산하는 과정은 크게 다음과 같습니다.

1. **Query와 Key의 내적(Dot Product):** 우선 각 토큰에 대한 Query와 다른 모든 토큰의 Key를 내적하여 유사도(Similarity) 점수를 계산합니다. 이 내적 값은 해당 Query 토큰과 Key 토큰 간의 관련성을 나타냅니다. 이 값이 클수록 두 토큰 사이의 관련성이 높다고 해석됩니다.

2. **스케일링(Scaled):** 내적으로 계산된 유사도 점수는 Key의 차원수(dk)의 제곱근으로 나누어 스케일링됩니다. 이 스케일링 과정은 Softmax 함수를 적용했을 때 너무 큰 값들의 차이로 인해 Softmax 함수의 그래디언트가 작아지는 문제(Gradient Vanishing)를 방지하기 위해 사용됩니다. Key 벡터의 차원이 클수록 내적 값이 커지는 경향이 있으므로, 이를 제곱근으로 나눔으로써 값을 조정합니다.

   \[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]

3. **Softmax 적용:** 스케일링된 유사도 점수에 Softmax 함수를 적용하여, 각 Query에 대한 모든 Key의 유사도 점수를 확률 분포로 변환합니다. 이 확률 분포는 각 Key-Value 쌍에 대한 가중치로 해석될 수 있으며, 이 가중치는 해당 Query 토큰에 대해 다른 토큰들이 얼마나 중요한지를 나타냅니다.

4. **Value 가중치 합계:** 마지막으로, 각 Value에 Softmax에서 계산된 가중치를 곱하고, 모든 가중치가 적용된 Value들을 합산하여 최종 출력을 생성합니다. 이 출력은 입력 토큰에 대한 컨텍스트를 반영한 벡터로, 다음 레이어로 전달됩니다.

이 과정을 통해, Transformer는 입력 시퀀스 내에서 각 단어가 문맥 속에서 어떻게 관련되는지를 동적으로 학습할 수 있으며, 이를 바탕으로 더 풍부한 문맥 정보를 반영한 표현을 생성할 수 있습니다.

차원 수 였네요

소프트 맥스는 동일하게 사용하네요

동일하게 진행하면 각각의 attention value를 구할 수 있다.

통째로 행렬로 처리하면 한번에 해결할 수 있다!

병렬적으로 한번에 얻는 법!

임베딩 차원인 512차원을 8로 나누어 64차원으로 8번 진행하는 것이다.

각기 다른 특징을 학습한다.

 

그럼 마지막에 다 concat하나?

 

행렬 형태로 되어있을 텐데 ...?

입력의 정보를 까먹지 않고 계속 이어지게 해준다.

즉 LN은 데이터 샘플단위로 평균과 표준편차를 계산해 정규화를 지행하는 것이다.

이건 이전에 배웠던 것과 동일한 내용!

2024.04.11 - [인공지능/공부] - attention, Transformer 정리 1

 

attention, Transformer 정리 1

attention이 명확하게 정리되지 않아서 일단 다양하게 영상을 보고 정리를 시도해 보려고 합니다... https://youtu.be/6s69XY025MU?si=3vgHGAPVJINkCOl7 이번에도 시작은 이 영상 입니다.. 텐서 기본정보 1. 정보를

yoonschallenge.tistory.com

디코더에서는 여기서 마스킹이 들어가는 것이다. ( 학습시에)

 

 

 

728x90