gph*_*lip 1 python neural-network scikit-learn
对于学校项目,我需要评估具有不同学习率的神经网络。我选择sklearn实现神经网络(使用MLPRegressor类)。由于训练数据非常小(20 个实例,每个实例 2 个输入和 1 个输出),我决定使用求解lbfgs器,因为像sgd和这样的随机求解器adam对于这种大小的数据没有意义。
该项目要求以不同的学习率测试神经网络。然而,这是不可能的lbfgs然而,根据文档,求解器
\n\n\nLearning_rate_init double,默认=0.001\n 使用的初始学习率。它控制更新权重的步长。仅当solver=\xe2\x80\x99sgd\xe2\x80\x99 或\xe2\x80\x98adam\xe2\x80\x99 时使用。
\n
有没有办法我可以以lbfgs某种方式访问求解器的学习率并修改它,或者这个问题甚至没有意义?
LBFGS 是一种根本不使用学习率的优化算法。出于学校项目的目的,您应该使用sgd或adam。至于是否更有意义,我想说,除了学习基础知识之外,在 20 个数据点上训练神经网络并没有多大意义。
LBFGS是一种拟牛顿优化方法。它基于这样的假设:您寻求优化的函数可以通过二阶泰勒展开来局部逼近。大致流程是这样的:
与牛顿法的区别在于拟牛顿法使用雅可比矩阵和/或海森矩阵的近似值。
牛顿和拟牛顿方法比梯度下降需要更平滑的函数来优化,但收敛速度更快。事实上,用 Hessian 矩阵计算下降步骤更有效,因为它可以预见到局部最优的距离,因此不会最终围绕它振荡或收敛得非常慢。另一方面,梯度下降仅使用雅可比矩阵(一阶导数)来计算最速下降的方向,并使用学习率作为下降步长。
实际上,梯度下降用于深度学习,因为计算 Hessian 矩阵的成本太高。
在这里谈论牛顿方法(或拟牛顿方法)的学习率是没有意义的,它只是不适用。
| 归档时间: |
|
| 查看次数: |
3439 次 |
| 最近记录: |