Spaces:
Sleeping
Sleeping
| 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: <http://nlp.seas.harvard.edu/annotated-transformer/> | |
| - ๐ฅ The Illustrated Transformer (Jay Alammar): <https://jalammar.github.io/illustrated-transformer/> | |