深度学习(三)-神经网络基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/keyue123/article/details/89191244

  前面我们利用pytorch实现了基于机器学习中最基本的的线性回归和逻辑回归,下面我们就正式开始接触神经网络,神经网络一般可以看作是一个非线性模型,其基本组成单位为具有非线性激活函数的神经元,通过大量神经元之间的连接,使得神经网络成为一种高度非线性的模型。神经元之间的连接权重就是需要学习的参数,可以通过梯度下降方法来进行学习。以下内容参考和摘抄自廖星宇老师的《深度学习之pytorch》和邱锡鹏老师的《神经网络与深度学习》。

1. 神经元

  神经元是构成神经网络的基本单元,也被称为感知器,本质是通过上一层的输入与权重相乘后求和,在经过非线性函数转换,得到下一层的输出。也就是说神经元由输入,权值,偏置,激活函数,输出组成。
  假设一个神经元接受 d d 个输入 x i {x_i} ,用向量 x = [ x i ] x = [x_i] 来表示这组输入,并用 z z 表示一个神经元所获得的输入信号 x x 的加权和
z = i = 1 d w i x i + b = w T x + b z = \sum\limits_{i = 1}^d {{w_i}{x_i} + b = {w^T}x + b}
  其中 w = [ w 1 , w 2 , , w d ] w = [w_1, w_2, · · ·, w_d] d d 维的权重向量, b 属于偏置。其结构如下所示:

2. 激活函数

  激活函数在神经元中非常重要的。下面我们介绍几种常用的激活函数,摘抄自《深度学习之pytorch》:

2.1 Sigmoid

  函数定义:
( x ) = 1 1 + exp ( x ) \partial (x) = \frac{1}{{1 + \exp ( - x)}}
  图形表示为:

  但是最近几年, S i g m o i d Sigmoid 激活函数已经越来越少地被人使用了,主要是因为 :
  1. S i g m o i d Sigmoid 函数会造成梯度消失。一个非常不好的特点就是 S i g m o i d Sigmoid 函数在靠近1 和 0 的两端时,梯度会几乎变成 0,我们前面讲过梯度下降法通过梯度乘上学习率来更新参数,因此如果梯度接近 0,那么没有任何信息来更新参数,这样就会造成模型不收敛 。另外,如果使用 S i g m o i d Sigmoid 函数,那么需要在初始化权重的时候也必须非常小心。如果初始化的时候权重太大,那么经过激活函数也会导致大多数神经元变得饱和,没有办法更新参数。
  2. S i g m o i d Sigmoid 输出不是以 0 为均值,这就会导致经过 S i g m o i d Sigmoid 激活函数之后的输出,作为后面一层网络的输入的时候是非 0 均值的,这个时候如果输入进入下一层神经元的时候全是正的,这就会导致梯度全是正的,那么在更新参数的时候永远都是正梯度。怎么理解呢? 比如进入下一层神经元的输入是 x x , 参数是 w w b b ,那么输出就是 f = w x + b f = wx + b , 这个时候 f ( x ) = x \nabla f(x)=x ,所以如果 x x 是 0 均值的数据,那么梯度就会有正负。但是这个问题并不是太严重,因为一般神经网络在训练的时候都是按 b a t c h batch (批)进行训练的,这个时候可以在一定程度上缓解这个问题,所以说虽然 0 均值这个问题会产生一些不好的影响,但是总体来讲跟上一个缺点梯度消失相比还是要好很多。

2.2 Tanh

   T a n h Tanh 激活函数是上面 S i g m o i d Sigmoid 激活函数的变形,其数学表达式为:
tanh ( x ) = exp ( x ) exp ( x ) exp ( x ) + exp ( x ) \tanh (x) = \frac{{\exp (x) - \exp ( - x)}}{{\exp (x) + \exp ( - x)}}
  图形表示为:

   T a n h Tanh 将输入的数据转化到 -1 到 1 之间,通过图像可以看出它将输出变成了 0 均值,在一定程度上解决了 S i g m o i d Sigmoid 函数的第二个问题,但是它仍然存在梯度消夫的问题。

2.3 ReLU

   R e L U ReLU 是目前深层神经网络中经常使用的激活函数。 R e L U ReLU 实际上是一个斜坡函数,数学表达式为:
