在我写的上一篇文章中介绍了感知机(单个神经元)的构成,其中就谈到了神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出值。这也称为“神经元被激活”。如果想对神经网络是什么有更多了解的小伙伴可以去看看我上一篇文章,链接我发在下面啦!
【机器学习300问】20、什么是神经网络?和深度学习什么关系?http://t.csdnimg.cn/47Sgq
承接上文中谈到的“神经元被激活”,我们介绍一个神经网络中非常基础的知识点——激活函数。
图中是一个神经元,它有两个输入分别有着两个权重
,如果写成数学公式的话就是下面这样的形式:
b是被称为偏置的参数,用于控制神经元被激活的容易程度;而w和是表示各个信号的权重的参数,用于控制各个信号的重要性。这里假设被“激活”输出1,“未激活”输出0,如果简化一下公式将其写成:
输入的信号会经过h函数的处理,只有在满足条件的时候才能输出y。那么不同的h函数就对应着不同的“激活”条件,这个h函数就是激活函数。
在这里我进一步处理一下公式,令,那么最终激活函数就可以写成
。这里解释一下为什么这么令,a是单词“激活值”activation,因为上一层的激活值就是下一层的输入值,而这个激活值就是通过公式
计算出来的。
在上面的例子里,我们自然会想到,大于0就“激活”输出,小于等于0就“未激活”不输出(换言之输出值为0),那么按照这样的规则进行激活,写成公式的形式:
画出他的图像:
虽然阶跃函数非常好理解很直观,但在神经网络的激活函数选择中,一般不会使用阶跃函数作为激活函数。 因为它有如下几个不足:
神经网络中常用的一个激活函数,必须掌握。Sigmoid函数的输出在(0, 1)之间,可用于处理二分类问题,可以将连续数转化为概率。它的数学表达式如下:
画出他的图像:
【注】梯度消失:在这里不展开细讲,简单理解就是在当网络层数增加时,梯度值越来越小,直到几乎为零,这就是所谓的梯度消失现象。如果想深入学习梯度相关知识,可以看看我之前写的文章
【机器学习300问】9、梯度下降是用来干嘛的?
它还有个名字叫做双曲正切函数,输出范围在(0, 1)之间,常用于二元逻辑回归和早期的多层感知器(MLP)的隐藏层,现在较少在现代深度学习中作为隐层激活函数。数学表达式为:
画出他的图像:
Rectified Linear Units可以翻译成线性整流函数,但一般就直接用缩写称呼它。当输入大于0时输出等于输入本身,小于等于0时输出恒为0。正因为ReLU函数将负数转化为0,保留正数不变,所以解决了梯度消失和梯度爆炸的问题。数学表达式如下:
或
画出他的图像:
【注】梯度爆炸:和梯度消失一样,是深度神经网络训练中遇到的常见问题,表现正好相反。通常发生在层数较多的情况下,在反向传播过程中,当错误从网络的最后一层向前传播时,梯度会逐渐积累,最终在最早的层变得非常大。
它将一系列数值转换为概率分布的形式,所有输出的概率总和为1,在多分类问题中特别有用,尤其是输出层。它的数学公式如下:
看上去很复杂,听我给你解释一下。分子是输入信号aj的指数函数,分母是所有输入信号的指数函数的和。
![]() |
是第 j 个神经元的输入 |
![]() |
某一个神经元的输入 |
![]() |
所有输入的指数函数之和 |
![]() |
类别的总数(一共有多少个类别) |
softmax 函数的输出是0.0到1.0之间的实数。并且,softmax函数的输出值的总和是1。输出总和为1是softmax函数的一个重要性质。正因为有了这个性质,我们才可以把 softmax函数的输出解释为“概率”。