๐Ÿ’ป/ML

[๋ชจ๋‘๋ฅผ ์œ„ํ•œ ๋”ฅ๋Ÿฌ๋‹] ํ…์„œํ”Œ๋กœ์šฐ ๊ธฐ์ดˆ, ์„ ํ˜•ํšŒ๊ท€

ruhz 2020. 7. 26. 16:13
import tensorflow as tf

# ๋ฐ์ดํ„ฐ์— ๋žœ๋คํ•œ ๊ฐ’์„ ํ•˜๋‚˜ ๋„ฃ๊ณ , ์ด๋ฆ„์„ 'weight', 'bias'๋กœ ๋ถ™์—ฌ์ค€ Variable์„ ์ƒ์„ฑํ•œ๋‹ค.
W = tf.Variable(tf.random_normal([1]), name = 'weight')
b = tf.Variable(tf.random_normal([1]), name = 'bias')

# ๋“ค์–ด์˜ฌ ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์€ float32, shape์€ ์•„์ง ์ •ํ•ด์ง€์ง€ ์•Š์€ placeholder๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
X = tf.placeholder(tf.float32, shape=[None])
Y = tf.placeholder(tf.float32, shape=[None])

ํ…์„œํ”Œ๋กœ์šฐ๋Š” 'ํ…์„œ(Tensor)'๋ฅผ ์ด์šฉํ•ด์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ๊ทธ๋ž˜ํ”„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด 'ํ๋ฆ„(Flow)'์„ ๋งŒ๋“œ๋Š” ์ปจ์…‰์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ…์„œ๋Š” ํ…์„œํ”Œ๋กœ์šฐ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๊ฐ€ ๋˜๋Š” ์–ด๋–ค ๊ตฌ์กฐ์ฒด(๋ฐฐ์—ด)์ฏค์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ์œ„ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด, ํ…์„œ์˜ ์ž๋ฃŒํ˜•๊ณผ ์†์„ฑ์— ๋Œ€ํ•ด ์•Œ์•„์•ผํ•œ๋‹ค. W, b๋Š” ํ•™์Šต์‹œํ‚ฌ ๋ณ€์ˆ˜ ๋‘๊ฐœ๋ฅผ, X, Y๋Š” ํ•™์Šต์— ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ placeholder ๋‘๊ฐœ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

 

 

์ž๋ฃŒํ˜•

  • constant : ์ƒ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ํ…์„œ
  • Variable : ํ•™์Šต ๊ณผ์ •์ด ์ง„ํ–‰๋˜๋ฉด Tensorflow๊ฐ€ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ฉฐ, ์ฐพ๊ณ ์žํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋‚˜์•„๊ฐ€๊ฒŒ ๋˜๋Š” ํ•™์Šต๋ณ€์ˆ˜์ด๋‹ค.
  • placeholder : ์ž๋ฃŒํ˜• constant๋Š” ์ƒ์ˆ˜๋กœ ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์ง€๋งŒ, placeholder๋Š” ๋‚˜์ค‘์— ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์†์„ฑ

  • Rank : ์ฐจ์›์„ ์˜๋ฏธํ•œ๋‹ค.
    (Rank=0์ธ๊ฒฝ์šฐ ์Šค์นผ๋ผ(๊ฐ’), Rank=1์ธ๊ฒฝ์šฐ ๋ฒกํ„ฐ(1์ฐจ์›๋ฐฐ์—ด), Rank=2์ธ๊ฒฝ์šฐ ํ–‰๋ ฌ(2์ฐจ์›๋ฐฐ์—ด)์ด ๋œ๋‹ค)
  • Shape : ์ •ํ•ด์ง„ Rank์— ์–ด๋– ํ•œ ๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์ด๋‹ค.
    (Shape๋Š” Rank๋งŒํผ ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ–๊ฒŒ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Rank=2 -> Shape=(3, 5) : 3X5์˜ ํ–‰๋ ฌ)
  • dtype : ํ…์„œ๊ฐ€ ๊ฐ€์งˆ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์–ด๋–ค ํƒ€์ž…์„ ๊ฐ–๋Š”์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฃผ๋กœ float32, int32๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
  • name : ํ…์„œ์— ์ด๋ฆ„์„ ๋ถ™์—ฌ์ค„ ์ˆ˜ ์žˆ๊ณ  ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๋‹ค.

 

 

# ๊ฐ€์ •์„ ์ •์˜ํ•œ๋‹ค.
hypothesis = W * X + b

