论文总结:UNDERSTANDING STRAIGHT-THROUGH ESTIMATOR IN TRAINING ACTIVATION QUANTIZED NEURAL NETS

论文地址:https://arxiv.org/pdf/1903.05662.pdf

主要内容

像ReLU函数这种输出可能为0的情况下,反向传播时梯度为0,权重无法更新,所以出现了STE:令输入梯度等于输出梯度的阈值函数,不管其本身导数。接着就涌现出各种改造的STE。这样就产生了两个问题:

  1. 粗梯度(经过STE修改的损失函数的梯度)不是原本损失函数的梯度,那么沿其负方向搜索为何能降低训练损失?
  2. 如何选择合适的STE?

基于这两个问题,作者通过三种STE进行实践,第一次证明了选择合适的STE会得到良好的下降算法。

二元激活函数学习二层线性层CNN

考虑如下模型:
在这里插入图片描述
其中, 输 入 Z ∈ R m × n 输入Z \in R^{m \times n} ZRm×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方法,作者证明了在数据较少时,实验损失大致向着负粗梯度方向下降,当样本规模增大,损失曲线会趋于平滑和单调,如下图所示:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值