Gradient descent method - SilverQ/dl_study GitHub Wiki
๊ฒฝ์ฌํ๊ฐ๋ฒ(Wiki)
- ๊ธฐ๋ณธ ์์ด๋์ด๋ cost function์ ๋น์ฉ์ด ๋ฎ์ ์ชฝ์ผ๋ก w(๊ธฐ์ธ๊ธฐ)๋ฅผ ๊ณ์ ์ด๋์ํค๋ฉฐ ๊ฐ์ฅ ๋ฎ์ cost๋ฅผ ๊ฐ๋ w๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ
- ๊ฐ์ฅ ๋จผ์ ๊ฒฐ์ ํ ๊ฒ์ ์ต์ ํํ ํจ์์ด๋ฉฐ, ์์ ์ ์ํ cost function์ด ๋์์ด๋ค.
- w๋ฅผ ์ด๋์ํค๋ ํฌ๊ธฐ๋, ํ์ฌ w๊ฐ์์์ cost function์ ๊ธฐ์ธ๊ธฐ(๋ฏธ๋ถ๊ฐ)์ ์์์ ๋น์จ(learning rate)์ ๊ณฑํ์ฌ ์ฌ์ฉํ๋ค.
# ๋ฏธ๋ถ, ๊ธฐ์ธ๊ธฐ, ์๊ฐ๋ณํ๋
# x์ถ์ผ๋ก 1๋งํผ ์์ง์์ ๋ y์ถ์ผ๋ก ์์ง์ธ ๊ฑฐ๋ฆฌ
# broadcasting์ ํตํด ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ง๋ฏ๋ก, ๋ฐ์ดํฐ์ ๋๋ฉ์ ผ์ ๋ณํ๋ฅผ ์ ๋ฐ๋ผ๊ฐ์ผ ํ๋ค.
# epoch๋ ๊ฒฝ์ฌ ํ๊ฐ์ ์ํํ๋ ํ์์ด๋ค.
def gradient_descent(x, y, w):
c = 0
hx = w * x
return sum((hx-y)*x) / len(x)
def show_gradient_descent(x, y, w, epoch=10, lr=0.1):
for i in range(epoch):
g = gradient_descent(x, y, w)
w -= 0.1 * g
print(i, w)
return w
x = np.array([1, 2, 3])
y = np.array([1, 2, 3])
w = 100
epoch = 100
# lr = 0.1
w = show_gradient_descent(x, y, w, epoch=epoch)
print("x = 3 ์ผ ๋ y =", w*3)