๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ML/NLP

Attention Mechanism์ด๋ž€?

1. Sequence-to-sequence(Seq2seq)

  • ์‹œํ€€์Šค๋ฅผ ๋‹ค๋ฅธ ์‹œํ€€์Šค๋กœ! : ์–ด๋–ค ์‹œํ€€์Šค๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด ๊ทธ ์‹œํ€€์Šค๋ฅผ ๋‹ค๋ฅธ ์‹œํ€€์Šค๋ฅผ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๋ชจ๋ธ๋ง
  • Encoder: ๋ญ”๊ฐ€๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ชจ๋ธ
  • Decoder: ๋ญ”๊ฐ€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋ธ
  • ์ธ์ฝ”๋”๊ฐ€ ์ž…๋ ฅ๋ฐ›๊ณ  ๋‚ด์šฉ์„ ์ดํ•ดํ•˜๊ณ  ๋งŒ๋“  ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“  ๊ฒฐ๊ณผ๊ฐ€ Context vector(๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์ด์ฆˆ๋ฅผ ์ง€์ •)
  • ์ปจํ…์ŠคํŠธ ๋ฐฑํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ ๋””์ฝ”๋”๊ฐ€ ๋ฌธ์žฅ์„ ์ƒ์„ฑ
  • ๋ฌธ์ œ: ์ž…๋ ฅ์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด๋„ ๊ณ ์ •๋œ ์‚ฌ์ด์ฆˆ์˜ context ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•จ -> ์ธ์ฝ”๋”์— ๋“ค์–ด๊ฐ€๋Š” ๋‚ด์šฉ์ด ๋งŽ์œผ๋ฉด ์ „๋ถ€ ์ปจํ…์ŠคํŠธ ๋ฒกํ„ฐ์— ์ €์žฅํ•˜๊ธฐ ๋ถˆ๊ฐ€
    • ์ „๋ถ€ ์ดํ•ดํ•œ๋‹ค์Œ์— ํ•œ๋ฒˆ์— ์ปจํ…์ŠคํŠธ ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ !
    • ๊ทธ๋Ÿฌ์ง€๋ง๊ณ  ํ•œ ๋‹จ์–ด, ํ† ํฐ์„ ๋ณผ ๋•Œ๋งˆ๋‹ค ์ปจํ…์ŠคํŠธ ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ฃผ๋ฉด, ๋””์ฝ”๋”๊ฐ€ ๋ณด๊ณ ๋‚˜์„œ ์ค‘์š”ํ•œ ๊ฒƒ๋งŒ ๋ฝ‘์•„์„œ ์“ฐ๊ฒ ๋‹ค.
    • ์ด๊ฒŒ Attention machanism

2. Attention Mechanism

1) Key vector๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๊ฐ ๋‹จ์–ด(ํ† ํฐ)์„ ๋ฒกํ„ฐํ™”ํ•œ๋‹ค.

  • Key
    • Encoder hidden state
    • ์ธ์ฝ”๋”๊ฐ€ ๊ฐ ๋‹จ์–ด(ํ† ํฐ)๋งˆ๋‹ค ์ดํ•ดํ•œ ๋‚ด์šฉ

2) Query์™€ Key๋ฅผ dot product

๋””์ฝ”๋”๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ๋ฌธ์žฅ์„ ์ƒ์„ฑํ•˜๋ฉด์„œ ์ •๋ฆฌํ•ด์˜จ ๋‚ด์šฉ์ธ, query๋ฅผ ๊ฐ€์ ธ์™€์„œ Key์™€ dot productํ•˜์—ฌ ์œ ์‚ฌ๋„๋ฅผ ๊ตฌํ•œ๋‹ค.

  • Query
    • Decoder hidden state
    • ๋””์ฝ”๋”๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ๋ฌธ์žฅ์„ ์ƒ์„ฑํ•˜๋ฉด์„œ ์ •๋ฆฌํ•ด์˜จ ๋‚ด์šฉ
    • ๋””์ฝ”๋”๊ฐ€ ํŠน์ • ๋‹จ์–ด(ํ† ํฐ)์„ ๋ฒˆ์—ญํ•ด์•ผํ•  ์‹œ์ ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ๊ทธ ์ „๊นŒ์ง€ ์ •๋ฆฌํ•ด์˜จ ๋‚ด์šฉ๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด๋จ (๋‚ด์šฉ์ •๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ ์ง€๋Š” ๋’ค์—์„œ ์„ค๋ช…)


    • ์™œ Query๋ผ๊ณ  ๋ถ€๋ฅด๋Š”์ง€?
      • ๊ฒ€์ƒ‰ํ•  ๋•Œ, ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์•„๋ƒ„
      • ๋””์ฝ”๋”๋„ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ์ค‘์š”ํ•œ key๋“ค์„ ์ฐพ์Œ


    • ์ค‘์š”ํ•œ Key๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ๋„๊ตฌ
      • query์™€ key๋ฅผ doc product ์ˆ˜ํ–‰ ⇒ ์œ ์‚ฌ๋„ score
      • ๋‘ ๋ฒกํ„ฐ๊ฐ€ ์‚ฌ์ด์ฆˆ๊ฐ€ ์•ˆ๋งž๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋ฒกํ„ฐ๋ฅผ transpose ํ•ด์„œ doc product ์ง„ํ–‰
        • [1,vec_size][vec_size1]
      • ๊ณ„์‚ฐํ•˜๋ฉด ๊ฐ key๋ณ„๋กœ ์œ ์‚ฌ๋„
      • dot product๊ฐ€ ์™œ ์œ ์‚ฌ๋„์ผ๊นŒ?
        • dot product(๋‚ด์ )์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ•œ ๋ฒกํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๋ฒกํ„ฐ์— ์ •์‚ฌ์˜ํ•œ ๊ฒƒ์˜ ๊ธธ์ด๋ฅผ ๊ณฑํ•˜๋Š” ๊ฒƒ
        • query ๋ฒกํ„ฐ์— Key๋ฅผ ์ •์‚ฌ์˜ํ•ด์„œ ๋‘˜์˜ ๊ธธ์ด๋ฅผ ๊ณฑํ•˜๋Š” ๊ฒƒ
        • ๋น„์Šทํ•œ ๋ฐฉํ–ฅ๊ณผ ๋น„์Šทํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ ๋ฒกํ„ฐ๋Š” ๋‚ด์ ๊ฐ’์ด ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์— ์œ ์‚ฌ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํƒ€๋‹น

