Transformer ์ดํ•ดํ•˜๊ธฐ

MinSeonยท2022๋…„ 2์›” 19์ผ

NLP

๋ชฉ๋ก ๋ณด๊ธฐ
1/1

Transformer(ํŠธ๋žœ์Šคํฌ๋จธ)

๐Ÿ“Œ Attention is all you need (2017, ๊ตฌ๊ธ€)
๐Ÿ“Œ RNN ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Attention๋งŒ์œผ๋กœ ๊ตฌํ˜„ํ•œ ๋ชจ๋ธ
๐Ÿ“Œ ๊ธฐ์กด์˜ seq2seq ๋ชจ๋ธ์—์„œ ์ธ์ฝ”๋”๋Š” ์ž…๋ ฅ ์‹œํ€€์Šค๋ฅผ ํ•˜๋‚˜์˜ ๋ฒกํ„ฐ ํ‘œํ˜„์œผ๋กœ ์••์ถ•ํ•˜๋Š”๋ฐ ์ด ๊ณผ์ •์— ์„œ ์ž…๋ ฅ ์‹œํ€€์Šค์˜ ์ •๋ณด๊ฐ€ ์ผ๋ถ€ ์†์‹ค๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์–ดํ…์…˜๋งŒ์œผ๋กœ ์ธ์ฝ” ๊ฑฐ์™€ ๋””์ฝ”๋”๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋ธ์„ ์ œ์•ˆ
๐Ÿ“Œ multi-head self-attention๋ฅผ ์ด์šฉํ•œ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๊ฐ€ ํŠน์ง•

๊ฐœ์š”

โ–ช encoder์™€ decoder
encoder์™€ decoder
โ–ช encoding์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ encoder๋ฅผ ์Œ“์•„ ์˜ฌ๋ ค ๋งŒ๋“  ๊ฒƒ, ๋…ผ๋ฌธ์—์„œ๋Š” 6๊ฐœ ์Œ“์•„์˜ฌ๋ฆผ, decoding์€ encoding๊ณผ ๋™์ผํ•œ ๊ฐœ์ˆ˜๋งŒํผ์˜ decoder๋ฅผ ์Œ“์€ ๊ฒƒ
โ–ช encoder ๊ตฌ์กฐ: encoder๋“ค์€ ๋ชจ๋‘ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋‚˜ ๋™์ผํ•œ weight์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
2๊ฐœ์˜ sub-layer๋ฅผ ๊ฐ€์ง(self-attention layer, feed forword neural network layer)

โ–ช decoder ๊ตฌ์กฐ: 3๊ฐœ์˜ sub-layers๋ฅผ ๊ฐ€์ง(self-attention layer, encoder-decoder-attention layer, feed forward layer)

ํŠธ๋žœ์Šคํฌ๋จธ์˜ ์ž…๋ ฅ

๐Ÿ“Œ ํŠธ๋žœ์Šคํฌ๋จธ๋Š” ๋‹จ์–ด ์ž…๋ ฅ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ›์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์–ด์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์•Œ๋ ค์ค„ ํ•„์š”๊ฐ€ ์žˆ์Œ
๐Ÿ“Œ positional encoding(ํฌ์ง€์…”๋„ ์ธ์ฝ”๋”ฉ): ๋‹จ์–ด์˜ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ์— ์œ„์น˜ ์ •๋ณด๋“ค์„ ๋”ํ•˜์—ฌ ๋ชจ๋ธ์˜ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์–ด์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ „๋‹ฌ, ๊ฐ™์€ ๋‹จ์–ด๋ผ๋„ ํฌ์ง€์…”๋„ ์ธ์ฝ”๋”ฉ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๊ณ  ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ ๊ฐ’์ด ๋‹ฌ๋ผ์ง ๋”ฐ๋ผ์„œ ์ˆœ์„œ ์ •๋ณด๊ฐ€ ๋ฐ˜์˜๋จ

๐Ÿ“Œ positional encoding ๊ฐ’ ๊ตฌํ•˜๊ธฐ


