Multi Head Attention - beyondnlp/nlp GitHub Wiki
λ©ν°ν€λ μ΄ν μ μ μ λμλ
κΈ°μ‘΄μ sequence labelingμ λͺ¨λ μ΄μ μ μνμ μμ‘΄μ μ΄λ€.
rnnλ μμΈκ° μλλ€.
GPUκ° μ무리 λ§μλ ꡬ쑰μ μΈ νκ³( νμ¬λ μ΄μ μνμ κ²°κ³Όλ₯Ό μ
λ ₯μΌλ‘ λ°λλ€ )λλ¬Έμ μλ κ°μ μ μνμ΄ μ‘΄μ¬νλ€.
μ΄λ₯Ό λ³λ ¬ν ν μ μκ³ λ³λ ¬νκ° κ°λ₯νλ©΄ μλ μ΄λλ μ»μ μ μλ€.
μ΄λ° λͺ©μ μ μ»κΈ° μν΄ μμ¦ κ°μ§ κ°κ΄λ°λ κΈ°μ μ€ νλμΈ μ΄ν
μ
μ μ¬μ©νμ¬ sequence μ 보κΉμ§λ κ³μ°νλ κ²μ λͺ©νλ‘ κ°λ°λμλ€.
μΈκ°μ μ΄ν μ
νΈλμ€ν¬λ¨Έ ꡬ쑰λλ₯Ό 보면 μ΄ μΈκ°μ μ΄ν
μ
μ΄ μ‘΄μ¬νλ€.
μΈκ°μ μ΄ν
μ
μ μΈμ½λ μ΄ν
μ
, λμ½λ μ΄ν
μ
, μΈμ½λ λμ½λκ° μ΄ν
μ
μ΄λ€.
μ΄λ² μ±ν°μμλ λ¨Όμ μ΄ν
μ
ꡬ쑰λ₯Ό μ΄ν΄λ³΄κ³ κ° μ΄ν
μ
λ³ μ
λ ₯μ κ³ λ €νμ¬ μ΄μΌκΈ°λ₯Ό μ κ°νκ² λ€.
μΈμ½λ μ΄ν
μ
μ μ
λ ₯ μΈκ°μ§λ λ€μκ³Ό κ°λ€
--- λ
Όλ¬Έμ λ΄μ© ---
encoder-decoder attention layer
μ΄μ λμ½λ λ μ΄μ΄λ‘λΆν° μΏΌλ¦¬κ° λ€μ΄μ€κ³
μΈμ½λμ μμνμ΄ key, valueλ‘ λ€μ΄μ¨λ€.
μ΄κ²μ λμ½λμ λͺ¨λ ν¬μ§μ
μ΄ μ
λ ₯ μνμ€μ λͺ¨λ ν¬μ§μ
μ μ°Έμ¬ν μ μλ€.
μ΄ λ°©μμ΄ seq2seq λ°©μμ μΈμ½λ λμ½λ 맀컀λμ¦μ λͺ¨λ°©νλ€.
encoder
μΈμ½λλ μ
ν μ΄ν
μ
λ μ΄μ΄λ₯Ό ν¬ν¨νλ€.
λͺ¨λ keys, values, querysμ μ
ν μ΄ν
μ
λ μ΄μ΄λ κ°μ λ³μ κ°μ΄ μ μ
λλ€.
μ
λ ₯λ€κ°μ μκ΄κ΄κ³λ₯Ό μ μ©νμ¬ κ·Έ κ°μ€μΉλ₯Ό λ€μ μ
λ ₯μ μ μ©νλ€.
decoder
encoderμ μ μ¬νκ² λμ½λμ μ
ν μ΄ν
μ
λ μ΄μ΄λ λμ½λμμ κ°κ°μ ν¬μ§μ
μ΄ νμ¬ μμΉκΉμ§μ λͺ¨λ ν¬μ§μ
μ μ°Έμ¬νλ€.
( μΈμ½λλ μ
λ ₯μ΄ μ ν΄μ§ μνμ΄κΈ° λλ¬Έμ λͺ¨λ λ²μμ λν΄ μ΄ν
μ
μ νμΈν μ μμ§λ§ λμ½λλ νμ¬ μμΉμμ μμ μλ κ²μ λν΄μλ§ μ΄ν
μ
μ κ³μ°ν μ μλ€. )
λμ½λμμ the auto-regressive propertyλ₯Ό 보μ₯νκΈ° μν΄ μ λ³΄κ° μΌμͺ½ λ°©ν₯μΌλ‘ νλ₯΄λ κ²μ λ§μ νμκ° μλ€.
κ³μ°μ νΈμ( softmaxμ 0μ΄ μ
λ ₯λλ κ²μ λ§κΈ° μν΄ ) νμ¬ μμΉμ λ€μ μμΉμ ν΄λΉλλ κ³³μλ softmax μ
λ ₯μ λͺ¨λ κ°μ ( - 무νλ )λ‘ λ§μ€νΉνμ¬ scaled dot-product attention λ΄λΆλ₯Ό ꡬννλ€.
def attention(Q, K, V):
num = np.dot(Q, K.T)
denum = np.sqrt(K.shape[0]) #Dkλ Keyμ μ°¨μ
return np.dot(softmax(num / denum), V)
μ μμκ³Ό μλ κ·Έλ¦Όμ μ ννκ² λμΌνλ€.
μμμ λ¨Όμ μ€λͺ
νλ©΄
QK^tλ₯Ό κ³±νμ¬ ROOT dk(Dkλ Keyμ μ°¨μ)λ‘ λλλ€. μ΄ κ°μ softamxλ₯Ό μ·¨ν΄ λμ¨ κ°μ Vλ₯Ό κ³±νλ€.
κ·Έλ¦Όμ μ€λͺ
νλ©΄
Qμ Kλ₯Ό MatMul( Matrix Multiplcation )μ ν ν Scalingνλ€.
μ΄νμ Mask(opt) -> μ΄κ²μ λν΄μλ λ°λ‘ μ€λͺ
μ΄ κ°μ softmaxλ₯Ό κ±°μΉκ³
Vμ MatMulλ₯Ό νλ€.
(dkλ μ€μΌμΌμ λ§μΆκΈ° μν κ°μΌλ‘ μ 체λ₯Ό λν κ²μ νκ· ν κ²μΌλ‘ λ΄λ λλ€ )
μμμ λν μ€λͺ
κ³Ό μμλμ λν μ€λͺ
μ΄ μ νν λμΌν κ²μ λ³Ό μ μλ€.
* Dkλ‘ λλλ μ΄μ λ small gradientλ₯Ό λ§κΈ° μν μ‘°μΉ( μΌλ°μ μΌλ‘ attentionμλ dot productionκ³Ό additive attention λ κ°μ§κ° μλλ° transformerμλ scaleμ΄ λ€μ΄κ°λ κ²μ μ μΈνκ³€ dot production attentionκ³Ό λμΌνλ€ )

μ λ©ν° ν€λμΈκ°
μ΄ν
μ
μ΄ μ²μ λμμλ μ΄ν
μ
μ μ 체 μλ² λ©μ νλμ weightκ°μ μ μ©νμλ€.
300μ°¨μμ΄κ±΄ 200μ°¨μμ΄κ±΄ λμΌνλ€
κ·Έλ°λ° μ΄ μ»¬λΌλ²‘ν°λ₯Ό λͺκ°μ μ‘°κ°μΌλ‘ μ΄ν
μ
μ μ μ©νλ©΄ μ’ λ ν¨κ³Όμ μ΄μ§ μμκΉ μ΄κ²μ΄ λ©ν°ν€λ μ΄ν
μ
μ λμ
μ μ΄λ€
- self attentionμ κ²½μ° Q,K,Vκ° λͺ¨λ λμΌνκ² μ λ ₯ μλ² λ©μ μ¬μ©νλ€.
- μλ μ΄λ―Έμ§λ κ·Έμ€ νλ(Q)λ₯Ό κΈ°λ³ΈμΌλ‘ νκ³ λ§μ§λ§ λ΄μ λ§ Q*Kλ‘ κ°μ νλ€.