인공지능/공부

attention, Transformer 정리 1

이게될까 2024. 4. 11. 12:25
728x90
728x90

attention이 명확하게 정리되지 않아서 일단 다양하게 영상을 보고 정리를 시도해 보려고 합니다...

https://youtu.be/6s69XY025MU?si=3vgHGAPVJINkCOl7

이번에도 시작은 이 영상 입니다..

텐서 기본정보

1. 정보를 나타나는 텐서는 가중지 Weight를 통과해도 이 전의 정보를 가지고 있다.

2. Weight(양수이며 더하면 1)를 곱한 후 더하면 Weight가 큰 곳의 정보를 더 가지고 있다.

3. 내적은 비슷한 정보끼리 하면 커지고, 상관 없는 정보라면 작아진다. -> 내적 : 정보의 비슷한 정도

 

Query - 정보를 요청한다. 검색어. 계정 정보. 

key - 서로 다른 정보 몇개. 사이트들

Value

 

Query는 Weight q에 통과시키고, key는 Weight k(key)와 Weight v(value)를 통과시킨다.

Query랑 Weight k를 통과시킨 key를 각각 내적한다. -> 비슷한 정보는 크게 남는다. 유사도가 남는다. (Query랑 Key에 유사도 정도가 큰 정보의 벨류를 만들겠다. )
내적 결과들이 모두 양수도 아니고, 합이 1도 아니기 때문에 Soft max를 활용하여 합을 1로 맞춘다.
-> 여기까지가 softmax(QK^T)

이 후 softmax(QK^T)여기에 각각 value를 곱하게 된다.

Query의 정보공간

Weight Sum

결과의 정보 - Value(Key들에서 Weight v를 통과시킨 것)들의 가중치 합 + 쿼리의 정보 

attention == key 정보의 가중치(Query와의 유사도) 합

검색 할 경우 검색어 + 계정 정보 + 시간 등등 다양한 정보들이 Query에 들어가서 다양한 사이트들(Key)와 유사도 검색 후 유사도가 가장 높은 사이트들을 보여주는 것이다.

Key 정보가 인도(국가, 도보 == 동음이의어)라는 것을 구분 할 수 없기 때문에 position과 주변 정보가 있어야 된다!

 

Attention에 순서, 맥락 정보 넣기

attention - 쿼리를 입력했을 때 쿼리와 관련있는 키들의 가중치 합이다. - 개별적으로 내적 계산하기 때문에 순서는 생각하지 않는다. 

'잡담 및 소음 금지' 와 '소음 금지 및 잡담'의 attention은 똑같이 나오는 것이다
-> Positional encoding의 출현 - Transformer 맨 앞에 있다.

Positional encoding - 문장의 단어 백터에 위치 백터를 더해서 위치 정보를 추가해준다.

그러나 동음 이의어 문제를 해결하진 못했다. -> 주변 단어로 맥락을 살펴야 한다. - Self attention

Self attention - Query와 Key로 같은 정보를 쓴다. (6단어라면 6개의 어텐션이 사용된다.)
그럼 각각 한 단어씩 Key 재적 후  가중치 합하여 다음 레이어에 입력으로 사용한다.
이렇게 되면 동음이의어 일지라도 주변 단어의 맥락이 들어 있기 때문에 다른 정보로 사용된다.

즉 Positional encoding - 위치 정보 주입, Self attention - 맥락 정보 주입 (encorder layer)

 

Transformer의 동작/ 학습 + Masking

Masking은 Decorder에 존재한다.

Transformer의 기본 동작 - 번역!

아 퇴사 하고 싶다 - 번역된 영어 문장은 아직 모르나 한글 정보는 다 가지고 있다.
어떤 순서대로 예측하는게 좋을까 -> 첫 번째 단어부터 순서대로 맞추는게 제일 편하다. 아 == Oh
-> oh i want to quit my job - 한국어 정보를 보는 상태로 순차적으로 맞추게 된다.

번역할 한국어 문장은 Encorder에 집어 넣는다. - 이 정보는 Decorder중간 attention에 key와 value로 사용된다.
n번째 단어를 예측할 때는 n-1번째 단어까지 decorder에 집어 넣는다. 결과는 n번째 단어가 나온다.
첫 번째 단어는 약속한 기호인 SOS(Start of sequence)를 집어넣는다.
문장의 끝에는 EOS(End of Sequence)가 나오면 Transformer를 종료한다.

학습때?

SOS 를 붙인 입력과 EOS를 붙인 Label를 주고 병렬로 학습한다.
그냥 넣으면 정답(모든 정보를 다 사용한다 - Self attention에서 사용해버린다.)을 알고 학습하게 되므로 문제가 생긴다!
미래의 단어를 사용해 버리면 사용할 수 없는 번역기가 된다. -> MASK가 필요하다.

모든 단어를 집어넣어 학습한다고 해도 첫 번째 단어를 예측 할 때 뒤에 단어들을 학습에 사용하면 안된다. = Masking
극단적인 음수값을 집어 넣는 것으로 구현한다.

Query와 Key의 내적을 하지만 사용하면 안되는 단어들은 극단적 음수로 변환한다. -> Soft max 후 0이 된다.
원하는 단어랑만 Self attention을 진행하게 된다.

Transformer - 기본으로 번역하는 구조

Encorder - 번역될 문장. 전체 대상을 다 보고있다.

Decorder - 번역 할 문장 - Taget 언어 단어 순서대로 만든다. Masking이 들어있다.

728x90