取各家之长吧,自己码一遍加深印象,参考链接已附上,侵删。
参考:
1.常见的激励函数和损失函数
https://blog.csdn.net/Chile_Wang/article/details/100557019
2.常用激活函数(激励函数)理解与总结
https://blog.csdn.net/tyhj_sf/article/details/79932893
3.【AI实战】快速掌握TensorFlow(四):损失函数
https://my.oschina.net/u/876354/blog/1940819
4.深度学习的激活函数分析—Sigmoid & ReLU & Softmax
https://blog.csdn.net/yituoxiaoge_keliang/article/details/80422642
5.谈谈激活函数以零为中心的问题
https://blog.csdn.net/weixin_30444105/article/details/98423768
6.关于Sigmoid数据输出不是zero-centered的理解
https://blog.csdn.net/weixin_43835911/article/details/89294613
我们在训练模型前,需要设定的几个超参数:
- 学习率 learning rate
- 优化器 optimizer
- 以及防止过拟合的几种工具,如Dropout和正则化L1、L2。
- 激励函数 activation func
- 损失函数 loss func
一. 激励函数
1. 什么叫激励函数?
- 神经元从输入到输出,会经历一个f函数,这个函数就叫做激励函数,本质就是一个非线性函数。
- 作用:激励函数的作用非常纯粹,就是为了让网络模型非线性,可以几乎逼近任意函数,网络的表达能力更强大。
- 激励函数的作用:通过激励函数会将数据压缩到一定的范围区间内,得到的数据的大小将决定该神经元是否处于活跃状态,即:是否被激活。
以下两幅图帮助理解:
2. 常见的激励函数
-
Sigmoid、tanh、ReLU - 用于隐层神经元输出
-
Softmax- 用于多分类神经网络的输出
-
Linear - 用于回归神经网络的输出(或者二分类的问题)
(1) sigmoid激励函数
(2) tanh激励函数
- sigmoid:每一层输出都在(0,1)之间,经过多层连乘运算后,每层神经元的输出值越来越小, 直至为0,也就是梯度消失。
- tanh:也存在同样的连乘导致梯度消失的问题。
- sigmoid和tanh,通常用在层数较少的神经网络中;或者放在回归模型输出层中用作回归激励函数;或者放在分类模型输出层中用作计算概率的激励函数。
(3) Relu激励函数
-
Relu激励函数,弥补sigmoid和tanh的梯度消失问题,并且比sigmoid和tanh计算速度快。
-
Relu函数有很多变种形式。
-
Relu函数通常放在多层神经网络的中间层。
-
Relu激励函数的优点:
(1) 相比于Sigmoid,梯度不饱和,因此在反向传播过程中,减轻了梯度弥散(梯度消失)的问题,神经网络前几层的参数也可以很快的更新。
(2) 计算速度快。Sigmoid和tanh函数需要计算指数,relu只需要设置阈值,判断输入是否大于阈值。
(3) 网络稀疏性。在一定程度上缓解过拟合问题。 -
Relu缺点:
(1) non-zero-centered:函数的输出不是以零为中心的。Sigmoid的输出也不是以零为中心的,这会导致网络收敛较慢,如图所示,梯度下降权重更新时出现z字型的下降:
(2) Dead ReLU Problem:也就是某些神经元可能永远不会激活,导致相应的参数永远得不到更新。后来也有一个Relu变种形式试图改善问题,但并没有明显优势。 -
所以,Relu激励函数仍然是目前的优先选择,80~90%的神经网络会用Relu激励函数。
-
现在主流做法:多做一步BN(batch normalization),尽可能保证每层网络输入具有相同的分布。
(4) linear激励函数
- 线性激励函数,不对神经元的输出值进行处理,直接输出。
- 通常用在回归模型的输出层。
(5) softmax激励函数
- softmax层,每个节点输出一个概率,所有节点概率之和等于1。
- softmax层通常用于分类,给出一副图像,softmax给出每个标签对应的概率。
二. 损失函数
1. 什么叫损失函数
- 神经网络训练的过程,就是基于梯度下降的方法,不断缩小预测值和真实值之间差值的过程。
- 这个差值就是损失 loss,计算这个差值的函数就是损失函数loss func。
- 损失函数和神经网络输出层的激励函数,配套使用。
2. 常见的损失函数
(1) 回归任务
- 损失函数 loss func:均方误差(mse)
- 输出层激励函数:linear、sigmoid、tanh
- 输出层神经元个数:1
(2) 二分类任务
-
损失函数loss func:二分类交叉熵(binary_crossentropy)
-
输出层激励函数:softmax
-
输出层神经元个数:2
-
损失函数loss func:二分类交叉熵(binary_crossentropy)
-
输出层激励函数:sigmoid 或者 tanh
-
输出层神经元个数:1
(3) 多分类任务
- 损失函数 loss func:多分类交叉熵(categorical_crossentropy)
- 输出层激励函数:softmax
- 输出层神经元个数:分类类别个数