关键观点
反向传播是一种有泄漏的抽象
自动微分只负责按照计算图求导,并不保证网络结构、损失设计或梯度处理方式合理。开发者仍可能遭遇激活饱和、死亡神经元、梯度爆炸或消失等问题。若不了解梯度如何传播,就难以判断训练失败究竟来自数据、架…展开观点收起观点
自动微分只负责按照计算图求导,并不保证网络结构、损失设计或梯度处理方式合理。开发者仍可能遭遇激活饱和、死亡神经元、梯度爆炸或消失等问题。若不了解梯度如何传播,就难以判断训练失败究竟来自数据、架构、数值计算还是实现错误。手写反向传播的价值主要在于建立诊断能力,而非替代成熟框架。
为什么重要: 理解抽象层之下的机制,能避免把训练异常误判为模型能力不足,并提高定位隐蔽实现错误的速度。
支撑证据
back propagation a leaky abstraction
裁剪损失可能错误地屏蔽异常样本
教程指出,限制损失最大值与限制梯度最大值并不是同一件事。对某个异常样本的损失进行截断后,超过阈值的区域会变成常数,其梯度因此变为零。这样做不是控制异常样本的更新强度,而是可能让模型完全忽略这些…展开观点收起观点
教程指出,限制损失最大值与限制梯度最大值并不是同一件事。对某个异常样本的损失进行截断后,超过阈值的区域会变成常数,其梯度因此变为零。这样做不是控制异常样本的更新强度,而是可能让模型完全忽略这些样本。真正希望控制更新幅度时,应针对梯度进行裁剪。
为什么重要: 混淆损失裁剪与梯度裁剪会悄悄改变训练目标,而且代码表面上仍可能正常运行。
支撑证据
when you clip a loss of an outlier you are setting its gradient to zero