김성훈 딥러닝 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로 구현하기

  • 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를 수동으로 갱신시키는 방법임.
    • learning_rate = 0.1 부터 4줄이 해당부분임.

learning_rate = 0.1
gradient = tf.reduce_mean((W * X - Y) * X)    # cost 함수의 미분
descent = W - learning_rate * gradient
update = W.assign(descent)                        # tf는 직접 = 로 대입할 수 없어, assign을 사용

위의 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
드론과 지도
드론이 세상을 바꾸고 있습니다.드론의 활용처가 계속 넓어지고 있고, 글로벌 기업들의 참여가 많아지고 있으며, 새로운 기술들이 속속 등장하고 있습니다. 하지만 우리나라의 드론 산업은 일부 기업을 제외하면 중국에서 생산된 드론을 가져다가 조립하는 수준이 대부분입니다. 드론은 하드웨어, 소프트웨어, 데이터처리가 복합된 기술입니다. 어떤 기술들을 어떻게 조합할지에 성패가 달렸죠. 5년뒤 10년뒤에 이 블로그엔 어떤 글이 적힐까요? 그것이 궁금합니다.
by 푸른하늘이
Profile for bluesky61

달력

«   2017/12   »
          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            

카테고리

전체보기 (1557)
구글어스 (829)
측량/GPS/GIS (215)
사진 (96)
드론/쿼드콥터 (239)
지오캐싱 (47)
기타 (130)
  • 4,226,966
  • 261934
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.