Spaces:
Sleeping
A newer version of the Gradio SDK is available: 6.14.0
title: Transformer Demo
emoji: ๐ค
colorFrom: blue
colorTo: indigo
sdk: gradio
sdk_version: 5.29.0
python_version: '3.10'
app_file: app.py
pinned: false
license: mit
Transformer โ ๋ ผ๋ฌธ ์ฌํ ๋ฐ๋ชจ
๋ ผ๋ฌธ: Attention Is All You Need (Vaswani et al., NIPS 2017)
RNN๊ณผ CNN์ ๋ชจ๋ ๋ฒ๋ฆฌ๊ณ ์ค์ง attention๋ง์ผ๋ก ์ธ์ฝ๋-๋์ฝ๋๋ฅผ ๊ตฌ์ฑํ Transformer ๋ ผ๋ฌธ์ ์ฒ์๋ถํฐ ์ฌํํ๊ณ , ํ์ต๋ ๋ชจ๋ธ์ ์ง์ ์ฒดํํ ์ ์๋ Space์ ๋๋ค.
๋ฌด์์ ํ ์ ์๋์?
์ซ์ ์ํ์ค๋ฅผ ์ ๋ ฅํ๋ฉด Transformer๊ฐ ๋ค์ง์ด ์ค๋๋ค.
์
๋ ฅ : 1 2 3 4 5
์ถ๋ ฅ : 5 4 3 2 1
๊ทธ๋ฆฌ๊ณ ๋ ํฅ๋ฏธ๋ก์ด ๊ฑด โ ๋์ฝ๋์ cross-attention ๊ฐ์ค์น๋ฅผ ์๊ฐํํด์ ๋ชจ๋ธ์ด "์ถ๋ ฅ i๋ฒ์งธ ์์น๋ฅผ ๋ง๋ค ๋ ์ ๋ ฅ ์ด๋๋ฅผ ๋ดค๋์ง"๋ฅผ ์ง์ ๋ณผ ์ ์๋ค๋ ๊ฑฐ์์. ๋ค์ง๊ธฐ ํ์คํฌ์์๋ ๋ฐ๋๊ฐ์ (anti-diagonal) ํจํด์ด ๋๋ ท์ด ๋ํ๋ฉ๋๋ค.
์ ๋ฒ์ญ์ด ์๋๋ผ ์ซ์ ๋ค์ง๊ธฐ์ธ๊ฐ์?
๋ ผ๋ฌธ์ ์์ดโ๋ ์ผ์ด ๋ฒ์ญ์ผ๋ก ๊ฒ์ฆํ์ง๋ง, ๊ทธ๊ฑด 8ร P100 GPU๋ก 12์๊ฐ ํ์ต์ด ํ์ํด์. ๋ฌด๋ฃ Space์์ ๊ทธ๊ฒ ์ ๋๋๊น, ๋ถํ ์ 30์ด ์์ ํ์ต ๋๋๋ toy task๋ฅผ ๊ณจ๋์ต๋๋ค.
์ซ์ ๋ค์ง๊ธฐ์ ์ฅ์ :
- ์ดํ๊ฐ ์์ (0~9 + ํน์ ํ ํฐ = 13๊ฐ)
- ์ ์ถ๋ ฅ ๊ธธ์ด๊ฐ ๊ฐ๊ณ ์ ๋ต์ด ๋ช ํ
- ์ฅ๊ฑฐ๋ฆฌ ์์กด์ฑ์ ๊ฐ์ โ ์ถ๋ ฅ 1๋ฒ์งธ๋ ์ ๋ ฅ ๋ง์ง๋ง์ ๋ด์ผ ํจ
- ์๊ฐํ๊ฐ ๊ทน์ (๋ฐ๋๊ฐ์ ํจํด)
ํ๋ก์ ํธ ๊ตฌ์กฐ
โโโ app.py # Gradio ๋ฐ๋ชจ (ํ์ต + ์ถ๋ก + ์๊ฐํ)
โโโ transformer.py # ๋
ผ๋ฌธ์ ๊ทธ๋๋ก ์ฌํํ Transformer ๋ณธ์ฒด
โโโ requirements.txt # ํจํค์ง ๋ชฉ๋ก
โโโ README.md # ์ด ํ์ผ
๋ชจ๋ธ ๊ตฌ์ฑ
์ด ๋ฐ๋ชจ๋ ๋ ผ๋ฌธ base ๋ชจ๋ธ์ 1/8 ํฌ๊ธฐ์ ๋๋ค. ๊ตฌ์กฐ๋ ์์ ํ ๋์ผํ๊ณ ํฌ๊ธฐ๋ง ์ค์์ด์.
| ํญ๋ชฉ | ๋ ผ๋ฌธ base | ์ด ๋ฐ๋ชจ |
|---|---|---|
| d_model | 512 | 64 |
| ์ธต ์ N | 6 | 2 |
| ํค๋ ์ h | 8 | 4 |
| d_ff | 2048 | 128 |
| ์ดํ ํฌ๊ธฐ | 37K (BPE) | 13 |
| ํ๋ผ๋ฏธํฐ | 65M | ~80K |
ํ์ต ์ค์
optimizer = Adam(lr=5e-4, betas=(0.9, 0.98), eps=1e-9) # ๋
ผ๋ฌธ ยง5.3
loss = CrossEntropy(ignore_index=PAD, label_smoothing=0.1)
steps = 2000
batch = 128
- ๋งค step๋ง๋ค ๊ธธ์ด 3~10์ ๋ฌด์์ ์ซ์์ด์ ์๋ก ์์ฑ (๋ฉ๋ชจ๋ฆฌ ์ ์ฝ)
- Gradient clipping = 1.0
- Greedy decoding์ผ๋ก ์ถ๋ก
ํ์ต์ ๋ถํ
ํ ๋ ์๋์ผ๋ก ์งํ๋๋ฉฐ, ๋๋ ๋ชจ๋ธ์ model.pt๋ก ์บ์ฑ๋ฉ๋๋ค.
๋ ผ๋ฌธ ํต์ฌ ๋ถ๋ถ ์ฝ๋ ๋งคํ
| ๋ ผ๋ฌธ ์์น | ์ฝ๋ ์์น |
|---|---|
์ (1) softmax(QKแต/โd_k)V |
transformer.py :: scaled_dot_product_attention |
| ยง3.2.2 Multi-Head | MultiHeadAttention |
| ยง3.5 Positional Encoding | PositionalEncoding |
| ์ (2) FFN | FeedForward |
| ยง3.1 ์ธ์ฝ๋ 1์ธต | EncoderLayer (Post-LN) |
| ยง3.1 ๋์ฝ๋ 1์ธต | DecoderLayer (Post-LN) |
| ยง3.4 ์๋ฒ ๋ฉ ร โd_model | Transformer.encode ๋ด๋ถ |
์ด๋ป๊ฒ ๋ด์ผ ํ๋์? (์๊ฐํ ํด์)
Cross-Attention ํํธ๋งต:
- ๊ฐ๋ก์ถ: ์ธ์ฝ๋ ์์น (์ ๋ ฅ ํ ํฐ๋ค, ์ผ์ชฝ์ด ์ํ์ค ์์ชฝ)
- ์ธ๋ก์ถ: ๋์ฝ๋ ์์น (์ถ๋ ฅ ํ ํฐ๋ค, ์์ชฝ์ด ๋จผ์ ์์ฑ)
- ์์ด ๋ฐ์์๋ก ๊ฐํ attention
๋ค์ง๊ธฐ ํ์คํฌ์์ ์ ํ์ต๋ ๋ชจ๋ธ์:
์ถ๋ ฅ ์์น 0 (BOS ๋ค์, ์ฒซ ์ถ๋ ฅ ํ ํฐ) โ ์
๋ ฅ ๋ง์ง๋ง ํ ํฐ์ ๋ด
์ถ๋ ฅ ์์น 1 โ ์
๋ ฅ ๋์์ ๋ ๋ฒ์งธ๋ฅผ ๋ด
...
๋ฐ๋ผ์ ์ผ์ชฝ ์ โ ์ค๋ฅธ์ชฝ ์๋ ๋๊ฐ์ ์ ๋ฐ๋ ๋ฐฉํฅ, ์ฆ ์ค๋ฅธ์ชฝ ์ โ ์ผ์ชฝ ์๋๋ก ํ๋ฅด๋ anti-diagonal์ด ๋ณด์ด๋ฉด ์ฑ๊ณต์ ๋๋ค.
Hugging Face Spaces ๋ฐฐํฌ ์ ์ฃผ์์ฌํญ
ResNet ๋ฐ๋ชจ๋ฅผ ๋ฐฐํฌํ ๋ ๊ฒช์๋ ๋ฌธ์ ๋ค์ด ์ฌ๊ธฐ์๋ ๋์ผํ๊ฒ ๋ฐ์ํ ์ ์์ด์:
1. YAML ํ๋ก ํธ๋งคํฐ ํ์
์ด README.md ์ต์๋จ์ --- ... --- ๋ธ๋ก์ด ์์ผ๋ฉด Space๊ฐ ๋น๋๋์ง ์์ต๋๋ค.
2. colorFrom/colorTo๋ ์ ํด์ง 8์๋ง
ํ์ฉ๋๋ ์: red, yellow, green, blue, indigo, purple, pink, gray
3. Python 3.13 ํํผ
audioop ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ 3.13์์ ์ ๊ฑฐ๋์ด ์ผ๋ถ ํจํค์ง ๋น๋ ์คํจ. 3.10 ๊ถ์ฅ.
4. PyTorch CPU ๋น๋
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด๋ฃ Space๋ CPU๋ง ์ ๊ณต๋ฉ๋๋ค. torch ์ค์น ์ CUDA ๋ฒ์ ์ด ๋ค์ด๊ฐ๋ฉด
๋์คํฌ ์ฉ๋์ ์ด๊ณผํ ์ ์์ผ๋ ํ์์ torch --index-url https://download.pytorch.org/whl/cpu๋ก
๋ช
์ํ์ธ์.
๋ก์ปฌ ์คํ
# 1) ์์กด์ฑ ์ค์น
pip install -r requirements.txt
# 2) ๋ฐ๋ชจ ์คํ (์ฒซ ์คํ ์ ์๋ ํ์ต)
python app.py
๊ธฐ๋ณธ์ ์ผ๋ก http://127.0.0.1:7860 ์์ ์ด๋ฆฝ๋๋ค.
ํ์ต์ด ์ ์ ๋๋ฉด
์ฒดํฌ๋ฆฌ์คํธ:
- PyTorch ๋ฒ์ ์ด 2.0 ์ด์์ธ๊ฐ
- ํ์ต step์ด 2000๋ฒ ์ด์ ๋๋๊ฐ (์ฝ์์ step 200, 400, ... ๋ก๊ทธ ํ์ธ)
- step 1000์ฏค ๋๋ฉด
token_acc๊ฐ 0.95 ์ด์์ธ๊ฐ - ์ถ๋ ฅ์ด ํญ์ ๊ฐ์ ํ ํฐ๋ง ๋ฐ๋ณตํ๋ค๋ฉด โ ํ์ต์ด ๊ฑฐ์ ์ ๋ ๊ฒ. step ๋๋ฆฌ๊ฑฐ๋ lr ์กฐ์
- cross-attention์ด ๊ท ์ผ(uniform)ํ๋ค๋ฉด โ ๋ ํ์ต ํ์
์ฐธ๊ณ
@inproceedings{vaswani2017attention,
title = {Attention Is All You Need},
author = {Vaswani, Ashish and Shazeer, Noam and Parmar, Niki
and Uszkoreit, Jakob and Jones, Llion and Gomez, Aidan N
and Kaiser, {\L}ukasz and Polosukhin, Illia},
booktitle = {Advances in Neural Information Processing Systems},
year = {2017}
}
- ๐ ๋ ผ๋ฌธ: arXiv:1706.03762
- ๐ The Annotated Transformer: http://nlp.seas.harvard.edu/annotated-transformer/
- ๐ฅ The Illustrated Transformer (Jay Alammar): https://jalammar.github.io/illustrated-transformer/