文章目录

  • 模拟神经元
  • 单层神经网络的分类器
  • 激活函数
  • Sigmoid
  • Tanh
  • ReLU
  • Leaky ReLU
  • Maxout
  • 神经网络结构
  • 全连接神经网络
  • 模型的表示能力与容量



深度学习的前身是神经网络。


接下来,我们开始学习神经网络算法。

模拟神经元

输入信号通过突触进入神经元;神经元内部对信号进行激活处理;信号沿着神经元的轴突输出;这个轴突通过下一个神经元的突出相连接。

输入信号

输入数据

突触

模型的参数

信号输入过程

参数与数据进行线性组合

Sigmoid函数就是一种激活函数。

单层神经网络的分类器

Logisti回归是一个使用Sigmoid作为激活函数的一层神经网络。

激活函数

Sigmoid

作用:将一个实数输入转化为0~1之间的输出。
使用频率高、具有良好的解释性。

缺点:
1.Sigmoid函数会造成梯度消失。靠近0和1两端时,梯度会几乎变成0。梯度变为0的话,那么没有任何信息来更新参数,造成模型不收敛。初始化权重的时候如果太大,经过激活函数也会导致大多数神经元变的饱和,没有办法更新参数。
2.Sigmoid输出不是以0为均值,这会导致Sigmoid激活函数之后的输出,作为后面一层的网络输入的时候是非0均值,这个时候如果输入进入下一层神经元的时候全是正的,这就会导致梯度全是正的,那么在更新参数的时候永远都是正梯度。

第一个缺点中的两个方面分别称为梯度消失和梯度爆炸。前者会导致参数更新慢,网络效率低下。后者会导致网络不稳定,甚至梯度溢出。
第二个缺点,个人理解是参数的更新无法回头,可能会错过最好的结果。

Tanh

是Sigmoid激活函数的变形。
数学表达式为
pytorch swish函数 pytorch sigmoid函数_激活函数

pytorch swish函数 pytorch sigmoid函数_激活函数_02


它的输出将变成了0均值,在一定程度上解决了Sigmoid函数的第二个问题,但仍然存在梯度消失的问题。

ReLU

将大于0的部分保留,小于0的部分变成0.

pytorch swish函数 pytorch sigmoid函数_激活函数_03

pytorch swish函数 pytorch sigmoid函数_激活函数_04


优点:

1.比SIgmoid激活函数和Tanh激活函数,ReLU函数能够极大的加速随机梯度下降法的收敛速度,因为他是线性的,不存在梯度消失的问题。

2.相比于Sigmoid和Tanh的复杂计算而言,ReLU的计算方法简单。

缺点:训练的时候很脆弱,比如一个很大的梯度经过ReLU激活函数,更新参数后会使得这个神经元不会对任何数据有激活现象,此时梯度永远是0。实际操作过程中可以设置比较小的学习率来避免这个问题。

Leaky ReLU

是ReLu函数的变式,主要是为了修复ReLU激活函数中训练比较脆弱这个缺点。不将x小于0的部分变成0,而是给它一个很小的负的斜率,它的数学形式可以表示为:
pytorch swish函数 pytorch sigmoid函数_激活函数_05
其中alpha是一个很小的常数,这使得输入小于0的时候也有一个小的梯度。

研究点:这个激活函数的效果众说纷纭,有人认为可以对alpha进行参数化处理,即对alpha进行实时更新。

Maxout

pytorch swish函数 pytorch sigmoid函数_全连接_06
ReLU函数使其特殊形式。
他既有ReLU函数的优点同时也避免了其训练脆弱的特点,但它有一个缺点,就是加倍了模型的参数,导致了模型的存储变大。

神经网络结构

全连接神经网络

两个层中每一个层的所有神经元和另外一个层的所有神经元相连接,每个层内部神经元不相连接。

pytorch swish函数 pytorch sigmoid函数_pytorch swish函数_07


nn.Linear(in,out)表示一个全连接神经网络层的函数。比如输入层4个节点,输出层两个节点,就是nn.Linear(4,2)。4个节点意味着有4个变量输入,需要匹配上4个参数。

N层神经网络不会把输入层算进去,因此一个一层的神经网络是指没有隐藏层只有输入层和输出层的神经网络。

输出层通常表示一个类别的得分或者回归的一个实值的目标,所以输出层可以是任意实数。

模型的表示能力与容量

神经网络就是由网络中的参数决定的函数簇。

全连接神经网络的层数增加,网络表现也会更好,但是更深的网络结构(4、5、6…)对全连接神经网络效果提升就不大。而卷积神经网络的深层结构则有更好的效果。

pytorch swish函数 pytorch sigmoid函数_神经网络_08


网络层数越多,表现效果越好,但是左边的模型才是最好的,右边两幅则呈现出过拟合的效果。

左侧图片的抗噪能力和泛化能力更强。

pytorch swish函数 pytorch sigmoid函数_全连接_09


转载

但神经网络的层数也不是越小越好,容量小的网络更容易陷入局部极小点而找不到最优解。同时这些局部极小点的方差很大,所以在训练网络十次得到的结果会有很大差异。但对于容量更大的神经网络,局部极小点的方差很小,也就是说训练多次不容易陷入局部极小点。

因此,我们希望用大容量的网络去训练并且能控制网络过拟合。

问题:
1.为什么容量小的网络容易陷入局部极小点?
2.梯度爆炸的数学解释是怎样的?
3.什么是抗噪能力?