论文地址:https://arxiv.org/pdf/1903.05662.pdf
主要内容
像ReLU函数这种输出可能为0的情况下,反向传播时梯度为0,权重无法更新,所以出现了STE:令输入梯度等于输出梯度的阈值函数,不管其本身导数。接着就涌现出各种改造的STE。这样就产生了两个问题:
- 粗梯度(经过STE修改的损失函数的梯度)不是原本损失函数的梯度,那么沿其负方向搜索为何能降低训练损失?
- 如何选择合适的STE?
基于这两个问题,作者通过三种STE进行实践,第一次证明了选择合适的STE会得到良好的下降算法。
二元激活函数学习二层线性层CNN
考虑如下模型:
其中,
输
入
Z
∈
R
m
×
n
输入Z \in R^{m \times n}
输入Z∈Rm×n取自高斯分布
N
(
0
,
1
)
N(0,1)
N(0,1),
w
,
v
w,v
w,v为一二层权重(卷积层和线性分类器),
σ
\sigma
σ是二元激活函数,
σ
=
1
x
>
0
\sigma=1_{x>0}
σ=1x>0,标签由下式生成
则损失函数为:
假设
∣
∣
w
∗
∣
∣
=
1
||w^*||=1
∣∣w∗∣∣=1,则优化问题为:
但是该目标函数的梯度不能用于训练,于是使用损失函数的梯度的期望:
其中,
但是公式(4)中的
σ
′
=
0
\sigma'=0
σ′=0,无法传播信息。STE方法就是用一个相关的函数导数
μ
′
\mu'
μ′代替
σ
′
\sigma'
σ′,这样反向传播时就会提供一个梯度,即所谓的粗梯度:
这样就能得到梯度下降算法:
接下来,为了进一步了解损失函数,作者定义了
w
w
w和
w
∗
w^*
w∗之间的角度:
对于损失函数
f
(
v
,
w
)
f(v,w)
f(v,w)及其导数,有:
其极小值只有以下两种情况:
显然第二种情况是全局极小值,作者证明了第一种情况如果存在驻点,那驻点就是鞍点,即是伪局部极小点。
作者将vanilla ReLU(即普通的ReLU)、clipped ReLU和恒等函数的导数作为STE用于算法1,证明了前两个会收敛到一个临界点,而恒等函数不会。
对于STE方法,作者证明了在数据较少时,实验损失大致向着负粗梯度方向下降,当样本规模增大,损失曲线会趋于平滑和单调,如下图所示: