Adagrad隐含变量

时间:2017-10-09 20:56:12

标签: variables tensorflow implicit tensorboard

以下型号:

import tensorflow as tf
import numpy as np

BATCH_SIZE = 3
VECTOR_SIZE = 1
LEARNING_RATE = 0.1

x = tf.placeholder(tf.float32, [BATCH_SIZE, VECTOR_SIZE],
                   name='input_placeholder')
y = tf.placeholder(tf.float32, [BATCH_SIZE, VECTOR_SIZE],
                   name='labels_placeholder')

W = tf.get_variable('W', [VECTOR_SIZE, BATCH_SIZE])
b = tf.get_variable('b', [VECTOR_SIZE], initializer=tf.constant_initializer(0.0))

y_hat = tf.matmul(W, x) + b
predict = tf.add(tf.matmul(W, x), b, name='predict')
total_loss = tf.reduce_mean(y-y_hat, name='total_loss')
train_step = tf.train.AdagradOptimizer(LEARNING_RATE).minimize(total_loss)
X = np.ones([BATCH_SIZE, VECTOR_SIZE])
Y = np.ones([BATCH_SIZE, VECTOR_SIZE])
all_saver = tf.train.Saver() 

具有以下变量列表:

for el in tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES):
    print(el)


<tf.Variable 'W:0' shape=(1, 3) dtype=float32_ref>
<tf.Variable 'b:0' shape=(1,) dtype=float32_ref>
<tf.Variable 'W/Adagrad:0' shape=(1, 3) dtype=float32_ref>
<tf.Variable 'b/Adagrad:0' shape=(1,) dtype=float32_ref>

张量W:0b:0是显而易见的,但W/Adagrad:0b/Adagrad:0的来源并不完全清楚。我也没有在张量板上看到它们: enter image description here

1 个答案:

答案 0 :(得分:1)

这些变量是在您调用AdagradOptimizer时定义的。所有优化器都使用一定数量的变量来存储他们完成工作所需的值。

关于Adagrad的问题,让我记住标准梯度下降更新步骤的样子:

  theta(t+1) = theta(t) - eta * grad_theta(t)

其中theta是一般参数(例如Wb),eta是一个不变的学习率,grad_theta是你的渐变损失函数wrt迭代theta t

通常,人们会使用特定的时间安排来确定学习率eta,因为他们在学习的初始阶段需要更大的eta,而在最后阶段需要更小的eta你非常接近最小值,你想避免它周围的振荡)。 Adagrad尝试使用以下想法自动执行此操作:“我将theta的渐变的平方根存储到迭代t,并按比例缩放eta”。换句话说,给定:

adagrad_theta(t) = sum(grad_theta(tau)) for tau=1,.., t

Adagrad的更新规则如下:

theta(t+1) = theta(t) - eta * grad_theta(t)/(sqrt(adagrad_theta(t)+ eps))

如您所见,学习率将重新调整为w.r.t. adagrad_theta值。eps。这里,W/Adagrad:0是一个小常数(例如1e-12),用于避免被零除。此更新规则的另一个特征是,您将参数更新到某个点的次数越多,您在以下步骤中执行的操作就越少。

b/Adagrad:0adagrad_theta分别只是变量Wb的{​​{1}}。在那里积累了这些变量的梯度之和。

Tensorboard知道它们是特定变量(与模型无关,而与优化策略有关),然后不将它们附加到实际图形中。但是,您仍然可以在屏幕的右上角看到它们。如果您想在当前图表中看到它们,只需点击它们,在右上角,您可以选择将它们附加到图表中。