μžμ—°μ–΄ 처리/Today I learned :

νŠΈλžœμŠ€ν¬λ¨Έμ™€ μ–΄νƒ μ…˜ 정리 --2

주영 🐱 2023. 1. 16. 17:17
728x90
λ°˜μ‘ν˜•

https://getacherryontop.tistory.com/140

 

νŠΈλžœμŠ€ν¬λ¨Έμ™€ μ–΄νƒ μ…˜ 정리 --1

λ“œλ””μ–΄ λ‚˜λ₯Ό 괴둭히던 μ–΄νƒ μ…˜μ— κ΄€ν•΄ μ΄ν•΄ν•œ ν›„, 슀슀둜 μ²˜μŒλΆ€ν„° μ •λ¦¬ν•΄λ³΄μ•˜λ‹€!!! 트랜슀포머 λ“±μž₯ μ „ 트랜슀포머 μ „μ—λŠ” RNN, CNN을 ν™œμš©ν•œ μžμ—°μ–΄μ²˜λ¦¬κ°€ μ΄λ£¨μ–΄μ‘Œλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λŸ¬ν•œ 방법은 μ‹œ

getacherryontop.tistory.com

μ§€λ‚œλ²ˆκΉŒμ§€ 트랜슀포머의 μž…λ ₯κ³Ό 좜λ ₯, μ–΄νƒ μ…˜ν•¨μˆ˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λ‹€. 

인코더와 디코더에 λŒ€ν•΄ μ •λ¦¬ν•˜λ˜ 쀑 μ±…μ—μ„œ μ’€ μ΄μƒν•œ 뢀뢄이 μžˆμ–΄ λͺ…ν™•ν•˜κ²Œ μ΄ν•΄λ˜μ§€ μ•Šμ€ 뢀뢄에 λŒ€ν•΄ μ§ˆλ¬Έμ„ 톡해 ν•΄κ²°ν–ˆλ‹€!

μ•„λ¬΄νŠΌ μ΄λ²ˆμ—λŠ” 트랜슀포머의 인코더와 디코더에 λŒ€ν•΄ μ •λ¦¬ν•˜κ² λ‹€. 

μ™Όμͺ½ 사진인 트랜슀포머 전체 κ΅¬μ‘°μ—μ„œ μ΄ˆλ‘μƒ‰μ€ 인코더, 빨간색은 디코더이닀. 였λ₯Έμͺ½ 사진은 인코더와 디코더λ₯Ό κ°„μ†Œν™”ν•œ 도식이닀. 

ν•˜λ‚˜μ”© μ°¨λ‘€λ‘œ μ‚΄νŽ΄λ³΄μž

μ–΄νƒ μ…˜~

 

 

트랜슀포머의 인코더

 

트랜슀포머의 인코더

트랜슀포머둜 ν•œκ΅­μ–΄->μ˜μ–΄ λ²ˆμ—­μ„ ν•˜λ €κ³  ν•œλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” μΈμ½”λ”μ—λŠ” ν•œκ΅­μ–΄λ¬Έμž₯이, λ””μ½”λ”μ—λŠ” ν•œκ΅­μ–΄μ— ν•΄λ‹Ήν•˜λŠ” μ˜μ–΄λ¬Έμž₯이 μž…λ ₯으둜 λ“€μ–΄κ°„λ‹€. μ €λ²ˆμ— ν–ˆλ˜ μ˜ˆμ‹œλ¬Έμž₯을 가져와 보면 , 

<ν•œκ΅­μ–΄->μ˜μ–΄ λ²ˆμ—­>

인코더 μž…λ ₯λ¬Έμž₯ : 'λ‚˜λŠ” 토끼λ₯Ό ν‚€μ›Œ. λͺ¨λ“  μ‚¬λžŒμ΄ κ·Έλ₯Ό μ’‹μ•„ν•΄.'

