[Week 2-2] ๐Ÿ“Š๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•

Jadeยท2021๋…„ 1์›” 26์ผ
0

๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech

๋ชฉ๋ก ๋ณด๊ธฐ
7/54

2์ฃผ์ฐจ ํ™”์š”์ผ

  • ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• (์ˆœํ•œ๋ง›)
  • ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• (๋งค์šด๋ง›)

๐Ÿ“‰[๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• (์ˆœํ•œ๋ง›)]

  • ๋ฏธ๋ถ„
    ๋ณ€์ˆ˜์˜ ์›€์ง์ž„์— ๋”ฐ๋ฅธ ํ•จ์ˆ˜๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ.
    ํŠน์ • ์ง€์ ์—์„œ ํ•จ์ˆ˜์˜ ์ˆœ๊ฐ„๋ณ€ํ™”์œจ (์ ‘์„ ์˜ ๊ธฐ์šธ๊ธฐ)๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    *ํŒŒ์ด์ฌ์—์„œ๋Š” sympy ๋ชจ๋“ˆ์˜ diff() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฏธ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ • ์ง€์ ์—์„œ ์ ‘์„ ์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ์•Œ๋ฉด ํ•จ์ˆ˜๊ฐ’ f(x)๋ฅผ ์ฆ๊ฐ€/๊ฐ์†Œ์‹œํ‚ค๊ธฐ ์œ„ํ•ด x๊ฐ’์„ ์–ด๋Š ์ชฝ์œผ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

ํ•ด๋‹น ์ง€์ ์—์„œ์˜ ๋ฏธ๋ถ„๊ฐ’์ด ์Œ์ˆ˜๋“  ์–‘์ˆ˜๋“  ์ƒ๊ด€์—†์ด ๋ฏธ๋ถ„๊ฐ’์„ ๋นผ ์ฃผ๋ฉด (f(x-f'(x))) ํ•จ์ˆ˜๊ฐ’์ด ๊ฐ์†Œํ•˜๊ณ , ๋ฏธ๋ถ„๊ฐ’์„ ๋”ํ•ด ์ฃผ๋ฉด (f(x+f'(x))) ํ•จ์ˆ˜๊ฐ’์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
(ํ•จ์ˆ˜์˜ ์˜ค๋ชฉ/๋ณผ๋กํ•œ ๋ชจ์–‘ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๋‹ค)

๋ฏธ๋ถ„๊ฐ’์„ ์กฐ๊ธˆ์”ฉ ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ์„œ ํ•จ์ˆ˜์˜ ๊ทน๊ฐ’์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฝ์‚ฌ ์ƒ์Šน๋ฒ• / ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋จธ์‹ ๋Ÿฌ๋‹์—์„œ๋Š” ์†์‹ค ํ•จ์ˆ˜(=์˜ค์ฐจ ํ•จ์ˆ˜, ๋น„์šฉ ํ•จ์ˆ˜)์˜ ์ตœ์†Œ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์ ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•๋งŒ ์ ์šฉํ•  ๊ฒฝ์šฐ ์ตœ์†Œ๊ฐ’์ด ์•„๋‹Œ ๊ทน์†Œ(local minima)์— ๋น ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ๋Š” ์ข€๋” ๋ณด์™„๋œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.


  • ํŽธ๋ฏธ๋ถ„
    ์ž…๋ ฅ์ด x ํ•˜๋‚˜์ธ ์ผ๋ณ€์ˆ˜ ํ•จ์ˆ˜๋Š” 2์ฐจ์› xy ๊ทธ๋ž˜ํ”„ ์œ„์— ๊ทธ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฒกํ„ฐ(์›์†Œ๊ฐ€ ๋งŽ๋‹ค)๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š” ๋‹ค๋ณ€์ˆ˜ ํ•จ์ˆ˜์˜ ๊ทธ๋ž˜ํ”„๋Š” n์ฐจ์› ๊ณต๊ฐ„ ์ƒ์— ๊ทธ๋ ค์ง„๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฑธ ๊ทธ๋ƒฅ ๋ฏธ๋ถ„ํ•˜๋ฉด x๊ฐ’์„ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค. ๋‹ค๋ณ€์ˆ˜ ํ•จ์ˆ˜์˜ ๊ฐ ๋ณ€์ˆ˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ, ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋Š” ์ƒ์ˆ˜ ์ทจ๊ธ‰ํ•˜๊ณ  ๊ทธ ์ž์‹ ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฏธ๋ถ„ํ•˜๋Š” ๊ฒƒ(๊ฐ ๋ณ€์ˆ˜์˜ ๋ณ€ํ™”์œจ์„ ๋”ฐ๋กœ๋”ฐ๋กœ ๊ตฌํ•˜๋Š” ๊ฒƒ)์„ ํŽธ๋ฏธ๋ถ„์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • gradient ๋ฒกํ„ฐ โˆ‡f
    ๋‹ค๋ณ€์ˆ˜ ํ•จ์ˆ˜ f์˜ ๊ฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ํŽธ๋ฏธ๋ถ„ํ•œ ๊ฒƒ์„ ๋ฒกํ„ฐ๋กœ ๋ชจ์•„ ๋†“์€ ๊ฑธ gradient ๋ฒกํ„ฐ๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , โˆ‡์™€ ๊ฐ™์ด ํ‘œ๊ธฐํ•œ๋‹ค. ๋ธ ๋˜๋Š” nabla๋ผ๊ณ  ์ฝ๋Š”๋‹ค.
    ๊ทธ๋ž˜๋””์–ธํŠธ ๋ฒกํ„ฐ๋Š” ๋‹ค๋ณ€์ˆ˜ ํ•จ์ˆ˜์˜ ๊ทธ๋ž˜ํ”„์—์„œ ์ˆœ๊ฐ„๋ณ€ํ™”์œจ์ด ๊ฐ€์žฅ ๋น ๋ฅธ(๊ฐ€์žฅ ๊ฐ€ํŒŒ๋ฅธ) ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ผ๋ณ€์ˆ˜ํ•จ์ˆ˜ y = ax์˜ ์„ ํ˜• ํšŒ๊ท€์— ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์ ์šฉํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