# ๋น„์šฉ์„ ์ •์˜ํ•œ๋‹ค.
cost = tf.reduce_mean(tf.square(hypothesis - Y))

ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ๋ณผ ์˜ˆ์ œ๋Š” ์ธ๊ณต์ง€๋Šฅ > ๋จธ์‹ ๋Ÿฌ๋‹ > ์ง€๋„ํ•™์Šต(Supervised Learning)์— ํ•ด๋‹นํ•œ๋‹ค. ๋ณต์Šตํ•˜์ž๋ฉด, ์ง€๋„ํ•™์Šต์€ ์ž…๋ ฅ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฐ™์ด ์ฃผ๊ณ  ํ•™์Šต์‹œ์ผœ, ๋‚˜์ค‘์—๋Š” ์ž…๋ ฅ๊ฐ’๋งŒ ๋ฐ›์•„๋„ ๊ฒฐ๊ณผ๋ฅผ ์ถ”๋ก ํ•ด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์œ„์—์„œ ์ƒ์„ฑํ•œ placeholder X, Y์—๋Š” ํ›„์— ์ž…๋ ฅ๊ฐ’, ์ž…๋ ฅ์— ๋Œ€ํ•œ ์ถœ๋ ฅ๊ฐ’์ด ๊ฐ๊ฐ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค.

 

 

๊ฐ€์ •

๊ฐ€์ •์€ '์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์‚ฌ์ด์— ์ด๋Ÿฐ ๊ด€๊ณ„๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค' ํ•˜๊ณ  ํ•จ์ˆ˜์‹์„ ์„ธ์›Œ๋ณด๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ ํ˜•์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š”๋‹ค๊ณ  ํ•˜๋ฉด ๊ฐ€์ •์„ H(X) = W*X + b ๋ผ๊ณ  ์„ธ์šธ ์ˆ˜ ์žˆ๋‹ค. ์•„๊นŒ ์ •์˜ํ•œ W์™€ b์— ์ดˆ๊ธฐ๊ฐ’์€ ๋žœ๋ค์œผ๋กœ ๋“ค์–ด๊ฐ”๋‹ค. ์•ž์œผ๋กœ ํ•™์Šต์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ W, b๋Š” 'X, Y ์‚ฌ์ด์˜ ๊ด€๊ณ„์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’'์œผ๋กœ ์ ์  ๊ฐ€๊นŒ์›Œ์งˆ ๊ฒƒ์ด๋‹ค.
( X=[1, 2, 3], Y=[3, 5, 7] ์ด ํ•™์Šต๋ฐ์ดํ„ฐ๋กœ ์ฃผ์–ด์กŒ๋‹ค๋ฉด W=2, b=1์— ์ ์  ๊ฐ€๊นŒ์›Œ์ง„๋‹ค)

 

 

๋น„์šฉํ•จ์ˆ˜

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ W, b๋ฅผ ํŒŒ๋ž€์ƒ‰ ์ •๋‹ต์ง์„ ์— ๊ทผ์‚ฌ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ? ์„ธ์šด ๊ฐ€์ •์—์„œ์˜ H(X)๊ฐ’๊ณผ ์‹ค์ œ ํ•™์Šต๋ฐ์ดํ„ฐ Y๊ฐ’์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ, ๋ถ€ํ˜ธ์™€ ๊ด€๊ณ„์—†์ด ์ฐจ์ด๋ฅผ ๋ณด๊ณ ์‹ถ์€ ๊ฒƒ์ด๋ฏ€๋กœ square() ์„ ์ด์šฉํ•ด ๊ฐ’์„ ์ œ๊ณฑํ•ด์ค€๋‹ค. reduce_mean() ์œผ๋กœ ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•œ ๋’ค ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๋งŒํผ ๋‚˜๋ˆ ์ฃผ๋ฉด ๋น„์šฉ(cost)๊ฐ€ ์ •์˜ ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์•ž์œผ๋กœ ์ด ์ฝ”๋“œ์˜ ๋ชฉ์ ์€ ๋น„์šฉ์„ ์ตœ์†Œ๋กœ ์ค„์ด๋Š” ๊ฒƒ์ด ๋œ๋‹ค. ๋น„์šฉ์ด ์ตœ์†Œ๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ€์ •ํ•œ ์ง์„ ๊ณผ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ’ ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์ตœ์†Œํ™” ๋œ๋‹ค๋Š” ๋ง์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

