์ํ ์ ์๋ฅผ ์์ํด์ผ ํ ๋ (0~100) > regression์ ์ฌ์ฉ
regression์ ์ฌ์ฉํ๋ ์์ ๋ฅผ ์ดํด๋ณด์
์ฌ๋ฌ x์ y ๊ฐ์ ๊ฐ์ง๊ณ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๋ฉฐ ๊ฐ์ฅ ๊ทผ์ ํ๋ ์ ํ(Linear)์ ์ฐพ์์ผ ํ๋ค.
์ด ์ ํ์ ํตํด์ ์์ผ๋ก ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ x ๊ฐ์ ํด๋นํ๋ ๊ฐ์ฅ ๊ทผ์ ํ y ๊ฐ์ ์ถ๋ ฅํด๋ผ ์ ์๋ ๊ฒ์ด๋ค.
ํ์ฌ ํ๋ ์ ์ด ๊ฐ์ค H(x)์ ํด๋นํ๋ค.
์ค์ ์ ๋ ฅ ๊ฐ๋ค (1,1) (2,2) (3,3)๊ณผ ์ ์ ๊ฑฐ๋ฆฌ๋ฅผ ๋น๊ตํด์ ๊ทผ์ ํ ์๋ก ์ข์ ๊ฐ์ค์ ํ๋ค๊ณ ๋งํ ์ ์๋ค.
์ด๋ฅผ ์ฐพ๊ธฐ ์ํด์ Hypothesis(๊ฐ์ค)์ ์ธ์ cost(๋น์ฉ)์ ๊ตฌํด W์ b์ ๊ฐ์ ๋์ถํด์ผ ํ๋ค.
-
H(x) : ๊ฐ์ค
-
cost(W,b) : ๋น์ฉ
-
W : weight
-
b : bias
-
m : ๋ฐ์ดํฐ ๊ฐ์
-
H(x^(i)) : ์์ธก ๊ฐ
-
y^(i) : ์ค์ ๊ฐ
(์์ธก๊ฐ - ์ค์ ๊ฐ)์ ์ ๊ณฑ์ ํ๋ ์ด์ ๋?
์์๊ฐ ๋์ฌ ์๋ ์๊ณ , ์์๊ฐ ๋์ฌ ์๋ ์๋ค. ๋ํ ์ ๊ณฑ์ ํ๋ฉด, ๊ฑฐ๋ฆฌ๊ฐ ๋ ๋จผ ๊ฒฐ๊ณผ์ผ ์๋ก ๊ฐ์ ๋์ฑ ์ปค์ง๊ฒ ๋์ด ํจ๋ํฐ๋ฅผ ๋ ์ค ์ ์๋ ์ฅ์ ์ด ์๋ค.
์ด์ ์ค์ ๋ก, ํ์ด์ฌ์ ์ด์ฉํด์ Linear regression์ ๊ตฌํํด๋ณด์
import tensorflow as tf
# X and Y data
x_train = [1, 2, 3]
y_train = [1, 2, 3]
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
# Our hypothesis XW+b
hypothesis = x_train * W + b // ๊ฐ์ค ์ ์
# cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - y_train))
#Minimize
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)
# Launch the graph in a session.
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
# Fit the line
for step in range(2001):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(cost), sess.run(W), sess.run(b))
x_train = [1, 2, 3]
y_train = [1, 2, 3]
2000๋ฒ ๋๋ฆฐ ๊ฒฐ๊ณผ, [W = 1, b = 0]์ผ๋ก ์๋ ดํด๊ฐ๊ณ ์๋ ๊ฒ์ ์ ์ ์๋ค.
๋ฐ๋ผ์, H(x) = (1)x + 0
๋ก ํํ์ด ๊ฐ๋ฅํ๋ค.
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
์ต์ํ ๊ณผ์ ์์ ๋์ค๋ learning_rate๋ ๋ฌด์์ธ๊ฐ?
GradientDescent๋ Cost function์ด ์ต์๊ฐ์ด ๋๋ ์ต์ ์ ํด๋ฅผ ์ฐพ๋ ๊ณผ์ ์ ๋ํ๋ธ๋ค.
์ด๋ ๋ค์ point๋ฅผ ์ด๋ ์ ๋๋ก ์ฎ๊ธธ ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ learning_rate๋ผ๊ณ ํ๋ค.
learning rate๋ฅผ ๋๋ฌด ํฌ๊ฒ ์ก์ผ๋ฉด?
- ์ต์ ์ ๊ฐ์ผ๋ก ์๋ ดํ์ง ์๊ณ ๋ฐ์ฐํด๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์(Overshooting)
learning rate๋ฅผ ๋๋ฌด ์๊ฒ ์ก์ผ๋ฉด?
- ์๋ ดํ๋ ์๋๊ฐ ๋๋ฌด ๋๋ฆฌ๊ณ , local minimum์ ๋น ์ง ํ๋ฅ ์ฆ๊ฐ
๋ณดํต learning_rate๋ 0.01์์ 0.5๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์๋ณด์ธ๋ค.
import tensorflow as tf
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
X = tf.placeholder(tf.float32, shape=[None])
Y = tf.placeholder(tf.float32, shape=[None])
# Our hypothesis XW+b
hypothesis = X * W + b
# cost/loss function
cost = tf.reduce_mean(tf.square(hypothesis - Y))
#Minimize
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)
# Launch the graph in a session.
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())
# Fit the line
for step in range(2001):
cost_val, W_val, b_val, _ = sess.run([cost, W, b, train],
feed_dict = {X: [1, 2, 3, 4, 5],
Y: [2.1, 3.1, 4.1, 5.1, 6.1]})
if step % 20 == 0:
print(step, cost_val, W_val, b_val)
feed_dict = {X: [1, 2, 3, 4, 5],
Y: [2.1, 3.1, 4.1, 5.1, 6.1]})
2000๋ฒ ๋๋ฆฐ ๊ฒฐ๊ณผ, [W = 1, b = 1.1]๋ก ์๋ ดํด๊ฐ๊ณ ์๋ ๊ฒ์ ์ ์ ์๋ค.
์ฆ, H(x) = (1)x + 1.1
๋ก ํํ์ด ๊ฐ๋ฅํ๋ค.
์ด ๊ตฌํ๋ ๋ชจ๋ธ์ ํตํด x๊ฐ์ ์ ๋ ฅํด์ ๋์ถ๋๋ y๊ฐ์ ์๋์ ๊ฐ์ด ์์๋ณผ ์ ์๋ค.