📌 기존 Attention 병렬 연산
연산 처리를 위와 같이 병렬로 한번에 처리할 경우, 효율적인 연산이 가능했음
[ 🚨 ]
기존 RNN 계열의 모델의 경우 시간 순서대로 학습을 진행하기에 상관이 없었으나,
Transformer 모델에서 문장을 한번에 처리하자 단어 간의 순서가 반영되지 않는 문제점 발생
언어는 시계열 데이터이기 때문에 문장에서 순서는 해석에 큰 영향을 끼침
ex) 나는 고기를 먹었다 ≠ 고기는 나를 먹었다
➡️ 각 단어 임베딩에 순서가 들어간 정보를 더해줌
📌 Positional Encoding
위와 같이 positional embedding 수행
이때, Positional Encoding에는 몇가지 조건이 존재
- 모델의 효율적인 학습을 위해 스케일이 어느정도 범위 내에 있어야 함
- input data의 크기에 상관 없이 output을 도출해야 함
➡️ 주기함수이기에 x값에 상관 없이 output(-1 ~ 1사이의 값)을 도출할 수 있는 삼각함수 도입
[ 🚨 ]
그러나 이러한 주기함수의 치명적인 단점은 y값이 주기적으로 반복되어 정보가 겹쳐짐
➡️ sin, cos 함수를 모두 사용하고 각 embedding의 차원별로 sin, cos함수를 번갈아 사용
위와 같이 차원이 짝수이면 sin, 홀수이면 cos함수를 사용하여 positional encoding 작업 수행
📌 Positional Encoding 예시
“나는 고기를 먹었다”라는 문장이 존재할 때,
“나는”, “고기를”, “먹었다”의 세 단어로 나뉨
각 단어들의 차원을 d라고 하고, 여기서의 d = 4라고 정의함
여기서 차원의 순서를 i라고 했을 때, 각 단어별 i의 값은 1부터 4까지가 됨
position은 0부터 시작하며 이 문장의 경우 “나는”은 0, “고기를”은 1, “먹었다”는 2로 정의됨
위 공식에 이 값들을 대입하여 positional encoding을 수행할 경우,
위와 같은 연산 결과가 나오는 것을 확인할 수 있음
'[AI] > 인공지능 이론 및 실습' 카테고리의 다른 글
[인공지능] Multi-head Attention이란? Multi-head Attention을 사용하는 이유 (0) | 2024.03.09 |
---|---|
[인공지능] Self Attention이란? Self Attention 핵심 아이디어 및 계산 과정 (0) | 2024.03.08 |
[인공지능] Attention이란? Attention 메커니즘의 상세 과정 및 사례 (0) | 2024.03.06 |
[인공지능] seq2seq이란? seq2seq 개요 및 상세 구조 (0) | 2024.03.05 |
[인공지능] BiLSTM이란? BiLSTM의 구조 (2) | 2024.03.05 |