sklearn 中 lbfgs 求解器的 MLPRegressorlearning_rate_init

gph*_*lip 1 python neural-network scikit-learn

对于学校项目,我需要评估具有不同学习率的神经网络。我选择sklearn实现神经网络(使用MLPRegressor类)。由于训练数据非常小(20 个实例,每个实例 2 个输入和 1 个输出),我决定使用求解lbfgs器,因为像sgd和这样的随机求解器adam对于这种大小的数据没有意义。

\n\n

该项目要求以不同的学习率测试神经网络。然而,这是不可能的lbfgs然而,根据文档,求解器

\n\n
\n

Learning_rate_init double,默认=0.001\n 使用的初始学习率。它控制更新权重的步长。仅当solver=\xe2\x80\x99sgd\xe2\x80\x99 或\xe2\x80\x98adam\xe2\x80\x99 时使用。

\n
\n\n

有没有办法我可以以lbfgs某种方式访问​​求解器的学习率并修改它,或者这个问题甚至没有意义?

\n

A C*_* Co 5

LBFGS 是一种根本不使用学习率的优化算法。出于学校项目的目的,您应该使用sgdadam。至于是否更有意义,我想说,除了学习基础知识之外,在 20 个数据点上训练神经网络并没有多大意义。

LBFGS是一种拟牛顿优化方法。它基于这样的假设:您寻求优化的函数可以通过二阶泰勒展开来局部逼近。大致流程是这样的:

  • 从最初的猜测开始
  • 使用雅可比矩阵计算最速下降方向
  • 使用Hessian矩阵计算下降步并到达下一个点
  • 重复直到收敛

与牛顿法的区别在于拟牛顿法使用雅可比矩阵和/或海森矩阵的近似值。

牛顿和拟牛顿方法比梯度下降需要更平滑的函数来优化,但收敛速度更快。事实上,用 Hessian 矩阵计算下降步骤更有效,因为它可以预见到局部最优的距离,因此不会最终围绕它振荡或收敛得非常慢。另一方面,梯度下降仅使用雅可比矩阵(一阶导数)来计算最速下降的方向,并使用学习率作为下降步长

实际上,梯度下降用于深度学习,因为计算 Hessian 矩阵的成本太高。

在这里谈论牛顿方法(或拟牛顿方法)的学习率是没有意义的,它只是不适用。