神经网络隐藏层激活函数和输出层softmax/hardmax函数理解

1:激活函数
- 激活函数是神经网络中对输入数据转换的方法,通过激活函数后将输入值转化为其他信息;在神经网络的隐藏层中,激活函数负责将进入神经元的信息汇总转换为新的输出信号,传递给下一个神经元;
如果不使用激活函数,每个输入节点的输入都是一样的,成为了原始的感知机,没有信号的转换,使得网络的逼近能力有限,无法充分发挥网络的强大学习能力;
常见的激活函数:(sigmoid、tanh、Relu)
1:Sigmoid函数:
常用的转化线性信号为非线性信号的激活函数,数学表达形式如下:
主要特点:
1:将输入的连续值转化到0和1之间的输出;
2:深度学习的反向传递中可能导致梯度爆炸和梯度消失的情况,梯度消失发生的概率比较大;如果初始化神经网络的权重为高斯分布的随机值(均值为0方差为1),通过反向传播算法的数学推导可知,每一层梯度值会逐层下降0.25,如果神经网络层特别多,可能使得在穿过多层之后,梯度非常小,可能接近于0,即出现梯度消失的现象;
3:由于sigmoid函数的函数值是正数,那么每一层的输入为上一层的非0均值信号,模型收敛可能不理想;
4:幂运算的求解耗时,增加训练时间
神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

2:tanh函数:
神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

tanh函数解决了sigmoid函数全是正数的输出问题,模型的优化速度快,但是梯度消失的问题和幂函数运算复杂的问题没有解决;
3:Relu函数(线性修正单元)
神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

取最大值函数,具有的优点:在正数区间解决了梯度下降的问题,计算速度非常快,收敛速度快;
存在问题:部分神经元可能不会激活,参数无法更新。
要注意:初始参数的设置-采用xavier初始化方法,避免将learning rate设置太大,或者自动调节学习率
4:PReLU(Leaky ReLu)
神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

5:ELU(Exponential Linear Units)函数
神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

ELU解决了Relu的问题,不会有梯度消失的问题,不会出现神经元无法激活的问题,但是计算量会稍微有点大;
6:MaxOut函数
maxout是深度学习中的一层网络,就像池化层和卷积层一样,我们可以把maxout函数看做是网络的激活函数层,每个神经元的计算公式如下:在激活函数层中训练参数,将最大值传下去。
神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

激活函数的使用
1:选用激活函数的时候不要带有偏置信息,最好不要使用sigmoid,可以尝试tanh,但是效果不如relu和maxout函数,但是计算量同样大
2:输出层函数
【神经网络隐藏层激活函数和输出层softmax/hardmax函数理解】输出层神经元,通过将输出值经过输出层函数转化为针对某一分类的置信概率值,在多分类问题中常见(softmax)
softmax函数
hardmax是找到数组中所有元素的最大的元素;softmax含义在于不再唯一的确定某一个最大值,而是输出每个分类结果的概率值,表示这个类别的可能性;将多分类信息,转化为范围在[0,1]之间和为1的概率分布;
神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

当使用softmax函数作为输出节点的激活函数的时候,一般使用交叉熵作为损失函数;但是softmax因为e的问题,很容易出现数值溢出的现象;
计算损失函数的时候采用交叉熵计算softmax函数的损失函数(每个位置出现的概率的交叉熵损失函数);
交叉熵:
神经网络隐藏层激活函数和输出层softmax/hardmax函数理解
文章图片

    推荐阅读