beta = init # ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •
grad = gradient(beta) # ๋ฏธ๋ถ„๊ฐ’ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
while abs(grad) > eps: # eps : ์ž…์‹ค๋ก (๊ธฐ์šธ๊ธฐ๊ฐ€ ์ด ๊ฐ’ ์ดํ•˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด ๋ฐ˜๋ณต ์ค‘๋‹จ)
    beta = beta - lr * grad # lr : learning rate, beta๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•œ '๋ณดํญ' ์„ ๊ฒฐ์ •
    grad = gradient(beta)

๐Ÿ“‰[๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• (๋งค์šด๋ง›)]

๋‹ค๋ณ€์ˆ˜ํ•จ์ˆ˜์˜ ์„ ํ˜• ํšŒ๊ท€์— ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์ ์šฉํ•ด ๋ณด์ž.
y = Xฮฒ (y, ฮฒ๋Š” ๋ฒกํ„ฐ, X๋Š” ํ–‰๋ ฌ)

์†์‹ค ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ชจ๋“  x๋“ค๊ณผ y ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ ||y - Xฮฒ||2 (Root Mean Square)์ด๋‹ค.
X์™€ y๋Š” ๊ณ ์ • ์ž…๋ ฅ/์ถœ๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์†์‹ค ํ•จ์ˆ˜๊ฐ’์ด ์ค„์–ด๋“ค๋„๋ก ์†๋Œˆ ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” ฮฒ๋‹ค.
๋”ฐ๋ผ์„œ, ์†์‹ค ํ•จ์ˆ˜๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ฮฒ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
(์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ๋ณ€์ˆ˜๊ฐ€ ฮฒ๋‹ค)

beta = [init] # ๋‹ค๋ณ€์ˆ˜ํ•จ์ˆ˜๋ผ ํ•˜๋‚˜์˜ ์ž…๋ ฅ x๊ฐ€ ๋ฒกํ„ฐ, beta๋„ ๋ฒกํ„ฐ
for i in range(T): # T:๋ฐ˜๋ณตํšŸ์ˆ˜ (์ข…๋ฃŒ์กฐ๊ฑด์„ ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค)
    error = y - X @ beta # X๋Š” ํ–‰๋ ฌ, beta๋Š” ๋ฒกํ„ฐ๋ผ ํ–‰๋ ฌ๊ณฑ ๊ณ„์‚ฐ 
    grad = -transpose(X) @ error # X^T์— error๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด gradient
    beta = beta - lr * grad # grad๋ฅผ ๋นผ๋Š” ์ด์œ ๋Š”?
                            # ์œ„์˜ ๊ทธ๋ž˜ํ”„์ฒ˜๋Ÿผ ฮฒ๊ฐ’์„ ์˜ฎ๊ฒจ ํ•จ์ˆ˜๊ฐ’์„ ๊ฐ์†Œ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ.

