常用的激活函数及其tf.keras实现

如果神经网络中没有激活函数,无论网络结构再如何复杂,学习的模型都只能得到线性函数,只能解决线性可分问题。激活函数的引入,使得神经网络能够拟合任何一个非线性函数,可用于解决线性不可分问题。不同的激活函数具有不同的特征,适合的场景也因数据的差异而各不相同,需要根据具体的情况选择合适的激活函数,否则无法得到一个令人满意的模型。这篇博客以tf.keras.activations中提供的激活函数为基础,对常用的激活函数进行总结

elu函数

tf.keras.activations.elu函数定义如下:

tf.keras.activations.elu(
    x,
    alpha=1.0
)

​ elu函数和其导函数的数学定义如下:

f ( x ) = { x i f    x > 0 α ( e x − 1 ) i f    x ≤ 0 , f ′ ( x ) = { 1 i f    x > 0 f ( x ) + α i f    x ≤ 0 f(x)=\left\{\begin{matrix} x \qquad &if \; x > 0 \\ \alpha(e^{x}-1) \qquad &if \; x\leq 0 \end{matrix}\right.\quad,\quad f'(x)=\left\{\begin{matrix} 1 \qquad &if \; x > 0 \\ f(x)+ \alpha \qquad &if \; x\leq 0 \end{matrix}\right. f(x)={xα(ex1)ifx>0ifx0,f(x)={1f(x)+αifx>0ifx0

​ 对应的函数和导数的图像如下:

在这里插入图片描述

exponential函数

tf.keras.activations.exponential函数定义如下:

tf.keras.activations.exponential(x)

​ 函数及其导数的数学表达式如下:

f ( x ) = e x , f ′ ( x ) = e x f(x)=e^{x} \quad, \quad f'(x)=e^{x} f(x)=ex,f(x)=ex

​ 导数和对应的导数的图像如下:

在这里插入图片描述

hard_sigmoid函数

tf.keras.activations.hard_sigmoid函数定义如下:

tf.keras.activations.hard_sigmoid(x)

​ 函数和其导数的数学定义和对应的图像如下。其中,分界点的值是可变化的 且关于原点对称,小于当前分界则值为0,大于当前分界则值为1,在分界之间则为一个线性函数,线性函数也是可变的,但必须注意可变的前提是要保证分段函数在整个取值区间上是连续的。以下为一个分界区间为 [ − 1 , 1 ] [-1, 1] [1,1]的例子:

在这里插入图片描述

在这里插入图片描述

relu函数(Rectified Linear Unit,修正线性神经元)

tf.keras.activations.relu函数定义如下:

tf.keras.activations.relu(
    x,
    alpha=0.0,
    max_value=None,
    threshold=0
)

​ ReLU的常规定义和对应的图像如下:

f ( x ) = { x i f    x > 0 0 i f    x ≤ 0 , f ′ ( x ) = { 1 i f    x > 0 0 i f    x ≤ 0 f(x)=\left\{\begin{matrix} x \qquad &if \; x > 0 \\ 0 \qquad &if \; x\leq 0 \end{matrix}\right.\quad,\quad f'(x)=\left\{\begin{matrix} 1 \qquad &if \; x > 0 \\ 0 \qquad &if \; x\leq 0 \end{matrix}\right. f(x)={x0ifx>0ifx0,f(x)={10ifx>0ifx0

在这里插入图片描述

​ 而tf.keras.activations.relu中定义的ReLU函数比以上常规定义更复杂一点。以上的常规定义可以认为是tf.keras.activations.relu只指定了输入时的默认情况。如果指定了其他参数,则tf.keras.activations.relu的形式变为:

f ( x ) = { m a x _ v a l u e i f    x ≥ m a x _ v a l u e x i f    t h r e s h o l d ≤ x < m a x _ v a l u e a l p h a ∗ ( x − t h r e s h o l d ) i f    x < t h r e s h o l d , f(x)=\left\{\begin{matrix} max\_value \qquad &if \; x \geq max\_value \\ x \qquad &if \; threshold \leq x < max\_value \\ alpha*(x-threshold) & if \; x < threshold \end{matrix}\right.\quad,\quad f(x)=max_valuexalpha(xthreshold)ifxmax_valueifthresholdx<max_valueifx<threshold,
f ′ ( x ) = { 0 i f    x ≥ m a x _ v a l u e 1 i f    t h r e s h o l d ≤ x < m a x _ v a l u e a l p h a i f    x < t h r e s h o l d f'(x)=\left\{\begin{matrix} 0 \qquad &if \; x \geq max\_value \\ 1 \qquad &if \; threshold \leq x < max\_value \\ alpha & if \; x < threshold \end{matrix}\right. f(x)=01alphaifxmax_valueifthresholdx<max_valueifx<threshold

​ 这里设 m a x _ v a l u e = 3 , a l p h a = 0.5 , t h r e s h o l d = 0 max\_value=3,alpha=0.5, threshold=0 max_value=3,alpha=0.5,threshold=0,则对应的函数和导数图像为:

在这里插入图片描述

LeakyReLu函数

​ ReLU是将所有的负值都设为零,相反,Leaky ReLU是给所有负值赋予一个非零斜率。Leaky ReLU激活函数是在声学模型(2013)中首次提出的。Leaky ReLU函数及其导函数对应的数学定义和对应图像如下:

f ( x ) = { x i f    x ≥ 0 x a i f    x < 0 , f ′ ( x ) = { 1 i f    x ≥ 0 1 a i f    x < 0 f(x)=\left\{\begin{matrix} x \qquad &if \; x \geq 0 \\ \frac{x}{a} \qquad &if \; x< 0 \end{matrix}\right.\quad,\quad f'(x)=\left\{\begin{matrix} 1 \qquad &if \; x \geq 0 \\ \frac{1}{a} \qquad &if \; x< 0 \end{matrix}\right. f(x)={xaxifx0ifx<0,f(x)={1a1ifx0ifx<0

​ 其中 a ∈ ( 1 , + ∞ ) a \in (1,+\infty ) a(1,+) a a a的值是事先给定的。下面给出 a = 2 a=2 a=2时LeakyReLU函数及其导函数的图像。

在这里插入图片描述

PReLU(参数化修正线性单元)函数

PReLU可以看作是Leaky ReLU的一个变体。在PReLU中,负值部分的斜率是根据数据来定的,而非预先定义的。作者称,在ImageNet分类(2015,Russakovsky等)上,PReLU是超越人类分类水平的关键所在。

RReLU(随机纠正线性单元)函数

​ “随机纠正线性单元”RReLU也是Leaky ReLU的一个变体。在RReLU中,负值的斜率在训练中是随机的,在之后的测试中就变成了固定的了。RReLU的亮点在于,在训练环节中, a a a是从一个均匀的分布 U ( l , u ) U(l,u) U(l,u)中随机抽取的数值。形式上来说,我们能得到以下结果:

在这里插入图片描述

selu函数

tf.keras.activations.selu函数的定义为:

tf.keras.activations.selu(x)

​ SeLU函数和其对应导数的定义为:

f ( x ) = λ { x i f    x > 0 α ( e x − 1 ) i f    x ≤ 0 , f ′ ( x ) = { λ i f    x > 0 f ( x ) + λ α i f    x ≤ 0 f(x)= \lambda\left\{\begin{matrix}x \qquad &if \; x > 0 \\ \alpha(e^{x}-1) \qquad &if \; x\leq 0 \end{matrix}\right.\quad,\quad f'(x)=\left\{\begin{matrix} \lambda \qquad &if \; x > 0 \\ f(x)+ \lambda\alpha \qquad &if \; x\leq 0 \end{matrix}\right. f(x)=λ{xα(ex1)ifx>0ifx0,f(x)={λf(x)+λαifx>0ifx0

​ 其中 λ , α \lambda,\alpha λ,α是定值, λ = 1.0507009873554804934193349852946 , α = 1.6732632423543772848170429916717 \lambda=1.0507009873554804934193349852946, \quad\alpha=1.6732632423543772848170429916717 λ=1.0507009873554804934193349852946,α=1.6732632423543772848170429916717

​ SeLU函数及其导函数对应的图像为:
在这里插入图片描述

sigmoid函数

tf.keras.activations.sigmoid函数的定义为:

tf.keras.activations.sigmoid(x)

Sigmoid函数及其导数对应的数学定义为:

f ( x ) = 1 1 + e − x , f ′ ( x ) = e − x ( 1 + e − x ) 2 f(x)=\frac{1}{1+e^{-x}} \quad,\quad f'(x)= \frac{e^{-x}}{(1+e^{-x})^{2}} f(x)=1+ex1,f(x)=(1+ex)2ex

Sigmoid函数及其导数对应的图像为:

在这里插入图片描述

softmax函数

tf.keras.activations.softmax函数的定义如下:

tf.keras.activations.softmax(
    x,
    axis=-1
)

​ 其中,x为输入,axis为指定的轴,softmax操作将在指定的轴上进行。softmax激活函数一般用在解决多分类问题的网络的最后一层,用于生成对应每个类别的概率分布,这些类别的概率分布之和为1。设当前的任务为一个n分类任务,对应于第i个类别的softmax值为:

S i = e i ∑ j = 1 n e j S_{i} = \frac{e^{i}}{\sum_{j=1}^{n}e^{j} } Si=j=1nejei

softplus函数

tf.keras.activations.softplus函数的定义如下:

tf.keras.activations.softplus(x)

softplus函数及其导函数的定义和图像为:

f ( x ) = l o g ( 1 + e x ) , f ′ ( x ) = e x ( 1 + e x ) I n 2 f(x)=log(1+e^{x}) \quad , \quad f'(x)= \frac{e^{x}}{(1+e^{x})In2} f(x)=log(1+ex),f(x)=(1+ex)In2ex

在这里插入图片描述

softsign函数

tf.keras.activations.softsign函数的定义如下:

tf.keras.activations.softsign(x)

函数及其导函数的定义和图像如下:

f ( x ) = x 1 + ∣ x ∣ , f ′ ( x ) = 1 ( 1 + ∣ x ∣ ) 2 f(x)= \frac{x}{1+\left | x \right |} \quad , \quad f'(x)= \frac{1}{(1+\left | x \right |)^{2}} f(x)=1+xx,f(x)=(1+x)21

在这里插入图片描述

tanh函数

tf.keras.activations.tanh函数的定义如下:

tf.keras.activations.tanh(x)

​ 函数及其导函数的数学定义和图像如下:

f ( x ) = e x − e − x e x + e − x , , f ′ ( x ) = 1 − t a n h 2 x = 1 − ( e x − e − x e x + e − x ) 2 f(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}, \quad , \quad f'(x)=1-tanh^{2}x=1-(\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}})^{2} f(x)=ex+exexex,,f(x)=1tanh2x=1(ex+exexex)2

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值