김성훈 딥러닝 3 - Linear Regression 의 cost 최소화 알고리듬

기타/웹 2.0 2017.11.15 21:09 Posted by 푸른하늘 푸른하늘이

Lec 03 - Linear Regression 의 cost 최소화 알고리듬의 원리

https://www.youtube.com/watch?v=TxIVr-nk1so

  • 복습 : 선형회귀분석 모델의 가설(Hypothesis)과 비용함수(Cost function)
  • 설명을 위해 H(x) = W(x)로 두고 진행
    • W=1 일때의 cost(W)는?
        • cost(W) = 1/3( (1x1 -1)^2 + (1x2 - 2)^2 + (1x3 -3)^2 ) =0
    • W=0 일때의 cost?
        • cost(W) = 1/3( (0x1 -1)^2 + (0x2 -2)^2 + (0x3 -3)^2 ) = 1/3 (1+4+9) = 4.67
    • W=2 일때... cost = 4.67... 많은 값에 대해 cost()의 그래프를 그리면

  • 널리 사용되는 알고리듬이 Gradient descent 알고리듬. (경사를 따라 내려가는 알고리듬)
    • cost 함수 최소화에 사용
    • 많은 minimization 문제에서 사용됨
    • 주어진 cost 함수 cost(W,b)에 대해, 이를 최소화시키는 W, b를 찾는 것.
    • 비용함수의 변수가 많은 일반적 경우 cost(w1, w2, ... wn) 에도 적용할 수 있다.
  • 이 알고리듬은 초기값이 무엇이든 수렴하는 장점이 있음.
  • 기울기는 편미분으로 구함
    • 즉, 한번 반복할 때마다, 아래와 같은 값으로 새로 바꿔 넣어줌. (여기에서 alpha 는 running rate)
    • 아래 그림에서 맨 아래에 있는 것이 Gradient Descent Algorithm

  • 비용함수가 아래와 같다면, 초기값에 따라 다른 해가 구해진다.

  • 하지만, Linear Regression 의 경우, cost 함수가 convex 이기때문에 초기값에 관계없이 해를 구할 수 있다.

  • Cost function을 설계할 때, convex 인지를 반드시 확인해야 한다. 확인할 수만 있다면 편하게 GDA를 사용할 수 있다.

Lab 03 - Linear Regression의 비용함수 최소화를 TensorFlow로 구현하기

  • 이번에 사용한 Hypothesis
    • $H(x) = W \cdot x \\
      cost(W) = {1 \over m} \sum_{i=1}^m (Wx^{(i)} - y^{(i)} )^2 $
  • 먼저 cost 함수를 그려보자.

import tensorflow as tf
import matplotlib.pyplot as plt

X = [1, 2, 3]
Y = [1, 2, 3]

#W 를 변경시켜가면서 확인
W = tf.placeholder(tf.float32)

# H(x) = W.x 로 둔 상태임
hypothesis = X * W
cost = tf.reduce_mean(tf.square(hypothesis - Y))

#세션 시작
sess = tf.Session()
sess.run(tf.global_variables_initializer())

#cost function을 그리기 위한 변수
W_val =[]
cost_val =[]

for i in range(-30,50) :
    feed_W = i * 0.1
    curr_cost, curr_W = sess.run([cost, W], feed_dict = {W : feed_W})
    W_val.append(curr_W)
    cost_val.append(curr_cost)

# cost 함수를그리기
plt.plot(W_val, cost_val)
plt.show()

  • 그 결과는 아래와 같음 W=1 일때 cost가 최소가 된다. 즉,"경사면따라 내려가기" 알고리듬을 적용하기 좋은 모양.

  • Gradient Descent를 자세히 살펴보자.
    • 수식 : $ W := W - \alpha {1 \over m} \sum_{i=1}^m ( W x^{(i)} - y^{(i)} ) x^{(i)} $

learning_rate = 0.1                               # $ \alpha $
gradient = tf.reduce_mean((W*X - Y) *X )  # cost 함수의 미분 : $ {1 \over m} \sum_{i=1}^m ( W x^{(i)} - y^{(i)} ) x^{(i)} $
descent = W - learning_rate * gradient
update = W.assign(descent)                   # tf는 직접 = 로 대입할 수 없어, assign을 사용

  • 아래는 Gradient Descent를 수동으로 갱신시키는 방법임.
    • learning_rate = 0.1 부터 4줄이 해당부분임.

                 

위의 GradientDescent는 간단하게 미분가능하지만, 그렇지 않은 것들도 많다. 그냥 Optimizer를 사용하면 미분하지 않고서도 해결해준다. 즉, 아래는 위의 식과 동일

optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.1)
train = optimizer.minimize(cost)

  • Optional.... 계산된 Gradient를 "약간" 변경시킨 뒤 다시 적용시키는 방법...
    • optimizer.compute_gradients()
    • optimizer.apply_gradients()
  • 오른쪽 결과에서 2,3 번째 값과, 네번째 값이 동일함을 알 수 있다.


댓글을 달아 주세요

BLOG main image
공간정보와 인터넷지도
제 관심사는 계속 바뀝니다. 이 블로그를 유지하는 동안에도 벌써 여러번 주제가 빠뀐 것 같습니다. 돌고 돌아 이제 고향으로 돌아왔습니다. 공간정보입니다. 세계를 측정하고, 그 기준을 세우고, 데이터를 효율적으로 공유하는 것이 공간정보에서 다루는 내용입니다. 4차산업혁명이 데이터 기반이라고들 합니다. 데이터는 그냥 모아둔다고 정보가 되지 않습니다. 표준에 따른 공통 스키마를 기반으로 만들어져야 합니다. 누구나 언제든지, 쉽고 투명하게 데이터를 가져다 쓸
by 푸른하늘이
Profile for bluesky61

달력

«   2019/10   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

카테고리

전체보기 (1590)
구글어스 (829)
공간정보 (240)
사진 (103)
드론/쿼드콥터 (239)
지오캐싱 (47)
기타 (131)
  • 4,665,399
  • 35331
TNM Media textcube get rss

공간정보와 인터넷지도

푸른하늘이's Blog is powered by Tistory. / Supported by TNM Media.
Copyright by 푸른하늘이 [ http://www.ringblog.com ]. All rights reserved.

Textcube TNM Media
푸른하늘이's Blog is powered by Tistory. Designed by Qwer999. Supported by TNM Media.