โ–ช ํฌ์ง€์…”๋„ ์ธ์ฝ”๋”ฉ์€ ์‚ฌ์ธ ํ•จ์ˆ˜์™€ ์ฝ”์‚ฌ์ธ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ตฌํ•จ.
โ–ช pos:์ž…๋ ฅ ๋ฌธ์žฅ์—์„œ์˜ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ์˜ ์œ„์น˜
โ–ช i:์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ ๋‚ด์˜ ์ฐจ์›์˜ ์ธ๋ฑ์Šค, ์ธ๋ฑ์Šค๊ฐ€ ์ง์ˆ˜์ธ ๊ฒฝ์šฐ๋Š” ์‚ฌ์ธ ํ•จ์ˆ˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ , ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ๋Š” ์ฝ”์‚ฌ์ธ ํ•จ์ˆ˜ ๊ฐ’์„ ์‚ฌ์šฉ
โ–ช d_model:ํŠธ๋žœ์Šคํฌ๋จธ์˜ ๋ชจ๋“  ์ธต์˜ ์ถœ๋ ฅ ์ฐจ์›์„ ์˜๋ฏธํ•˜๋Š” ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ, ๋…ผ๋ฌธ์—์„œ๋Š” 512 ๊ฐ’์„ ์‚ฌ์šฉ

ํŠธ๋žœ์Šคํฌ๋จธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์–ดํ…์…˜ ์ดํ•ดํ•˜๊ธฐ



๐Ÿ“Œ encoder self-attention:์ธ์ฝ”๋”๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด๊ฐ„ ๋ฌธ์žฅ ๋‚ด ๋‹จ์–ด๋“ค์ด ์„œ๋กœ ์œ ์‚ฌ๋„๋ฅผ ๊ตฌํ•œ๋‹ค.
๐Ÿ“Œ decoder self-attention:๋””์ฝ”๋”๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ ๋‹จ์–ด๋ฅผ 1๊ฐœ์”ฉ ์ƒ์„ฑํ•˜๋Š” ๋””์ฝ”๋”๋‚˜ ์ด๋ฏธ ์ƒ์„ฑ๋œ ์•ž ๋‹จ์–ด๋“ค๊ณผ์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ตฌํ•œ๋‹ค.
๐Ÿ“Œ encoder-decoder attention:๋””์ฝ”๋”๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ, ๋””์ฝ”๋”๊ฐ€ ์ž˜ ์˜ˆ์ธกํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ธ์ฝ”๋”์— ์ž…๋ ฅ๋œ ๋‹จ์–ด๋“ค๊ณผ ์œ ์‚ฌ๋„๋ฅผ ๊ตฌํ•œ๋‹ค.
๐Ÿ“Œ ์–ดํ…์…˜์„ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ์ž…๋ ฅ ์š”์†Œ:์ฟผ๋ฆฌ(Query), ํ‚ค(Key), ๊ฐ’(Value)

self-attention


๐Ÿ“Œ"๊ทธ ๋™๋ฌผ์€ ๊ธธ์„ ๊ฑด๋„ˆ์ง€ ์•Š์•˜๋‹ค ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์€ ๋„ˆ๋ฌด ํ”ผ๊ณคํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค"
์ด ๋ฌธ์žฅ์—์„œ ๊ทธ๊ฒƒ์€ ๊ธธ์„ ๋งํ•˜๋Š” ๊ฑธ๊นŒ ์•„๋‹ˆ๋ฉด ๋™๋ฌผ์„ ๋งํ•˜๋Š” ๊ฑธ๊นŒ? ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ์ด์ง€๋งŒ ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ์—๊ฒŒ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ๊ทธ๊ฒƒ์ด ๋™๋ฌผ ๋˜๋Š” ๊ธธ์— ํ•ด๋‹นํ•˜๋Š”์ง€๋Š” ์œ ์‚ฌ๋„์— ์˜ํ•œ ํ™•๋ฅ  ๊ฐ’์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์œ ์‚ฌ๋„๋ฅผ ๊ตฌํ•˜๋Š” ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๐Ÿ“ŒQ:์ฟผ๋ฆฌ(Query), K:ํ‚ค(Key), V:๊ฐ’(Value), X:์ž…๋ ฅ๋ฒกํ„ฐ ์‹œํ€€์Šค
โ–ช์…€ํ”„์–ดํ…์…˜์€ ์ฟผ๋ฆฌ, ํ‚ค, ๋ฐธ๋ฅ˜ 3๊ฐœ ์š”์†Œ ์‚ฌ์ด์˜ ๋ฌธ๋งฅ์  ๊ด€๊ณ„์„ฑ์„ ์ถ”์ถœํ•˜๋Š” ๊ณผ์ •
โ–ช์ฟผ๋ฆฌ, ํ‚ค, ๋ฐธ๋ฅ˜๋ฅผ ๊ตฌํ•˜๋Š” ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

