maz*_*tor 6 machine-learning reinforcement-learning tensorflow
有一些实验依赖于梯度上升而不是梯度下降。我已经研究了一些使用“成本”和最小化函数来模拟“最大化”函数的方法,但是我仍然不确定我是否知道如何正确地实现一个maximize()函数。另外,在大多数情况下,我会说它们更接近于无监督的学习。因此,考虑到成本函数的以下代码概念:
cost = (Yexpected - Ycalculated)^2
train_step = tf.train.AdamOptimizer(0.5).minimize(cost)
Run Code Online (Sandbox Code Playgroud)
如果我遵循正梯度并且可能没有Yexpected值,我想写点东西:
maxMe = Function(Ycalculated)
train_step = tf.train.AdamOptimizer(0.5).maximize(maxMe)
Run Code Online (Sandbox Code Playgroud)
带有循环强化学习的 “ http://cs229.stanford.edu/proj2009/LvDuZhai.pdf ” 就是这种需求的一个很好的例子。
我已经阅读了几篇论文和参考文献,指出改变符号的状态会将运动方向翻转为逐渐增加的梯度,但是鉴于TensorFlow对梯度的内部计算,我不确定这是否会最大化,因为我不知道验证结果的方法:
maxMe = Function(Ycalculated)
train_step = tf.train.AdamOptimizer(0.5).minimize( -1 * maxMe )
Run Code Online (Sandbox Code Playgroud)
直觉很简单,该minimize()
函数不断压缩给定值,例如,如果从 5 开始,那么对于每次迭代(例如,取决于学习率),该值将变为 4,然后是 3,然后是 2 、 1、 0 等等(如果可能的话)以降低更多。现在,如果您在开始时传递 -5 (实际上是 +5,但您显式更改了符号),渐变将尝试更改参数以进一步降低数字,例如 -5、-6、 -7、-8、...等 但事实上,函数是递增的,因为我们改变了符号,而实际的符号是(+)。换句话说,在后一种情况下,梯度正在以maximizes
函数的方式改变神经网络的参数,而不是最小化它。
The input x = 1.5, The weight parameter at time (t) w_t = 0.1, \nThe observed response y = 3.0, The learning rate lr = 0.1.\n\nx * w = 0.15 (this is y predicted for the current w)\n\nloss function = (3.0 - 0.15)^2 = 8.1\n\nApplying gradient descent:\n\nw_(t+1) = w_t - lr * (derivative of loss function with respect to w)\n\nw_(t+1) = 0.1 - (0.1 * [1.5 * 2(0.15 - 3.0)]) = 0.1 - (-0.855) = 0.955\n
Run Code Online (Sandbox Code Playgroud)\n如果我们使用新的,w_(t+1)
我们将有:
1.5 * 0.955 = 1.49 (which is closer to the correct answer 3.0)\n\nand the new loss is: (3.0 - 1.49)^2 = 2.27 (smaller error).\n
Run Code Online (Sandbox Code Playgroud)\n如果我们继续迭代,我们将调整w
到一个可以使成本最小的值。
现在让我们重复相同的实验,但符号翻转为负数:
\nloss function = - (3.0 - 0.15)^2 = -8.1\n\nApplying gradient descent:\n\nw_(t+1) = w_t - lr * (derivative of loss function with respect to w)\n\nw_(t+1) = 0.1 - (0.1 * [1.5 * -2(0.15 - 3.0)]) = 0.1 - 0.855 = \xe2\x88\x920.755\n
Run Code Online (Sandbox Code Playgroud)\n如果我们应用新的,w_(t+1)
我们将有:
1.5 * \xe2\x88\x920.755 = \xe2\x88\x921.1325 and the new loss is: (3.0 - (-1.1325))^2 = 17.07 \n\n(the loss function is maximizing!).\n
Run Code Online (Sandbox Code Playgroud)\n这也适用于任何可微函数,但这只是一个简单的例子来演示这个想法。
\n因此,您可以按照您的建议执行以下操作:
\noptimizer.minimize( -1 * value) \n
Run Code Online (Sandbox Code Playgroud)\n或者,如果您愿意,可以创建一个包装函数(实际上这是不必要的,只是提一下):
\ndef maximize(optimizer, value, **kwargs):\n return optimizer.minimize(-value, **kwargs)\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
5535 次 |
最近记录: |