---
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](https://arxiv.org/abs/1706.03762) (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** |
---
## ํ์ต ์ค์
```python
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`๋ก
๋ช
์ํ์ธ์.
---
## ๋ก์ปฌ ์คํ
```bash
# 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)ํ๋ค๋ฉด โ ๋ ํ์ต ํ์
---
## ์ฐธ๊ณ
```bibtex
@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](https://arxiv.org/abs/1706.03762)
- ๐ The Annotated Transformer:
- ๐ฅ The Illustrated Transformer (Jay Alammar):