โ–ช์ด ๋•Œ ์ž…๋ ฅ๋ฒกํ„ฐ ์‹œํ€€์Šค๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

โ–ช์ฟผ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ•œ๋‹ค. ์ขŒ๋ณ€์ด ์ž…๋ ฅ๋ฒกํ„ฐ ์‹œํ€€์Šค์ด๊ณ  ์šฐ๋ณ€์ด W_Q์— ๋Œ€์‘ํ•œ๋‹ค.

โ–ชํ‚ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ•œ๋‹ค. ์ขŒ๋ณ€์ด ์ž…๋ ฅ๋ฒกํ„ฐ ์‹œํ€€์Šค์ด๊ณ  ์šฐ๋ณ€์ด W_K์— ๋Œ€์‘ํ•œ๋‹ค.

โ–ช๋ฐธ๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ•œ๋‹ค. ์ขŒ๋ณ€์ด ์ž…๋ ฅ๋ฒกํ„ฐ ์‹œํ€€์Šค์ด๊ณ  ์šฐ๋ณ€์ด W_V์— ๋Œ€์‘ํ•œ๋‹ค.

โ–ชW_Q, W_K, W_V๋Š” ํ•™์Šต ๊ณผ์ •์—์„œ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.



โ–ชd_k ๊ฐ’์€ d_model/num_heads๋ผ๋Š” ์‹์— ๋”ฐ๋ผ ๊ตฌํ•˜๋ฉฐ ์—ฌ๊ธฐ์— ๋ฃจํŠธ๋ฅผ ์”Œ์šด ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.
โ–ชd_model/num_heads ๊ฐ’์€ Q, K, V ๋ฒกํ„ฐ์˜ ์ฐจ์›๊ณผ ๋™์ผํ•˜๋‹ค.
โ–ช์ถ”๊ฐ€๋กœ ์ฟผ๋ฆฌ๋Š” ํƒ€๊นƒ ์–ธ์–ด ๋ฌธ์žฅ์˜ ๋‹จ์–ด ๋ฒกํ„ฐ ์‹œํ€€์Šค, ํ‚ค๋Š” ์†Œ์Šค ์–ธ์–ด์˜ ๋ฌธ์žฅ์˜ ๋‹จ์–ด ๋ฒกํ„ฐ ์‹œํ€€์Šค์— ํ•ด๋‹นํ•œ๋‹ค.
โ–ช์ฟผ๋ฆฌ์™€ ํ‚ค๋ฅผ ํ–‰๋ ฌ๊ณฑ(dot product)ํ•œ ๋’ค ํ•ด๋‹น ํ–‰๋ ฌ์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ’์„ ํ‚ค ์ฐจ์›์ˆ˜์˜ ์ œ๊ณฑ๊ทผ ๊ฐ’์œผ๋กœ ๋‚˜๋ˆ ์ฃผ๊ณ , ์ด ํ–‰๋ ฌ์„ ํ–‰(row) ๋‹จ์œ„๋กœ ์†Œํ”„ํŠธ๋งฅ์Šค(softmax)๋ฅผ ์ทจํ•ด ์Šค์ฝ”์–ด ํ–‰๋ ฌ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค. ์ด ์Šค์ฝ”์–ด ํ–‰๋ ฌ์— ๋ฐธ๋ฅ˜๋ฅผ ํ–‰๋ ฌ๊ณฑํ•ด ์ค˜์„œ ์–ดํ…์…˜ ๊ฐ’(Attention Value)์„ ๊ตฌํ•œ๋‹ค. softmax ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ์œ ์‚ฌ๋„๋ฅผ 0๊ณผ 1์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ Normalize ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

