๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Deep Learning/2023 DL ๊ธฐ์ดˆ ์ด๋ก  ๊ณต๋ถ€

[๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋”ฅ๋Ÿฌ๋‹ 1] chap6(ํ•™์Šต ๊ด€๋ จ ๊ธฐ์ˆ ๋“ค)

by ์ œ๋ฃฝ 2023. 7. 8.
728x90
๋ฐ˜์‘ํ˜•

 

 

6-1) ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐฑ์‹ 
  • ์‹ ๊ฒฝ๋ง ํ•™์Šต์˜ ๋ชฉ์ : ์†์‹ค ํ•จ์ˆ˜ ๊ฐ’์„ ๋‚ฎ์ถ”๋Š” ์ตœ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐพ๊ธฐ!
1. ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•(SGD)
  • ํ•œ๋ฒˆ์— ๋ฏธ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ํ•œ ์ง€์ ์—์„œ ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ตฌํ•œ ํ›„, ๊ธฐ์šธ๊ธฐ๊ฐ€ ๊ฐ์†Œํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ๋‚ด๋ ค๊ฐ€๋Š” ๋ฐฉ๋ฒ•
  • W- ํ•™์Šต๋ฅ ๊ณผ W์— ๋Œ€ํ•œ ์†์‹ค ํ•จ์ˆ˜์˜ ๊ธฐ์šธ๊ธฐ ๊ฐ’์˜ ๊ณฑ

⇒ SGD์˜ ๋‹จ์ : ๋น„๋“ฑ๋ฐฉ์„ฑ ํ•จ์ˆ˜์—์„œ๋Š” ๋น„ํšจ์œจ์ 

  • ๋น„๋“ฑ๋ฐฉ์„ฑ ํ•จ์ˆ˜ : ๊ฐ ์œ„์น˜์—์„œ์˜ ๊ธฐ์šธ๊ธฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ง€์ ์ด ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ ์—ฌ๋Ÿฌ๊ฐœ.
  • ๋“ฑ๋ฐฉ์„ฑ: ์–ด๋Š ๋ฐฉํ–ฅ์—์„œ ๋ณด์•„๋„ ๋˜‘๊ฐ™์€ ์„ฑ์งˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ex) ํ™€๋กœ๊ทธ๋žจ(๋ณด๋Š” ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ด๋Š”) ⇒ ๋น„๋“ฑ๋ฐฉ์„ฑ
  • ๋“ฑ๋ฐฉ์„ฑ์˜ ์˜ˆ์‹œ: ๋ชจ๋“  ์ขŒํ‘œ์— ๋Œ€ํ•ด์„œ ๊ธฐ์šธ๊ธฐ๋Š” ํ•ญ์ƒ ์ค‘์•™์„ ๊ฐ€๋ฅดํ‚ด
  • ๋น„๋“ฑ๋ฐฉ์„ฑ์˜ ์˜ˆ์‹œ: ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ์ง€์ ์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€
  • y์ถ• ๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ, ํผ
  • x์ถ• ๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ ์ž‘์Œ
  • ⇒ ์™”๋‹ค๋ฆฌ ๊ฐ”๋‹ค๋ฆฌ ํ•˜๋Š” ํญ์ด ์ปค์ ธ๋ฒ„๋ฆผ ⇒ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆผ
  • ์ง€๊ทธ์žฌ๊ทธ๋กœ ์›€์ง์ด๋Š” ์ด์œ : ์ตœ์†Ÿ๊ฐ’์€ 0,0 ์ผ ๋•Œ ์ด์ง€๋งŒ, ๋น„๋“ฑ๋ฐฉ์„ฑ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ, ๊ธฐ์šธ๊ธฐ๋“ค์ด ์ตœ์†Ÿ๊ฐ’ 0,0์„ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š์Œ → ์ง€๊ทธ์žฌ๊ทธ๋กœ(์ง„๋™์ด ์‹ฌํ•˜๋‹ค)
  • ๊ณก๋ฉด์˜ ๊ฒฝ์šฐ, saddle point(์•ˆ์žฅ์ ) ์—์„œ ํ•™์Šต ์ข…๋ฃŒ( ์ตœ๋Œ“๊ฐ’์ธ ์ตœ์†Ÿ๊ฐ’์ธ์ง€ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•˜๊ณ  ํ•™์Šต ์ข…๋ฃŒ)
  • ๋ฌด์ž‘์ • ๊ธฐ์šธ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค๋Š” ๋‹จ์ˆœํ•œ ⇒ ๋‹จ์ !
  • ์ดˆ๋ก์ƒ‰์—์„œ๋Š” ์ตœ๋Œ“๊ฐ’, ํŒŒ๋ž€์ƒ‰์—์„œ๋Š” ์ตœ์†Ÿ๊ฐ’
