Transformer
Q. Transformer에서 K, Q, V는 각각 어떻게 만들어지나요?
- Query : 디코더의 이전 레이어 hidden state , 영향을 받는 디코더의 토큰 (고프다)
- K : 인코더의 output state , 영향을 주는 인코더의 토큰들 (I am hungry)
- V : 인코더의 output state , 그 영향에 대한 가중치가 곱해질 인코더 토큰들
- query는 현재 토큰을 의미하고, key는 query와 비교할 토큰입니다. Self-Attention은 query와 key의 유사성을 가중치로 하여 value들의 가중합을 내게 됩니다.
Q2. transformer는 rnn, lstm, gru를 사용하지 않고 단어간의 위치정보를 보존할 수 있었는데 그 역할을 하는 레이어는 무엇인가요?
- self-attention layer
Q3. transformer의 long term dependecy는 어떻게 개선해나갔을까요?
- 정보가 위치한 거리와 관계없이 유사도를 측정하여 attention을 분배함으로써 long-term dependecy 문제를 개선
- 학습 시 encoder에서는 각각의 position에 대해, 즉 각각의 단어에 대해 attention을 해주기만 하고, decoder에서는 masking 기법을 이용해 병렬 처리
Q4. scaling factor 루트(dk) 하는 이유?
- 학습 시 안정적인 그래디언트를 얻기 위해
Q5. self attention이란? + transformer의 어텐션 3가지는?
- 입력을 Query(q), Key(k), Value(v)로 선형 변환하고 내적 연산을 실행하는 것을 의미합니다.
인코더의 Attention, 디코더의 Attention, 디코더의 Masked Attention
- self attention
- multi-head attention
- Masked Self-Attention
Q6. multi-head attention이란? 효과는?
- 입력받은 query, key, value를 헤드 수만큼 나누어 병렬적으로 계산해주는 것
- 기존의 Attention 모듈을 좀 더 유용하게 확장한 모듈로 셀프 어텐션(self attention)을 여러 번 수행한 걸 가리킵니다. 여러 헤드가 독자적으로 셀프 어텐션을 계산함
- 동일한 입력문 기준으로도 필요에 따라 중점을 두어야 할 단어들이 다를 경우가 있기 때문
- 아무리 계산 결과가 무지막지하게 복잡해도 차원의 크기를 유지하면서 계산함.(병렬처리)
https://pozalabs.github.io/transformer/
https://triple-f-coding.tistory.com/9
https://deepseow.tistory.com/34
https://acdongpgm.tistory.com/220
https://wdprogrammer.tistory.com/72
https://moon-walker.medium.com/transformer-%EB%B6%84%EC%84%9D-2-transformer%EC%9D%98-encoder-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1edecc2ad5d4
https://medium.com/platfarm/%EC%96%B4%ED%85%90%EC%85%98-%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98%EA%B3%BC-transfomer-self-attention-842498fd3225
https://better-tomorrow.tistory.com/entry/Transformer-%EC%A0%95%EB%A6%AC
https://moondol-ai.tistory.com/460
https://blogik.netlify.app/BoostCamp/U_stage/28_transformer/
https://ratsgo.github.io/nlpbook/docs/language_model/transformers/