๐Ÿ“Œ ์œ„์™€ ๊ฐ™์ด ๋‚ด์ (dot product)์„ ํ†ตํ•ด ๋‹จ์–ด ๋ฒกํ„ฐ ๊ฐ„ ์œ ์‚ฌ๋„๋ฅผ ๊ตฌํ•œ ํ›„ ํŠน์ • ๊ฐ’์„ ๋ถ„๋ชจ๋กœ ๋‚˜๋ˆ ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ Q์™€ K์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ตฌํ–ˆ๋‹คํ•˜์—ฌ ์Šค์ผ€์ผ๋“œ ๋‹ท ํ”„๋กœ๋•ํ”„ ์–ดํ…์…˜(Scaled Dot Product Attention)์ด๋ผ๊ณ  ํ•œ๋‹ค. ํŠน์ • ๊ฐ’์„ ๋ถ„๋ชจ๋กœ ๋‚˜๋ˆ„์ง€ ์•Š์€ ์–ดํ…์…˜์€ ๋‹ท ํ”„๋กœ๋•ํŠธ ์–ดํ…์…˜(dot product attention)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

The Beast With Many Heads(๋ณ‘๋ ฌ๋กœ ์–ดํ…์…˜ ์ˆ˜ํ–‰ํ•˜๊ธฐ)

๐Ÿ“Œ self-attention layer์—๋‹ค "multi-headed" attention ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋”ํ•ด attention layer์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ด

๐Ÿ“Œ ๊ทธ๋ฆฌ์Šค๋กœ๋งˆ์‹ ํ™”์— ๋“ฑ์žฅํ•˜๋Š” ๊ดด๋ฌผ ํžˆ๋“œ๋ผ๋‚˜ ์ผ€๋กœ๋ฒ ๋กœ์Šค๋Š” ๋จธ๋ฆฌ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ผ ์ƒ๋Œ€๋ฐฉ์„ ์—ฌ๋Ÿฌ ์‹œ์ ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ฉ€ํ‹ฐ ํ—ค๋“œ ์–ดํ…์…˜๋„ ์–ดํ…์…˜์„ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•ด ๋‹ค๋ฅธ ์‹œ๊ฐ์œผ๋กœ ์ •๋ณด๋“ค์„ ์ˆ˜์ง‘ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์•ž์„œ ์–ธ๊ธ‰ํ•œ '๊ทธ ๋™๋ฌผ์€ ๊ธธ์„ ๊ฑด๋„ˆ์ง€ ์•Š์•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์€ ๋„ˆ๋ฌด ํ”ผ๊ณคํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.'๋ฅผ ์ƒ๊ธฐํ•ด ๋ณด๋ฉด ๊ฐ๊ฐ์˜ ์–ดํ…์…˜ ํ—ค๋“œ๋Š” '๊ทธ๊ฒƒ(it)'๊ณผ '๋™๋ฌผ(animal)'๊ณผ์˜ ์—ฐ๊ด€๋„๋ฅผ ๋†’๊ฒŒ ๋ณด๊ธฐ๋„ ํ•˜๊ณ  '๊ทธ๊ฒƒ'๊ณผ 'ํ”ผ๊ณคํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค(tired)'์˜ ์—ฐ๊ด€๋„๋ฅผ ๋†’๊ฒŒ ๋ณด๊ธฐ๋„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์‹œ๊ฐ์˜ ์ •๋ณด๋ฅผ ๋ชจ์•„ '๊ทธ๊ฒƒ'์ด ๋ฌด์—‡์„ ๋œปํ•˜๋Š”์ง€ ๋” ์ •ํ™•ํ•˜๊ฒŒ ์ฐพ์•„๋‚ธ๋‹ค.

