前面我们利用pytorch实现了基于机器学习中最基本的的线性回归和逻辑回归,下面我们就正式开始接触神经网络,神经网络一般可以看作是一个非线性模型,其基本组成单位为具有非线性激活函数的神经元,通过大量神经元之间的连接,使得神经网络成为一种高度非线性的模型。神经元之间的连接权重就是需要学习的参数,可以通过梯度下降方法来进行学习。以下内容参考和摘抄自廖星宇老师的《深度学习之pytorch》和邱锡鹏老师的《神经网络与深度学习》。
1. 神经元
神经元是构成神经网络的基本单元,也被称为感知器,本质是通过上一层的输入与权重相乘后求和,在经过非线性函数转换,得到下一层的输出。也就是说神经元由输入,权值,偏置,激活函数,输出组成。
假设一个神经元接受
个输入
,用向量
来表示这组输入,并用
表示一个神经元所获得的输入信号
的加权和
其中
是
维的权重向量, b 属于偏置。其结构如下所示:
2. 激活函数
激活函数在神经元中非常重要的。下面我们介绍几种常用的激活函数,摘抄自《深度学习之pytorch》:
2.1 Sigmoid
函数定义:
图形表示为:
但是最近几年,
激活函数已经越来越少地被人使用了,主要是因为 :
1.
函数会造成梯度消失。一个非常不好的特点就是
函数在靠近1 和 0 的两端时,梯度会几乎变成 0,我们前面讲过梯度下降法通过梯度乘上学习率来更新参数,因此如果梯度接近 0,那么没有任何信息来更新参数,这样就会造成模型不收敛 。另外,如果使用
函数,那么需要在初始化权重的时候也必须非常小心。如果初始化的时候权重太大,那么经过激活函数也会导致大多数神经元变得饱和,没有办法更新参数。
2.
输出不是以 0 为均值,这就会导致经过
激活函数之后的输出,作为后面一层网络的输入的时候是非 0 均值的,这个时候如果输入进入下一层神经元的时候全是正的,这就会导致梯度全是正的,那么在更新参数的时候永远都是正梯度。怎么理解呢? 比如进入下一层神经元的输入是
, 参数是
和
,那么输出就是
, 这个时候
,所以如果
是 0 均值的数据,那么梯度就会有正负。但是这个问题并不是太严重,因为一般神经网络在训练的时候都是按
(批)进行训练的,这个时候可以在一定程度上缓解这个问题,所以说虽然 0 均值这个问题会产生一些不好的影响,但是总体来讲跟上一个缺点梯度消失相比还是要好很多。
2.2 Tanh
激活函数是上面
激活函数的变形,其数学表达式为:
图形表示为:
将输入的数据转化到 -1 到 1 之间,通过图像可以看出它将输出变成了 0 均值,在一定程度上解决了 函数的第二个问题,但是它仍然存在梯度消夫的问题。
2.3 ReLU
是目前深层神经网络中经常使用的激活函数。
实际上是一个斜坡函数,数学表达式为:
图形表示为:
的优点:
(1) 相比于
激活函数和
激活函数,
函数能够增加随机梯度下降法的收敛速度,这因为它是线性的,且不存在梯度消失的问题。
(2) 相比于
和
激活函数的复杂计算而言,
的计算方法更加简单,只需要一个阈值过滤就可以得到结果,不需要进行一大堆复杂的运算 。
的缺点:
训练的时候很脆弱。比如一个很大的梯度经过
激活函数更新参数之后,会使得这个神经元不会对任何数据有激活现象。 如果发生这种情况之后,经过
的梯度永远都会是 0,也就意味着参数无法再更新了,因为
激活函数本质上是一个不可逆的过程,因为它会直接去掉输入小于 0 的部分 。 在实际操作中可以通过设置比较小的学习率来避免这个小问题。
2.4 Leaky ReLU
激活函数是
的变式,主要是为了修复
训练比较脆弱的这个缺点,它不再将
的部分变成 0,而给它一个很小的负的斜率,比如 0.01 等,它的数学形式:
图形表示为:
2.5 ELU
数学形式:
图形表示为:
2.6 Maxout
是对 和 的一般化归纳,它拥有 单元的所有优点(线性操作和不饱和),但是每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。难训练,容易过拟合
通过上面的部分我们简单地介绍了一些激活函数的优缺点,另外还有 , 等激活函数,使用较少,这里就不介绍了。在实际我们使用较多的还是 激活函数,但是学习率设定的不能太大,一定不要使用 激活函数,可以试试 ,但是一般它的效果都比 和 差 。
3. 网络结构
神经网络是由神经元构成的,目前常用的有三种:前馈网络,反馈网络,图网络。
3.1 前馈网络
前馈网络中各个神经元按接受信息的先后分为不同的组。每一组可以看作一个神经层。每一层中的神经元接受前一层神经元的输出,并输出到下一层神经元。整个网络中的信息是朝一个方向传播,没有反向的信息传播。前馈网络包括全连接前馈网络和卷积神经网络等。它可以看作一个函数,通过简单非线性函数的多次复合,实现输入空间到输出空间的复杂映射。这种网络结构简单,易于实现。
3.2 反馈网络
反馈网络中神经元不但可以接收其它神经元的信号,也可以接收自己的反馈信号。和前馈网络相比,反馈网络中的神经元具有记忆功能,在不同的时刻具有不同的状态。反馈神经网络中的信息传播可以是单向或双向传递。反馈网络包括循环神经网络, Hopfield网络、玻尔兹曼机等。它具有很强的记忆和计算能力。
3.3 图网络
图网络是定义在图结构数据上的神经网络。图中每个节点都一个或一组神经元构成。节点之间的连接可以是有向的,也可以是无向的。每个节点可以收到来自相邻节点或自身的信息。图网络是前馈网络和记忆网络的泛化,包含很多不同的实现方式,比如图卷积网络、消息传递网络等。
上面我们简单的介绍了神经网络的基础和结构,下面我会慢慢慢根据例子详细介绍不同的网络结构和使用方法。