๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
AI ๊ณต๋ถ€ ํ•ญ์ƒํ•˜์ž/๊ด€๋ จ ์ด๋ก 

[Math] Gradient Descent (๋งค์šด๋ฏธ๋ถ„๋ง›)

by ์ž„๋ฆฌ๋‘ฅ์ ˆ 2025. 1. 8.
๋ฐ˜์‘ํ˜•
๋”๋ณด๊ธฐ

๊ธฐ์กด ๋ถ€์บ  ๋•Œ ๋…ธ์…˜์— ๊ฐœ์ธ์ ์œผ๋กœ ์ •๋ฆฌํ•œ ๊ฒƒ์„ ๊ณต๋ถ€ํ•  ๊ฒธ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.
๊ฐœ์ธ์ ์œผ๋กœ ํ•ด์„ํ•ด์„œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. (ํ‹€๋ฆด ์ˆ˜ ์žˆ์Œ. ์ •์ •์š”์ฒญ ์š”๋งใ…‹)
** ๊ฐ•์˜์ž๋ฃŒ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค **
** ์ƒ์—…์  ์ด์šฉ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค **

Today's Keyword
๋ฏธ๋ถ„, ๊ธฐ์šธ๊ธฐ, ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•, L2 norm, L2 norm ์ œ๊ณฑ, SGD

 

np.linalg.pinv๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํ˜• ๋ชจ๋ธ๋กœ ํ•ด์„ํ•ด์„œ ์„ ํ˜•ํšŒ๊ท€์‹์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ. ์—ฌ๊ธฐ์„œ L2 ๋…ธ๋ฆ„์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒŒ ๋ชฉํ‘œ.

์„ ํ˜•ํšŒ๊ท€๋ถ„์„ ๋ณต์Šต๋ณต์Šต

L2 Norm

||์ •๋‹ต - ๋‘ ๋ฒกํ„ฐ์˜ ์ฐจ์ด||²๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” B๋ฅผ ์ฐพ์•„์•ผ ํ•จ.

 

๋ชฉ์ ํ•จ์ˆ˜
1/n * (i๋ถ€ํ„ฐ n๊นŒ์ง€ * (target(yi) - (X B์ฐจ์ด))^2) ๋ฅผ ab ๋ฏธ๋ถ„
์ •๋ฆฌํ•˜์ž๋ฉด...

 

๋ชฉ์ ์‹์„ ์ตœ์†Œํ™”ํ•˜๋Š” B๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹ค์Œ ๊ณ„์ˆ˜(t+1)๋ฅผ ๊ตฌํ• ๋•Œ ← B(t) - lambda(์†๋„)* gradient(๋ฏธ๋ถ„๊ฐ’) ์œผ๋กœ ๋นผ์ฃผ์–ด์„œ ์ตœ์†Œํ™”ํ•ด๊ฐ„๋‹ค
์Œ์ˆ˜๋กœ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ–ˆ๊ธฐ์— ๋žŒ๋‹ค ๋ถ€ํ˜ธ๋งŒ ๋ฐ”๊พธ์–ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค ** ์ฃผ์˜
L2norm์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฒกํ„ฐ๋ฅผ ์ฐพ๋‚˜, L2norm^2์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์„ ์ฐพ๋‚˜ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— L2norm^2์œผ๋กœ ํ•˜๋ฉด ๋” ๊ฐ„๋‹จ์€ ~ ํ•˜๋‹ค

L2 ๋…ธ๋ฆ„์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฒกํ„ฐ๋‚˜, L2 ๋…ธ๋ฆ„ ์ œ๊ณฑ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฒกํ„ฐ๋‚˜ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์Œ.

๊ทธ๋ž˜์„œ ๊ณ„์‚ฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด L2 ๋…ธ๋ฆ„ ์ œ๊ณฑ์„ ์“ฐ๋Š” ๊ฒŒ ๋” ํŽธํ•จ.

์ฝ”๋“œ ์˜ˆ์‹œ

# L2 ๋…ธ๋ฆ„ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ 

import numpy as np 

# ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” 
X = np.random.rand(100, 2) # ์ž…๋ ฅ ๋ฐ์ดํ„ฐ 
y = np.random.rand(100) # ํƒ€๊ฒŸ๊ฐ’ 
beta = np.zeros(2) # ์ดˆ๊ธฐ ํšŒ๊ท€๊ณ„์ˆ˜ 
lr = 0.01 # ํ•™์Šต๋ฅ  
T = 1000 # ๋ฐ˜๋ณต ํšŸ์ˆ˜ 

for t in range(T): 
	error = y - X @ beta 
	grad = - X.T @ error / len(y) # ํ‰๊ท  ์˜ค์ฐจ์˜ ๊ธฐ์šธ๊ธฐ ๊ณ„์‚ฐ 
    	beta = beta - lr * grad # ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• ์—…๋ฐ์ดํŠธ

#์ด ์ฝ”๋“œ๋กœ ๋ฌด์–ด-ํŽœ๋กœ์ฆˆ ์—ญํ–‰๋ ฌ ์—†์ด ํšŒ๊ท€๊ณ„์ˆ˜ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ.
 

์ด๋ก ์ ~์œผ๋กœ๋Š”~

  • Convex ํ•จ์ˆ˜์—์„œ ์ˆ˜๋ ด ๋ณด์žฅ: ์ ์ ˆํ•œ ํ•™์Šต๋ฅ (lr)๊ณผ ๋ฐ˜๋ณต ํšŸ์ˆ˜(t)๋ฅผ ์“ฐ๋ฉด ์ˆ˜๋ ด์ด ๋ณด์žฅ๋จ.
  • ์„ ํ˜•ํšŒ๊ท€: L2 ๋…ธ๋ฆ„์„ ์“ฐ๋Š” ํšŒ๊ท€๊ณ„์ˆ˜ beta๋Š” ๋ณผ๋กํ•จ์ˆ˜(Convex)์ž„.
  • ๋น„์„ ํ˜• ํšŒ๊ท€: ์ˆ˜๋ ด์ด ํ•ญ์ƒ ๋ณด์žฅ๋˜์ง€ ์•Š์Œ.

ํ™•๋ฅ ์  ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• (SGD)

์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ์จ์„œ ๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธํ•จ. ํŠนํžˆ ๋น„๋ณผ๋ก ํ•จ์ˆ˜(Non-convex)์—์„œ ์œ ์šฉํ•จ.

  • ๋ฏธ๋‹ˆ๋ฐฐ์น˜ SGD: ์ผ๋ถ€ ๋ฐ์ดํ„ฐ(Mini-batch)๋กœ ์—…๋ฐ์ดํŠธ. ์—ฐ์‚ฐ๋Ÿ‰๋„ ์ค„๊ณ , ํšจ์œจ๋„ ์ข‹์Œ.
    • ์ „์ฒด (x,y) ๊ฐ€ ์•„๋‹ˆ๊ณ  ๋ฏธ๋‹ˆ๋ฐฐ์น˜ (X(b), y(b))์จ์„œ ์—…๋Žƒํ•˜๋ฏ€๋กœ ์—ฐ์‚ฐ๋Ÿ‰์ด b/n์œผ๋กœ ๊ฐ์†Œ
    • ๋ฏธ๋‹ˆ๋ฐฐ์น˜๋ฅผ ์“ฐ๋‹ค ๋ณด๋ฉด ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ์ง€ ์•Š์•„๋„ ๊ณก์„  ๋ชจ์–‘์ด ๋ฐ”๋€Œ๋ฉด์„œ ๋จธ์‹ ๋Ÿฌ๋‹์— ๋” ์ ์‘์„ ์ž˜ํ•จ.

๋งŒ๋Šฅ์€ ์•„๋‹ˆ์ง€๋งŒ ๋”ฅ๋Ÿฌ๋‹์˜ ๊ฒฝ์šฐ SGD๊ฐ€ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ณด๋‹ค ๋‚ซ๋‹ค ใ…‹

 

 


ํ€ด์ฆˆ ์˜ค๋‹ต 

๋‚ด๊ฐ€ ํ‹€๋ ธ๋˜ ํ€ด์ฆˆ ์˜ค๋‹ต...

 

๋ฐ˜์‘ํ˜•

์ตœ๊ทผ๋Œ“๊ธ€

์ตœ๊ทผ๊ธ€

skin by ยฉ 2024 ttutta