๐Ÿ“Œ ํ•œ๋ฒˆ์— d_model ์ฐจ์›์˜ ์–ดํ…์…˜์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  d_model์„ num_heads๋กœ ๋‚˜๋ˆ  ์ฐจ์› ์ถ•์†Œ์‹œํ‚จ ๋ฒกํ„ฐ๋กœ ์—ฌ๋Ÿฌ๋ฒˆ ์–ดํ…์…˜์„ ์ˆ˜ํ–‰. ์ฆ‰, ์–ดํ…์…˜์„ num_heads ๋งŒํผ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰.(num_heads๋Š” hyperparameter) ์ด ๋•Œ ๊ฐ๊ฐ์˜ ์–ดํ…์…˜ ๊ฐ’ ํ–‰๋ ฌ์„ ์–ดํ…์…˜ ํ—ค๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์ค‘์น˜ ํ–‰๋ ฌ W_Q, W_K, W_V์˜ ๊ฐ’์€ ์–ดํ…์…˜ ํ—ค๋“œ ๋งˆ๋‹ค ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค.

๐Ÿ“Œ ๋ณ‘๋ ฌ ์–ดํ…์…˜์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•˜์˜€๋‹ค๋ฉด ๋ชจ๋“  ์–ดํ…์…˜ ํ—ค๋“œ๋ฅผ ์—ฐ๊ฒฐ(concatenate)ํ•œ๋‹ค. ๋ชจ๋‘ ์—ฐ๊ฒฐ๋œ ์–ดํ…์…˜ ํ—ค๋“œ ํ–‰๋ ฌ์˜ ํฌ๊ธฐ๋Š” (seq_len, d_model)์ด๋‹ค.

๋งˆ์Šคํ‚น(Masking)

๐Ÿ“Œ ๋งˆ์Šคํ‚น(Masking):ํŠน์ • ๊ฐ’๋“ค์„ ๊ฐ€๋ ค์„œ ์‹ค์ œ ์—ฐ์‚ฐ์— ๋ฐฉํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฒ•, ํŠธ๋žœ์Šคํฌ๋จธ์—์„  ํŒจ๋”ฉ ๋งˆ์Šคํ‚น(Padding Masking)๊ณผ ๋ฃฉ ์–ดํ—ค๋“œ ๋งˆ์Šคํ‚น(Look-ahead masking, ๋‹ค์Œ ๋‹จ์–ด ๊ฐ€๋ฆฌ๊ธฐ) ์‚ฌ์šฉ

๐Ÿ“Œ 1.ํŒจ๋”ฉ ๋งˆ์Šคํ‚น(Padding Masking)

โœ”์ž…๋ ฅ ๋ฌธ์žฅ์— ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์–ดํ…์…˜์—์„œ ์ œ์™ธํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์‚ฐ, ๋Š” ์‹ค์งˆ์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ๋‹จ์–ด๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ† ํฐ์ด ์กด์žฌํ•œ๋‹ค๋ฉด ์ด์— ๋Œ€ํ•ด์„œ๋Š” ์œ ์‚ฌ๋„๋ฅผ ๊ตฌํ•˜์ง€ ์•Š๋„๋ก ๋งˆ์Šคํ‚น(Masking) ํ•ด์คŒ

โœ” ํŒจ๋”ฉ ๋งˆ์Šคํ‚น ๊ตฌํ˜„ ํ•จ์ˆ˜

> def create_padding_mask(x):
mask = tf.cast(tf.math.equal(x, 0), tf.float32)
# (batch_size, 1, 1, sequence length)
return mask[:, tf.newaxis, tf.newaxis, :]

print(create_padding_mask(tf.constant([[1, 21, 777, 0, 0]]))) #์ž„์˜์˜ ์ •์ˆ˜ ์‹œํ€€์Šค ์ธ์ž๋กœ ๋„˜๊ฒจ์คŒ

tf.Tensor([[[[0. 0. 0. 1. 1.]]]], shape=(1, 1, 1, 5), dtype=float32) #๊ฒฐ๊ณผ  