3) ๊ตฌํ•œ score์— softmax๋ฅผ ์ทจํ•ด์„œ 0~1 ์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ ๋งŒ๋“ ๋‹ค.

4) ๊ทธ ๋‹ค์Œ Key vector์™€ ๊ณฑํ•ด์„œ Value๋ฅผ ๋งŒ๋“ ๋‹ค

  • Value
    • Query์™€ key ๋ฅผ ์ด์šฉํ•ด์„œ score๋ฅผ ๊ตฌํ•œ ํ›„, softmax๋ฅผ ์ทจํ•œ ๊ฐ’์— ๋‹ค์‹œ Key vector๋ฅผ ๊ณฑํ•œ ๊ฐ’
    • aliment vector
    • Key๋ณ„๋กœ ํ•˜๋‚˜์”ฉ ์žˆ์–ด์„œ ์ด๋ฆ„์ด value → python dictionary ์™€ ๋น„์Šท
    • score์˜ ๊ฐ’์ด ํด์ˆ˜๋ก key vector์˜ ์›๋ž˜ ํ˜•ํƒœ๊ฐ€ ๋” ๋งŽ์ด ๋‚จ์•„์žˆ์Œ
    • ‘๋‚˜๋Š”’ ์˜ vector ⇒ [1,2,9]
    • score ⇒ 0.2
    • value = [0.2,0.4, 1.8]
    • ๋งŒ์•ฝ score๊ฐ€ 0์ด๋ผ๋ฉด value vector๋Š” 0์ด ๋  ๊ฒƒ

5) value๋“ค์„ ๋ชจ๋‘ ๋”ํ•ด์„œ context vector๋ฅผ ๋งŒ๋“ ๋‹ค.

  • context vector
    • Value๊ฐ’๋“ค์„ ๋ชจ๋‘ ๋”ํ•˜๊ธฐ
    • ‘๋‚˜๋Š”’ ⇒ [1,2,9] x 0.2 = [0.2,0.4, 0.9]
    • ‘์˜ค๋Š˜’ ⇒ [9,1,1] x 0.8 = [7.2, 0.8, 0.8]
    • ๋‚˜๋จธ์ง€ ํ† ํฐ๋“ค์€ score๊ฐ€ 0์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด ๋‚˜๋จธ์ง€๋Š” [0,0,0]
    • context vector = [7.4,1.2,1.7]
    • context vector์—๋Š” score๊ฐ’์ด ๊ฐ€์žฅ ์ปท๋˜ ‘์˜ค๋Š˜’ ํ† ํฐ์˜ value๊ฐ’์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„, ์ฒซ๋ฒˆ์งธ์š”์†Œ๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋จ

6) Value vector๋ฅผ ๋””์ฝ”๋”์— ์ž…๋ ฅํ•œ๋‹ค.

๋””์ฝ”๋”๊ฐ€ ์ด์ „์Šคํ…๊นŒ์ง€ ์ •๋ฆฌํ•œ ๋ฒกํ„ฐ๋“ค๊ณผ concatํ•œ๋‹ค.

  • ์–ดํ…์…˜์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋งŽ์Œ
  • ์—ฌ๊ธฐ์„œ๋Š” concat์œผ๋กœ ์„ค๋ช…

๊ฒฐ๋ก : ์–ดํ…์…˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์ธ์ฝ”๋”๊ฐ€ ๋‹จ์–ด(ํ† ํฐ) ๋‹จ์œ„๋กœ ์ •๋ฆฌํ•œ ๋ฒกํ„ฐ ์ค‘์—์„œ ๋””์ฝ”๋”๊ฐ€ ์ค‘์š”ํ•œ ๋ฒกํ„ฐ๋ฅผ ๊ณจ๋ผ์„œ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

3. References