디코더 μž…λ ₯λ¬Έμž₯ : 'I have a rabbit. Everyone likes him.'

을 λ„£μ–΄μ•Ό ν•œλ‹€. 

 

μž…λ ₯은 μ €λ²ˆκΈ€μ— μ„€λͺ…ν–ˆλ˜ κ²ƒμ²˜λŸΌ input embedding+positional embedding으둜 λ“€μ–΄κ°„λ‹€.

Multi-Head Attention

μΈμ½”λ”μ—μ„œ 처음으둜 ν•œκ΅­μ–΄ λ¬Έμž₯이 λ§ˆμ£Όν•˜λŠ” 것은 λ©€ν‹°ν—€λ“œ μ–΄νƒ μ…˜μ΄λ‹€. μ΄λ•Œ λ©€ν‹°ν—€λ“œ μ–΄νƒ μ…˜μ€ μ…€ν”„ μ–΄νƒ μ…˜κ³Ό κ°™λ‹€. 

λ‚˜λŠ”/토끼λ₯Ό/ν‚€μ›Œ/λͺ¨λ“ /μ‚¬λžŒμ΄/κ·Έλ₯Ό/μ’‹μ•„ν•΄ - ν•˜λ‚˜μ”© μ…€ν”„μ–΄νƒ μ…˜μ„ μˆ˜ν–‰ν•œλ‹€. 

즉, 쿼리가 'λ‚˜λŠ”' μΌλ•Œ ν‚€λŠ” λ‚˜λŠ”/토끼λ₯Ό/ν‚€μ›Œ/λͺ¨λ“ /μ‚¬λžŒμ΄/κ·Έλ₯Ό/μ’‹μ•„ν•΄  -> attention value 계산,

쿼리가 토끼λ₯Ό μΌλ•Œ ν‚€λŠ” λ‚˜λŠ”/토끼λ₯Ό/ν‚€μ›Œ/λͺ¨λ“ /μ‚¬λžŒμ΄/κ·Έλ₯Ό/μ’‹μ•„ν•΄  -> attention value 계산,,,, λ°˜λ³΅ν•˜λŠ” μ…€ν”„μ–΄νƒ μ…˜μ„ ν•˜λŠ” 것이닀 . 

λ¬Όλ‘  1νŽΈμ—μ„œ μ„€λͺ…ν–ˆλ˜ κ²ƒμ²˜λŸΌ 쿼리,ν‚€ 벨λ₯˜ λ§Œλ“€κΈ°λΆ€ν„° μ‹œμž‘μ΄λ‹€!

 

Feed Forward

Feed Forward NN = FFNN이라고도 ν•œλ‹€. (ν”Όλ“œν¬μ›Œλ“œ λ‰΄λŸ΄λ„€νŠΈμ›Œν¬)

μ•žμ„œ λ©€ν‹°ν—€λ“œ μ–΄νƒ μ…˜μ˜ κ°œλ³„ 좜λ ₯ 벑터듀을 가지고 κ³„μ‚°ν•œλ‹€. 

 

Feed Forward 계산 κ³Όμ •

μž…λ ₯μΈ΅, 은닉측, 좜λ ₯측을 가진 μ‹ κ²½λ§μœΌλ‘œ, x에 ν•΄λ‹Ήν•˜λŠ” 가쀑차듀을 κ³±ν•œ 합에 편ν–₯을 더해 은닉측을 μƒμ„±ν•˜κ³ , ν™œμ„±ν•¨μˆ˜μΈ ReLUλ₯Ό ν†΅κ³Όμ‹œν‚¨ 값을 좜λ ₯으둜 ν•œλ‹€. (νŠΈλžœμŠ€ν¬λ¨Έμ—μ„œ ν™œμ„±ν•¨μˆ˜λŠ” ReLU이닀)