โœ”tf.math.equal(x, y) => x, y์˜ ์š”์†Œ๋ฅผ ๋น„๊ตํ•ด์„œ ๋™์ผํ•˜๋ฉด truth, ๋‹ค๋ฅด๋ฉด false ๋ฐ˜ํ™˜
โœ”tf.cast(x, dtype) => ์ง€์ •ํ•œ ๋ฐ์ดํ„ฐํ˜•์œผ๋กœ true๋Š” 1.์„ false๋Š” 0.์„ ๋ฐ˜ํ™˜

๐Ÿ“Œ 2.๋ฃฉ ์–ดํ—ค๋“œ ๋งˆ์Šคํ‚น(Look-ahead masking, ๋‹ค์Œ ๋‹จ์–ด ๊ฐ€๋ฆฌ๊ธฐ)

โœ” RNN์€ ๊ฐ step๋งˆ๋‹ค ๋‹จ์–ด๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ตฌ์กฐ ๋ฐ˜๋ฉด์— ํŠธ๋žœ์Šคํฌ๋จธ๋Š” ๋ฌธ์žฅ ํ–‰๋ ฌ์„ ๋งŒ๋“ค์–ด ํ•œ ๋ฒˆ์— ํ–‰๋ ฌ ํ˜•ํƒœ๋กœ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด๊ฐ ์ด๋Ÿฐ ํŠน์ง• ๋•Œ๋ฌธ์— ๋งˆ์Šคํ‚น(Masking)์„ ํ•„์š”๋กœํ•œ๋‹ค.

โœ” RNN ์ž…๋ ฅ ๊ตฌ์กฐ
์ฒซ ๋ฒˆ์งธ step
ํ˜„์žฌ๊นŒ์ง€์˜ ์ž…๋ ฅ : what โ†’ ์ถœ๋ ฅ : is

๋‘ ๋ฒˆ์งธ step
ํ˜„์žฌ๊นŒ์ง€์˜ ์ž…๋ ฅ : what is โ†’ ์ถœ๋ ฅ : the

์„ธ ๋ฒˆ์งธ step
ํ˜„์žฌ๊นŒ์ง€์˜ ์ž…๋ ฅ : what is the โ†’ ์ถœ๋ ฅ problem

โœ” ํŠธ๋žœ์Šคํฌ๋จธ ์ž…๋ ฅ ๊ตฌ์กฐ
ํŠธ๋žœ์Šคํฌ๋จธ๋Š” ์ „์ฒด ๋ฌธ์žฅ ํ–‰๋ ฌ์„ ์ž…๋ ฅ ๋ฐ›์œผ๋ฏ€๋กœ ํ˜„์žฌ ์‹œ์  ๋ณด๋‹ค ๋ฏธ๋ž˜์— ์žˆ๋Š” ๋‹จ์–ด๋“ค์„ ์ฐธ๊ณ ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ฃฉ ์–ดํ—ค๋“œ ๋งˆ์Šคํ‚น ๋„์ž…, ๋””์ฝ”๋”์˜ ์ฒซ๋ฒˆ์งธ ์„œ๋ธŒ์ธต์—์„œ ์ด๋ฃจ์–ด์ง, self-attention์„ ํ†ตํ•ด ์–ป๋Š” attention score matrix์—์„œ Q ๋’ค์˜ K ๋‹จ์–ด๋“ค์— ๋Œ€ํ•ด ๋งˆ์Šคํ‚นํ•จ

Encoder

๐Ÿ“Œ self-attention layer, feed forward neural network layer
๐Ÿ“Œ The Residuals
encoder ๋‚ด์˜ sub-layer๋Š” residual connection์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  ๊ทธ ์ดํ›„ layer normalization ๊ณผ์ •์„ ๊ฑฐ์นจ

๐Ÿ“Œ layer normalization
input์˜ ํ‰๊ท ๊ณผ ๋ถ„์‚ฐ์„ ๊ตฌํ•ด์„œ batch์— ์žˆ๋Š” ๊ฐ input์„ ์ •๊ทœํ™”

Decoder

