18 Fri

TIL

๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋”ฅ๋Ÿฌ๋‹

4์žฅ ์‹ ๊ฒฝ๋ง ํ•™์Šต

4.4 ๊ธฐ์šธ๊ธฐ

๋ชจ๋“  ๋ณ€์ˆ˜์˜ ํŽธ๋ฏธ๋ถ„์„ ๋ฒกํ„ฐ๋กœ ์ •๋ฆฌํ•œ ๊ฒƒ์„ ๊ธฐ์šธ๊ธฐ ๋ผ๊ณ  ํ•œ๋‹ค. ๊ธฐ์šธ๊ธฐ์˜ ๋ฐฉํ–ฅ์€ ๊ฐ ์žฅ์†Œ์—์„œ ํ•จ์ˆ˜์˜ ์ถœ๋ ฅ ๊ฐ’์„ ๊ฐ€์žฅ ํฌ๊ฒŒ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ ์ง€์ ์—์„œ ํ•จ์ˆ˜์˜ ๊ฐ’์„ ๋‚ฎ์ถ”๋Š” ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•˜๋Š” ์ง€ํ‘œ๊ฐ€ ๊ธฐ์šธ๊ธฐ๋ผ๋Š” ๊ฒƒ์ด์ง€, ๊ธฐ์šธ๊ธฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์— ํ•จ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์ด ์žˆ๋Š”์ง€๋ฅผ ๋ณด์žฅํ•  ์ˆ˜๋Š” ์—†๋‹ค.

๊ฒฝ์‚ฌ๋ฒ•์€ ํ˜„ ์œ„์น˜์—์„œ ๊ธฐ์šธ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ์ผ์ • ๊ฑฐ๋ฆฌ๋งŒํผ ์ด๋™ํ•œ๋‹ค. ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•จ์ˆ˜์˜ ๊ฐ’์„ ์ ์ฐจ ์ค„์ด๋Š” ๊ฒƒ์ด ๊ธฐ๊ณ„ํ•™์Šต์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ํ”ํžˆ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ ์‹ ๊ฒฝ๋งŒ ํ•™์Šต์— ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์„ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

def gradient_descent(f, init_x, lr=0.01, step_num=100):
    x = init_x
    
    for i in range(step_num):
        grad = numerical_gradient(f, x)
        x -= lr * grad
    return x

์ธ์ˆ˜ f๋Š” ์ตœ์ ํ™”ํ•˜๋ ค๋Š” ํ•จ์ˆ˜, init_x๋Š” ์ดˆ๊ธฐ๊ฐ’, lr์€ learning rate๋ฅผ ์˜๋ฏธํ•˜๋Š” ํ•™์Šต๋ฅ , step_num์€ ๊ฒฝ์‚ฌ๋ฒ•์— ๋”ฐ๋ฅธ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ๋œปํ•œ๋‹ค.

ํ•™์Šต๋ฅ  ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋Š” ๊ฐ€์ค‘์น˜์™€ ํŽธํ–ฅ ๊ฐ™์€ ์‹ ๊ฒฝ๋ง์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€๋Š” ์„ฑ์งˆ์ด ๋‹ค๋ฅธ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค. ์‹ ๊ฒฝ๋ง์˜ ๊ฐ€์ค‘์น˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์™€ ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด์„œ '์ž๋™'์œผ๋กœ ํš๋“๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์ธ ๋ฐ˜๋ฉด, ํ•™์Šต๋ฅ  ๊ฐ™์€ ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์‚ฌ๋žŒ์ด ์ง์ ‘ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋“ค์€ ์—ฌ๋Ÿฌ ํ›„๋ณด ๊ฐ’ ์ค‘์—์„œ ์‹œํ—˜์„ ํ†ตํ•ด ๊ฐ€์žฅ ์ž˜ ํ•™์Šตํ•˜๋Š” ๊ฐ’์„ ์ฐพ๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

Last updated

Was this helpful?