λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
1️⃣ AI•DS/πŸ“’ λ”₯λŸ¬λ‹

[인곡지λŠ₯] Training CNN

by isdawell 2022. 4. 26.
728x90

 

πŸ“Œ ꡐ내 '인곡지λŠ₯' μˆ˜μ—…μ„ 톡해 κ³΅λΆ€ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•œ κ²ƒμž…λ‹ˆλ‹€. 

 

 

1️⃣  볡슡


 

β‘  FC backpropagation 

 

 

 

 

πŸ‘‰ dy(L) μ—μ„œ dz(L+1) 이 μ‚½μž…λ˜λŠ” λΆ€λΆ„ 이해할 것! 

 

πŸ’¨ dy(L) = (0-0t) * f'(zk) * W = dz(L+1) * W

πŸ’¨ dz(L+1) = (0-0t) * f'(zk) = dy(L+1) * f'(zk) 

πŸ’¨ μ΅œμ’… 끝단 layer dy(L+1) = dC/dy(L+1) = d {1/2*(0-0t)^2} / dy(L+1) = d {1/2*(0-0t)^2} / d0t = (0-0t)

 

 

 

 

πŸ‘» by chain rule 

 

  • activation gradient : dL / dy(L) = local gradient * weight 
  • local graidnet : dL / dz(L) 
  • weight gradient : dL / dW(L) = local gradient * input 

 

⭐ activation gradient κ°€ λ’€ λ ˆμ΄μ–΄μ—μ„œλΆ€ν„° μ•ž λ ˆμ΄μ–΄λ‘œ μ „λ‹¬λ˜κ³  κ·Έλ₯Ό 톡해 κ³„μ‚°λœ local gradient λ₯Ό  μ΄μš©ν•΄ weight gradient λ₯Ό κ΅¬ν•˜λŠ” κ³Όμ • μ΄ν•΄ν•˜κΈ° 

 

⭐ Transpose 둜 차원 λ§žμΆ°μ£ΌλŠ”κ±° μžŠμ§€ μ•ŠκΈ° 

 

 

 

β‘‘ CONV forward in Python

 

πŸ‘» CONV μ—°μ‚° κΈ°λ³Έ (in 3D conv)

 

  • input channel = filter channel 
  • filter 의 개수 = output channel 

 

  • Output feature map 의 크기 κ΅¬ν•˜λŠ” 곡식 
    • W2 = (W1 - F + 2P) / S +1 
    • H2 = (H1 - F + 2P) / S +1 

 

  • Maxpooling μ—°μ‚° κ²°κ³Ό 
    • (W1 - Ps) / S + 1
    • Ps λŠ” pooling size 

 

 

πŸ‘» Alexnet 

 

 

  • Convolution (feature extraction) : filter 에 μƒμ‘ν•˜λŠ” ν”Όμ²˜λ₯Ό μ΄λ―Έμ§€μ—μ„œ λ½‘μ•„λ‚΄λŠ” κ³Όμ • 
  • Dense layer (classification) : μΆ”μΆœλœ ν”Όμ²˜ 데이터 λΆ„ν¬μ—μ„œ linear classification 을 μˆ˜ν–‰ 

 

 

πŸ‘» python 으둜 CNN forward μ—°μ‚° κ΅¬ν˜„

 

 

 

  • O : output , W : weight (=filter 의 μ›μ†Œκ°’) , I : input , S : stride , B : bias , K : filter (ν•„ν„° ν•˜λ‚˜λ₯Ό 가리킴)
  • Total Cost : W2 * H2 * K * C * F * F 

 

 

 


 

2️⃣ CNN backpropagation


 

β‘  CNN backpropagation 

 

(1) forward ex with C=1, K=1, S=1, P=0 

 

 

πŸ’¨ μ—°μ‚° μ˜ˆμ‹œ : O(00) κ΅¬ν•˜λŠ” κ³Όμ • 

 

  • x=0, y=0 이고 (p,q) → (0,0), (1,0), (0,1), (1,1) 에 λŒ€ν•΄ 연산을 μˆ˜ν–‰ν•˜λ©΄ i00*k00 + i10*k10 + i01*k01 + i11*k11 의 κ²°κ³Όκ°€ μ–»μ–΄μ§„λ‹€. 

 

 