๐Ÿ“Œ ๋””์ฝ”๋”์˜ ์ž…๋ ฅ์€ โ‘ ์ธ์ฝ”๋” ๋งˆ์ง€๋ง‰ ๋ธ”๋ก์—์„œ ๋‚˜์˜จ ๋‹จ์–ด ๋ฒกํ„ฐ ์‹œํ€€์Šค, โ‘ก์ด์ „ ๋””์ฝ”๋” ๋ธ”๋ก์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋กœ ๋„์ถœ๋œ ํƒ€๊นƒ ๋‹จ์–ด ๋ฒกํ„ฐ ์‹œํ€€์Šค
๐Ÿ“Œ decoder self-attention
๋ฒˆ์—ญํ•˜๋ ค๋Š” ์–ธ์–ด(ํ•œ๊ตญ->์˜์–ด ๋ฒˆ์—ญ์ด๋ฉด ์˜์–ด์— ํ•ด๋‹น)์˜ ๋‹จ์–ด ๋ฒกํ„ฐ ์‹œํ€€์Šค๋ฅผ ๋””์ฝ”๋” ์…€ํ”„ ์–ดํ…์…˜์œผ๋กœ ๊ณ„์‚ฐ, 'cafe' ๋‹ค์Œ์œผ๋กœ ์˜ฌ ๋‹จ์–ด๊ฐ€ there์ž„์„ ๋งž์ถ”๋Š” ๊ณผ์ • ex)I went to the cafe there. => I(0.01) went(0.01) to(0.02) ... (๊ด„ํ˜ธ์•ˆ์˜ ๊ฐ’์€ ์–ดํ…์…˜ ๊ฐ’)
๐Ÿ“Œ masked multi-head attention
์†Œ์Šค ์–ธ์–ด ๋ฌธ์žฅ(์–ด์ œ ์นดํŽ˜ ๊ฐ”์—ˆ์–ด ๊ฑฐ๊ธฐ ์‚ฌ๋žŒ ๋งŽ๋”๋ผ) ๋‹จ์–ด ๋ฒกํ„ฐ ์‹œํ€€์Šค๋ฅผ ํ‚ค๋กœ ์‚ผ๊ณ  ํƒ€๊นƒ ์–ธ์–ด ๋ฌธ์žฅ(I went to the cafe yesterday There...)์˜ ๋‹จ์–ด ๋ฒกํ„ฐ ์‹œํ€€์Šค๋ฅผ ์ฟผ๋ฆฌ๋กœ ์‚ผ์•„ ์…€ํ”„ ์–ดํ…์…˜ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰.(์žŠ์ง€๋ง์ž ์ฟผ๋ฆฌ๊ฐ€ ์งˆ๋ฌธ์ด๊ณ  ๋‹ต์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ํ‚ค๋ผ๋Š” ๊ฒƒ์„...) ์˜ˆ๋ฅผ ๋“ค์–ด ์ฟผ๋ฆฌ ์•ˆ์˜ 'cafe'์— ๋Œ€์‘ํ•˜์—ฌ key ์š”์†Œ๋“ค์€ ์…€ํ”„ ์–ดํ…์…˜์„ ํ†ตํ•˜์—ฌ ํ™•๋ฅ ๊ฐ’์„ ๊ฐ–๊ณ  ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ํ™•๋ฅ ์„ ๊ฐ–๋Š” '์นดํŽ˜'๋ฅผ ๋งž์ถ”๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ“Œ ํ•™์Šต์‹œ ๋””์ฝ”๋”์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์…€ํ”„ ์–ดํ…์…˜์—๋Š” ๋‹จ์–ด ๋ฒกํ„ฐ ์‹œํ€€์Šค์— ๋งˆ์Šคํ‚น์ด ์ ์šฉ๋œ๋‹ค. ์ด๋Š” ์ •๋‹ต์„ ํฌํ•จํ•œ ๋ฏธ๋ž˜ ์ •๋ณด๋ฅผ ์…€ํ”„ ์–ดํ…์…˜ ๊ณ„์‚ฐ์—์„œ ์ œ์™ธํ•˜๋„๋ก ํŠธ๋ฆญ์„ ์“ฐ๋Š” ์…ˆ์ด๋‹ค. ๋งˆ์Šคํ‚น์ด ์ ์šฉ๋œ ๋‹จ์–ด์ •๋ณด๋Š” ํ™•๋ฅ ๊ฐ’์ด 0์ด ๋˜๊ฒŒ ํ•˜์—ฌ ํ•ด๋‹น ๋‹จ์–ด ์ •๋ณด๊ฐ€ ๋ฌด์‹œ๋˜๊ฒŒ๋” ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค.


