微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

优化程序的学习率查找器

如何解决优化程序的学习率查找器

我目前正在阅读Ian Goodfellow,Yoshua Bengio和Aaron Courville撰写的《深度学习》一书。在这本书中,他们提出了在特定约束条件下寻找最佳学习率的公式。公式为: e* = g.T*g / g.T*H*g 其中g是梯度,H是X(0)处的Hessian矩阵。 出于兴趣,我为带有两个变量x,y和随机数据点X(0)= {x:1,y:1}的随机损失函数实现了一个简短的脚本。

import sympy as sp
from sympy.abc import x,y
from sympy import ordered,Matrix,hessian

loss = x**2 + y**2 + 2*x + 4*y*x
v = list(ordered(loss.free_symbols))
gradient = lambda f,v: Matrix([f]).jacobian(v)
gLoss = gradient(loss,v)
hess = sp.hessian(loss,(v))
initX = gLoss.evalf(subs={x:1,y:1}) # assuming X(0) = {x:1,y:1}
check = sp.Matrix(hess.dot(initX.T)).dot(initX)
e = 0.01

if check >= 0:
  e = initX.T.dot(initX) / check
print(e)

这使我在这个任意示例中的最佳学习率为0.171232876712329。

不幸的是,我没有深入的Tensorflow知识可言,可以说Adam优化器在那里进行尝试。一个人需要获得损失函数获取一个数据点(我也假设微型批次也可以工作),然后对它应用公式,看看它是否评估有效学习率。然后使用认的0.01学习率与计算的学习率进行测试,看看计算出的学习率是否明显好于其他计算。

我希望您能就是否可行或是否缺少明显的问题提供反馈,以作为无法实现的原因。例如,这种计算对于深度神经网络是否还可行?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。