2. ๋ชจ๋ฉ˜ํ…€(Momentum) (๊ด€์„ฑ ํ™œ์šฉ)

๋Š๋ฆฐ ํ•™์Šต ์†๋„/ saddle point์—์„œ ํ•™์Šต ์ข…๋ฃŒ/ ์ง„๋™์ด ์‹ฌํ•œ ์  (SGD์˜ ๋‹จ์  ๋ณด์™„)

  • ์šด๋™๋Ÿ‰์„ ๋œปํ•˜๋Š” ๋‹จ์–ด
  • p(์šด๋™๋Ÿ‰)= m(์งˆ๋Ÿ‰) * v(์†๋„) → ์งˆ๋Ÿ‰์„ 1๋กœ, ์šด๋™๋Ÿ‰์„ ์†๋„๋กœ๋งŒ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๊ฒฝ์‚ฌ์ง„ ๊ณณ์—์„œ ๋Œ์„ ๊ตด๋ฆฌ๋ฉด ๊ณ„์†ํ•ด์„œ ์•„๋ž˜๋กœ ๊ตด๋Ÿฌ๊ฐ€๋ ค๋Š” ์„ฑ์งˆ
  • ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์šฉ์ด( ๊ณ„์† ๋‚ด๋ ค๊ฐ€๋ ค๋Š” ์„ฑ์งˆ์ด ์žˆ๊ธฐ์— ์ตœ์†Ÿ๊ฐ’ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ)
  • ์ฒ˜์Œ v๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”
  • ๊ธฐ์šธ๊ธฐ ๋ฐฉํ–ฅ์œผ๋กœ ํž˜์„ ๋ฐ›์•„ ์›€์ง์ด๋Š”.
  • av: ๋ฌผ์ฒด๊ฐ€ ์•„๋ฌด๋Ÿฐ ํž˜์„ ๋ฐ›์ง€ ์•Š์„ ๋•Œ ํ•˜๊ฐ•์‹œํ‚ค๋Š” ์—ญํ• (๋ฌผ๋ฆฌ์—์„œ๋Š” ๊ณต๊ธฐ ์ €ํ•ญ์„ ๋œปํ•จ)
class Momentum:      def __init__(self, lr=0.01, momentum=0.9):         self.lr = lr         self.momentum = momentum         self.v = None              def update(self, params, grads):         if self.v is None:             self.v = {}             for key, val in params.items():                                                 self.v[key] = np.zeros_like(val)                          for key in params.keys():             self.v[key] = self.momentum*self.v[key] - self.lr*grads[key]              params[key] += self.v[key]
  • ์ง€๊ทธ์žฌ๊ทธ ์ •๋„๊ฐ€ ๋œํ•ด์ง
  • ๊ณ„์† ๋‚ด๋ ค๊ฐ€๋Š” ์„ฑ์งˆ์„ ๋ณด์ผ๊ฒฝ์šฐ, ์ญ‰ ๋‚ด๋ ค๊ฐ€๋„๋ก( ์ตœ์†Ÿ๊ฐ’ ์ฐพ๋Š” ๊ฒฝ์šฐ์—์„œ๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ)
  • ๊ด€์„ฑ์„ ํ™œ์šฉํ•ด ๊ทน์†Ÿ๊ฐ’์œผ๋กœ๋ถ€ํ„ฐ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ.
  • overshoooting ๋ฌธ์ œ ๋ฐœ์ƒ
    • ๊ฒฝ์‚ฌ๊ฐ€ ๊ฐ€ํŒŒ๋ฅธ ๊ณณ์„ ๋น ๋ฅธ ์†๋„๋กœ ๋‚ด๋ ค์˜ค๋‹ค ๊ด€์„ฑ์„ ์ด๊ธฐ์ง€ ๋ชปํ•˜๊ณ  ์ตœ์†Œ ์ง€์ ์„ ์ง€๋‚˜์ณ ๋ฒ„๋ฆฌ๋Š” ํ˜„์ƒ
    • ๊ทธ๋ ˆ๋””์–ธํŠธ๊ฐ€ ์™„๋งŒํ•˜๋‹ค๋ฉด ์ตœ์ ํ•ด๋ฅผ ์ž˜ ์ฐพ๊ฒ ์ง€๋งŒ, ๊ฐ€ํŒŒ๋ฅผ์ˆ˜๋ก overshooting๋  ๊ฐ€๋Šฅ์„ฑ์ด ํผ ⇒ ์ด๋ฅผ ๋ณด์™„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด Nesterov momentum
    • Nesterov mementum: ์˜ค๋ฒ„์ŠˆํŒ…์„ ๋ง‰๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์†๋„๋กœ ํ•œ ๊ฑธ์Œ ๋ฏธ๋ฆฌ ๊ฐ€๋ณด๊ณ  ์˜ค๋ฒ„ ์ŠˆํŒ…์ด ๋œ ๋งŒํผ ๋‹ค์‹œ ๋‚ด๋ฆฌ๋ง‰๊ธธ๋กœ ๊ฐ€๋Š” ๋ฐฉ์‹.