f ( x ) = m a x ( 0 , x ) f(x)=max(0,x)
  图形表示为:

   R e L U ReLU 的优点:
    (1) 相比于 S i g m o i d Sigmoid 激活函数和 T a n h Tanh 激活函数, R e L U ReLU 函数能够增加随机梯度下降法的收敛速度,这因为它是线性的,且不存在梯度消失的问题。
    (2) 相比于 S i g m o i d Sigmoid T a n h Tanh 激活函数的复杂计算而言, R e L U ReLU 的计算方法更加简单,只需要一个阈值过滤就可以得到结果,不需要进行一大堆复杂的运算 。
   R e L U ReLU 的缺点:
    训练的时候很脆弱。比如一个很大的梯度经过 R e L U ReLU 激活函数更新参数之后,会使得这个神经元不会对任何数据有激活现象。 如果发生这种情况之后,经过 R e L U ReLU 的梯度永远都会是 0,也就意味着参数无法再更新了,因为 R e L U ReLU 激活函数本质上是一个不可逆的过程,因为它会直接去掉输入小于 0 的部分 。 在实际操作中可以通过设置比较小的学习率来避免这个小问题。

2.4 Leaky ReLU

   L e a k y R e L U Leaky ReLU 激活函数是 R e L U ReLU 的变式,主要是为了修复 R e L U ReLU 训练比较脆弱的这个缺点,它不再将 x < 0 x<0 的部分变成 0,而给它一个很小的负的斜率,比如 0.01 等,它的数学形式:
L e a k y R e L U ( x ) = { x ( x > 0 ) α x ( x < = 0 ) = max ( 0 , x ) + α min ( 0 , x ) Leaky ReLU(x)=\left\{ \begin{aligned} x(x>0) \\ \alpha x(x<=0) \end{aligned} \right.=\max (0,x) + \alpha \min (0,x)
  图形表示为:

2.5 ELU

  数学形式:
E L U ( x ) = { x ( x > 0 ) α ( e x 1 ) ( x < = 0 ) = m a x ( 0 , x ) + m i n ( 0 , α ( e x 1 ) ) ELU(x)=\left\{ \begin{aligned} x(x>0) \\ \alpha (e^x-1)(x<=0) \end{aligned} \right.=max(0,x)+min(0,\alpha (e^x-1))
  图形表示为:

2.6 Maxout

   M a x o u t Maxout 是对 R e L U ReLU l e a k y R e L U leaky ReLU 的一般化归纳,它拥有 R e L U ReLU 单元的所有优点(线性操作和不饱和),但是每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。难训练,容易过拟合

  通过上面的部分我们简单地介绍了一些激活函数的优缺点,另外还有 S o f t p l u s Softplus S w i s h Swish 等激活函数,使用较少,这里就不介绍了。在实际我们使用较多的还是 R e L U ReLU 激活函数,但是学习率设定的不能太大,一定不要使用 S i g m o i d Sigmoid 激活函数,可以试试 T a n h Tanh ,但是一般它的效果都比 R e L U ReLU M a x o u t Maxout 差 。

3. 网络结构

  神经网络是由神经元构成的,目前常用的有三种:前馈网络,反馈网络,图网络。

3.1 前馈网络

  前馈网络中各个神经元按接受信息的先后分为不同的组。每一组可以看作一个神经层。每一层中的神经元接受前一层神经元的输出,并输出到下一层神经元。整个网络中的信息是朝一个方向传播,没有反向的信息传播。前馈网络包括全连接前馈网络和卷积神经网络等。它可以看作一个函数,通过简单非线性函数的多次复合,实现输入空间到输出空间的复杂映射。这种网络结构简单,易于实现。

3.2 反馈网络

  反馈网络中神经元不但可以接收其它神经元的信号,也可以接收自己的反馈信号。和前馈网络相比,反馈网络中的神经元具有记忆功能,在不同的时刻具有不同的状态。反馈神经网络中的信息传播可以是单向或双向传递。反馈网络包括循环神经网络, Hopfield网络、玻尔兹曼机等。它具有很强的记忆和计算能力。

3.3 图网络

  图网络是定义在图结构数据上的神经网络。图中每个节点都一个或一组神经元构成。节点之间的连接可以是有向的,也可以是无向的。每个节点可以收到来自相邻节点或自身的信息。图网络是前馈网络和记忆网络的泛化,包含很多不同的实现方式,比如图卷积网络、消息传递网络等。

  上面我们简单的介绍了神经网络的基础和结构,下面我会慢慢慢根据例子详细介绍不同的网络结构和使用方法。

猜你喜欢

转载自blog.csdn.net/keyue123/article/details/89191244
今日推荐