优化程序的学习率查找器

时间:2020-09-14 09:08:16

标签: python tensorflow keras deep-learning

我目前正在阅读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学习率与计算的学习率进行测试,看看计算出的学习率是否明显好于其他计算。

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

0 个答案:

没有答案