3. AdaGrad (ํ•™์Šต๋ฅ  ๊ฐ์†Œ)
  • ์ด์ „ ๊ฒฝ์‚ฌ๋„๋ฅผ ๋ˆ„์ ํ•œ๊ฑธ ๊ฐ€์ง€๊ณ  ๊ณฑํ•ด์„œ ์ ์‘์‹œํ‚ค๋Š” ๊ฒƒ
  • ์˜ค๋ž˜๋œ ๊ฒฝ์‚ฌ๋„์™€ ์ตœ๊ทผ ๊ฒฝ์‚ฌ๋„๋ฅผ ๊ฐ™์€ ๋น„์ค‘์œผ๋กœ ์ฃผ๊ฒŒ ๋จ ⇒ ์ตœ์‹  ๊ฒฝ์‚ฌ๋„์— ์ข€ ๋” ๋น„์ค‘์„ ๋‘์ž ⇒ RMS~
  • ์‹ ๊ฒฝ๋ง ํ•™์Šต์˜ ๊ฒฝ์šฐ ํ•™์Šต๋ฅ (learning rate- ๋ณดํญ) ๊ฐ’ ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”
  • AdaGrad: ํ•™์Šต๋ฅ ์„ ๊ฐ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋งž์ถคํ˜• ๊ฐ’์„ ๋งŒ๋“ค์–ด์คŒ( ํ•™์Šต๋ฅ ์„ ์„œ์„œํžˆ ๋‚ฎ์ถฐ์ฃผ๋Š” ๋ฐฉ๋ฒ•)
  • learning rate decay (ํ•™์Šต๋ฅ  ๊ฐ์†Œ)
    • ์ดˆ๋ฐ˜์—๋Š” ํฐ ํญ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ๋‚ด๋ ค๊ฐ€๊ณ , ์ ์ฐจ ํ•™์Šต๋ฅ ์„ ์ค„์—ฌ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ๋‚ด๋ ค๊ฐ€๋Š” ๋ฐฉ๋ฒ•
  • adaptive learning rate (์ ์‘์  ํ•™์Šต๋ฅ )
    • ๊ฒฝ์‚ฌ๊ฐ€ ๊ฐ€ํŒŒ๋ฅผ ๋•Œ๋Š” ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ๋‚ด๋ ค๊ฐ€์•ผํ•˜๊ณ , ์™„๋งŒํ•  ๋•Œ๋Š” ์•„๊นŒ๋ณด๋‹ค ๋” ์„ฑํผ์„ฑํผ ์ด๋™ํ•  ๊ฒƒ์ž„. ⇒ ์ ์‘์  ํ•™์Šต

     

 

 

  • h: ๊ธฐ์šธ๊ธฐ์˜ ์ œ๊ณฑ
  • h์— ์˜ํ•ด ํ•™์Šต๋ฅ ์ด ๋ณ€๋™๋จ
  • ๊ธฐ์šธ๊ธฐ(๋ณ€๋™์ด ํด์ˆ˜๋ก)๊ฐ€ ํด์ˆ˜๋ก lr์€ ๋‚ฎ์•„์ง(sqrt(h))
  • y์ถ• ๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ, ๊ธฐ์šธ๊ธฐ๊ฐ€ ์ปค์„œ ์ฒ˜์Œ์—๋Š” ํฌ๊ฒŒ ์›€์ง์ž„
  • ์ด ํฐ ์›€์ง์ž„์ด h๋ฅผ ํฌ๊ฒŒ ๋งŒ๋“ฌ(๊ธฐ์šธ๊ธฐ์˜ ์ œ๊ณฑ) ⇒ ์ฒ˜์Œ์—๋Š” ํฌ๊ฒŒ ์›€์ง์ด์ง€๋งŒ, h๋ฅผ ๊ฐฑ์‹  ์‹œํ‚ค๋ฉด์„œ ํ•™์Šต๋ฅ (๋ณดํญ)์„ ์ž‘๊ฒŒ
  • → y์ถ• ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐฑ์‹  ๊ฐ•๋„๊ฐ€ ๋น ๋ฅด๊ฒŒ ์•ฝํ•ด์ง. ์ง€๊ทธ์žฌ๊ทธ ์›€์ง์ž„๋„ ์ค„์–ด๋“ฆ(lr ํšจ๊ณผ)
  • ๊ฒฝ์‚ฌ๊ฐ€ ์™„๋งŒํ•  ๋•Œ๋Š” ์ตœ์ ํ•ด ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๊ธฐ์— ํฐ ํญ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • ๊ฒฝ์‚ฌ๊ฐ€ ๊ฐ€ํŒŒ๋ฅผ ๋•Œ ํฐ ํญ์œผ๋กœ ์ด๋™ํ•  ๊ฒฝ์šฐ, ์ตœ์ ํ™” ๊ฒฝ๋กœ๋ฅผ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋จ(์ตœ์†Œ ์ง€์ ์„ ๋ฒ—์–ด๋‚˜๋Š”)
