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์ธ ์ ๊ท๋ถํฌ๋ก ์ด๊ณผํ ๊ฒฝ์ฐ
- ํ์ฑํ ๊ฐ๋ค์ด 0๊ณผ 1์ ์น์ฐ์ณ ์์
- (์๊ทธ๋ชจ์ด๋) ์๋ค๋ค์ ๋ฏธ๋ถํ๋ฉด ๊ฒฐ๊ตญ์ 0์ผ๋ก ๋จ. → ๊ฒฐ๊ตญ ๊ธฐ์ธ๊ธฐ ์์ค ๋ฐ์ (์ญ์ ํ์)
- (๊ฐ์ค์น ์๊ฒ) ํ์คํธ์ฐจ๋ฅผ 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) ๋ฐฐ์น ์ ๊ทํ(์์ ํ์์ ์ ์ฉ)
- ์ ๋ ฅ ๋ฐ์ดํฐ ๋ถํฌ๊ฐ ๋ค๋ฅผ ๋ ์ฌ
@ ๊ฐ ์ธต์์์ ํ์ฑํ ๊ฐ์ด ์ ๋นํ ๋ถํฌ๋๋๋ก ์กฐ์ ํ๋ ๊ฒ.
- ๋ฐฐ์น ์ ๊ทํ์ ํ์์ฑ
- ํ์ต ์๋ ๊ฐ์
- ์ด๊น๊ฐ์ ํฌ๊ฒ ์์ข x
- ์ค๋ฒํผํ ์ต์ (๋๋กญ ์์ ๋ฑ์ ํ์์ฑ ๊ฐ์)
- ๋ฐฐ์น์ ๋ํ 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) ์ ์ ํ ํ์ดํผ ํ๋ผ๋ฏธํฐ ์ฐพ๊ธฐ
- ๋ด๋ฐ ์, ๋ฐฐ์น ํฌ๊ธฐ, ๋งค๊ฐ๋ณ์ ๊ฐฑ์ ์์ ํ์ต๋ฅ ๊ณผ ๊ฐ์ค์น ๊ฐ์
- ๊ฒ์ฆ ๋ฐ์ดํฐ ํ์ฉ
- ํ์ดํผ ํ๋ผ๋ฏธํฐ ์ต์ ํ
0๋จ๊ณ: ํ์ดํผ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ฒ์ ์ค์
1๋จ๊ณ: ์ค์ ๋ ๋ฒ์์์ ํ์ดํผํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ฌด์์๋ก ์ถ์ถ
2๋จ๊ณ: 1๋จ๊ณ์์ ์ํ๋งํ ํ์ดํผํ๋ผ๋ฏธํฐ ๊ฐ์ ์ฌ์ฉํ์ฌ ํ์ต, ๊ฒ์ฆ ๋ฐ์ดํฐ๋ก ์ ํ๋ ํ๊ฐ( ์ํญ์ ์๊ฒ)
3๋จ๊ณ: 1๋จ๊ณ,2๋จ๊ณ๋ฅผ ํน์ ํ์ ๋ฐ๋ณต, ์ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ๋ผ๋ฏธํฐ ๋ฒ์๋ฅผ ์ขํ
- ๋ฒ ์ด์ง์/๊ทธ๋ฆฌ๋/๋๋ค ์์น
728x90
๋ฐ์ํ
'Deep Learning > 2023 DL ๊ธฐ์ด ์ด๋ก ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋ 1] chap4(์ ๊ฒฝ๋ง ํ์ต) (0) | 2023.07.08 |
---|---|
[๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋ 1] chap3(์ ๊ฒฝ๋ง) (0) | 2023.07.08 |
[ํ์ด์ฌ ๋ฅ๋ฌ๋ ํ์ดํ ์น] Part2 (0) | 2023.07.08 |
[๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋ 1] chap7(ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง) (0) | 2023.07.08 |
[๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋ 1] chap8 ๋ฅ๋ฌ๋ (0) | 2023.07.08 |