六、【TF2】Activation 激活函数

一、激活函数的作用

对于连续函数的神经网络预测,是不用激活函数的。
但是对于应用场景最为广泛的分类函数,包括二分类和多分类函数,在神经网络的计算过程中,可以发现和连续函数的结果如出一辙,但是如何定义分类场景呢?那这就需要在神经网络的中间层或者最后一层加入激活函数,这样就能够严格标明当前预测分类结果。
当前的激活函数还在不断的探索中,一直的激活函数大致分为:sigmoid, softmax, tanh, relu, leaky_relu, elu, selu, swish, gelu, 激活函数通过不断的演进过程中,包括正在探索中的激活函数,总结下来,无非就是解决或缓解梯度爆炸,消失,并且降低计算复杂度三个问题。

二、激活函数介绍

1、tf.nn.sigmoid

将网络计算值【实数】压缩到0-1之间。
应用: 二分类
缺点:存在梯度消失问题,计算复杂度高。
分类取值:0:【0-0.5】, 1:【0.5-1】
在这里插入图片描述

2、tf.nn.softmax

是sigmoid的多分类扩展。
应用: 多分类

  • 就是如果某一个 zj 大过其他 z, 那这个映射的分量就逼近于 1,其他就逼近于 0,主要应用就是多分类。
  • 为什么要取指数,第一个原因是要模拟 max 的行为,所以要让大的更大。
  • 第二个原因是需要一个可导的函数。

在这里插入图片描述

在这里插入图片描述
对比sigmoid激活函数

  • 相同点:分类问题时,两者是一样的都是通过交叉熵求loss。
  • 不同点:
    1) softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布
    2)分类解决问题不同,虽然sigmoid也可以解决多分类问题,但是也是一次次进行二分类来做到多分类的结果,多个结果之间并不是互斥的,并没有softmax的结果更优,更方便。
3、tf.nn.tanh 双曲正切曲线

将数据压缩到-1到1之间,输出期望为0.
缺点:存在梯度消失问题,计算复杂度高。
在这里插入图片描述

4、tf.nn.relu 修正线性单元

最流行的激活函数,一般应用到影藏层使用。
缺点:输出不以0为中心,输入小于0时存在梯度消失问题。
在这里插入图片描述

5、tf.nn.leaky_relu

对修正线性单元的改进,解决了死亡relu问题。

在这里插入图片描述

6、tf.nn.elu 指数线性单元

对relu的改进,能够缓解死亡relu问题。

在这里插入图片描述

7、tf.nn.selu 扩展型指数线性单元

在权重用tf.keras.initializers.lecun_normal初始化前提下能够对神经网络进行自归一化.
不可能出现梯度爆炸或者梯度消失问题。需要和Dropout的变种AlphaDropout一起使用。

在这里插入图片描述

8、tf.nn.swish 自门控激活函数

谷歌出品,相关研究指出用swish替代relu将获得轻微效果提升。

在这里插入图片描述

9、gelu 高斯误差线性单元激活函数

在Transformer中表现最好。tf.nn模块尚没有实现该函数。

在这里插入图片描述

三、 "激活函数"能分成两类——“饱和激活函数"和"非饱和激活函数”

在这里插入图片描述
sigmoidtanh是“饱和激活函数”,而ReLU及其变体则是“非饱和激活函数”。使用“非饱和激活函数”的优势在于两点:
1、首先,“非饱和激活函数”能解决所谓的“梯度消失”问题。
2、其次,它能加快收敛速度。
Sigmoid函数需要一个实值输入压缩至[0,1]的范围 σ(x) = 1 / (1 + exp(−x))
tanh函数需要将一个实值输入压缩至 [-1, 1]的范围 tanh(x) = 2σ(2x) − 1

四、TF2应用

在keras中使用激活函数通常是两种方式:
1、 作为某些层的参数activation来指定
2、直接添加layers.Activation激活层,指定激活函数。
注:激活函数不会改变网络层维度。

代码:

import tensorflow as tf
from tensorflow.keras import layers,models

tf.keras.backend.clear_session()
model = models.Sequential()
model.add(layers.Dense(32,input_shape = (None,16),activation = tf.nn.relu)) #通过activation参数指定
model.add(layers.Dense(10))
model.add(layers.Activation(tf.nn.softmax))  # 显式添加layers.Activation激活层
model.summary()

结果:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, None, 32)          544       
_________________________________________________________________
dense_1 (Dense)              (None, None, 10)          330       
_________________________________________________________________
activation (Activation)      (None, None, 10)          0         
=================================================================
Total params: 874
Trainable params: 874
Non-trainable params: 0
_________________________________________________________________
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值