๋งŽ์ด ๋ณ€ํ™”ํ•œ ๋ณ€์ˆ˜๋Š” ์ตœ์ ํ•ด์— ๊ทผ์ ‘ํ–ˆ์„ ๊ฑฐ๋ž€ ๊ฐ€์ • ํ•˜์— ์ž‘์€ ํฌ๊ธฐ๋กœ ์ด๋™ํ•˜๋ฉด์„œ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๊ฐ’์„ ์กฐ์ •, ์ ๊ฒŒ ๋ณ€ํ™”ํ•œ ๋ณ€์ˆ˜๋“ค์€ ํ•™์Šต๋ฅ ์„ ํฌ๊ฒŒ ํ•ด ๋น ๋ฅด๊ฒŒ ์˜ค์ฐจ ๊ฐ’์„ ์ค„์ด๊ณ ์ž ํ•จ.
class AdaGrad:     def __init__(self, lr=0.01):         self.lr = lr         self.h = None              def update(self, params, grads):         if  self.h is None:             self.h = {}             for key, val in params.items():                 self.h[key] = np.zeros_like(val)                          for key in params.keys():             self.h[key] = grads[key] * grads[key]             params[key] -= self.lr * grads[key]/(np.sqrt(self.h[key] + 1e-7)
  • le-7 h๊ฐ€ 0์ผ ๋•Œ๋„ 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์‚ฌํƒœ ๋ฐฉ์ง€
  • AdaGrad์˜ ๋‹จ์  ๋ณด์™„) → RMSProp
    • ๊ธฐ์กด AdaGrad๋Š” ๊ณผ๊ฑฐ์˜ ๊ธฐ์šธ๊ธฐ์˜ ์ œ๊ณฑ์„ ๊ณ„์† ๋”ํ•˜๊ฒŒ ๋˜๋ฉด ์–ด๋Š ์ˆœ๊ฐ„ 0์ด ๋˜์–ด๋ฒ„๋ฆผ ⇒ ๊ฐฑ์‹ ์„ ํ•˜์ง€ ์•Š๊ฒŒ ๋จ.( lr์ด ์ ์  ์ž‘์•„์ง€๊ฒŒ ๋˜๋ฏ€๋กœ(๊ธฐ์šธ๊ธฐ๊ฐ€) ๊ณ„์† ๊ณฑํ•˜๊ฒŒ ๋˜๋ฉด)
    • ๊ฒฝ์‚ฌ๊ฐ€ ๋งค์šฐ ๊ฐ€ํŒŒ๋ฅธ ๊ณณ์—์„œ(๋ณ€ํ™”๊ฐ€ ํฐ ๊ฒฝ์šฐ) ํ•™์Šต์„ ํ•˜๊ฒŒ ๋˜๋ฉด, ์ดˆ๋ฐ˜๋ถ€ํ„ฐ ํ•™์Šต๋ฅ ์ด ๊ฐ์†Œํ•˜๊ฒŒ ๋จ ⇒ ์ตœ์ ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ์กฐ๊ธฐ ์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ. ⇒ ์กฐ๊ธฐ ํ•™์Šต ์ค‘๋‹จ ๋ฌธ์ œ ํ•ด๊ฒฐ= RMSProp
    • RMSProp์€ ๊ณผ๊ฑฐ์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ์žŠ๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ์šธ๊ธฐ ์ •๋ณด๋ฅผ ํฌ๊ฒŒ ๋ฐ˜์˜ ⇒ ์ง€์ˆ˜์ด๋™ํ‰๊ท 
    • ๊ณผ๊ฑฐ ๊ธฐ์šธ๊ธฐ์˜ ๋ฐ˜์˜ ๊ทœ๋ชจ๋ฅผ ๊ฐ์†Œ์‹œํ‚ด
    • RMSProp ์˜ ์žฅ์ ์€ ๋ฏธ๋ถ„๊ฐ’์ด ํฐ ๊ณณ์—์„œ๋Š” ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ ํฐ ๊ฐ’์œผ๋กœ ๋‚˜๋ˆ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ํ•™์Šต๋ฅ  ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ๋จ → ์ง„๋™ ์ค„์ด๋Š”๋ฐ ๋„์›€ ๋จ.
    • ๋ฐ˜๋ฉด ๋ฏธ๋ถ„๊ฐ’์ด ์ž‘์€ ๊ณณ์—์„œ๋Š” ์—…๋ฐ์ดํŠธ์‹œ ์ž‘์€ ๊ฐ’์œผ๋กœ ๋‚˜๋ˆ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ํ•™์Šต๋ฅ  ๋ณด๋‹ค ํฐ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ๋จ.

     

