2017-05-09 97 views
0

我大致遵循this教程來感受簡單的張量計算。對於那些不希望點擊鏈接,它是嵌合Y =蠟質+ B的簡單OLS問題,與真正的溶液爲:y = 2×Tensorflow AdamOptimizer vs漸變下降

和有下面的代碼和輸出

import tensorflow as tf 
tf.reset_default_graph() 
import numpy as np 

x = tf.placeholder(tf.float32, [None, 1]) # 1d input vector 
W = tf.Variable(tf.zeros([1,1])) 
b = tf.Variable(tf.zeros([1])) 

y = tf.matmul(x,W) + b 

y_res = tf.placeholder(tf.float32, [None, 1]) 

cost = tf.reduce_sum(tf.pow(y - y_res, 2)) 

x_l = np.array([[i] for i in range(100)]) 
y_l = 2 * x_l 

train = tf.train.GradientDescentOptimizer(0.000001).minimize(cost) 

init = tf.initialize_all_variables() 

with tf.Session() as sess: 
    sess.run(init) 
    for i in range(5): 
     feed = {x: x_l,y_res:y_l} 
     sess.run(train, feed_dict=feed) 

     print ("iteration", i) 
     print ("W", sess.run(W)) 
     print ("B", sess.run(b)) 

爲其我得到合理的答覆

('iteration', 0) 
('W', array([[ 1.31340003]], dtype=float32)) 
('B', array([ 0.0198], dtype=float32)) 
('iteration', 1) 
('W', array([[ 1.76409423]], dtype=float32)) 
('B', array([ 0.02659338], dtype=float32)) 
('iteration', 2) 
('W', array([[ 1.91875029]], dtype=float32)) 
('B', array([ 0.02892353], dtype=float32)) 
('iteration', 3) 
('W', array([[ 1.97182059]], dtype=float32)) 
('B', array([ 0.02972212], dtype=float32)) 
('iteration', 4) 
('W', array([[ 1.99003172]], dtype=float32)) 
('B', array([ 0.02999515], dtype=float32)) 

不過,我一直在尋找,以採取進一步的事情,並瞭解一些實施其他優化的,特別是ADAM

看這個優化的效果,我改變了相關線路

train = tf.train.AdamOptimizer().minimize(cost) 

這給略顯奇怪的結果:

('iteration', 0) 
('W', array([[ 0.001]], dtype=float32)) 
('B', array([ 0.001], dtype=float32)) 
('iteration', 1) 
('W', array([[ 0.00199998]], dtype=float32)) 
('B', array([ 0.00199998], dtype=float32)) 
('iteration', 2) 
('W', array([[ 0.00299994]], dtype=float32)) 
('B', array([ 0.00299994], dtype=float32)) 
('iteration', 3) 
('W', array([[ 0.00399987]], dtype=float32)) 
('B', array([ 0.00399987], dtype=float32)) 
('iteration', 4) 
('W', array([[ 0.00499976]], dtype=float32)) 
('B', array([ 0.00499976], dtype=float32)) 

現在,我已經在這裏學習率等好惹的,但我有些困惑,爲什麼這是一個難以融合的時刻。沒有人有任何的直覺,爲什麼這個優化是在這樣一個很重要的問題未能

回答

1

我不會說這是一個困難時期匯聚既不做不到這一點ADAM,它只是考慮它的時間:

iteration 14499 
W [[ 1.9996556]] 
B [ 0.02274081] 

的您鏈接的論文摘要說明了ADAM最適合的問題,而這不是一個問題。在這些問題之一嘗試SGD,你會看到一個真正的失敗。

+0

你說得對,最終確實會收斂。所花的時間數量驚人,雖然 – user3684792

2

這優化,以及大多數人在TF提出的,旨在提高梯度下降隨機優化。無論如何,這些優化器緩慢地建立知識(動量,時刻......),最終超越基本的梯度下降。

您的實驗是不是隨機的,並且足夠簡單與梯度下降迅速收斂。這兩者都是讓更多複雜的優化者發光的不利條件。