前言
今天上课的时候,在总结和深入阅读那一块有一段话:[Ramachandran et al.,2017]设计了不同形式的函数组合方式,并通过强化学习来搜索合适的激活函数,在多个任务上发现Swish函数具有更好的性能。前面大致浏览过Swish函数形式,对其很是陌生。我所熟知的激活函数是 σ \sigma σ,Tanh函数,ReLU函数(最常用),这里稍微整理一下Swish函数,并附上绘制Swish的python程序。
Swish函数
Swish是一种自门控(Self-Gated)激活函数,定义为:
s
w
i
s
h
(
x
)
=
x
σ
(
β
x
)
swish\left( x \right) =x\sigma \left( \beta x \right)
swish(x)=xσ(βx),其中
σ
(
⋅
)
\sigma \left( · \right)
σ(⋅)为
L
o
g
i
s
t
i
c
Logistic
Logistic函数,
β
\beta
β为可学习的参数或者一个固定的超参数。
σ
(
⋅
)
\sigma \left( · \right)
σ(⋅)∈(0,1)可以看作一个软性的门控机制。当
σ
(
β
x
)
\sigma \left( \beta x \right)
σ(βx)接近于1的时候,“门”处于一种“开”状态,激活函数的输出近似于
x
x
x本身;当
σ
(
β
x
)
\sigma \left( \beta x \right)
σ(βx)接近于0时,“门”处于一种”关“的状态,激活函数的输出近似为0.
Swish的函数绘制如下:
当
β
\beta
β为0时,Swish函数变为线性函数
x
/
2
x/2
x/2,当
β
\beta
β为1时Swish函数在
x
>
0
x>0
x>0时近似线性,在
x
<
0
x<0
x<0时近似饱和,同时具有一定的非单调性,当
β
\beta
β趋于正无穷时,Swish可以看作近似为ReLU函数。因此Swish可以看作线性函数和ReLU函数之间的非线性插值函数,其程度由参数
β
\beta
β控制。
总结
这里的函数依旧是去接近于ReLU,吴恩达视频中对ReLU函数有很高的评价,在具体的实验中,至于用哪一个还得综合考量。