4. Adam (2+3+ ํŽธํ–ฅ ๋ณด์ •)
  • ๋ชจ๋ฉ˜ํ…€ + AdaGrad + ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํŽธํ–ฅ ๋ณด์ •๋„ ๊ฐ€๋Šฅ
  • ๋ชจ๋ฉ˜ํ…€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณ„์ˆ˜์™€ ํ•™์Šต๋ฅ ์— ๋Œ€ํ•œ ๊ณ„์ˆ˜๊ฐ€ ์‚ฌ์šฉ
  • ํ•™์Šต๋ฅ ์„ ์ค„์—ฌ๋‚˜๊ฐ€๊ณ  ์†๋„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ํ•™์Šต์˜ ๊ฐฑ์‹ ๊ฐ•๋„๋ฅผ ์ ์‘์ ์œผ๋กœ ์กฐ์ •
class Adam:      def __init__(self, lr=0.001, beta1=0.9, beta2=0.999):         self.lr = lr         self.beta1 = beta1         self.beta2 = beta2         self.iter = 0         self.m = None         self.v = None              def update(self, params, grads):         if self.m is None:             self.m, self.v = {}, {}             for key, val in params.items():                 self.m[key] = np.zeros_like(val)                 self.v[key] = np.zeros_like(val)                  self.iter += 1         lr_t  = self.lr * np.sqrt(1.0 - self.beta2**self.iter) / (1.0 - self.beta1**self.iter)                           for key in params.keys():             #self.m[key] = self.beta1*self.m[key] + (1-self.beta1)*grads[key]             #self.v[key] = self.beta2*self.v[key] + (1-self.beta2)*(grads[key]**2)             self.m[key] += (1 - self.beta1) * (grads[key] - self.m[key])             self.v[key] += (1 - self.beta2) * (grads[key]**2 - self.v[key])                          params[key] -= lr_t * self.m[key] / (np.sqrt(self.v[key]) + 1e-7)                          #unbias_m += (1 - self.beta1) * (grads[key] - self.m[key]) # correct bias             #unbisa_b += (1 - self.beta2) * (grads[key]*grads[key] - self.v[key]) # correct bias             #params[key] += self.lr * unbias_m / (np.sqrt(unbisa_b) + 1e-7)
  • Adam์˜ ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ: 3๊ฐœ
  • ํ•™์Šต๋ฅ 
  • ์ผ์ฐจ ๋ชจ๋ฉ˜ํ…€์šฉ ๊ณ„์ˆ˜ B1, 2์ฐจ: B2
  • B1์€ 0.9๋กœ, B2๋Š” 0.999
