Week 12. Seq2Seq์ Attention
๋ฒ์ญ๊ธฐ์ฒ๋ผ ์ํ์ค๋ฅผ ๋ฐ์ ์ํ์ค๋ฅผ ๋ง๋๋ ์ธ์ฝ๋-๋์ฝ๋ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ LLM์ ์ด๋จธ๋์ธ ์ดํ ์ ๋ฉ์ปค๋์ฆ.
์ด๋ฒ ์ฃผ์ ๋ฐฐ์ฐ๋ ๊ฒ
- Sequence-to-Sequence ๋ฌธ์
- ์ธ์ฝ๋-๋์ฝ๋ ๊ตฌ์กฐ
- ๊ณ ์ ๋ ์ปจํ ์คํธ ๋ฒกํฐ์ ํ๊ณ
- Attention ๋ฉ์ปค๋์ฆ
- ๋น ์์น ๋์ฝ๋ฉ
1. Seq2Seq ๋ฌธ์ โ ์ํ์ค๋ฅผ ๋ฐ์ ์ํ์ค๋ฅผ ๋ด๊ธฐ
W11 RNN/LSTM์์ ๋ค๋ฃฌ RNN์ ์ํ์ค๋ฅผ ๋ฐ์ ํ๋์ ์ถ๋ ฅ์ ๋ด๋ ๊ตฌ์กฐ์์ต๋๋ค (์: ๊ฐ์ฑ ๋ถ๋ฅ "๊ธ์ /๋ถ์ "). ๊ทธ๋ฌ๋ ํ์ค์ ์ํ์ค๋ฅผ ๋ฐ์ ์ํ์ค๋ฅผ ๋ด์ผ ํ๋ ๋ฌธ์ ๊ฐ ํจ์ฌ ๋ง์ต๋๋ค:
- ๊ธฐ๊ณ ๋ฒ์ญ: "๋๋ ํ๊ต์ ๊ฐ๋ค" โ "I went to school"
- ์์ฝ: ๊ธด ๋ด์ค ๊ธฐ์ฌ โ ํ ๋ฌธ๋จ ์์ฝ
- ์ฑ๋ด: ์ง๋ฌธ โ ๋ต๋ณ
- ์์ฑ ์ธ์: ์ค๋์ค ์ ํธ ์ํ์ค โ ๊ธ์ ์ํ์ค
- ์ฝ๋ ์์ฑ: ์์ฐ์ด ๋ช ์ธ โ ํ์ด์ฌ ์ฝ๋
- ์ด๋ฏธ์ง ์บก์ ๋: ์ด๋ฏธ์ง โ ์ค๋ช ๋ฌธ์ฅ (์๋ฐํ๋ "์ํ์ค in โ ์ํ์ค out"์ ์ผ๋ฐํ)
์ด ๋ฌธ์ ๋ค์ ๊ณตํต ์ด๋ ค์: ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๊ธธ์ด๊ฐ ์๋ก ๋ค๋ฅด๊ณ , ๋ฏธ๋ฆฌ ์์ธกํ ์๋ ์๋ค๋ ๊ฒ. "์๋ "(1๋จ์ด)์ "hi"(1๋จ์ด)๋ก ๋ฒ์ญํ๋ ๊ฒฝ์ฐ์, 20๋จ์ด ๋ฌธ์ฅ์ 30๋จ์ด๋ก ๋ฒ์ญํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฐ์ ๋ชจ๋ธ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค.
ํด๋ต์ ๋ ๊ฐ์ RNN์ ์ด์ด๋ถ์ด๋ ๊ฒ์ ๋๋ค. ํ๋๋ ์ ๋ ฅ์ ์ฝ์ด "์๋ฏธ ๋ฒกํฐ"๋ก ์์ถํ๋ ์ธ์ฝ๋(encoder), ๋ค๋ฅธ ํ๋๋ ๊ทธ ์๋ฏธ ๋ฒกํฐ๋ก๋ถํฐ ์ถ๋ ฅ์ ํ ๋จ์ด์ฉ ์์ฑํ๋ ๋์ฝ๋(decoder). ์ด๋ฅผ Seq2Seq ๋ชจ๋ธ์ด๋ผ ๋ถ๋ฆ ๋๋ค.
2. ์ธ์ฝ๋-๋์ฝ๋ ๊ตฌ์กฐ
2014๋ Google Brain์ Ilya Sutskever, Oriol Vinyals, Quoc Le๊ฐ ๋ฐํํ ๋ ผ๋ฌธ "Sequence to Sequence Learning with Neural Networks"๋ Seq2Seq์ ์ํ์ ํ๋ฆฝํ์ต๋๋ค. ๊ฐ์ ํด Cho Kyunghyun ๋ฑ์ด "RNN Encoder-Decoder for Statistical Machine Translation"์์ ์ ์ฌํ ์์ด๋์ด๋ฅผ ์ ์ํ๊ณ , ์ฌ๊ธฐ์ GRU๋ ํจ๊ป ๋ฑ์ฅํ์ต๋๋ค.
๊ตฌ์กฐ๋ ๋จ์ํฉ๋๋ค:
- ์ธ์ฝ๋ RNN: ์ ๋ ฅ ์ํ์ค $x_1, x_2, \dots, x_T$๋ฅผ ํ ์คํ ์ฉ ์ฝ์ผ๋ฉฐ ์๋ ์ํ๋ฅผ ์ ๋ฐ์ดํธ. ๋ง์ง๋ง ์๋ ์ํ $h_T$๊ฐ "์ ๋ ฅ ๋ฌธ์ฅ ์ ์ฒด์ ์์ฝ" ์ญํ ์ ํ๋ ์ปจํ ์คํธ ๋ฒกํฐ $c$๊ฐ ๋จ.
- ๋์ฝ๋ RNN: $c$๋ฅผ ์ด๊ธฐ ์ํ๋ก ๋ฐ์์, ์ถ๋ ฅ์ ํ ๋จ์ด์ฉ ์์ฑ. ๊ฐ ์์ ์์ ์ด์ ์ถ๋ ฅ ๋จ์ด๋ฅผ ๋ค์ ์์ ์ ๋ ฅ์ผ๋ก ์ฌํ์ฉ (autoregressive).
๋์ฝ๋๋ ์์ ํ ํฐ <SOS>์์ ์์ํด ์ข
๋ฃ ํ ํฐ <EOS>๋ฅผ ๋ผ ๋๊น์ง ๊ณ์ ์์ฑํฉ๋๋ค. ์ด ๋๋ถ์ ์ถ๋ ฅ ๊ธธ์ด๊ฐ ์์ ๋กญ๊ฒ ๊ฒฐ์ ๋ฉ๋๋ค.
ํ์ต์ ์ด๋ป๊ฒ ํ ๊น์? ๋ณดํต "์ ๋ต ์ํ์ค"๋ฅผ ์ฌ์ฉํด teacher forcing์ ์๋๋ค โ ๋์ฝ๋์ ์ด์ ์ถ๋ ฅ ๋์ ์ ๋ต ๋จ์ด๋ฅผ ๋ค์ ์ ๋ ฅ์ผ๋ก ๋ฃ์ด ํ์ต์ ์์ ํํฉ๋๋ค. ๊ทธ ๋์ ์ถ๋ก ์์๋ ์์ ์ ์ด์ ์ถ๋ ฅ์ ์ฐ๊ฒ ๋๋ train-test ๋ถ์ผ์น๊ฐ ์๊ธฐ๋๋ฐ, ์ด๋ฅผ ์ํํ๋ scheduled sampling ๊ฐ์ ๊ธฐ๋ฒ์ด ํ์ ์ฐ๊ตฌ์์ ์ ์๋์ต๋๋ค.
2.1 Seq2Seq์ ์์
Seq2Seq๊ฐ ํ๋ช ์ ์ด์๋ ์ด์ ๋ "๋ชจ๋ ๊ฒ์ End-to-End๋ก ํ์ต"ํ ์ ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ ์ด์ ์ ๊ธฐ๊ณ ๋ฒ์ญ์ ์ฌ๋ฌ ๋จ๊ณ(ํ ํฐํโ๊ตฌ๋ฌธ ๋ถ์โ๋จ์ด ์ ๋ ฌโ๊ตฌ ๋ฒ์ญโ์ฌ์ ๋ ฌ)๋ก ๋๋์ด ๊ฐ ๋จ๊ณ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ํ๋๋์๋๋ฐ, Seq2Seq๋ ์ด ๋ชจ๋๋ฅผ ํ๋์ ๋คํธ์ํฌ๋ก ๋์ฒดํ์ต๋๋ค. ์ฑ๋ฅ๋ ๊ณง๋ฐ๋ก ๋น์ ์ต๊ณ ๊ธฐ๋ฒ์ ๋ฐ๋ผ์ก์๊ณ , ์ด๊ฒ์ด 2016๋ Google Translate์ GNMT ์์คํ ์ผ๋ก ์ค์ ์๋น์ค์ ์ ์ฉ๋์ด ํ๋ฃป๋ฐค ์ฌ์ด ๋ฒ์ญ ํ์ง์ด ๊ธ์์นํ ์ฌ๊ฑด("the Google Translate revolution")์ ๋ฐฐ๊ฒฝ์ ๋๋ค.
๐ฎ ์ธํฐ๋ํฐ๋ธ: ์ธ์ฝ๋-๋์ฝ๋ ํ๋ฆ
ํ๊ตญ์ด 4๋จ์ด๊ฐ ์ธ์ฝ๋๋ก ๋ค์ด๊ฐ ์ปจํ ์คํธ๊ฐ ๋๊ณ , ๋์ฝ๋๊ฐ ์์ด 4๋จ์ด๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ณผ์ ์ ์๊ฐํํฉ๋๋ค. ์ฌ๋ผ์ด๋๋ก ์์ ์ ์ฎ๊ฒจ๋ณด์ธ์.
3. ๊ณ ์ ์ปจํ ์คํธ ๋ฒกํฐ์ ๋ณ๋ชฉ
Seq2Seq๋ ํ๋ฅญํ์ง๋ง ํ ๊ฐ์ง ๊ทผ๋ณธ์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์๋ฌด๋ฆฌ ๋ณต์กํ ๋ฌธ์ฅ์ด๋ผ๋ ๋จ ํ๋์ ๊ณ ์ ํฌ๊ธฐ ๋ฒกํฐ๋ก ์์ถํด์ผ ํ๋ค๋ ์ ์ ๋๋ค. ๋ฌธ์ฅ์ด ๊ธธ์ด์ง์๋ก ๋ ๋ง์ ์ ๋ณด๊ฐ ๊ฐ์ ํฌ๊ธฐ์ ๋ฒกํฐ์ ์ฑ์ฌ ๋ฃ์ด์ง๋, ๋์ฝ๋๋ ์์ ๋ถ๋ถ์ "๊ธฐ์ต"ํ ์ฌ๋ ฅ์ ์์ต๋๋ค.
์ค์ ๋ก 2014~2015๋ ์คํ์์ ์ ๋ ฅ ๋ฌธ์ฅ์ด 20๋จ์ด๋ฅผ ๋์ด๊ฐ๋ฉด Seq2Seq์ ๋ฒ์ญ ํ์ง์ด ๊ธ๊ฒฉํ ๋จ์ด์ง๋ ๊ฒ์ด ๊ด์ฐฐ๋์์ต๋๋ค. ๋ง์น ์ํ ์ง์ ์ 500์ชฝ ์ฑ ์ ํ ๋จ์ด("๊ณต๋ถ")๋ก ์์ฝํด ์ํ์ ์น๋ ค๋ ๊ฒ๊ณผ ๊ฐ์ ์ํฉ์ ๋๋ค. ์ด "์ ๋ณด ๋ณ๋ชฉ(information bottleneck)"์ด RNN ๋ฒ์ญ๊ธฐ์ ๊ฒฐ์ ์ ์ฝ์ ์ด์์ต๋๋ค.
๋ช ๊ฐ์ง ์ํ์ฑ ์ด ์ ์๋์์ต๋๋ค:
- ์ ๋ ฅ ์ญ์ ํฌ์ (Sutskever) โ ์ ๋ ฅ ๋ฌธ์ฅ์ ๊ฑฐ๊พธ๋ก ๋ฃ์ผ๋ฉด ๋์ฝ๋ ์์ ์์ ๊ณผ ์ ๋ ฅ ์์ ์์ ์ด ๊ฐ๊น์์ ธ ๊ธฐ์ต์ด ์กฐ๊ธ ๋ ์ฆ๋ฐ.
- ๊น์ LSTM(4์ธต, 8์ธต) โ ๋ ํฐ ์ ์ฅ ์ฉ๋.
- ์๋ฐฉํฅ RNN โ ์ ๋ ฅ์ ์๋ค ์์ชฝ์์ ์ฝ์ด ๋ ํ๋ถํ ํํ.
๊ทธ๋ฌ๋ ์ด ๋ชจ๋๋ ์ฆ์ ์ํ์๊ณ , ๊ทผ๋ณธ ์น๋ฃ๋ ์ ํ ๋ค๋ฅธ ์์ด๋์ด์์ ๋์์ต๋๋ค: "์ ์ด์ ๋ชจ๋ ์ ๋ณด๋ฅผ ํ๋์ ๋ฒกํฐ๋ก ์์ถํ์ง ๋ง์."
4. Attention โ "์ง์ค"์ ํ์ตํ๋ค
2014๋ 9์, Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio๊ฐ ICLR์ ํฌ๊ณ ํ ๋ ผ๋ฌธ "Neural Machine Translation by Jointly Learning to Align and Translate"๊ฐ ์ดํ ์ ๋ฉ์ปค๋์ฆ์ ์ฒ์ ์ ๋ณด์์ต๋๋ค. ์์ด๋์ด๋ ์ฌํํ์ง๋ง ํ๋ช ์ ์ ๋๋ค.
๊ตฌ์ฒด์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค:
- ์ธ์ฝ๋๋ ์ ๋ ฅ ๋จ์ด๋ง๋ค ์๋ ์ํ $h_1, h_2, \dots, h_T$๋ฅผ ๋ชจ๋ ์ ์ฅํด๋ก๋๋ค (๋ง์ง๋ง ๊ฒ๋ง ์ฐ๋ ๊ฒ ์๋).
- ๋์ฝ๋๊ฐ ์ถ๋ ฅ ์์ $t$์์ ์ ๋จ์ด๋ฅผ ๋ด๋ ค๊ณ ํ ๋, ์์ ์ ํ์ฌ ์ํ $s_t$์ ๋ชจ๋ $h_i$ ์ฌ์ด์ ์ ์(score)๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ์ ์๋ฅผ softmax๋ก ์ ๊ทํํด ์ฃผ์ ๊ฐ์ค์น $\alpha_{t,i}$๋ฅผ ์ป์ต๋๋ค.
- ๊ฐ์ค์น๋ก ๊ฐ์ค ํ๊ท ํ ์ปจํ ์คํธ ๋ฒกํฐ $c_t$๋ฅผ ๋ง๋ค์ด ๋์ฝ๋์ ๊ณต๊ธํฉ๋๋ค.
์์:
$$ \alpha_{t,i} = \frac{\exp(\text{score}(s_t, h_i))}{\sum_j \exp(\text{score}(s_t, h_j))}, \quad c_t = \sum_i \alpha_{t,i} h_i $$์ด์ ๋์ฝ๋๋ ๋งค ์์ ๋ง๋ค "์ด๋์ ์ง์คํ ์ง"๋ฅผ ์ค์ค๋ก ๊ฒฐ์ ํฉ๋๋ค. ์ด ๊ฐ์ค์น๋ฅผ ์๊ฐํํ๋ฉด ๊ธฐ๊ณ ๋ฒ์ญ๊ธฐ๊ฐ "school"์ ๋ง๋ค ๋ ํ๊ตญ์ด "ํ๊ต"๋ฅผ ๋ณด๊ณ , "went"๋ฅผ ๋ง๋ค ๋ "๊ฐ๋ค"๋ฅผ ๋ณธ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ง ๊ทธ๋๋ก "๋ฒ์ญ ์ ๋ ฌ"์ด ์๋์ผ๋ก ํ์ต๋๋ ๊ฒ.
4.1 ์ ์ ํจ์์ ๋ ๊ณ์ด โ Bahdanau vs Luong
์ ์ ํจ์์ ํํ์ ๋ฐ๋ผ ๋ ๋ํ์ ๋ณํ์ด ์์ต๋๋ค:
- Bahdanau (Additive, 2014): $\text{score}(s, h) = v^\top \tanh(W_s s + W_h h)$. ์์ ํผ๋ํฌ์๋ ์ ๊ฒฝ๋ง์ผ๋ก ์ ์๋ฅผ ๊ณ์ฐ. ํ๋ผ๋ฏธํฐ๊ฐ ๋ ๋ง์ง๋ง ์ ์ฐ.
- Luong (Multiplicative/Dot, 2015): $\text{score}(s, h) = s^\top W h$ ๋๋ ๋จ์ํ $s^\top h$. ํ๋ ฌ ๊ณฑ ํ๋๋ก ๋. ํจ์ฌ ๋น ๋ฆ.
ํ๋ Transformer(W13)๋ Luong์ dot-product ๋ฐฉ์์ ํ์ฅํ "scaled dot-product attention"์ ์๋๋ค. ๋ ๋ฐฉ์์ ์ค์ฆ์ ์ฑ๋ฅ์ ๋น์ทํ์ง๋ง ์๋์ ๋จ์์ฑ์์ dot-product๊ฐ ์น๋ฆฌํ์ต๋๋ค.
4.2 ์ดํ ์ ์ด ๋ฐ๊พผ ๊ฒ๋ค
์ดํ ์ ์ ๋ฑ์ฅ์ ๋ฅ๋ฌ๋ NLP์ ์ ํ์ ์ด์์ต๋๋ค. ํจ๊ณผ๋ ์ฆ๊ฐ์ ์ด์์ต๋๋ค:
- ๊ธด ๋ฌธ์ฅ์์๋ ๋ฒ์ญ ํ์ง์ด ๋จ์ด์ง์ง ์์
- "์ ๋ ฌ(alignment)" ํด์ ๊ฐ๋ฅ์ฑ ํ๋ โ ๋๋ฒ๊น ๊ณผ ์ ๋ขฐ์ฑ์ ํฌ๊ฒ ๋์
- ์ฅ๊ฑฐ๋ฆฌ ์์กด์ฑ ์ฒ๋ฆฌ ๊ฐ์ โ LSTM์ด ๋์น ์ฐ๊ฒฐ๋ ์ดํ ์ ์ด ์ก์๋
๊ทธ๋ฆฌ๊ณ ๊ฒฐ์ ์ ์ผ๋ก, 2017๋ Google์ "Attention Is All You Need" ๋ ผ๋ฌธ์ด "์ดํ ์ ๋ง ์์ผ๋ฉด RNN ์์ฒด๊ฐ ํ์ ์๋ค"๋ ์ฃผ์ฅ์ผ๋ก Transformer๋ฅผ ์ ์ํ๊ณ , ์ดํ ๋ชจ๋ LLM์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค. ์ดํ ์ ์ ๋จ์ํ ๊ฐ์ ์ ๋์ด ์ ๊ฒฝ๋ง ์ค๊ณ ํจ๋ฌ๋ค์ ์์ฒด๋ฅผ ๋ฐ๊ฟจ์ต๋๋ค.
๐ฎ ์ธํฐ๋ํฐ๋ธ: ์ดํ ์ ๊ฐ์ค์น ํํธ๋งต
ํโ์ ๋ฒ์ญ์ ๊ฐ์ ์ดํ ์ ํ๋ ฌ์ ๋๋ค. ํ์ ์ถ๋ ฅ ๋จ์ด, ์ด์ ์ ๋ ฅ ๋จ์ด. ์งํ ์๋ก ํฐ ๊ฐ์ค์น์ ๋๋ค. ์ฌ๋ผ์ด๋๋ก ํจํด์ ๋ฐ๊ฟ๋ณด์ธ์.
5. ๋น ์์น(Beam Search)
๋์ฝ๋ฉ ์ ๋งค ์์ ๊ฐ์ฅ ํ๋ฅ ๋์ ๋จ์ด ํ๋๋ง ๊ณ ๋ฅด๋ ๊ทธ๋ฆฌ๋ ๋์ฝ๋ฉ์ ๊ทผ์์์ ์ ๋๋ค. ๋น ์์น๋ ์์ $k$๊ฐ ํ๋ณด๋ฅผ ๋์์ ์ ์งํ๋ฉฐ ์ ์ฒด์ ์ผ๋ก ์ ์๊ฐ ๋์ ์ํ์ค๋ฅผ ์ฐพ์ต๋๋ค. $k=1$์ด๋ฉด ๊ทธ๋ฆฌ๋, $k$๊ฐ ํฌ๋ฉด ๋ ์ข์ ๊ฒฐ๊ณผ์ง๋ง ๋๋ฆฝ๋๋ค.
๐ฎ ์ธํฐ๋ํฐ๋ธ: ๋น ์์น ํธ๋ฆฌ
๊ฐ ์์ ์์ ๋น ํญ๋งํผ์ ํ๋ณด๊ฐ ์ด์๋จ๋ ๋ชจ์ต์ ๋ด ๋๋ค. ๋น ํญ์ด ์ปค์ง์๋ก ํธ๋ฆฌ๊ฐ ๋์ด์ง๋๋ค.
6. ์ฝ๋ ์์ (PyTorch ๊ฐ๋ )
import torch.nn as nn
class Encoder(nn.Module):
def __init__(self, vocab, hid):
super().__init__()
self.emb = nn.Embedding(vocab, hid)
self.gru = nn.GRU(hid, hid, batch_first=True)
def forward(self, x):
return self.gru(self.emb(x)) # (out, h)
class Attention(nn.Module):
def __init__(self, hid):
super().__init__()
self.v = nn.Linear(hid*2, 1)
def forward(self, dec_h, enc_outs):
# dec_h: (B,H), enc_outs: (B,T,H)
scores = self.v(torch.cat([dec_h.unsqueeze(1).expand_as(enc_outs), enc_outs], -1))
alpha = torch.softmax(scores.squeeze(-1), dim=1)
ctx = (alpha.unsqueeze(-1) * enc_outs).sum(1)
return ctx, alpha
๐ ๋ ๊น์ด ๊ณต๋ถํ๊ธฐ
- Sequence to Sequence Learning โ Sutskever ์ธ(2014).
- Neural Machine Translation by Jointly Learning to Align and Translate โ Bahdanau ์ธ(2015). ์ดํ ์ ์๋ ผ๋ฌธ.
- Visualizing Neural Machine Translation โ Jay Alammar์ ๊ทธ๋ฆผ ๊ฐ์.
- Effective Approaches to Attention-based NMT โ Luong ์ธ(2015).