[Deep learning] Gradient Descent Optimizer
https://icim.nims.re.kr/post/easyMath/70
알기 쉬운 산업수학
알기 쉬운 산업수학
Gradient Descent Optimizer
2017년 12월 13일(수)|김민중
주어진 목적함수 의 최솟값(minimum)을 찾아가는 알고리즘으로 다음과 같은 방식으로 최솟값을 찾아간다.
- 초기값 을 임의로 설정, 적당한 Learning rate 설정
- 인 정수에 대해서 은 다음과 같이 정의한다.
- 주의사항
- 함수의 모양이 convex가 아닌 경우 global minimum이 아닌 local minimum으로 이 수렴할 가능성이 있다.
- Learning rate 값이 큰 경우 최솟값으로 이 수렴하는 것이 아니라 발산할 수 있다.
- Learning rate 값이 작은 경우 수렴하는 속도가 지나치게 느릴 수 있다.
방정식 의 근을 Gradient Descent를 이용해서 찾아보자.
- 목적함수 으로 설정하겠다(의 최솟값인 0이 되게 하는 값이 우리가 원하는 방정식의 근이다).
- 초기값 , Learning rate 으로 설정
이므로 은 다음과 같이 구할 수 있다.
그리고 는
반복적으로 이 같은 작업을 하면 의 수열을 다음과 같이 얻을 수 있다.
이를 그래프로 나타내면 다음과 같고 은 5로 수렴하는 것을 확인할 수 있다. 이를
TensorFlow code
로 작성하면 다음과 같이 작성할 수 있다.# 방정식 2*x = 10 을 만족하는 x 찾기
# x 초깃값 = 0
X = tf.Variable(0.)
Y = tf.constant(10.)
H = 2 * X
loss = tf.square(H-Y)
optimize = tf.train.GradientDescentOptimizer(0.05).minimize(loss)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
sequence = []
for i in range(10):
print("x_%i = %s" %(+i, sess.run(X)))
sess.run(optimize)
sequence.append(sess.run(X))
plt.suptitle("Sequence of x", fontsize=20)
plt.ylabel("x value")
plt.xlabel("Steps")
plt.plot(sequence, "o")
실행화면
x_0 = 0.0
x_1 = 2.0
x_2 = 3.2
x_3 = 3.92
x_4 = 4.352
x_5 = 4.6112
x_6 = 4.76672
x_7 = 4.86003
x_8 = 4.91602
x_9 = 4.94961
Learning rate가 0.5인 경우(발산)
x_0 = 0.0
x_1 = 20.0
x_2 = -40.0
x_3 = 140.0
x_4 = -400.0
x_5 = 1220.0
x_6 = -3640.0
x_7 = 10940.0
x_8 = -32800.0
x_9 = 98420.0
댓글
댓글 쓰기