(2) backward

 

  • FC layer 의 μ—­μ „νŒŒ κ³Όμ •κ³Ό μœ μ‚¬ν•˜λ‹€. (by chain rule) 

 

 

πŸ’¨ dO/dI 와 dO/dk λ₯Ό κ΅¬ν•˜λŠ” 것이 관건! 

 

 

 

(2)-a. Find dO/dk

 

β—Ύ a. dO / dK

 

 

β—Ύ b : dL / dK

 

 

β—Ύ c. aλ‹¨κ³„μ—μ„œ κ΅¬ν•œ κ²°κ³Όλ₯Ό λŒ€μž…

 

 

 

😎 loss 에 λŒ€ν•œ kernel (weight) gradient κ²°κ³ΌλŠ”

input κ³Ό activation gradient dL/dO 의 ν•©μ„±κ³± μ—°μ‚°κ³Ό κ°™λ‹€.

 

 

 

 

 

 

(2)-b. Find dO/dI

 

β—Ύ a. dO / dI

 

 

 

 

β—Ύ b. dL / dI

 

 

β—Ύ c. aλ‹¨κ³„μ—μ„œ κ΅¬ν•œ κ²°κ³Όλ₯Ό λŒ€μž… : stride 둜 연산을 따라가보면 ikk κ°€ 영ν–₯을 μ£ΌλŠ” output 에 λŒ€ν•΄μ„œλ§Œ k 값이 μ‚΄μ•„λ‚¨λŠ” 것을 확인해볼것!

 

 

😎 loss 에 λŒ€ν•œ input gradient κ²°κ³ΌλŠ”

μ›μ†Œ 값이 180 도 λ°©ν–₯으둜 μœ„μΉ˜ν•œ  weight 와

activation gradient dL/dO 의 ν•©μ„±κ³± μ—°μ‚°κ³Ό κ°™λ‹€.

 

 

 

(2)-c. summary 

 

μ—­μ „νŒŒλ₯Ό 톡해 λͺ¨λ“  layer 에 λŒ€ν•œ weight gradient λ₯Ό ꡬ할 수 있고 weight update λ₯Ό μ§„ν–‰ν•  수 있게 λœλ‹€.

 

 

β‘‘ Maxpooling backpropagation 

 

(1) A와 B에 λŒ€ν•œ max μ—°μ‚°μ˜ μ—­μ „νŒŒ ꡬ해보기 

 

 

  • dA : Aκ°€ B 보닀 클 λ•Œ O=A κ°€ 되고, A에 λŒ€ν•΄ λ―ΈλΆ„ν•˜λ©΄ 1 (dO) κ°€ λœλ‹€.
  • dB : Bκ°€ A 보닀 클 λ•Œ O=B κ°€ 되고, B에 λŒ€ν•΄ λ―ΈλΆ„ν•˜λ©΄ 1 (dO) κ°€ λœλ‹€. 
  • 즉, max 에 ν•΄λ‹Ήν•˜λŠ” κ°’μ—λ§Œ output gradient κ°€ μ „λ‹¬λœλ‹€. 

 

 

(2) maxpooling 에 λŒ€ν•œ μ—­μ „νŒŒ 

 

  • (1) μ—μ„œ λ„μΆœλœ 아이디어λ₯Ό λ°”νƒ•μœΌλ‘œ λ™μΌν•˜κ²Œ 적용 

 

μ΅œλŒ€κ°’μ΄ μ•„λ‹Œ 뢀뢄은 λͺ¨λ‘ 0

 

  • forward μ—μ„œ μ΅œλŒ€κ°’μ— ν•΄λ‹Ήλ˜λŠ” μ›μ†Œμ˜ μœ„μΉ˜λ₯Ό κΈ°μ–΅ν•΄λ‘μ—ˆλ‹€κ°€ backward μ—μ„œ κΈ°μ–΅ν•΄λ‘” μœ„μΉ˜μ—λ§Œ output gradient λ₯Ό μ „λ‹¬ν•œλ‹€. 

 

 

 

β‘’ batch gradient descent in CNN

 