# ์›๋ž˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ cost์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„๊ฐ€์•ผ ํ•œ๋‹ค.
# ์„ค๋ช…์„ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ์˜ˆ H(X) = W * X๋กœ ๊ฐ€์ •ํ–ˆ๋‹ค.
'''
learning_rate = 0.1
gradient = tf.reduce_mean((W * X - Y) * X)
descent = W - learning_rate * gradient
update = W.assign(descent)
'''

# ํ•˜์ง€๋งŒ ํ…์„œํ”Œ๋กœ์šฐ๋Š” ์ด ๊ณผ์ •์ด ์นœ์ ˆํ•˜๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)

๋จผ์ € ์œ„ ์ฝ”๋“œ์—์„œ ๋ฐ‘์—์„œ ๋‘๋ฒˆ์งธ ์ค„์„ ๋ณด์ž.
GradientDescentOptimizer ๋Š” ๊ฒฝ์‚ฌ(Gradient)๋ฅผ ํ•˜๊ฐ•(Descent)ํ•˜๋ฉฐ ์ตœ์ ์˜ ๊ฐ’, ์ฆ‰ ์—ฌ๊ธฐ์„œ๋Š” ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„์ฃผ๋Š”(Optimizer) ํ•จ์ˆ˜๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๋ฌด์Šจ ๊ฒฝ์‚ฌ๋ฅผ ์™œ ํ•˜๊ฐ•ํ•œ๋‹ค๋Š” ๋ง์ผ๊นŒ, ๋˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง„ learning_rate ๋Š” ๋ฌด์Šจ ๋ง์ผ๊นŒ?

 

 

๊ฒฝ์‚ฌํ•˜๊ฐ• ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋จผ์ € ๋ฌด์Šจ ๊ฒฝ์‚ฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๊ฐ•ํ•˜๋Š”์ง€ ์•Œ์•„์•ผํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, H(X) = W*X ๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž. ๋น„์šฉ(cost)์„ ๊ณ„์‚ฐํ•  ๋•Œ, X์™€ Y๋Š” ์–ด์ฐจํ”ผ ์ฃผ์–ด์ ธ์žˆ๋Š” ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ, ๊ฐ€์ •(hypothesis)์— ๋”ฐ๋ผ ๊ฐ’์ด ์ขŒ์šฐ ๋œ๋‹ค. ๋˜ ๊ฐ€์ •์€ ๊ฒฐ๊ตญ ๊ธฐ์šธ๊ธฐ์ธ W์— ์˜ํ•ด ์ง์„ ์˜ ๋ชจ์–‘์ด ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ cost๋Š” W์— ๊ด€ํ•œ ํ•จ์ˆ˜ cost(W)๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ๊ฐ€๋กœ์ถ•์„ W๋กœ, ์„ธ๋กœ์ถ•์„ cost๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ๊ทธ๋ž˜ํ”„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋ ค์ง„๋‹ค. ์šฐ๋ฆฌ๋Š” ์ฒ˜์Œ W๋ฅผ random_normal([1])๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ์—ˆ๋‹ค. ์ด๋•Œ 3์ด ์ดˆ๊ธฐํ™”๋๋‹ค๋ฉด, (3, cost(3)) ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ ‘์„ ์˜ ๊ธฐ์šธ๊ธฐ(๊ฒฝ์‚ฌ)๋ฅผ ํƒ€๊ณ  ๋‚ด๋ ค๊ฐ€๋ฉฐ(ํ•˜๊ฐ•) ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์„ ๊ฒƒ์ด๋‹ค.

  1. W = W - learning_rate * gradient
    learning_rate๋Š” ํ•˜๊ฐ•๊ฐ„๊ฒฉ์„ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ์–‘์ˆ˜์ธ ์ƒ์ˆ˜์ด๋‹ค. gradient๋Š” ์ ‘์„ ์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์–‘์ˆ˜์˜ ๊ณฑ์ด๋ฏ€๋กœ, W๋Š” ์›๋ž˜์˜ ๊ฐ’๋ณด๋‹ค ์ค„์–ด๋“  ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋  ๊ฒƒ์ด๋‹ค.
  2. ์ด๋ฅผ ๊ณ„์† ๋ฐ˜๋ณตํ•˜๋ฉด ๊ผญ์ง“์ ์„ ํ–ฅํ•ด ํ•˜๊ฐ•ํ•˜๊ฒŒ ๋œ๋‹ค.
  3. ๊ผญ์ง“์ ์— ๊ฐ€๊นŒ์›Œ์งˆ์ˆ˜๋ก ์ ‘์„ ์˜ ๊ธฐ์šธ๊ธฐ๊ฐ€ ๊ฐ์†Œํ•ด ๋ณ€ํ™”๋Ÿ‰์ด ์ž‘์•„์ง„๋‹ค.

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

 