λ λ£¨ν•¨μˆ˜λŠ” μ–‘μˆ˜μž…λ ₯은 κ·ΈλŒ€λ‘œ 좜λ ₯ν•˜κ³ , μŒμˆ˜μž…λ ₯은 0으둜 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. f(x) = max(0,x)

 

python으둜 κ΅¬ν˜„ν•΄λ³΄λ©΄ λ‹€μŒκ³Ό κ°™λ‹€. 

b1,b2=1,-1

x= torch.tensor([2,1])

w1 = torch.tensor([[3,2,-4],[2,-3,1]])

w2 = torch.tensor([[3,4],[-3,5],[1,-1]])

hidden = torch.matmul(x,w1)+b1

h = torch.nn.functional.relu(hidden)

y = torch.matmul(h,w2)+b2

 

참고둜 νŠΈλžœμŠ€ν¬λ¨Έμ—μ„œλŠ” μ€λ‹‰μΈ΅μ˜ λ‰΄λŸ°κ°œμˆ˜(=차원 수)λ₯Ό μž…λ ₯측의 4배둜 μ„€μ •ν•œλ‹€. κ°€λ Ή FFNN의 μž…λ ₯ 젝터가 768차원이라면, 은닉측은 12048μ°¨μ›μ΄μ—ˆλ‹€κ°€ 좜λ ₯μΈ΅μ—μ„œ λ‹€μ‹œ 768μ°¨μ›μœΌλ‘œ 쀄어든닀. 

 

residual connection μž”μ°¨ μ—°κ²°

κ±΄λ„ˆλ›°κΈ° 경둜λ₯Ό ν•˜λ‚˜ λ‘”λ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€. μ΄λ ‡κ²Œ!

μ΄λ ‡κ²Œ ν•˜λ©΄ 뭐가 μ’‹μ„κΉŒ?

경둜λ₯Ό λ‹€μ–‘ν•˜κ²Œ λ‘ μœΌλ‘œμ¨ ν•™μŠ΅μ΄ λ¬΄μžλΉ„ν•˜κ²Œ 길어짐을 λ°©μ§€ν•˜κ³  μ’€ 더 쉽도둝 ν•œλ‹€. 

 

Layer Normalization λ ˆμ΄μ–΄ μ •κ·œν™”

λ―Έλ‹ˆλ°°μΉ˜ λ‹¨μœ„μ˜ μΈμŠ€ν„΄μŠ€(x)λ³„λ‘œ 평균을 λΉΌμ£Όκ³  ν‘œμ€€νŽΈμ°¨λ‘œ λ‚˜λˆ  μ •κ·œν™” ν•˜λŠ” 방법이닀. 

 

***λ…Όλ¬Έμ—μ„œλŠ” μ΄λŸ¬ν•œ 인코더 블둝을 6개, 디코더 블둝을 6개 μŒ“μ•˜λ‹€. 6λ²ˆμ”© λ°˜λ³΅ν–ˆλ‹€λŠ” 것이닀. 이 블둝은 λͺ‡κ°œλ₯Ό 더 μŒ“μ„ μˆ˜λ„, 덜 μŒ“μ„ μˆ˜λ„ μžˆλ‹€!

 

트랜슀포머의 디코더

λ§ˆμ°¬κ°€μ§€λ‘œ ν•œκ΅­μ–΄-> μ˜μ–΄ λ²ˆμ—­μ„ μˆ˜ν–‰ν•œλ‹€κ³  ν• λ•Œ, 

디코더 μΈν’‹μœΌλ‘œ μ˜μ–΄ λ¬Έμž₯을 λ„£μ–΄ μ€€λ‹€. 'I have a rabbit. Everyone likes him.'

Masked Multi-Head Attention

μ•žμ„œ 봀던 인코더와 λΉ„μŠ·ν•œ λ©€ν‹°ν—€λ“œ μ–΄νƒ μ…˜(μ…€ν”„μ–΄νƒ μ…˜)이닀. 

