tensorflow学习笔记:常见激活函数及其变种

激活函数

在每一个神经网络中,总会遇到各种必须要定义的函数,像激活函数啊,损失函数啊……,这里就记录一下常用的激活函数吧,毕竟她在神经网络中的作用挺大的。废话不多说了,下面一起看看什么时激活函数,又有哪些激活函数。
首先得讲讲激活函数他是干嘛的。他是对神经网络中某一部分神经元的非线性运算,使神经网络可以任意逼近任何非线性函数。他的作用是:加入非线性因素,解决线性模型缺陷。

sigmoid函数

f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1
输入值在【-3,3】之间较佳,如果接近-6或6就会体现饱和问题。

  • 优点:输出映射在(0,1)单调连续,适合做输出层,求导容易。
  • 缺点:软包和性:进入饱和区(趋向平缓的区域),一阶导数趋于0,可能出现梯度消失情况。

他长这个模样:
在这里插入图片描述
tensorflow语法:

tf.nn.sigmoid(x,name=None)

Tanh函数

通过sigmoid拓展可以得到

T a n h ( x ) = 2 s i g m o i d ( 2 x ) − 1 Tanh(x)=2sigmoid(2x)-1 Tanh(x)=2sigmoid(2x)1

同样具有软饱和性,输出以0为中心,值域为(-1,1),收敛速度比sigmoid函数要快。需要注意的是输入值的绝对值不饿能过大,否则模型无法训练。
我们看看他的图像:
在这里插入图片描述
tensorflow语法:

tf.nn.tanh(x,name=None)

ReLU函数

f ( x ) = m a x ( 0 , x ) f(x) = max(0,x) f(x)=max(0,x)
等价于
f ( x ) = { 0 x ⩽ 0 x x > 0 f(x)=\left\{\begin{matrix}0& x\leqslant 0 & \\ x & x > 0\end{matrix}\right. f(x)={0xx0x>0 落入 ( − ∞ , 0 ) (-\infty,0) (,0)会出现硬饱和性,导数为0。落入 [ 0 + ∞ ) [0+\infty) [0+)保持梯度不衰减,缓解梯度消失问题,更快收敛。
ReLU函数是一种对正向信号的重视、忽略了负向信号的特性的函数。他的运算较为简单,大大地提升了机器的运行效率。
这个很容易就猜到了他长什么模样:
在这里插入图片描述
tensorflow语法:

tf.nn.relu(x,name=None)

与ReLU相似的softplus函数

与relu函数相似的还有sofplus函数。二者的泣别在于:sofplus函数会更加平滑,但是他的计算量较大,且对于小于0的值保留较多。sfoplus公式如下: f ( x ) = l n ( 1 + e x ) f(x)=ln(1+e^{x}) f(x)=ln(1+ex)在这里插入图片描述

ReLU函数变种

Relu函数在信号影响上优势较大,但是如果模型中的值菌落在了小于0部分就会导致输出为全零,这样模型是无法训练的,所以他还有一些变种函数:

  • Naisy relu:为max中的x加了一个高斯分布的噪声。
    公式: f ( x ) = m a x ( 0 , x + Y ) , Y ∈ N ( 0 , σ ( x ) ) f(x) = max(0,x+Y),Y\in N(0,\sigma (x)) f(x)=max(0,x+Y),YN(0,σ(x))
  • Leaky relu:在Relu基础上保留一部分负值,让x为负时乘0.01,
    公式: f ( x ) = { 0.01 x x ⩽ 0 x x > 0 f(x)=\left\{\begin{matrix}0.01x& x\leqslant 0 & \\ x & x > 0\end{matrix}\right. f(x)={0.01xxx0x>0
  • Leaky relu的基础上再变一下,让函数乘a,这里a要求小于等于1,而不是仅限于0.01,公式: f ( x ) = { a x x ⩽ 0 , a ⩽ 1 x x > 0 f(x)=\left\{\begin{matrix}ax& x\leqslant 0 ,a\leqslant 1 \\ x & x > 0\end{matrix}\right. f(x)={axxx0a1x>0
  • Elus:当x小于0时,做了更加复杂的变换,他的收敛熟读比ReLU要快,
    公式: f ( x ) = { a ( e x − 1 ) x ⩽ 0 x x > 0 f(x)=\left\{\begin{matrix}a(e^{x}-1)& x\leqslant 0 \\ x & x > 0\end{matrix}\right. f(x)={a(ex1)xx0x>0

tensorflow代码:

tf.nn.relu(features,name=None)
tf.nn.relu6(features,name=None)
tf.nn.softplus(features,name=None)
tf.nn.elu(features,name=None)
tf.nn.maximum(x,leak*x,name=None)#构建leaky relu函数

Swish函数

据说谷歌找到了一各更加厉害的激活函数,他的效果要优于relu函数。公式:
f ( x ) = x ∗ s i g m o i d ( β x ) , β 默 认 为 1 f(x)=x*sigmoid(\beta x) , \beta 默认为1 f(x)=xsigmoid(βx)β1
在这里插入图片描述
可以自己尝试修改一下 β \beta β值来看看图像时怎么变化的,留点儿悬念在这儿。

写在最后

你有没有遇到过这样的情况,需要用这些函数的时候,发现自己脑子里有这么个函数,但是又想不起他的图像长什么样或是把他们的图像记混了?有好几次跟朋友讨论这些问题的时候,突然就忘了或是记混了,所以记录一下这些常用的函数吧。如果偶尔也有这样的i情况的话也可以动手写写博客,虽然会花点儿时间,但是写一次总能让自己收获些新的知识。
欢迎各位点赞、收藏、当然还有纠错。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值