์ฒ˜์Œ์—๋Š” ๊ธฐ์šธ๊ธฐ ฮฒ๋ฅผ ์ž„์˜์˜ ๋ฒกํ„ฐ๋กœ ์ •ํ•ด ๋†“๊ณ  ์†์‹ค ํ•จ์ˆ˜(์˜ค์ฐจ)๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์†์‹ค ํ•จ์ˆ˜๊ฐ€ ์ž‘์•„์ง€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ฮฒ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ฮฒ์—์„œ gradient * lr๋ฅผ ๋นผ ์ค€๋‹ค. lr๋ž€ ํ•™์Šต์œจ(learning rate)๋กœ, ฮฒ ์—…๋ฐ์ดํŠธ์˜ '๋ณดํญ'์„ ๊ฒฐ์ •ํ•œ๋‹ค. ๋ณดํญ์ด ๋„ˆ๋ฌด ํฌ๋ฉด ๊ทน์†Œ๋กœ ์ˆ˜๋ ดํ•˜์ง€ ์•Š๊ณ , ๋ณดํญ์ด ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.


  • ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• (Stochastic Gradient Descent)
    ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์€ ์ข‹์€ ๋„๊ตฌ์ง€๋งŒ ์†์‹ค ํ•จ์ˆ˜๊ฐ€ ๋ณผ๋กํ•œ ๋ชจ์–‘์ด ์•„๋‹ˆ๋ผ W ํ˜•ํƒœ์ฒ˜๋Ÿผ ์ตœ์†Œ๊ฐ€ ์•„๋‹Œ ๊ทน์†Œ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ตœ์†Œ๊ฐ’์œผ๋กœ ์ˆ˜๋ ดํ•˜์ง€ ์•Š๊ณ  ๊ทน์†Œ(local minima)์— ๋น ์งˆ ์œ„ํ—˜์ด ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ฮฒ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ธฐ์กด ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• ๋Œ€์‹  ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ์‚ฌ์šฉํ•ด์„œ gradient๋ฅผ ๊ตฌํ•˜๊ณ , ๊ทธ๊ฑธ ์ด์šฉํ•ด์„œ ฮฒ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ํ‰๊ท ์„ ๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์— ์†์‹คํ•จ์ˆ˜ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์™€ ์•ฝ๊ฐ„ ๋‹ฌ๋ผ์ง„๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋–„๋ฌธ์— ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์—์„œ ๊ตฌํ•œ gradient 0์ธ ์ง€์ ์ด ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์—์„œ๋Š” gradient 0์ด ์•„๋‹ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ทน์†Œ์—์„œ ํƒˆ์ถœํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

๊ทธ ๋ฐ–์—๋„ adagrad, momentum, adam ๋“ฑ ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋“ค์ด ๋งŽ์ด ์žˆ๋‹ค.


๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ[ํ”ผ์–ด ์„ธ์…˜]

๊ฐ•์˜์—์„œ ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์„ ์„œ๋กœ ์ด์•ผ๊ธฐํ•˜๋ฉฐ ๋‹ค์‹œ ์ƒ๊ฐํ•ด ๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ๋‹ค๋ณ€์ˆ˜ํ•จ์ˆ˜์— ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์ ์šฉํ•  ๋•Œ y, ฮฒ๊ฐ€ ๋ฒกํ„ฐ๊ณ  X๊ฐ€ ํ–‰๋ ฌ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฏธ์ฒ˜ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•ด์„œ ๋งค์šฐ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ, ํŒ€์›๋“ค์˜ ์„ค๋ช…์„ ๋“ฃ๊ธฐ๋„ ํ•˜๊ณ  ๋‚ด๊ฐ€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์„ค๋ช…ํ•˜๊ธฐ๋„ ํ•˜๋ฉด์„œ ์ข€ ๋” ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ–ฅํ›„ ๊ณผ์ œ ๋“ฑ์ด ๋‚˜์˜ค๋ฉด ํŒ€ ๋‚ด์—์„œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ ํŒ€์˜ Github ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.

profile
๋ฐ˜๊ฐ€์›Œ์šฉ

0๊ฐœ์˜ ๋Œ“๊ธ€