论文地址:https://arxiv.org/pdf/1903.05662.pdf
主要内容
像ReLU函数这种输出可能为0的情况下,反向传播时梯度为0,权重无法更新,所以出现了STE:令输入梯度等于输出梯度的阈值函数,不管其本身导数。接着就涌现出各种改造的STE。这样就产生了两个问题:
- 粗梯度(经过STE修改的损失函数的梯度)不是原本损失函数的梯度,那么沿其负方向搜索为何能降低训练损失?
- 如何选择合适的STE?
基于这两个问题,作者通过三种STE进行实践,第一次证明了选择合适的STE会得到良好的下降算法。
二元激活函数学习二层线性层CNN
考虑如下模型:

其中,输入Z∈Rm×n输入Z \in R^{m \times n}输入Z∈Rm×n取自高斯分布N(0,1)N(0,1)N(0,1),w,vw,vw,v为一二层权重(卷积层和线性分类器),σ\sigmaσ是二元激活函数,σ=1x>0\sigma=1_{x>0}σ=1x>0,标签由下式生成

则损失函数为:

假设∣∣w∗∣∣=1||w^*||=1∣∣w∗∣∣=1,则优化问题为:

但是该目标函数的梯度不能用于训练,于是使用损失函数的梯度的期望:

其中,

但是公式(4)中的σ′=0\sigma'=0σ′=0,无法传播信息。STE方法就是用一个相关的函数导数μ′\mu'μ′代替σ′\sigma'σ′,这样反向传播时就会提供一个梯度,即所谓的粗梯度:

这样就能得到梯度下降算法:

接下来,为了进一步了解损失函数,作者定义了www和w∗w^*w∗之间的角度:

对于损失函数f(v,w)f(v,w)f(v,w)及其导数,有:


其极小值只有以下两种情况:

显然第二种情况是全局极小值,作者证明了第一种情况如果存在驻点,那驻点就是鞍点,即是伪局部极小点。
作者将vanilla ReLU(即普通的ReLU)、clipped ReLU和恒等函数的导数作为STE用于算法1,证明了前两个会收敛到一个临界点,而恒等函数不会。
对于STE方法,作者证明了在数据较少时,实验损失大致向着负粗梯度方向下降,当样本规模增大,损失曲线会趋于平滑和单调,如下图所示:

本文探讨了在二元激活函数的两层线性层CNN中,使用符号函数直通估计(STE)解决梯度消失问题的方法。通过对比vanilla ReLU、clipped ReLU和恒等函数的导数作为STE,实验证明了前两者能够使算法收敛到临界点,而恒等函数则不行。此外,研究还发现,在数据量较小的情况下,实验损失大致沿着负粗梯度方向下降;当数据量增加,损失曲线趋向平滑和单调。
1332

被折叠的 条评论
为什么被折叠?



