第一个版本Hard Swish激活函数
文章链接:Searching for MobileNetV3
年份:2019
简介
Swish激活函数代替ReLU,显著提高了神经网络的准确性,具体定义为:
S
w
i
s
h
(
x
)
=
x
⋅
σ
(
x
)
Swish(x) = x \cdot \sigma(x)
Swish(x)=x⋅σ(x), 虽然这种非线性提高了精度,然而sigmoid函数是由指数构成的,在移动设备上的计算成本要高得多。Sigmoid激活函数可以用分段线性函数HardSigmoid拟合
H
a
r
d
s
i
g
m
o
i
d
(
x
)
=
{
0
,
x
≤
−
3
1
,
x
≥
3
x
6
+
1
2
,
o
t
h
e
r
w
i
s
e
\begin{aligned}Hardsigmoid(x) = \begin{cases} 0, &x\le -3 \\ 1 ,&x\ge 3\\\frac{x}{6}+\frac{1}{2}, & otherwise\\\end{cases}\end{aligned}
Hardsigmoid(x)=⎩
⎨
⎧0,1,6x+21,x≤−3x≥3otherwise由此,用Hardsigmoid替代sigmoid可以大大减少运算成本,由此诞生了HardSwish,具体的公式为:
H
a
r
d
S
w
i
s
h
(
x
)
=
x
⋅
H
a
r
d
S
i
g
m
o
i
d
(
x
)
=
x
⋅
R
e
L
U
6
(
x
+
3
)
6
=
x
⋅
{
1
,
x
≥
3
x
6
+
1
2
,
−
3
<
x
<
3
0
,
x
≤
−
3
Hard Swish(x) = x \cdot Hard Sigmoid(x)= x\cdot \frac{ReLU6(x+3)}{6}= x\cdot \begin{cases} 1, &x\ge3\\ \frac{x}{6}+\frac{1}{2}, &-3<x<3\\ 0, &x\le -3\end{cases}
HardSwish(x)=x⋅HardSigmoid(x)=x⋅6ReLU6(x+3)=x⋅⎩
⎨
⎧1,6x+21,0,x≥3−3<x<3x≤−3
该函数的对x的导数为:
H
a
r
d
S
w
i
s
h
′
(
x
)
=
{
1
,
x
≥
3
x
3
+
1
2
,
−
3
<
x
<
3
0
,
x
≤
−
3
Hard Swish^\prime(x) = \begin{cases} 1, &x\ge3\\ \frac{x}{3}+\frac{1}{2}, &-3<x<3\\ 0, &x\le -3\end{cases}
HardSwish′(x)=⎩
⎨
⎧1,3x+21,0,x≥3−3<x<3x≤−3
本文的参数均为常量,并与最初的平滑版本相匹配。经过试验发现该函数与Swish的性能几乎没有明显的差别,但从部署角度来看有多种优势,分段函数可以减少内存访问的数量,从而大幅减低延迟成本。具体的函数图像如下图:
不仅仅只有一种HardSwish版本另一个版本如下:
第二个版本的HardSwish激活函数
简介
文章链接:Semantic Segmentation of Satellite Images using a Modified CNN with
Hard-Swish Activation Function
年份:2019
简介:
激活函数的选择在神经网络的训练和测试动力学中起着重要的作用。介绍了一种与Swish激活函数密切相关的新型激活函数Hard-Swish。它被定义为
H
a
r
d
S
w
i
s
h
=
2
x
⋅
H
a
r
d
S
i
g
m
o
i
d
(
β
x
)
=
2
x
⋅
m
a
x
(
0
,
m
i
n
(
1
,
(
0.2
β
x
+
0.5
)
)
)
HardSwish = 2x\cdot HardSigmoid(\beta x) = 2x\cdot max(0, min(1, (0.2\beta x+0.5)))
HardSwish=2x⋅HardSigmoid(βx)=2x⋅max(0,min(1,(0.2βx+0.5)))
可以写成分段函数的形式:
H
a
r
d
S
w
i
s
h
=
2
x
⋅
{
1
,
x
≥
5
2
β
0.2
β
x
+
0.5
,
−
5
2
β
<
x
<
5
2
β
0
,
x
≤
−
5
2
β
HardSwish = 2x\cdot\begin{cases}1, &x\ge\frac{5}{2\beta}\\ 0.2\beta x+0.5, &-\frac{5}{2\beta}<x<\frac{5}{2\beta}\\ 0, &x\le-\frac{5}{2\beta}\end{cases}
HardSwish=2x⋅⎩
⎨
⎧1,0.2βx+0.5,0,x≥2β5−2β5<x<2β5x≤−2β5
其中
β
\beta
β是可训练参数或自定义参数。当
β
→
∞
\beta\to \infty
β→∞时,HardSwish变成分量为0或1的阶跃函数。具体的函数图像如下图
HardSwish对x的导数的图像为:
HardSwish平滑地在ReLU和线性函数之间进行了非线性差值。
β
\beta
β越大,负区域的最小值越小,最小值为
−
5
8
β
-\frac{5}{8\beta}
−8β5。HardSwish的属性与Swish相似,因为它们都是上下无界的,它是非单调的。该函数与Swish相比,它的计算速度更快。