轻量化卷积神经网络综述
MobileNetV3
激活函数
MobileNetV3 使用了 h-swish:
h-swish[x]=x6ReLU6(x+3)
首先来看一下 swish:
swish[x]=xσ(x)
当 x→+∞ 时,σ(x)→1,swish 退化成 x,当 x→−∞ 时,σ(x)→0,swish 等于 0。不难看出,swish 是 ReLU 的 soft version
。
既然有了 ReLU ,那为啥还要发明 swish 呢
为了避免神经网络在训练时出现梯度爆炸的问题,人们设计激活函数时会约束其导数的绝对值 ∣dxdy∣≤1,而 ReLU 天生具有这一优势,但是其有一个弊端,ReLU 的导数并不连续,这将降低拟合的速度以及效果,因此诞生了 swish,其导数连续,在 x=0 附近制造了一个平缓区。
那为什么还要发明 h-swish
swish 中的 σ 计算量大,导致延迟较大,而 h-swish 中的 6ReLU6(x+3) 其实就是对 σ 的分段近似拟合,从而减少计算量,降低延迟。
首先 ReLU6 是对 ReLU 的最大值加以限制的版本
ReLU6[x]=min(6,max(0,x))
当 x>3 时,6ReLU6(x+3)=1,此时 h-swish 退化成 x,当 x<−3 时,ReLU6(x+3)=0,此时 h-swish 恒等于 0,这很类似 ReLU
当 −3≤x≤3 时,h-swish 等于 6x(x+3)
NAS (Network Architecture Search)
To be done.