优化程序的学习率查找器

问题描述

我目前正在阅读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 (将#修改为@)