锥不锉(一)基本训练错误总结

本文探讨了单层神经网络中由于数据维度、广播机制和损失函数设计导致的梯度爆炸现象。作者指出,L2范数归约可能导致模型表现下降,而Log损失函数对小输入敏感。解决方案包括调整输入参数下限、选择适当的损失函数如MSE,并关注学习率和batch_size的选择。此外,文章还提到了Pytorch优化器的工作方式以及Pandas操作的注意事项,强调了标准化数据的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单层神经网络梯度爆炸

问题在于数据维度,当将一维向量与二维目标同时放入交叉熵损失函数时,梯度出现爆炸。
这是广播机制导致的,pytorch自动将一维向量看作横向量,而非将其与模型输出结果按行联系起来
loss函数维度不匹配

L2范数归约后模型表现下降n个数量级

L2范数规约可将模型参数减小,但当模型期望参数为一个较大的数(1挺大)时,会干扰模型的表现。

Log损失函数

损失函数存在log函数计算时,当输入过小,容易逼近负无穷区,此时梯度爆炸,可将输入参数下限调整为1。
调整后,不再出现上述原因导致的梯度爆炸,但当起始参数过小、第一轮循环结果过小时,梯度为零,模型不更新,并在之后的所有循环保持为零。

demo数据

使用模拟的简单数据(100x200)时,即使训练轮数较大(cpu跑200就挺大了…),学习率依旧是重要的参数,可以影响结果数个数量级的表现

李代桃僵

R M S E = 1 n ∑ i = 1 n ( log ⁡ ( y i ) − log ⁡ ( y ^ i ) ) 2 . RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^n\left(\log(y_i)-\log(\hat y_i)\right)^2}. RMSE=n1i=1n(log(yi)log(y^i))2 .作为目标函数时,可以使用 M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE = \frac{1}{n}\sum_{i=1}^n(y_i-\hat y_i)^2 MSE=n1i=1n(yiy^i)2替代loss函数,最终使用RMSE输出表现

Pytorch优化器与batch_size

关于Pytorch优化器是否将参数loss除以其长度(batch_size)查看源码后发现,否。
loss函数中多有’reduction’一项可以选择对loss的规约
在这里插入图片描述
在这里插入图片描述

Pandas 按索引查找并更改

使用inplace无效,需要重新赋值
在这里插入图片描述

标准化

避免抖动并加快模型收敛速度
增加后
增加前在这里插入图片描述

问题确定

  • 在是否使用pytorch包装区别的两个单隐藏层训练代码写两遍的过程中,我成功地因为不同原因梯度爆炸四次。每次都直接在loss函数左右加输出,然后干瞪眼。
  • VScode突然就没有代码补全了,打开终端也不启动conda了,安装新的代码补全工具也不工作了!原来只是开启后需要加载一段时间,尤其ipynb文件更慢……

优雅

先学走,再学跑,其中摔跤不断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值