6-2) ๊ฐ€์ค‘์น˜์˜ ์ดˆ๊นƒ๊ฐ’(gradiant vanishing ํ•œ๊ณ„)
  • ์‚ฌ์šฉ ์ด์œ : ๊ฐ neuron์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ error๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๊ณ , ์ •ํ™•ํ•œ ๋ชจ๋ธ์„ ์–ป์œผ๋ ค๋ฉด ์ž‘์€ error๋ฅผ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ
  • ์‹ ๊ฒฝ๋ง์„ ํ•™์Šตํ•  ๋•Œ ๋ชจ๋ธ ์ดˆ๊ธฐํ™”๋Š” ์†์‹ค ํ•จ์ˆ˜์—์„œ ์ถœ๋ฐœ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ, ํŠนํžˆ ๊ฐ€์ค‘์น˜ ์ดˆ๊ธฐํ™”๋Š” ํ•™์Šต ์„ฑ๋Šฅ์— ํฌ๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์นจ
  • ์‹ ๊ฒฝ๋ง์˜ ๊ฐ€์ค‘์น˜๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ํ•™์Šต์ด ์ง„ํ–‰๋˜์ง€ ์•Š์Œ
  • ์‹ ๊ฒฝ๋ง์˜ ๊ฐ€์ค‘์น˜๋ฅผ 0์ด ์•„๋‹Œ ์ƒ์ˆ˜๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ๊ฐ™์€ ๊ณ„์ธต์— ์žˆ๋Š” ๋‰ด๋Ÿฐ์€ ๋งˆ์น˜ ํ•˜๋‚˜์˜ ๋‰ด๋Ÿฐ๋งŒ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™ํ•จ.
  • ๋”ฐ๋ผ์„œ ์‹ ๊ฒฝ๋ง์˜ ๊ฐ€์ค‘์น˜๋Š” ๋ชจ๋‘ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚œ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ดˆ๊ธฐํ™”ํ•จ
1. ๊ฐ€์ค‘์น˜ ๊ฐ์†Œ(weight decay)
  • ๊ฐ€์ค‘์น˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด ์ž‘์•„์ง€๋„๋ก ํ•™์Šตํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๊ฐ€์ค‘์น˜ ๊ฐ’์„ ์ž‘๊ฒŒ ํ•ด์„œ ์˜ค๋ฒ„ํ”ผํŒ…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•จ
  • ๊ฐ€์ค‘์น˜๊ฐ€ 0์ด๋ฉด ๊ฐ€์ค‘ํ•ฉ ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ 0์ด ๋จ.
  • ํ™œ์„ฑํ™” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ, ๊ฐ€์ค‘ ํ•ฉ์‚ฐ ๊ฒฐ๊ณผ์ธ 0์„ ์ž…๋ ฅ ๋ฐ›์•„ ํ•ญ์ƒ ๊ฐ™์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋จ
  • ๊ฒฐ๋ก : ์˜๋ฏธ๊ฐ€ ์—†๋‹ค
  1. (๊ฐ€์ค‘์น˜ ํฌ๊ฒŒ) ๊ฐ€์ค‘์น˜ ํ‘œ์ค€ํŽธ์ฐจ๊ฐ€ 1์ธ ์ •๊ทœ๋ถ„ํฌ๋กœ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ
  • ํ™œ์„ฑํ™” ๊ฐ’๋“ค์ด 0๊ณผ 1์— ์น˜์šฐ์ณ ์žˆ์Œ
  • (์‹œ๊ทธ๋ชจ์ด๋“œ) ์–˜๋„ค๋“ค์„ ๋ฏธ๋ถ„ํ•˜๋ฉด ๊ฒฐ๊ตญ์— 0์œผ๋กœ ๋จ. → ๊ฒฐ๊ตญ ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค ๋ฐœ์ƒ (์—ญ์ „ํŒŒ์‹œ)
  1. (๊ฐ€์ค‘์น˜ ์ž‘๊ฒŒ) ํ‘œ์ค€ํŽธ์ฐจ๋ฅผ 0.01๋กœ ํ•  ๊ฒฝ์šฐ
  • ๊ทธ๋ž˜ํ”„๊ฐ€ ๊ฑฐ์˜ ๋™์ผํ•œ ํ˜•์ƒ์„ ๋‚˜ํƒ€๋ƒ„ ⇒ ๋‰ด๋Ÿฐ์ด ๊ฑฐ์˜ ๊ฐ™์€ ๊ฐ’์„ ์ถœ๋ ฅ → ์˜๋ฏธ๊ฐ€ ์—†๋‹ค
  • ๋”ฐ๋ผ์„œ, ๊ฐ ์ธต์˜ ํ™œ์„ฑํ™” ๊ฐ’๋“ค์€ ์ ๋‹นํžˆ ๋ถ„ํฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค

 

 

