ํฐ์คํ ๋ฆฌ ๋ทฐ
[๋ฅ๋ฌ๋] BERT์ GPT์ ๊ธฐ๋ณธ์ธ Transformer์ A to Z
calmmimi 2023. 2. 26. 14:31๐ ๋ ผ๋ฌธ : "Attention is all you need"
๐ปGithub : https://github.com/jadore801120/attention-is-all-you-need-pytorch
Transformer ๊ตฌ์กฐ๋ฅผ ์ ์ํ "Attention is All you Need"๋ 2017๋ ์ ๋ฐํ๋ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๋ ผ๋ฌธ ์ค ํ๋์ ๋๋ค.
๊ฐ์ข ๊ธฐ๊ณ๋ฒ์ญ ๋ํ์์ ์ธ๊ณ ์ต๊ณ ์ ๊ธฐ๋ก ๋ณด์ ํ๊ณ ์๊ณ
BERT, GPT ๋ฑ ์ต์ ์ธ์ด AI์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ Transformer ์ํคํ ์ฒ ๊ธฐ๋ฐ์ผ๋ก ์ผ๊ณ ์์ต๋๋ค.
Transformer๋ ์ด๋ป๊ฒ ํ์ํ๊ฒ ๋์์๊น?
- RNN์ long-term dependency๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ ธ๋ ฅ์ผ๋ก LSTM, GRU ๋์
- Seq2Seq์์ ๋จผ ๊ฑฐ๋ฆฌ์ ์๋ ํ ํฐ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ชจ๋ธ๋ง(hidden state)ํ๊ธฐ ์ํด Attention๊ณผ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ฅ
- Attention์ ํตํด ๋จผ ๊ฑฐ๋ฆฌ์ ์๋ ๋ฌธ๋งฅ ์ ๋ณด๋ ๊ฐ์ง๊ณ ์์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ง๋ง
์ํ์ค ํ ํฐ์ ํ์์คํ ๋ณ๋ก ํ๋์ฉ ์ฒ๋ฆฌ(์ฆ, Sequentialํ ์ ๋ ฅ๊ฐ์ด ์ฃผ์ด์ ธ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ถ๊ฐ๋ฅ)ํด์ผ ํ๋ RNN์ ํน์ฑ ์, ๋๋ฆฌ๋ค๋ ๋จ์ ์ฌ์ ํ ํด๊ฒฐ๋์ง ์์- ์ํ์ค ํ ํฐ์ ํ์
์คํ
๋ณ๋ก ํ๋์ฉ ์ฒ๋ฆฌ = ๋ชจ๋ ํ์ ์คํ
์์ hidden์ด ๊ณ์ฐ๋ ํ์์ผ attention์ด ์งํ ๊ฐ๋ฅ
→ Sequentialํ ์ ๋ ฅ๊ฐ์ด ์ฃผ์ด์ ธ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ถ๊ฐ๋ฅ
- ์ํ์ค ํ ํฐ์ ํ์
์คํ
๋ณ๋ก ํ๋์ฉ ์ฒ๋ฆฌ = ๋ชจ๋ ํ์ ์คํ
์์ hidden์ด ๊ณ์ฐ๋ ํ์์ผ attention์ด ์งํ ๊ฐ๋ฅ
RNN์ ๋จ์ ์ธ ๋๋ฆฌ๋ค๋ ๊ฒ๊ณผ long-term dependency ๋ชจ๋ธ๋ง ์ด๋ ต๋ค๋ ์ ์ ๋์์ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ ์๋ ๊ฒ์ด ๋ฐ๋ก Transformer์
๋๋ค. Seq2Seq๋ชจ๋ธ์ RNN์ ์ ๊ฑฐํ๊ณ "Attention Mechanism"์ผ๋ก ์ฐ๊ฒฐํ๊ฒ ๋๋ค.
๋ค์ ๋งํด,
(1) RNN์์ด ์
๋ ฅ๋ ์ํ์ค์ ์๋ ์ ๋ณด๋ฅผ ์ ๋ชจ๋ธ๋งํ๊ณ
(2) ์ฃผ์ด์ง ๋ฌธ๋งฅ ๋ด์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ณ ๋ คํด ์์ฐ์ด ํ ํฐ๋ค์ ์ ๋ณด๋ฅผ ๋ชจ๋ธ๋งํ ์ ์์ผ๋ฉฐ,
(3) ๋ณ๋ ฌ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด ์๋๊ฐ ๋น ๋ฅธ ๋ชจ๋ธ์ด๋ค.
Transformer์ ํต์ฌ
- ์
๋ ฅ๋ฐ์ดํฐ๋ผ๋ฆฌ์ Self attention์ ์ฌ์ฉํด Recurrent Unit ์์ด๋ ๋ฌธ์ฅ์ ๋ชจ๋ธ๋งํ์ฌ
๋ฌธ์ฅ ๋ด ๋จ์ด๋ค์ด ์๋ก ์ ๋ณด๋ฅผ ํ์ ํ๋ฉฐ, ํด๋น ๋จ์ด์ ์ฃผ๋ณ ๋จ์ด๊ฐ์ ๊ด๊ณ, ๋ฌธ๋งฅ์ ๋ ์ ํ์ ํ ์ ์๊ฒ ๋จ - Self Attention : Attention์ ํตํด ๊ฐ ํ ํฐ์ด ์ง์คํด์ผ ํ ๋ฌธ๋งฅ ์ ๋ณด๋ฅผ ์ ์ ๋งค๊ธฐ๊ณ , ๊ฐ์คํฉ
์ด์ RNN ๊ณ์ด | Transformer |
ํ์์คํ
๋ณ๋ก ๋ค์ด์ค๋ ์ธํ์ ์ด์ ์ ๋ณด์ ๊ฒฐํฉํด hidden representation ์์ฑ (์ด์ ์คํ ์ด ๋ชจ๋ ์ฒ๋ฆฌ๋์ด์ผ ํจ) |
Self attention์ ํตํด ํ ๋ฒ์ ๋ฌธ๋งฅ ๋ด์ ์๋ ๋ชจ๋ ํ ํฐ ์ ๋ณด๋ฅผ ๊ณ ๋ คํด hidden representation ์์ฑ |
๊ฐ ํ ํฐ์ด sequentialํ๊ฒ RNN cell์ ์
๋ ฅ๋๋ฏ๋ก ์ ๋ ฅ ์ํ์ค๋ค์ ์์(์์น) ์ ๋ณด๊ฐ ๋ณด์กด |
์ํ์ค(ํ ํฐ)์ ํ๋ฒ์ ๋ค ์
๋ ฅํ๋ ํํ์ด๋ฏ๋ก seq2seq์ ๋ค๋ฅด๊ฒ ์์(์์น)์ ๋ณด๊ฐ ๋ณด์กด๋์ง ์์ |
Transformer์ ์ํคํ ์ฒ - # 0. Summary
- RNN์ด๋ CNN์์ด ์ค๋ก์ง Attention๊ณผ Dense layer(feed forward network)๋ง์ผ๋ก ์ธํ์ ์ฐ๊ฒฐํ ๊ตฌ์กฐ
- Transformer๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฒ์ญ ํ์คํฌ๋ฅผ ์ํํ๊ธฐ ์ํ ๋ชจ๋ธ์ด๋ฏ๋ก Encoder - Decoder ๊ตฌ์กฐ๋ฅผ ์ง๋ Seq2Seq model
- ๊ฐ Encoder์ Decoder๋ L๊ฐ์ ๋์ผํ Block์ด stack๋ ํํ๋ฅผ ์ง๋
- Encoder Block ๊ตฌ์ฑ
- Multi-head self-attention
- Position-wise feed-forward network
- Residual connection
- Layer Normalization
- Encoder ๊ตฌ์กฐ Summary
- Encoder์ Input๊ณผ Output ํฌ๊ธฐ ๋์ผ
- [Input Embedding] ์ธํ ์ํ์ค๋ฅผ ์๋ฒ ๋ฉ
[Positional Encoding] ์์น ์ ๋ณด๋ฅผ ๋ํด์ฃผ๊ณ
[Multi-head attention] scale dot-product attention์ ํตํด ์ธํ์ ์๋ ๋ชจ๋ ๋ฌธ๋งฅ ์ ๋ณด๋ฅผ ์ฌ์ฉํด ํ ํฐ์ representation์์ฑ
[Residual Connection] [Layer Normalization]
[Feed Forward] Fully-Connected Network๋ฅผ ์ด์ฉํด ์ ๋ณด๋ฅผ ๋ณํ - ์ธ์ฝ๋์์๋ ์ธํ ๋ฌธ์ฅ ์์ ์๋ ํ ํฐ๋ค๊ฐ์ ๊ด๊ณ๋ฅผ ๊ณ ๋ คํ๋ self-attention์ฌ์ฉ
- ์ธ์ฝ๋ฉ ๋จ๊ณ์์๋ [Self-attention + Feed Forward] ๋ ์ด์ด๋ฅผ ์ฌ๋ฌ ์ธต ์์ ์ธํ ํ ํฐ๋ค์ ๋ํ representation ์์ฑ
- ์ธ์ฝ๋ layer #l์ด Output = ์ธ์ฝ๋ layer #l+1์ Input
- ๋ง์ง๋ง layer์ Output์ Decoder์์ Attention์ ์ฌ์ฉ
- Decoder ๊ตฌ์กฐ Summary
- ๊ธฐ๋ณธ์ ์ธ Encoder Block ๊ตฌ์ฑ๊ณผ ๋์ผ
- Multi-head self-attention๊ณผ Position-wise FFN ์ฌ์ด์ Cross-attention(encoder-decoder attention) ๋ชจ๋ ์ถ๊ฐ
- attention ํตํด์ ํ์ฌ output์ ๋ํด ๋ชจ๋ ์ธ์ฝ๋์ hidden state๋ฅผ ๊ณ ๋ คํ ์ ์์
- ๋์ฝ๋ฉ ์์ ๋ฏธ๋ ์์ ์ ๋จ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด Masked self-attention์ ์ฌ์ฉ
- ๋์ฝํฐ์์๋ ๋์ฝ๋ ํ๋ ๊ณผ ์ธ์ฝ๋ ํ๋ ๋ค๊ฐ์ attention์ ๊ณ ๋ คํด ํ ํฐ์ ์์ธกํจ
- ๋์ฝ๋ฉ ๋จ๊ณ์์๋ [๋์ฝ๋ ํ๋ ์ฌ์ด์ Self Attention , ์ธ์ฝ๋ ์์ํ๊ณผ์ attention]
- ๋์ฝ๋ layer #l์ด Output = ๋์ฝ๋ layer #l+1์ Input
- ๋ง์ง๋ง layer์ Output์ ์ต์ข ์์ธก์ ์ฌ์ฉ
- head๋ง๋ค input ๋ฌธ์ฅ์ ์ด๋์ ์ง์คํ ์ง๊ฐ ๋ฌ๋ผ ๊ฐ๊ณต์ด ๊ฐ๋ฅํ์ฌ ํจ์ฌ ์ฑ๋ฅ์ด ์ข์
๋ค์์ผ๋ก ์ํคํ ์ฒ์ ๋ํด ๋ ์ธ๋ถ์ ์ธ ์ค๋ช ์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Transformer์ ์ํคํ ์ฒ - # 1. Encoder์ Input
- ๋ฌธ์ฅ์ ๊ฐ ์ํ์ค(ํ ํฐ)๋ฅผ ํ์ต์ ์ฌ์ฉ๋๋ ๋ฒกํฐ๋ก ์๋ฒ ๋ฉํ๋ embedding layer ๊ตฌ์ถ
- ์๋ฒ ๋ฉ ํ๋ ฌ W์์ look-up์ ์ํํ์ฌ ํด๋นํ๋ ๋ฒกํฐ๋ฅผ ๋ฐํ
- W : ํ๋ จ ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ
Transformer์ ์ํคํ ์ฒ - # 2. Encoder์ Positional Encoding
- Transformer๋ input์์ฒด๋ฅผ Sequentialํ๊ฒ ์
๋ ฅํ๋ ๊ฒ์ด ์๋๋ผ
ํ๋์ matrix๋ก ํ๋ฒ์ ๋ฐ์ attention์ ๊ณ์ฐํ๋ ํํ์ด๋ฏ๋ก,
โถ๊ฐ ํ ํฐ์ด ๋ณ๋ ฌ์ ์ผ๋ก ๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ์ฐ์ฐํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ฏ๋ก,
Sequence๊ฐ ๋ดํฌํ๊ณ ์๋ ์์ ์ ๋ณด์ ํน์ง์ ๋ฐ์ํ์ง ๋ชปํจ - [์์] ๋ง์ฝ [์ฒ ์] [๊ฐ] [์ํฌ] [๋ฅผ] [์ข์ํด]๋ผ๋ ์ธํ์ self-attention๋ ์ด์ด ๋ฃ์ผ๋ฉด ์ด๋ค ๊ฒฐ๊ณผ?
[์ํฌ] [๊ฐ] [์ฒ ์] [๋ฅผ] [์ข์ํด] ๋ผ๋ ๋ฌธ์ฅ์ ๋ฃ์๋ค๋ฉด?
๊ฐ์ ํ ํฐ์๋ฒ ๋ฉ ๋งคํธ๋ฆญ์ค์ ๊ฐ์ค์น ๋งคํธ๋ฆญ์ค(Q, K, V)์ ๋ํด ๋ ๋ฌธ์ฅ์ ์์ ํ ๊ฐ์ ๋ฌธ์ฅ์ผ๋ก ํํ๋จ - ํ ํฐ์ ์์์ ๋ณด๋ฅผ ๋ฐ์ํด์ฃผ๊ธฐ ์ํด Position Encoding ์ฌ์ฉ
- Positional Embedding์ Input Embedding์ ๋ํด ์ต์ข
input์ผ๋ก ์ฌ์ฉ
(Input โถ Embeddings + Positional Encoding = Embedding with Time signal โถ Encoder) - Positional Encoding ์ฐจ์ = Embedding ์ฐจ์
- [์กฐ๊ฑด]
- ๊ฐ ํ ํฐ์ ์์น๋ง๋ค ์ ์ผํ ๊ฐ์ ์ง๋ ์ผ ํจ
- ํ ํฐ ๊ฐ ์ฐจ์ด๊ฐ ์ผ์ ํ ์๋ฏธ๋ฅผ ์ง๋ ์ผ ํจ (๋ฉ์๋ก ํฐ ๊ฐ)
- ๋ ๊ธด ๊ธธ์ด์ ๋ฌธ์ฅ์ด ์ ๋ ฅ๋์ด๋ ์ผ๋ฐํ๊ฐ ๊ฐ๋ฅํด์ผ ํจ
- sin & cos ํจ์๋ฅผ ์ฌ์ฉํด ํ ํฐ์ ์ ๋ ์์น(0๋ฒ์งธ, 1๋ฒ์งธ)์ ๋ฐ๋ฅธ ์ธ์ฝ๋ฉ์ ๋ง๋ค์ด๋
(sin&cos ํจ์๋ฅผ ์ฌ์ฉํด ์ธ์ฝ๋ฉ ํ๋ ๋ฐฉ๋ฒ์ 'sinusoidal positional encoding'์ด๋ผ๊ณ ๋ถ๋ฆ)
- ์์น์ ๋ฐ๋ผ ์กฐ๊ธ์ฉ ๋ค๋ฅธ ํํ์ด ํ ํฐ ์๋ฒ ๋ฉ์ ๋ํด์ง๊ณ , ์ด๋ฅผ ํตํด ํธ๋์คํฌ๋จธ ๋ธ๋ก์
์ [์์]์ ๋ ๋ฌธ์ฅ์ ๋ค๋ฅด๊ฒ ์ธ์ฝ๋ฉํ ์ ์์
- ์์์ ์ธ์ฝ๋ฉ์ ๋ง๋ค์ด๋ด๋ ๋ฐฉ์ ๋์ Positional Encoding์ ํด๋นํ๋ ๋ถ๋ถ๋ ํ์ตํ ์ ์์
- ์์น๋ฅผ ๋ํ๋ด๋ one-hot-vector๋ฅผ ๋ง๋ค๊ณ , ์ด์ ๋ํด ํ ํฐ ์๋ฒ ๋ฉ๊ณผ ๋น์ทํ๊ฒ ์์น ์๋ฒ ๋ฉ์ ์งํ
Transformer์ ์ํคํ ์ฒ - # 3. Encoder์ Scaled Dot Product Attention
- Multi-head-self-attention์์ ์ฌ์ฉํ๋ Scaled dot-product attention์ด ํต์ฌ
- ๋ฌธ์ฅ ๋ด ์ด๋ป๊ฒ ๊ด๊ณ๋ฅผ ํ์ตํ ์ ์์๊น์ ๋ต!
- dot-product๋ก attention ์ ์๋ฅผ ๊ณ์ฐํ๊ณ ๊ทธ ์ ์๋ฅผ scaling
- Step1) Attention ๋์์ด ๋๋ ํ ํฐ๋ค์ Key์ Value, attentionํ๋ ํ ํฐ์ Query๋ก ๋ณํ(ํ๋ ฌ๊ณฑ)
- ์ธํ ๋ฌธ์ฅ์ ํ ํฐ ์๋ฒ ๋ฉ์ ํตํด ๊ฐ๊ฐ์ ํ ํฐ์ h์ฐจ์์ผ๋ก ๋ณํํ ํ,
๋งคํธ๋ฆญ์ค ๊ณฑ์ ํตํด ๊ฐ๊ฐ์ ํ ํฐ์ ๋ํด 3๊ฐ์ง ๋ฒกํฐ ์์ฑ โถQuery-Key-Value๋ก ๋์
(L : ์ํ์ค ๊ธธ์ด, d : attention depth)
- ์ธํ ๋ฌธ์ฅ์ ํ ํฐ ์๋ฒ ๋ฉ์ ํตํด ๊ฐ๊ฐ์ ํ ํฐ์ h์ฐจ์์ผ๋ก ๋ณํํ ํ,
Query | Key | Value | |
๊ด์ฌ ์๋ ๋ฌธ๋งฅ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ค๊ณ ์ ํ๋ ํ ํฐ ๋ฒกํฐ (Self attention์ ์ฃผ์ฒด) |
Query์ ๋ฌธ์ฅ์ ๊ฐ ํ ํฐ ์ฌ์ด์ attention score์ ๊ณ์ฐ(๋ชจ๋ธ๋ง)ํ๊ธฐ ์ํ ๋ฒกํฐ (Query์์ ๋น๊ต ๋์) |
Key๊ฐ๋ค์ Query์ Key๊ฐ์ ์ ์ฌ๋์ ๋ฐ๋ผ ๊ฐ์คํฉํ์ฌ Query์ ๋ฐ์ํ ๋ ๊ฐ์คํฉ์ ๋์์ผ๋ก ์ฌ์ฉํ ๊ฐ |
|
ํ์ฌ์ hidden state๊ฐ | hidden state์ ์ํฅ์ ์ฃผ๊ณ ๋ฐ๋ ๊ฐ |
๊ฐ ํ ํฐ์ ๋ํ ์๋ก์ด representation์ผ๋ก, ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๋ฒกํฐ. Key๊ฐ ๊ฐ๊ณ ์๋ ์ค์ ๊ฐ |
|
๊ฒ์์ด | ๋ค๋ฅธ ์ฃผ๋ณ์ ํ ํฐ๋ค (Key1, Key2, ...) |
Attention Output์ Value์ Attention Score์ ๊ณฑํ์ฌ ๊ณ์ฐ๋จ |
[ํํ์ ์๋ฏธ] โก (Dk) : Query๊ฐ Projectiongํ๋ ์ฐจ์ (M) : Key์ Sequence Length (N) : Query์ Sequence Length โก ๋ด์ ์ ์ํด Query์ Key์ ์ฐจ์์ด ๊ฐ์์ผ ํจ โก M์ ๊ฐ Key์ ํด๋นํ๋ Value๊ฐ์ ๊ฐ์คํฉํ์ฌ ์ฌ์ฉ โก Projection๋ ์ฐจ์์ ๋ฌ๋ผ๋ ๋์ง๋ง Row-wise Softmax๊ฐ์ Value๊ฐ ๋ด์ ๋์ด์ผ ํ๋ฏ๋ก, Key์ M์ ํด๋นํ๋ ๋ถ๋ถ๊ณผ ๊ฐ์์ผ ํจ [๋ถ์/๋ถ๋ชจ ์๋ฏธ] โก [๋ถ์] dot-product : Query์ Key์ ๋ด์ ์ผ๋ก ์ด๋ฃจ์ด์ง โก [๋ถ๋ชจ] Softmaxํจ์์ gradient vanishing ๋ฌธ์ ์ํ ์ํด Scaling [Dk] โก ์ด๋ฐ์ ํ์ต์ด ์ ๋๋๋ก ํ๊ธฐ ์ํด Dk๋ก scaling โก multi-head ์ ์ฉํ์ง ์์ ๋ Dk = 512 โก Dk๊ฐ ์์ ๊ฒฝ์ฐ, dop-product attention๊ณผ additive attention์ ์ ์ฌํ ์ฑ๋ฅ โก Dk๊ฐ ํฐ ๊ฒฝ์ฐ, ๋ด์ ๊ฐ์ด ๊ต์ฅํ ์ปค์ง์ ๋ฐ๋ผ ํน์ softmax ๊ฐ(๊ฐ์ค์น)์ด 1์ ๊ทผ์ฌ๋์ด, ์ด๋ gradient๊ฐ ์์ค๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ โก ํ๋์ softmax๊ฐ์ด 1์ ๊ฐ๊น์์ง๋ฉด gradient๊ฐ ๋ชจ๋ 0์ ์๋ ดํ๊ฒ ๋์ด ํ์ต ์๋๊ฐ ๊ต์ฅํ ๋๋ ค์ง๊ฑฐ๋ ํ์ต์ด ์ ๋ ์ ์์ [SoftMax] โก ๊ฐ ํ๋ณ SoftMax๋ฅผ ํ์, ๊ฐ ํ ํฐ์ด ๋ค๋ฅธ ํ ํฐ๋ค๊ณผ ๊ฐ๋ ๊ด๊ณ์ ์ธ ์๋ฏธ๋ฅผ ํํ(๊ฐ์ค์น) |
- Step2) Query์ ๋ํด ๊ฐ key๋ค๊ณผ์ ๋ด์ ์ ํตํด attention ๊ฐ์ค์น ๊ณ์ฐ.
์ด ๋ scale๋ ๋ฒกํฐ ๋ด์ ์ Softmax๋ฅผ ์ทจํ๋ ๋ฐฉ์์ผ๋ก 'ํ๋ฅ ๋ถํฌ'์ ๊ฐ์ด ๋ง๋ฆ- Query๋ฒกํฐ(๊ฒ์์ด)์ ๊ฐ๊ฐ์ key๋ฒกํฐ๋ค์ ๋ด์ (dot product)ํ์ฌ ์ดํ ์ ์ ์(๋น์ค, ์ ์ฌ๋)๋ฅผ ๊ณ์ฐ
(์์) [I] ํ ํฐ ์
์ฅ์์ [I] [am] [a] [men]์ ์ค์๋๋ฅผ ๊ณ์ฐ
- [I]์์ ์ ์ : 128, [am]๊ณผ์ ์ ์ : 32, [a]์์ ์ ์ : 32, [men]๊ณผ์ ์ ์๋ 128
- dot-product ์ฐ์ฐ์ ํ๊ธฐ ๋๋ฌธ์ query์ key๋ฒกํฐ์ ์ฐจ์์ ๋ฐ๋ผ ์ซ์๋ ์์ฃผ ์ปค์ง
โถ ์ฟผ๋ฆฌ ๋ฒกํฐ์ ์ฐจ์์ squared-root๋ฅผ ์ทจํด ์ด ์ ์๋ฅผ scaling. ๊ทธ ๊ฒฐ๊ณผ 16, 4, 4, 1
- ์ด ์ ์์ softmax๋ฅผ ์ทจํด ํ๋ฅ ๊ฐ๊ณผ ๋น์ทํ Attention distribution์ ๋ง๋ฆ
- Step3) ๊ฐ์ค์น๋ฅผ ์ด์ฉํด Value๋ฅผ ๊ฐ์คํฉํ์ฌ Query์ representation์ ์
๋ฐ์ดํธ
(Attention ๋ถํฌ์ ๋ฐ๋ผ Value๋ฅผ ๊ฐ์คํฉํ์ฌ Attention Value(output)์ ๊ตฌํจ)- ์์์ ๊ตฌํ Attention distribution์ ๊ฐ์ค์น๋ก ์ฌ์ฉํ์ฌ value ๋ฒกํฐ๋ฅผ ๊ฐ์คํฉํจ
- ํ ํฐ์ด ์ด๋ค ์ ๋ณด์ ๊ด๋ จ์์์ง (WQ, WK), ์ด๋ค ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ผ ํ ์ง(WV)
- Query๋ฒกํฐ๊ฐ Key์์ ์ ์ฌ๋ ์ ๋ณด๋ฅผ ๋ฐ์ํ ๋ฒกํฐ๋ก ๋ณํ
(์์) ์ด๋ ๊ฒ ๊ณ์ฐ๋ ๋ฒกํฐ๋ queryํ ํฐ์ธ[I]์ ๋ํ representation
- [I] [am] [a] [men]์ ๋ํ ๊ฐ์ค์น๊ฐ ๊ฐ๊ฐ 0.4, 0.1, 0.1, 0.4๋ก ๊ณ์ฐ๋์ด
์์ฑ๋ ๋ฒกํฐ๋ [I]์ [men]์ ์ ๋ณด๊ฐ ๋ง์ด ๋ฐ์๋ ๋ฒกํฐ
- ๊ฐ Key์ ๊ฐ์ค์น * Value์ ํฉ
โถ self attention์ ํตํด [I] ํ ํฐ์ด ์ ์ฒด ์ธํ ํ
์คํธ์ ์ ๋ณด๋ฅผ ๋ฐ์ํ์ฌ [men]์ ์๋ฏธ๊น์ง ๊ฐ์ง representation์ด ๋จ
(์์) query = 'Key1' | attention = {'key1' : 'value1', 'key2' : 'value2', 'key3' : 'value3'} attention[query] = 'value2'
- Attention์ Output์ Encoder์ Input๊ณผ ๋์ผํ ํฌ๊ธฐ์ ํ ์
- padding์ ๋ํ attention score๋ 0(Q*Kt๊ณ์ฐ ์ -1e9๋ก ์ ๋ ฅ)์ผ๋ก, loss๊ณ์ฐ์์๋ ์ฐธ์ฌ ์ ํจ
class ScaledDotProductAttention(nn.Module):
''' Scaled Dot-Product Attention '''
def __init__(self, temperature, attn_dropout=0.1):
super().__init__()
self.temperature = temperature
self.dropout = nn.Dropout(attn_dropout)
def forward(self, q, k, v, mask=None):
attn = torch.matmul(q / self.temperature, k.transpose(2, 3))
if mask is not None:
attn = attn.masked_fill(mask == 0, -1e9)
attn = self.dropout(F.softmax(attn, dim=-1))
output = torch.matmul(attn, v)
return output,
Self-attention์ ์๋ฏธ
- ์ธํ ์ํ์ค ์ ์ฒด์ ๋ํด attention์ ๊ณ์ฐํด ๊ฐ ํ ํฐ์ representation์ ๋ง๋ค์ด ๊ฐ๋ ๊ณผ์ ์ผ๋ก,
์ ๋ฐ์ดํธ๋ representation์ ๋ฌธ๋งฅ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ - ์๋ฅผ ๋ค์ด, "์ฐจ์์ฐ๋ #๋
์ ํ์ด๋ฌ๋ค. ๊ทธ๋ ์ต๊ทผ์ #์ ์ถ์ฐํ๋ค"๋ผ๋ ์ธํ์ ๋ํด self-attention์ ์ ์ฉํ๋ฉด
'๊ทธ'์ ํด๋นํ๋ representation์ '์ฐจ์์ฐ'์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ฒ ๋๋ค. - scale dot-product attention์ matrix๋ก ๊ณ์ฐํ ์ ์์ด RNN์ฒ๋ผ ์ด์ ํ ํฐ์ด ์ฒ๋ฆฌ๋๊ธธ ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์์
- ์ด๋ฌํ ๊ณผ์ ์ ํ์์คํ
์ ๋ฐ๋ฅธ ์ง์ฐ ์์ด ํ๋ฒ์ ์ฐ์ฐํ๋ฏ๋ก,
์ธํ์ผ๋ก ๋ค์ด์จ ๋ชจ๋ ๋ฌธ๋งฅ์ ์ ๋ณด๋ฅผ foregetting ์์ด ๋ฐ์ ๊ฐ๋ฅ - ์ธํ ํ ์คํธ์ ๊ฐ ํ ํฐ์ weight๋ฅผ ๊ณฑํด Q, K, V ๋ฅผ ๋ง๋ค๊ณ ์ด ๋ฒกํฐ๋ฅผ ์ฌ์ฉํด ํ ํฐ์ ๋ฌธ๋งฅ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ณผ์
Transformer์ ์ํคํ ์ฒ - # 4. Encoder์ Multi-head Attention
- ๊ฐ ํ ํฐ์ ๋ํด ์ธํ ์ปจํ ์คํธ๋ก๋ถํฐ ๊ด๋ จ๋ ๋ฌธ๋งฅ ์ ๋ณด๋ฅผ ํฌํจํด ์๋ฏธ๋ฅผ ๋ชจ๋ธ๋งํ๊ธฐ ์ํด ์ฌ์ฉ
- ์ ์ฒด ์ ๋ ฅ ๋ฌธ์ฅ์ ์ ๋ถ ๋์ผํ ๋น์จ๋ก ์ฐธ๊ณ ํ๋ ๊ฒ์ด ์๋๋ผ, ํด๋น ์์ ์์ ์์ธกํด์ผ ํ ๋จ์ด์ ์ฐ๊ด์๋ ๋จ์ด ๋ถ๋ถ์ ์ข ๋ ์ง์ค
- Attention head๋ณ๋ก ๊ฐ๊ธฐ ๋ค๋ฅธ ์ธก๋ฉด์์ ํ ํฐ๊ฐ์ ๊ด๊ณ์ ์ ๋ณด๋ฅผ ํ์ตํ ์ ์์. ์ฝ๊ฐ์ ์์๋ธ ๊ฐ๋ ?
- Attention ๊ณ์ฐ ๊ณผ์ ์ ์ฌ๋ฌ weight๋ฅผ ์ฌ์ฉํด ๋ฐ๋ณตํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ concatํ์ฌ ์ต์ข
attention output ๊ณ์ฐ
(์ด๋ CNN filter์ ์ฌ๋ฌ ์ฅ ์ฌ์ฉํจ์ผ๋ก์จ ์ด๋ฏธ์ง์ ์๋ ๋ค์ํ ํน์ฑ์ ํฌ์ฐฉํ๋ ๊ฒ์ฒ๋ผ,ํ ํฐ ์ฌ์ด์ ๋ค์ํ ๊ด๊ณ๋ฅผ ํฌ์ฐฉํ๊ธฐ ์ํจ์) - Scaled dot-product attention(WQ, WK, WV ๋งคํธ๋ฆญ์ค)์ ํ ๋ฒ์ ๊ณ์ฐํ๋ ๊ฒ์ด ์๋๋ผ
์ฌ๋ฌ ๊ฐ์ head์์ Self-Attention์ด ์ํ๋์ด ๊ณ์ฐํจ
[๊ณผ์ ]
- N x Dm ํฌ๊ธฐ์ ์๋ฒ ๋ฉ์ ๋ํ Q, K, V๋ก head์ ์(ํ์ดํผํ๋ผ๋ฏธํฐ)๋งํผ attention์ ๊ณ์ฐ
- ๊ฐ head์ Output์ Concatenate๋จ
- concatenate๋ ๊ฐ head๋ค์ output์ ์๋ Dmodel์ ์ฐจ์์ผ๋ก ๋ค์ Projection๋์ด ๋ค์ layer์ ์ ๋ฌ
- Step1) Sequence Embedding (Sequence Length x Embedding dimension(Dmodel)) โถ
Step2) Weight matrices for Q, K, V (head์ ๋งํผ) โถ
Step3) head ์๋งํผ attention ๊ณ์ฐ โถ
Step4) ๊ฐ attention head์ output concatenate โถ
Step5) Dmodel ์ฐจ์์ผ๋ก ๋ค์ Projection
(Step2)
- Sequence Embedding์์ Input sequence embedding ์ ์ฒด๋ฅผ Q, K, V๋ฅผ ๊ตฌํ๋ Weight matrices๋ฅผ ํตํด
ํน์ ์ฐจ์์ ๊ฐ์ง๋ Q, K, V๋ฅผ matrices๋ฅผ ๋ง๋ฆ
(embedding dimension์ head์ ์ ๋งํผ ์ชผ๊ฐ์ด attention์ ๊ตฌํ๋ ๊ฒ์ด ์๋๋ผ) - Sequence Embedding์ Projection์ํจ W๋ฅผ head๋ณ๋ก ๋๋์ด sequence Embedding๊ณผ ๋ด์ ํจ
- Concat๋ ํํ์ Weight๋ฅผ ๋ง๋ค์ด๋๊ณ ๊ฐ๊ฐ์ head ์ ๋ฐ๋ผ ํด๋น Weight๋ฅผ ๋๋์ด ์ฌ์ฉ
- Q, K, V๋ฅผ projectionํ๋ weight matrices๋ ์ฒ์๋ถํฐ ๋
๋ฆฝ์ ์ผ๋ก head์๋งํผ ์ ์ํ์ง ์๊ณ ,
n_Head*d_k์ dimension์ ๊ฐ๋ weight matrix๋ฅผ ๋ง๋ ํ ๋๋ ์ ์ฌ์ฉํ๋ ๋ฐฉ์
(Step5)
|
(์ฝ๋)
- Transformer ํด๋์ค d_model , n_head, d_k = d_model/n_head , d_v = d_model/n_head
- ์์ ์์ฑํ Weight Matrix์ ์ฐจ์์ ์กฐ์ ํ์ฌ head์๋งํผ Q, K, V Weight์ ์์ญ ๊ตฌ๋ถ
- ์ฆ, sequence_length x (n_head x d_k(v))์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ weight matrix๋ฅผ ๊ธฐ๋ฐ์ผ๋ก
n_head์๋งํผ attention์ด ๊ณ์ฐ๋ ์ ์๋๋ก ์ฐจ์์ ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉ = ๋ณ๋ ฌ์ ์ผ๋ก ์ฌ์ฉ - Attention ๊ณ์ฐ ํ head์ output ์ฐจ์์ ๋ค์ ์กฐ์ ํ์ฌ concatenate๋ matrix ์์ฑ
- concat ํ W0 matrix๋ฅผ ํตํด d_model์ ์ฐจ์์ผ๋ก ๋ค์ projection๋จ
def forward(self, q, k, v, mask=None):
d_k, d_v, n_head = self.d_k, self.d_v, self.n_head
sz_b, len_q, len_k, len_v = q.size(0), q.size(1), k.size(1), v.size(1)
residual = q
# Pass through the pre-attention projection: b x lq x (n*dv)
# Separate different heads: b x lq x n x dv
q = self.w_qs(q).view(sz_b, len_q, n_head, d_k)
k = self.w_ks(k).view(sz_b, len_k, n_head, d_k)
v = self.w_vs(v).view(sz_b, len_v, n_head, d_v)
# Transpose for attention dot product: b x n x lq x dv
q, k, v = q.transpose(1, 2), k.transpose(1, 2), v.transpose(1, 2)
if mask is not None:
mask = mask.unsqueeze(1) # For head axis broadcasting.
q, attn = self.attention(q, k, v, mask=mask)
# Transpose to move the head dimension back: b x lq x n x dv
# Combine the last two dimensions to concatenate all the heads together: b x lq x (n*dv)
q = q.transpose(1, 2).contiguous().view(sz_b, len_q, -1)
q = self.dropout(self.fc(q))
q += residual
q = self.layer_norm(q)
return q, attn
Transformer์ ์ํคํ ์ฒ - # 5. Encoder์ (Position-Wise) Feed Forward Network
- Feed Forward๋ Dense Layer, Multi-head attention์์ ๋์จ hidden state ์ ๋ณด๋ฅผ ๊ฐ๊ณตํ๋ ๋ ์ด์ด
- Attention์ ๊ฑฐ์น ํ Feed Forward Network(nn.Linear)์ ํ์
- Fully connected feed-forward module๋ฅผ ์ ์ฉํ๋ ๋ถ๋ถ
- Position๋ง๋ค ์ฆ ๊ฐ๋ณ ๋จ์ด๋ง๋ค ์ ์ฉ๋์ด position-wise
- ๊ฐ์ encoder layer ๋ด(ํ ๋ธ๋ก ๋ด ๋จ์ด ๊ฐ์) FFN์ parameter(w, b)๋ ๊ณต์ ๋จ
- ๊ฐ ํ ํฐ์ด hidden layer๋ก ํ๋ฒ projection ๋๊ณ ๋ค์ output ์ฐจ์(Input๊ณผ ๋์ผ ์ฐจ์)์ผ๋ก ๋คํธ์ํฌ ๊ฑฐ์นจ
- ์๋ก ๋ค๋ฅธ head๋ก๋ถํฐ ๋์จ ๋ ๋ฆฝ์ ์ธ multi-head attention ๊ฒฐ๊ณผ(heads)๋ฅผ processํ๋ ๊ฒ์ ์๋ฏธ
- FFN์ Input : ์ด์ layer์ Output,
- ReLU : max(0, ๊ฐ)
- ๋ณดํต d_hid(D_f) > d_model(D_m)
class PositionwiseFeedForward(nn.Module):
''' A two-feed-forward-layer module '''
def __init__(self, d_in, d_hid, dropout=0.1):
super().__init__()
self.w_1 = nn.Linear(d_in, d_hid) # position-wise
self.w_2 = nn.Linear(d_hid, d_in) # position-wise
self.layer_norm = nn.LayerNorm(d_in, eps=1e-6)
self.dropout = nn.Dropout(dropout)
def forward(self, x):
residual = x
x = self.w_2(F.relu(self.w_1(x)))
x = self.dropout(x)
x += residual
x = self.layer_norm(x)
return x
Transformer์ ์ํคํ ์ฒ - # 6. Encoder์ Residual Connection and Normalization
- Gradient exploding / vanishing ๋ฌธ์ ๋ฅผ ์ํํ๊ณ , deepํ ๋คํธ์ํฌ๋ฅผ ์์ ์ ์ผ๋ก ํ์ตํ๊ธฐ ์ํด ๋์
- Add & Norm์ residual connection์ ๋ง๋ค๊ณ , ๋ ์ด์ด ์ ๊ทํ๋ฅผ ํตํด ๋ชจ๋ธ์ด ์ ๋ณด๋ฅผ ์์ด๋ฒ๋ฆฌ์ง ์๋๋ก ํ๊ธฐ ์ํด ์๋ ๋ ์ด์ด
- Residual connection : ๋ค์๊ณผ ๊ฐ์ด layer์ ๊ฑฐ์น ์ดํ์ layer ๊ฑฐ์น๊ธฐ ์ด์ ์ x๊ฐ์ ๋ํด์ฃผ๋ ๊ฒ์ ์๋ฏธ
- ์ด์ ๋ ์ด์ด์ ์์ํ์ ๋ค์ ๋ ์ด์ด์ ๋ค์ด๋ ํธ๋ก ์ด์ด์ฃผ์ด์ layer๋ฅผ ๊น๊ฒ ์์๋ gradient vanishing์ด ์ผ์ด๋์ง ์๊ฒ ํ๋ ๊ธฐ๋ฒ
- ADD = Residual Connection, Input์ W(Q, K, V)๋ก Query, Key, Value๋ฅผ ์ป๊ณ Multi Head Attention์ผ๋ก ์ป์ ํ๋ ฌ์ input๊ฐ์ ๋ํด์ฃผ๋ ๊ฒ
- Layer Normalization : ๊ฐ ์ค๊ฐ์ธต์ ์ถ๋ ฅ์ ์ ๊ทํํ ๊ฒ, ์ ๊ทํํ ํ ๋ค์ Feed Forward๋ก ๋๊ฒจ์ค
(x : eng_seq_len * d_model ์ฐจ์)
- torch.nn.LayerNorm(normalized_shape = d_model, eps, ) : ๋ง์ง๋ง ์ฐจ์์ ๋ํด normalize
Transformer์ ์ํคํ ์ฒ - # 7. Decoder
- ์์ ์ธ์ฝ๋์ ์ต์ข Output(Key, Value)์ด Decoder์ Multi-head Attention์ ์ด์ฉ๋จ
- ๊ธฐ๋ณธ์ ์ธ Encoder์ ๋น์ทํ ๊ตฌ์กฐ
- ๋ฌธ์ฅ์ ๊ฐ ์ํ์ค(ํ ํฐ)์ one-hot encoding ํ ํ์ต์ ์ฌ์ฉ๋๋ ๋ฒกํฐ๋ก ์๋ฒ ๋ฉํ๋ embedding layer ๊ตฌ์ถ
- ์๋ฒ ๋ฉ ํ๋ ฌ W์์ look-up์ ์ํํ์ฌ ํด๋นํ๋ ๋ฒกํฐ๋ฅผ ๋ฐํ(W : Trainable parameter)
- Positional Encoding ๋ ๋๊ฐ์ด
class Decoder(nn.Module):
''' A decoder model with self attention mechanism. '''
def __init__(
self, n_trg_vocab, d_word_vec, n_layers, n_head, d_k, d_v,
d_model, d_inner, pad_idx, n_position=200, dropout=0.1, scale_emb=False):
super().__init__()
self.trg_word_emb = nn.Embedding(n_trg_vocab, d_word_vec, padding_idx=pad_idx)
self.position_enc = PositionalEncoding(d_word_vec, n_position=n_position)
self.dropout = nn.Dropout(p=dropout)
self.layer_stack = nn.ModuleList([
DecoderLayer(d_model, d_inner, n_head, d_k, d_v, dropout=dropout)
for _ in range(n_layers)])
self.layer_norm = nn.LayerNorm(d_model, eps=1e-6)
self.scale_emb = scale_emb
self.d_model = d_model
def forward(self, trg_seq, trg_mask, enc_output, src_mask, return_attns=False):
dec_slf_attn_list, dec_enc_attn_list = [], []
# -- Forward
dec_output = self.trg_word_emb(trg_seq)
if self.scale_emb:
dec_output *= self.d_model ** 0.5
dec_output = self.dropout(self.position_enc(dec_output))
dec_output = self.layer_norm(dec_output)
for dec_layer in self.layer_stack:
dec_output, dec_slf_attn, dec_enc_attn = dec_layer(
dec_output, enc_output, slf_attn_mask=trg_mask, dec_enc_attn_mask=src_mask)
dec_slf_attn_list += [dec_slf_attn] if return_attns else []
dec_enc_attn_list += [dec_enc_attn] if return_attns else []
if return_attns:
return dec_output, dec_slf_attn_list, dec_enc_attn_list
return dec_output,
- Multi-head self-attention๊ณผ Position-wise FFN ์ฌ์ด์ Cross-attention(encoder-decoder attention) ๋ชจ๋ ์ถ๊ฐ
- attention ํตํด์ ํ์ฌ output์ ๋ํด ๋ชจ๋ ์ธ์ฝ๋์ hidden state๋ฅผ ๊ณ ๋ คํ ์ ์์
- ๋์ฝํฐ์์๋ ๋์ฝ๋ ํ๋ ๊ณผ ์ธ์ฝ๋ ํ๋ ๋ค๊ฐ์ attention์ ๊ณ ๋ คํด ํ ํฐ์ ์์ธกํจ
- ๋์ฝ๋ฉ ๋จ๊ณ์์๋ [๋์ฝ๋ ํ๋ ์ฌ์ด์ Self Attention , ์ธ์ฝ๋ ์์ํ๊ณผ์ attention]
- [Input] dec_output : Query | enc_output : Key | enc_output : Value โถ
[Output] dec_output | attention(๋์ฝ๋-์ธ์ฝ๋ ํ๋ ๊ฐ)
- ๋์ฝ๋ฉ ์์ ๋ฏธ๋ ์์ ์ ๋จ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด Masked self-attention์ ์ฌ์ฉ
(Self Attention Encder์์๋ ์์ค๋ง์คํฌ, Decoder์์๋ ํ๊ฒ๋ง์คํฌ ์ฌ์ฉ)
(Attention ๊ฐ์ค์น๋ฅผ ๊ตฌํ ๋ ๋์ ํ ํฐ์ ์ดํ ์์ ์ ํ ํฐ์ ์ฐธ์กฐํ์ง ๋ชปํ๋๋ก ๋ง์คํน) - diagonal ์๋ถ๋ถ ๋ง์คํน
- Padding token์ ์์น์ ๋ํ ๋ง์คํน
- Encoder์ ๋ง์ฐฌ๊ฐ์ง๋ก head ์ ๋งํผ attention์ ๊ตฌํ๊ณ concatenate(dec_seq_len x D_model)์ ํ ํ,
ADD + Layer Normalization์ ์ํ - Decoder์ input๊ณผ ๋์ผํ ํฌ๊ธฐ์ tensor์ Output
- ์ต์ข layer์ output์ ์ต์ข ์์ธก์ ์ฌ์ฉ๋์ด, Linear + Softmax์ ํ์
#####
self.trg_word_prj = nn.Linear(d_model, n_trg_vocab, bias=False)
#####
def forward(self, src_seq, trg_seq):
src_mask = get_pad_mask(src_seq, self.src_pad_idx)
trg_mask = get_pad_mask(trg_seq, self.trg_pad_idx) & get_subsequent_mask(trg_seq)
enc_output, *_ = self.encoder(src_seq, src_mask)
dec_output, *_ = self.decoder(trg_seq, trg_mask, enc_output, src_mask)
seq_logit = self.trg_word_prj(dec_output)
if self.scale_prj:
seq_logit *= self.d_model ** -0.5
return seq_logit.view(-1, seq_logit.size(2))
Transformer์ ์คํ ๊ฒฐ๊ณผ
- (A) head๊ฐ ์ ๋นํ ๋ง์ ๊ฒฝ์ฐ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์์ผ๋ฉฐ, ์ง๋์น๊ฒ ๋ง์์ง๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ด ํ๋ฝ
- (B) Key์ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ฉด ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ํ๋ฝํ ์ ์์
- (C) ๋ชจ๋ธ์ ์ฌ์ด์ฆ๊ฐ ํด์๋ก ์ฑ๋ฅ์ด ํฅ์๋๋ ๊ฒฝํฅ์ด ์์
- (D) Regularization์ ์ผ์ข
์ธ Drop-Out๊ณผ Label Smoothing์ด ์ฑ๋ฅ ๊ฐ์ ์ด ํจ๊ณผ์ ์
(Label Smoothing :๋ ์ด๋ธ์ ์ค๋ฅ๊ฐ ์กด์ฌํ ์ ์๊ณ overconfidence๋ฅผ ์ด๋ ์ ๋ ๋ฐฉ์ง)
Transformer Summary
- ์ธํ ๋ฌธ์ฅ์ ์๋ ๋ชจ๋ ํ ํฐ์ ์ ๋ณด๋ฅผ ํ์์คํ
์งํ์ ๋ฐ๋ฅธ forgetting์์ด ๋์ด์ค๋ฉด์
Positional Encoding์ ํตํด ์์น ๊ฐ์ ์ ๋ณด๊น์ง ๋ชจ๋ธ๋งํ ์ ์๋ Transformer - [์ฅ์ ] RNN์ ํตํด ๊ฐ ์คํ
์ hidden state์ด ๊ณ์ฐ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋๋ค!
์ฆ, ๋ฌธ์ฅ์ ์๋ ๋ชจ๋ ๋จ์ด์ representation๋ค์ ๋ณ๋ ฌ์ ์ผ๋ก ํ๋ฒ์ ๋ง๋ค ์ ์๊ณ ,
ํ์ต ์๊ฐ ๋จ์ถ์ ๊ธฐ์ฌ - GRU, LSTM ๊ฐ์ ์ํคํ ์ฒ ์์ด๋ Long-term dependency๋ฅผ ํด๊ฒฐํ ์๋ก์ด ๋ฐฉ์
- ์์ฐจ์ ๊ณ์ฐ์ด ํ์ ์๊ธฐ ๋๋ฌธ์ RNN๋ณด๋ค ๋น ๋ฅด๋ฉด์๋ ๋งฅ๋ฝ ํ์
์ ์ํ๊ณ ,
CNN์ฒ๋ผ ์ผ๋ถ์ฉ๋ง์ ๋ณด๋ ๊ฒ์ด ์๋๊ณ ์ ์์ญ์ ์์ฐ๋ฅธ๋ค. - [๋จ์ ] ์ดํด๋ ฅ์ด ์ข์ ๋์ ์ ๋ชจ๋ธ์ ํฌ๊ธฐ๊ฐ ์์ฒญ ์ปค์ง๋ฉฐ ๊ณ ์ฌ์์ ํ๋์จ์ด ์คํ์ ์๊ตฌ
โถ์ด๋ฌํ ํ๊ณ๋ฅผ ๋ณด์ํ๊ธฐ ์ํ ๋ค์ํ ๊ฒฝ๋ํ ๋ฐฉ์์ด ์ฐ๊ตฌ๋๊ณ ์์
'Data Science&AI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Model Drift] Model Drift์ ๋ํ A to Z # 1. ์ ์์ ์ ํ (0) | 2023.05.29 |
---|---|
[์๊ณ์ด ์๊ณ ๋ฆฌ์ฆ] NHiTS : Neural Hierarchical Interpolation for Time Series Forecasting (0) | 2023.04.04 |
[๋ฅ๋ฌ๋] Attention์ ๋ํ ์ค๋ช (0) | 2023.02.18 |
[๋ฅ๋ฌ๋] Seq2Seq์ ๋ํ ์ค๋ช (0) | 2023.02.18 |
[๋ฅ๋ฌ๋] GRU(Gated Recurrent Unit)์ ๋ํ ์ดํด (0) | 2023.02.13 |
- Total
- Today
- Yesterday
- ๋ฐ์ดํฐ ๋๋ฆฌํํธ
- ๋ชจ๋ธ ๋๋ฆฌํํธ
- amazon Q
- ์๊ณ์ด๋ฅ๋ฌ๋
- ์คํ ์ธ์ฝ๋
- ์ต์ ์๊ณ์ด
- On-premise BI vs Cloud BI
- Model Drift
- SQLD
- ๋ชจ๋ธ ๋ฐฐํฌ
- NHITS์ค๋ช
- Data Drift์ Concept Drift ์ฐจ์ด
- Data Drift Detection
- data drift
- ๋น์ฆ๋์ค ๊ด์ AI
- Concept Drift
- pandas-ai
- Generative BI
- amzaon quicksight
- ๋ชจ๋ธ ๋๋ฆฌํํธ ๋์๋ฒ
- SQLD ์ ๋ฆฌ
- ์์ด๊ณต๋ถ
- ์ถ์ฒ์์คํ
- pandas-gpt
- Tableau vs QuickSight
- ์์ฑํBI
- ์ํ ์ธํด
- AutoEncoder
- Model Drift Detection
- SQLD์๊ฒฉ์ฆ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |