激活函数
1、sigmoid
sigmoid函数曲线如下:
sigmoid激活函数,符合实际,当输入值很小时,输出接近于0;当输入值很大时,输出值接近于1。
但sigmoid激活函数有较大的缺点,是主要有两点:
(1)容易引起梯度消失。当输入值很小或很大时,梯度趋向于0,相当于函数曲线左右两端函数导数趋向于0。
(2)非零中心化,会影响梯度下降的动态性。这个可以参考CS231n.
2、tanh
tanh函数曲线如下:
与sigmoid相比,输出至的范围变成了0中心化[-1, 1]。但梯度消失现象依然存在。
3、Relu
Relu修正线性单元是有许多优点,是目前神经网络中使用最多的激活函数。
函数曲线如下:
优点:(1)不会出现梯度消失,收敛速度快;
(2)前向计算量小,只需要计算max(0, x),不像sigmoid中有指数计算;
(3)反向传播计算快,导数计算简单,无需指数、出发计算;
(4)有些神经元的值为0,使网络具有saprse性质,可减小过拟合。
缺点:(1)比较脆弱,在训练时容易“die”,反向传播中如果一个参数为0,后面的参数就会不更新。使用合适的学习率会减弱这种情况。
4、Leak Relu
Leak Relu是对Relu缺点的改进,当输入值小于0时,输出值为αx,其中α是一个很小的常数。这样在反向传播中就不容易出现“die”的情况。
损失函数
损失函数(loss function)也叫代价函数(cost function)。是神经网络优化的目标函数,神经网络训练或者优化的过程就是最小化损失函数的过程(损失函数值小了,对应预测的结果和真实结果的值就越接近
1、二次代价函数
二次代价函数就是欧式距离的和,在线性回归中用的比较多,但在目前的神经网络中用的相对较少。
2、交叉熵代价函数
交叉熵(cross-entropy)代价函数来源于信息论中熵的概念。是目前神经网络分类问题中(比如图像分类)常用的代价函数。交叉熵代价函数对分类问题有一个很好的解释:当分类输出正确类的结果(输出层使用softmax函数之后的值)接近于1,即a=~1时,对应正确类的标签为1,即y=1。则可得到,C中第一项接近于0,第二项等于0。对于非正确类,a接近于0,y=0,则C中第一项为0,第二项接近于0。故最终C接近于0;当分类输出正确类的结果与1的差距越大,则上式C的值越大。
3、对数似然函数
对数似然函数与交叉熵代价函数类似,但只考了正确类损失,不考虑错误类的损失,用的也比较多。与交叉熵代价函数一样,对数似然也对分类有一个很好的解释:当正确类的输出值a(输出层只用softmax后的值)接近于1时,y=1,C接近于0;当输出值a距离a越大时,C值越大。
参考资料:http://cs231n.github.io/neural-networks-1/
转载请注明原文地址: https://www.6miu.com/read-250222.html