1. 맀우 μž‘μ€ 숫자둜 weight 와 bias 의 μ΄ˆκΈ°κ°’μ„ μ„€μ •ν•œλ‹€.

2. For the ⭐ entire training samples : 
   a. Forward propagation : calculate the batch of output values 
   b. Compute Loss
   c. Backpropagate errors through network 
   d. Update weights and biases 

3. network κ°€ 잘 ν›ˆλ ¨λ λ•ŒκΉŒμ§€ 2번 과정을 λ°˜λ³΅ν•œλ‹€. 

 

 

 

κ·ΈλŸ¬λ‚˜ 전체 데이터셋에 λŒ€ν•΄ ν›ˆλ ¨μ„ μ§„ν–‰ν•˜λ©΄

ν•œλ²ˆ weight update μ‹œ 전체 데이터 개수만큼 forward λ₯Ό ν•΄μ•Όν•˜λ―€λ‘œ

μ‹œκ°„μ΄ μ˜€λž˜κ±Έλ¦°λ‹€. (πŸ‘€ μ‹€μ œλ‘œ μ΄λ ‡κ²ŒλŠ” μ•ˆν•¨)

 

 

 

β‘£ Stochastic gradient descent in CNN

 

(1) SGD

 

1. 맀우 μž‘μ€ 숫자둜 weight 와 bias 의 μ΄ˆκΈ°κ°’μ„ μ„€μ •ν•œλ‹€.

2. For ⭐ a mini-batch of randomly chosen training samples : 
   a. Forward propagation : calculate the mini-batch of output values 
   b. Compute Loss 
   c. Backpropagate errors through network 
   d. Update weights and biases 

3. 1 epoch, 즉 전체 ν›ˆλ ¨μ…‹μ„ λͺ¨λ‘ κ±°μΉ λ•ŒκΉŒμ§€ 2번 과정을 λ°˜λ³΅ν•œλ‹€. 

4. network κ°€ 잘 ν›ˆλ ¨λ  λ•ŒκΉŒμ§€ 2번과 3번 과정을 λ°˜λ³΅ν•œλ‹€. 

 

  • λžœλ€ν•˜κ²Œ mini - batch ν›ˆλ ¨ 데이터셋을 μΆ”μΆœν•œλ‹€. μ΄λ•Œ 이전 단계에 μ‚¬μš©ν•œ λ°μ΄ν„°λŠ” μ œμ™Έν•œλ‹€. 
  • λ―Έλ‹ˆλ°°μΉ˜ 크기 만큼의 ν›ˆλ ¨ 데이터λ₯Ό 가져와 그만큼의 κ°€μ€‘μΉ˜ μ—…λ°μ΄νŠΈλ₯Ό μ§„ν–‰ν•œλ‹€. 
  • ν•œ 에포크 λ‹Ή λ―Έλ‹ˆλ°°μΉ˜ 개수만큼의 κ°€μ€‘μΉ˜ μ—…λ°μ΄νŠΈκ°€ λ°œμƒν•œλ‹€. 

 

 

 

 

(2) SGD vs gradient descent 

 

 

일반적인 gradient descent λŠ” ν›ˆλ ¨ 데이터 전체에 λŒ€ν•΄ forward λ₯Ό ν•˜κ³  loss function 을 κ΅¬ν–ˆλ˜ λ°˜λ©΄μ— sgd λŠ” λ―Έλ‹ˆλ°°μΉ˜ λ‹¨μœ„λ‘œ κ°€μ€‘μΉ˜ μ—…λ°μ΄νŠΈλ₯Ό μ§„ν–‰ν•˜μ˜€λ‹€.

 

 

 

πŸ‘€ SGDκ°€ GD 보단...

 

  1. ν›ˆλ ¨ 속도가 λΉ λ₯΄λ‹€. 
  2. randomness 에 μ˜ν•΄μ„œ local min μœΌλ‘œλΆ€ν„° λΉ μ Έλ‚˜μ˜¬ κ°€λŠ₯성이 λ†’μ•„ global min 에 도달할 수 μžˆμ–΄ μ΅œμ’… μ„±λŠ₯이 μ’‹κ²Œ λ‚˜μ˜€λŠ” κ²½ν–₯이 μžˆλ‹€. 
728x90

λŒ“κΈ€