6-2-1). Xavier ์ดˆ๊นƒ๊ฐ’(sigmoid, tanh)
  • ์ค‘์•™ ๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ์ขŒ์šฐ ๋Œ€์นญ → ์„ ํ˜• ํ•จ์ˆ˜๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ
  • ํ™œ์„ฑ ํ•จ์ˆ˜๋ฅผ ์„ ํ˜•์ธ ๊ฒƒ์„ ์ „์ œ๋กœ ํ•จ
  • n: ์•ž ๊ณ„์ธต์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜
  • ์‹ ๊ฒฝ๋ง์˜ ํ™œ์„ฑ ํ•จ์ˆ˜๊ฐ€ sigmoid ๊ณ„์—ด์ผ ๋•Œ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„์‚ฐ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํ˜๋Ÿฌ๊ฐ€๋Š” Xavier ์ดˆ๊ธฐํ™”๋ฅผ ์ ์šฉํ•˜๋ฉด ์ถœ๋ ฅ๊ฐ’์ด 0์ด ๋˜๊ฑฐ๋‚˜, 1๊ณผ -1๋กœ ํฌํ™”๋˜๋Š” ํ˜„์ƒ๋„ ์‚ฌ๋ผ์ง⇒ gradiant vanishing ํ˜„์ƒ๋„ ์‚ฌ๋ผ์ง
6-2-2). He ์ดˆ๊นƒ๊ฐ’(ReLU)
  • ํ™œ์„ฑํ™” ํ•จ์ˆ˜๊ฐ€ ReLU์ผ ๋•Œ Xavier ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ ์  ์ž‘์•„์ง
  • ์–‘์ˆ˜ ๊ตฌ๊ฐ„์€ ใ„ฑใ…Š์ง€๋งŒ ์Œ์ˆ˜ ๊ตฌ๊ฐ„์—๋Š” ๋น„ํ™œ์„ฑํ™” ๊ตฌ๊ฐ„์ด๋ฏ€๋กœ ๋ถ„์‚ฐ์ด ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์Œ.
  • ํ™œ์„ฑํ™” ๊ฐ’์ด 0์ด๋ฉด ๊ฒฐ๊ตญ์— ์ถœ๋ ฅ์ด 0์ด ๋จ. →์ด๋ฅผ ๋ณด์™„ํ•œ๊ฒŒ he ์ดˆ๊นƒ๊ฐ’
  • (xavier๊ณผ he์˜ ๊ณตํ†ต์ ): ๋‰ด๋Ÿฐ์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ์„ ๊ฐ™๊ฒŒ ๋งŒ๋“ค์–ด์คŒ
  • ์ฐจ์ด์ : ๋ถ„์‚ฐ์„ ๋ชจ๋ธ๋งํ•จ. ReLU ์‚ฌ์šฉ์‹œ, ์ถœ๋ ฅ์˜ ๋ถ„์‚ฐ์ด ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์ค‘์น˜์˜ ๋ถ„์‚ฐ์„ ๋‘ ๋ฐฐ๋กœ ํ‚ค์›€.
6-2-3) ๋ฐฐ์น˜ ์ •๊ทœํ™”(์ˆœ์ „ํŒŒ์—์„œ ์ ์šฉ)
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๊ฐ€ ๋‹ค๋ฅผ ๋•Œ ์‚ฌ

@ ๊ฐ ์ธต์—์„œ์˜ ํ™œ์„ฑํ™” ๊ฐ’์ด ์ ๋‹นํžˆ ๋ถ„ํฌ๋˜๋„๋ก ์กฐ์ •ํ•˜๋Š” ๊ฒƒ.

  • ๋ฐฐ์น˜ ์ •๊ทœํ™”์˜ ํ•„์š”์„ฑ
  1. ํ•™์Šต ์†๋„ ๊ฐœ์„ 
  1. ์ดˆ๊นƒ๊ฐ’์— ํฌ๊ฒŒ ์˜์ข€ x
  1. ์˜ค๋ฒ„ํ”ผํŒ… ์–ต์ œ(๋“œ๋กญ ์•„์›ƒ ๋“ฑ์˜ ํ•„์š”์„ฑ ๊ฐ์†Œ)
  • ๋ฐฐ์น˜์— ๋Œ€ํ•œ u(ํ‰๊ท ), o(๋ถ„์‚ฐ) ๊ตฌํ•œ ๋’ค, 0,1๋กœ ์ •๊ทœํ™”ํ•œ๋‹ค
  • ์ •๊ทœํ™” ํ›„, ์ ํ•ฉํ•œ ๊ฐ’์œผ๋กœ ์กฐ์ •ํ•ด๊ฐ.( ํ™•๋Œ€์™€ ์ด๋™ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰)
  • r: ํ™•๋Œ€
  • B: ์ด๋™