차이점 1. 쿼리와 ν‚€κ°€ μ˜μ–΄ λ¬Έμž₯μ΄λΌλŠ” 점

차이점 2. masked

             - '<s>I have a rabbit. Everyone likes him.</s>'μ—μ„œ <s>κ°€ 주어지면 I λ₯Ό λ§žνžˆλ„λ‘ ν•™μŠ΅μ΄ λ˜μ–΄μ•Ό ν•˜λŠ”λ° μ…€ν”„μ–΄νƒ μ…˜μœΌλ‘œ  미리 λ‹€ μ•Œλ €μ£Όλ©΄ ν•™μŠ΅μ— 도움이 ν•˜λ‚˜λ„ μ•ˆλ¨ λ”°λΌμ„œ <s>κ°€ 주어지면 I λΆ€ν„°λŠ” λ‹€ λ§ˆμŠ€ν‚Ήν•˜μ—¬ Iλ₯Ό λ§žνžˆλ„λ‘ν•˜κ³ , <s> I κ°€ 주어지면 λ’€μ—λŠ” λ‹€ λ§ˆμŠ€ν‚Ήν•˜κ³  <s> I 둜 have μ˜ˆμΈ‘ν•˜λ„λ‘ ν•™μŠ΅ν•˜κ³ .... λ°˜λ³΅ν•œλ‹€. 

 

Multi-Head Attention 

- μ…€ν”„μ–΄νƒ μ…˜μ΄ μ•„λ‹ˆλ‹€! 제일 ν—·κ°ˆλ Έλ˜ λΆ€λΆ„

μ—„μ—°νžˆ λ§ν•˜μžλ©΄ cross attention라고 ν•œλ‹€. μžμ„Ένžˆ 보면 ν™”μ‚΄ν‘œκ°€ μΈμ½”λ”μ—μ„œ μ˜€λŠ” 것을 μ•Œ 수 μžˆλ‹€. 쿼리에 μ˜μ–΄, 킀에 ν•œκ΅­μ–΄ λ¬Έμž₯ 배치 , μΈμ½”λ”μ—μ„œ λ„˜μ–΄μ˜¨ μ†ŒμŠ€μ–Έμ–΄(ν•œκ΅­μ–΄) λ¬Έμž₯ 정보와 디코더에 타깃문μž₯의 μ‹œμž‘μ„ μ•Œλ¦¬λŠ” 토큰 <s>λ₯Ό λ„£μ–΄ 타깃언어(μ˜μ–΄)의 첫떄 토큰 생성, 이전에 μƒμ„±λ˜ 타킷언어 토큰 μ‹œν€€μŠ€λ₯Ό 디코더에 λ„£μ–΄ λ§Œλ“  μ •λ³΄λ‘œ λ‹€μŒ 토큰을 μƒμ„±ν•œλ‹€. μƒμ„±λœ λ¬Έμž₯ 길이가 μΆ©λΆ„ν•˜κ±°λ‚˜ λ§ˆμ§€λ§‰μ„ μ•Œλ¦¬λŠ” 토큰 </s>κ°€ λ‚˜μ˜¬λ•ŒκΉŒμ§€ 이 과정은 λ°˜λ³΅λœλ‹€. 

 

 


 

Q1. νŠΈλžœμŠ€ν¬λ¨Έμ—μ„œ λ©€ν‹°ν—€λ“œ μ–΄νƒ μ…˜ = μ…€ν”„ μ–΄νƒ μ…˜μ΄λ‹€?

μ•„λ‹ˆλ‹€! λ””μ½”λ”μ—μ„œ λ©€ν‹°ν—€λ“œμ–΄νƒ μ…˜(Decoder-encoder attention)은 μ…€ν”„ μ–΄νƒ μ…˜μ΄ μ•„λ‹Œ 크둜슀 μ–΄νƒ μ…˜μ΄λ‹€

 

λ°˜μ‘ν˜•