๐Ÿ“Œ decoder์˜ self-attention, encoder-decoder attention ๋ชจ๋‘ ์Šค์ผ€์ผ๋“œ ๋‹ท ํ”„๋กœ๋•ํ”„ ์–ดํ…์…˜์„ ๋ฉ€ํ‹ฐ ํ—ค๋“œ ์–ดํ…์…˜์œผ๋กœ ๋ณ‘๋ ฌ์  ์ˆ˜ํ–‰
๐Ÿ“Œ decoding์€ ๊ฐ ์Šคํ…๋งˆ๋‹ค ์ถœ๋ ฅ๋œ ๋‹จ์–ด๊ฐ€ ๋‹ค์Œ ์Šคํ…์˜ decoder์— ๋“ค์–ด๊ฐ€๊ณ  ์—ฌ๋Ÿฌ decoder layer๋ฅผ ํ†ต๊ณผํ•˜๋ฉฐ ์˜ฌ๋ผ๊ฐ. ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋œ๋‹ค.

Finally!! Linear Layer & Softmax Layer

๐Ÿ“Œ ๋””์ฝ”๋”์˜ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์ธ ๋ฒกํ„ฐ๋ฅผ Linear Layer์™€ Softmax Layer๋ฅผ ํ†ตํ•ด ์˜ˆ์ธก ๋‹จ์–ด๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.
๐Ÿ“Œ Linear Layer: fully-connected ์‹ ๊ฒฝ๋ง์œผ๋กœ ๋””์ฝ”๋”์˜ ์ถœ๋ ฅ ๋ฒกํ„ฐ๋ฅผ ํ›จ์”ฌ ๋” ํฐ ์‚ฌ์ด์ฆˆ์ธ logits ๋ฒกํ„ฐ๋กœ ํˆฌ์˜์‹œํ‚ด. ์˜ˆ๋ฅผ ๋“ค์–ด 10,000๊ฐœ์˜ ์˜์–ด ๋‹จ์–ด๋ฅผ ํ•™์Šตํ•˜์˜€๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด logits vector์˜ ํฌ๊ธฐ๋Š” 10,000์ด ๋จ. ๋ฒกํ„ฐ์˜ ๊ฐ ์š”์†Œ๋Š” ๊ฐ ๋‹จ์–ด์— ๋Œ€ํ•œ ์ ์ˆ˜
๐Ÿ“Œ softmax layer: logits vector์˜ ๊ฐ ์…€๋“ค์˜ ์ ์ˆ˜๋ฅผ ํ™•๋ฅ ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—ญํ• . ๊ฐ ์…€๊ฐ’๋“ค์„ ๋ชจ๋‘ ๋”ํ•˜๋ฉด 1์ด ๋˜๊ณ  ๊ฐ€์žฅ ๋†’์€ ํ™•๋ฅ  ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์…€์˜ ๋‹จ์–ด๊ฐ€ ์ตœ์ข… ์ถœ๋ ฅ๋จ.

Reference
1.ํŒจ๋”ฉ๋งˆ์Šคํฌ
2.๋””์ฝ”๋” ์ดํ•ดํ•˜๊ธฐ
3.ํŠธ๋žœ์Šคํฌ๋จธ ๋…ผ๋ฌธ ํ•œ๊ตญ์–ด ๋ฒ„์ „
4.๋‚˜๋™๋นˆ๋‹˜ ํŠธ๋žœ์Šคํฌ๋จธ ์„ค๋ช…์ž๋ฃŒ
5.์œ„ํ‚ค๋…์Šค ํŠธ๋žœ์Šคํฌ๋จธ

0๊ฐœ์˜ ๋Œ“๊ธ€