逻辑回归训练代价函数任意梯度下降步长下均波动问题问询
自定义Numpy神经网络训练代价剧烈波动问题
我完成了吴恩达机器学习课程的学习,仅对反向传播(backpropagation)的原理理解不够透彻,因此参考《神经网络与深度学习》的相关教程,尝试用Numpy实现自定义神经网络。但无论梯度下降中使用何种步长(参考后续公式中的alpha变量),我的逻辑回归训练代价函数波动都非常剧烈。
为了判断模型是高偏差还是高方差,我绘制了学习曲线,分别展示训练代价(蓝色,存在波动问题)和测试代价。奇怪的是,尽管训练和测试场景使用完全相同的逻辑回归代价函数,且均未添加正则化,测试代价却没有出现波动。
已尝试的代码调试手段
- 测试alpha取值范围为0.1到0.000000000001,每次按10倍梯度下调
- 尝试将batch size从20以步长10逐步提升到70,排除小batch导致参数更新不准确引发代价突增的可能
- 对照《神经网络与深度学习》的官方简洁实现逐行核对反向传播代码,仅发现一处差异:官方实现未对所有样本的bias偏导数求和
- 检索了跟随吴恩达机器学习课程实现神经网络的同类问题,已排查确认我的代码不存在上述同类问题中提到的实现错误。我仍不能排除存在其他代码错误的可能,这是我第二次尝试实现反向传播(上次中途放弃),已确认没有出现已知同类问题中的错误。
使用的理论公式
逻辑回归代价函数
C代表代价,m为训练样本数,K为输出类别数,y为m×K矩阵,存储每个样本对应所有类别的真假标签,h为m×K矩阵,存储每个样本对应所有类别的预测值,theta为包含所有权重和偏置的参数向量。
参数更新公式
Alpha是我用于降低代价波动的步长,nabla符号表示代价对所有theta元素的偏导数,我按照《神经网络与深度学习》中给出的公式计算该偏导数。
内容的提问来源于stack exchange,提问作者Madhav Malhotra
相关产品推荐
相关产品推荐