6-3) ์˜ฌ๋ฐ”๋ฅธ ํ•™์Šต์„ ์œ„ํ•ด
6-4-1) ์˜ค๋ฒ„ํ”ผํŒ…(์–ต์ œ ๋ฐฉ๋ฒ•: ๊ฐ€์ค‘์น˜ ๊ฐ์†Œ, ๋“œ๋กญ ์•„์›ƒ)
  • ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๊ณ  ํ‘œํ˜„๋ ฅ์ด ๋†’์€ ๋ชจ๋ธ
  • ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์„ ๋•Œ ๋ฐœ์ƒ
6-4-2) ๊ฐ€์ค‘์น˜ ๊ฐ์†Œ(weight decay)
  • ํฐ ๊ฐ€์ค‘์น˜์— ๋Œ€ํ•ด ํŒจ๋„ํ‹ฐ ๋ถ€๊ณผ
  • ํŒจ๋„ํ‹ฐ ๋ถ€๊ณผ(L1,L2,L๋ฌดํ•œ๋Œ€)
  • ๋ชจ๋“  ๊ฐ€์ค‘์น˜ ๊ฐ๊ฐ์˜ ์†์‹ค ํ•จ์ˆ˜์— 1/2*๋žŒ๋‹ค*W^2๋ฅผ ๊ณฑํ•จ
  • ๊ฐ€์ค‘์น˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ตฌํ•  ๊ฒฝ์šฐ, ๋žŒ๋‹ค*W๋ฅผ ๋”ํ•จ
  • ๋žŒ๋‹ค: ์ •๊ทœํ™” ์„ธ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜๋Š” ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ( ํฌ๊ฒŒ ์„ค์ •ํ• ์ˆ˜๋ก ํฐ ๊ฐ€์ค‘์น˜์— ๋Œ€ํ•œ ํŒจ๋„ํ‹ฐ๊ฐ€ ์ปค์ง)
6-4-3) ๋“œ๋กญ์•„์›ƒ(dropout)
  • ๋‰ด๋Ÿฐ์„ ์ž„์˜๋กœ ์‚ญ์ œํ•˜๋ฉด์„œ ํ•™์Šต์‹œํ‚ด
  • ์‚ญ์ œํ•  ๋‰ด๋Ÿฐ์„ ๋ฌด์ž‘์œ„๋กœ ์„ ์ •
  • ์•™์ƒ๋ธ” ํšจ๊ณผ๋ฅผ ๋ƒ„( ๋ฌด์ž‘์œ„๋กœ ์‚ญ์ œํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋งค๋ฒˆ ๋‹ค๋ฅธ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ํ•ด์„)
  • ์ถ”๋ก  ๋•Œ๋Š” ์‚ญ์ œํ•œ ๋น„์œจ์„ ๊ณฑํ•จ (ํ‰๊ท ๊ณผ ๊ฐ™์€ ํšจ๊ณผ)
6-4) ์ ์ ˆํ•œ ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฐพ๊ธฐ
  • ๋‰ด๋Ÿฐ ์ˆ˜, ๋ฐฐ์น˜ ํฌ๊ธฐ, ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐฑ์‹  ์‹œ์˜ ํ•™์Šต๋ฅ ๊ณผ ๊ฐ€์ค‘์น˜ ๊ฐ์†Œ
  1. ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ ํ™œ์šฉ
  1. ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ ํ™”
    • 0๋‹จ๊ณ„: ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์˜ ๋ฒ”์œ„ ์„ค์ •
    • 1๋‹จ๊ณ„: ์„ค์ •๋œ ๋ฒ”์œ„์—์„œ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋ฌด์ž‘์œ„๋กœ ์ถ”์ถœ
    • 2๋‹จ๊ณ„: 1๋‹จ๊ณ„์—์„œ ์ƒ˜ํ”Œ๋งํ•œ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์Šต, ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋กœ ์ •ํ™•๋„ ํ‰๊ฐ€( ์—ํญ์€ ์ž‘๊ฒŒ)
    • 3๋‹จ๊ณ„: 1๋‹จ๊ณ„,2๋‹จ๊ณ„๋ฅผ ํŠน์ • ํšŸ์ˆ˜ ๋ฐ˜๋ณต, ์ •ํ™•๋„์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฒ”์œ„๋ฅผ ์ขํž˜
  • ๋ฒ ์ด์ง€์•ˆ/๊ทธ๋ฆฌ๋“œ/๋žœ๋ค ์„œ์น˜

 

728x90
๋ฐ˜์‘ํ˜•