๋”ฐ๋ผ์„œ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์€ convex function์ด๋ผ๋Š” ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ฌ๋•Œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ณผ๋กํ•จ์ˆ˜(convex function)โ€‹์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์ž˜ ๋‚˜์™€์žˆ๋Š” ๋™์˜์ƒ์ด๋‹ค(๋งํฌ)

 

์œ„์˜ ์ฝ”๋“œ์—์„œ ์ฃผ์„์ฒ˜๋ฆฌ ๋˜์–ด์žˆ๋Š” ๋ถ€๋ถ„์€ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์„ ์ด์šฉํ•ด์„œ cost์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์ง์ ‘ ๋งŒ๋“  ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ tensorflow์—์„œ ์ œ๊ณตํ•˜๋Š” โ€‹GradientDescentOptimizer()โ€‹ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•™์Šต์œจ๊ณผ, ์ตœ์†Œํ™”ํ•  ๋Œ€์ƒ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ ๋งŒ์œผ๋กœ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์•Œ์•„์„œ ๊ฒฝ์‚ฌ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ํ•˜๊ฐ•์„ ํ•˜๋ฉฐ, ๊ทธ ๊ฐ’์„ W์— ์—…๋ฐ์ดํŠธํ•œ๋‹ค. 

 

 

 

# ๊ทธ๋ž˜ํ”„๋ฅผ ์‹คํ–‰ํ•  ์„ธ์…˜์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.
sess = tf.Session()
sess.run(tf.global_variables_initializer())

# ํ•™์Šต์€ 2000๋ฒˆ ์ง„ํ–‰ํ•œ๋‹ค.
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]})
   # 20๋ฒˆ์— ํ•œ ๋ฒˆ์”ฉ ํ•™์Šต๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.
   if step % 20 == 0:
       print(step, cost_val, W_val, b_val)

ํ…์„œํ”Œ๋กœ์šฐ๋Š” ํ…์„œ(Tensor)๋กœ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด ํ๋ฆ„(Flow)์„ ๋งŒ๋“œ๋Š” ์–ธ์–ด์ด๋‹ค.
์„ธ์…˜์„ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์ „์—, ํ˜„์žฌ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์ด๋Ÿฌํ•˜๋‹ค.

ํ…์„œ๋ณด๋“œ๋ฅผ ์ด์šฉํ•ด ์ถœ๋ ฅํ•œ ๊ทธ๋ž˜ํ”„์ด๋‹ค. ์—ฐ์‚ฐ๋…ธ๋“œ๋“ค์„ ๊ฑฐ์ณ ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅด๊ฒŒ ๋˜๊ณ , GradientDescentOptimizer๊ฐ€ W, b์— ๋ถ™์–ด ํ•™์Šตํ•œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ˆ˜์ •ํ•  ๊ฒƒ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ๋Š” sess.run( [ ..., train, ... ])์„ ์‹คํ–‰ํ•˜๋ฉด train = optimizer.minimize(cost)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์— ํ๋ฆ„์ด ์ƒ๊ธธ ๊ฒƒ์ด๋‹ค. ์ถœ๋ ฅ๋œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

X ←[1, 2, 3, 4, 5 ]
Y ←[2.1, 3.1, 4.1, 5.1, 6.1] ๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ์œผ๋ฏ€๋กœ,
์–ด๋ฆผ์žก์•„ ๋ณด์•˜์„ ๋•Œ, y = x + 1.1 ์˜ ์ง์„ , ์ฆ‰ W = 1, b = 1.1์ด๋ฉด ํ›Œ๋ฅญํ•˜๊ฒŒ ํ•™์Šต์„ ํ–ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. 2000๋ฒˆ์˜ ํ•™์Šต๊ฒฐ๊ณผ ๊ฝค๋‚˜ ํ›Œ๋ฅญํ•˜๊ฒŒ ํ•™์Šต์ด ๋˜์—ˆ๋‹ค.

 

์•ž์„  ๊ฒŒ์‹œ๋ฌผ์— ๋งํฌํ–ˆ๋˜ '๋ชจ๋‘๋ฅผ ์œ„ํ•œ ๋”ฅ๋Ÿฌ๋‹' ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ํ•„๊ธฐํ•œ ๋…ธํŠธ์—
์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ๋”ํ•ด ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€์ž…๋‹ˆ๋‹ค.