ps:我是在高一的时候第一次脑海中接触神经网络这个概念......,注意只是接触,一直扔到现在

1. 简介

    神经网络和深度学习是由Michael Nielsen所写,其特色是:兼顾理论和实战,是一本供初学者深入理解Deep Learning的好书。


2. 感知器与sigmoid神经元

2.1 感知器(Perceptrons)

     感知器工作原理:接收一系列二进制输入,经过特定的规则计算之后,输出一个简单的二进制。

     

神经网络实验报告心得 神经网络心得体会_神经网络

     计算规则:通过引入权重(weights)表示每个输入对于输出的重要性,则有

    

神经网络实验报告心得 神经网络心得体会_过拟合_02

w⋅x=∑jwjxj,b=-threshold,则有

 

  

神经网络实验报告心得 神经网络心得体会_神经网络_03

    其w是权重,b是偏差。

2.2 Sigmoid神经元(Sigmoid Neurons)

权重或偏差有较小的变化,导致输出也有较小的变化。如下图所示:

        

神经网络实验报告心得 神经网络心得体会_权重_04

感知器网络存在的缺陷是:某个感知器较小的权重或偏差变化,可能导致输出在0与1之间进行翻转。所以包含感知器的网络不具备【学习特征】。

   幸运的是:Sigmoid神经元具有此【学习特征】,即其较小的权重或偏差变化,导致其输出变化较小。

   Sigmoid函数:

       

神经网络实验报告心得 神经网络心得体会_过拟合_05

   Sigmoid神经元输出:

     

神经网络实验报告心得 神经网络心得体会_权重_06

  

    感知器与sigmoid神经元的差别:

 感知器只输出0或1

     2)sigmoid神经元不只输出0或1,而可输出[0,1]之间的任意值

3. 神经网络架构

    

神经网络实验报告心得 神经网络心得体会_过拟合_07

3.1 手写数字识别

    

神经网络实验报告心得 神经网络心得体会_神经网络_08

    训练图像大小为28x28,每个训练图像有一个手写数字。

    在输出层,如果第一个神经元被激活(即其输出接近1),则此网络认为此手写数字为0;

           如果第二个神经元被激活(即其输出接近1),则此网络认为此手写数字为1;

           其它以此类推。

3.2 算法描述

    设x表示训练图像,则x是一个28x28=784维列向量。

    

神经网络实验报告心得 神经网络心得体会_神经网络_09

表示输入图片x是数字6   。

    需要寻找一个算法来发现w和b,使其输出接近标签值,为了量化接近程序,定义如下成本函数:

    

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_10

    w:所有权重的集合

    b:所有偏差的集合

    n:训练样本数

    a: 输出向量(其值依赖x,w,b)

    x:一幅训练图像

    ||v||:表示向量的范数,即向量的长度

    C:二次成本函数(mean squared error or MSE)

    如果

神经网络实验报告心得 神经网络心得体会_神经网络_11

接近于0,表示y(x)接近输出a,即学习效果很好。

此成本函数中,w和b为变量。

    注:hidden layers和output layer中的每个神经元对应一个组w、b。

3.2.1 学习目标

如何找到满足要求的w和b:答案是梯度下降法(Gradient Descent)

    1)最小化二次成本函数

    2)检测分类的准确性

    学习目标:在训练神经网络中,找到使二次成本最小的w和b的集合。

3.2.2 梯度下降更新规则

   

神经网络实验报告心得 神经网络心得体会_过拟合_12

   

神经网络实验报告心得 神经网络心得体会_过拟合_13

:表示学习速度(Learning Rate)

此规则用于在神经网络中学习参数w和b。

3.2.3 算法推导(梯度下降法: gradient descent)

    要求极小值,先讨论具有2个变量的简单情况,然后再推广:

    

神经网络实验报告心得 神经网络心得体会_过拟合_14

    令

神经网络实验报告心得 神经网络心得体会_过拟合_15


神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_16

为梯度向量,则有:    

神经网络实验报告心得 神经网络心得体会_神经网络_17

如何选择

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_18

,使

神经网络实验报告心得 神经网络心得体会_过拟合_19

负数,则有:     

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_20

      则v的更新规则为:

      

神经网络实验报告心得 神经网络心得体会_过拟合_21

      按此规则,一步一步跌代,C值不断减少,直到全局最小值。

      总之,梯度下降法是:重复计算梯度

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_22

,然后向相反的方向移动(即下坡最快最陡的方向),如下图所示:      

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_23

      上面讨论了只有两个变量的情况,现在推广到m个变量的情况,对应公式如下:

      

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_24

3.2.4 随机梯度下降法(Stochastic Gradient Descent)

       为不减少计算量,把n个学习样本分成很多组,每组有m个学习样本,每次只计算一个组,则有如下推导:

      

神经网络实验报告心得 神经网络心得体会_神经网络_25

        则w和b的更新规则为:

        

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_26

        注:如果m=1,则为在线学习(online)。

3.2.5 w和b的数量

     对于hidden layers和输出层的神经元,每个神经元对应一个w向量和一个b,w向量的维数是其输入神经元的数量。第一层神经元没有w和b,其值直接输出。

     第一层就表示原始图像数据,这些数据不经任何处理,直接作为Xj参与第二层的运算,第二层首先基于每个Xj,计算其z(z=wx+b),然后计算出sigmoid(z),以此类推。直到最后一层,利用BP算法,先计算最后一层w和b的梯度,然后以此向前,直到计算出第二层的梯度为止。

4. BP算法(反向传播算法)

     BP(Backpropagation Algorithm) :是一个计算成本函数梯度的算法。

     需要基于每个训练样本计算每一层的w和b的梯度,从而更新每一层的w和b。 

偏导数:

神经网络实验报告心得 神经网络心得体会_过拟合_27


神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_28


4.1 定义标记符号

     

神经网络实验报告心得 神经网络心得体会_神经网络_29

              

神经网络实验报告心得 神经网络心得体会_神经网络_30

       则有激活值的如下公式:

       

神经网络实验报告心得 神经网络心得体会_过拟合_31

       函数向量化有如下形式:

      

神经网络实验报告心得 神经网络心得体会_神经网络_32

      即函数对向量的每个元素分别计算,然后生成对应的向量。

      则上面的函数向量表示为:

      

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_33

      记

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_34

,则有

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_35

4.2 公式推导过程

4.2.1 计算激活值

     

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_36

4.2.2 最后一层(L层)的二次成本函数

    

神经网络实验报告心得 神经网络心得体会_过拟合_37

4.2.3 单个训练样本(x)的二次成本函数

    

神经网络实验报告心得 神经网络心得体会_权重_38

4.2.4 定义误差

    

神经网络实验报告心得 神经网络心得体会_权重_39

4.2.5 定义输出层误差

    

神经网络实验报告心得 神经网络心得体会_神经网络_40

4.2.6 求最后一层(L层)激活值的偏导数

      

神经网络实验报告心得 神经网络心得体会_神经网络_41

4.2.7 根据最后一层的误差计算前一层的误差

     

神经网络实验报告心得 神经网络心得体会_神经网络_42

4.2.8 计算目标值

     

神经网络实验报告心得 神经网络心得体会_过拟合_43

4.2.9 BP的四个基本方程式

     

神经网络实验报告心得 神经网络心得体会_过拟合_44

4.3 证明四个基本议程式

4.3.1 证明BP1

      

神经网络实验报告心得 神经网络心得体会_过拟合_45

4.3.2 证明BP2

      

神经网络实验报告心得 神经网络心得体会_过拟合_46

4.4 BP计算过程

      

神经网络实验报告心得 神经网络心得体会_过拟合_47

5. SGD(随机梯度下降)计算过程

    

神经网络实验报告心得 神经网络心得体会_神经网络_48

6. 改进神经网络学习方法

    理想地,期望我们的神经网络能从自己的错误中快速地进行学习。

学习速度由成本函数的偏导数(

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_49


神经网络实验报告心得 神经网络心得体会_权重_50

)决定,所以学习速度慢的根本原因是:偏导数太小。

6.1 交叉熵成本函数

交叉熵成本函数定义如下:

    

神经网络实验报告心得 神经网络心得体会_过拟合_51

    对权重w的求导结果为(n为训练样本数):

    

神经网络实验报告心得 神经网络心得体会_权重_52

     

神经网络实验报告心得 神经网络心得体会_过拟合_53

      根据上面的求导公式,则避免了在二次成本函数中由

神经网络实验报告心得 神经网络心得体会_过拟合_54

导致的学习速度慢问题。

6.2 推广交叉成本函数

交叉成本函数推广到具有多个神经元的多层网络中,则交叉成本函数变为:

     

神经网络实验报告心得 神经网络心得体会_过拟合_55

      

     

神经网络实验报告心得 神经网络心得体会_神经网络_56

与二次成本函数相比,唯一不同的是

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_57

的计算方法,其它计算方法完全相同。

6.3 交叉熵的含义

x->a = a(x) 进行了替换。假设我们将a 想象成我们神经元估计为y = 1 的概率,而1-a 则是y = 0 的概率。那么交叉熵衡量我们学习到y的正确值的平均起来的不确定性。如果输出我们期望的结果,不确定性就会小一些;反之,不确定性就大一些。

6.4 Softmax(柔性最大值)

在现代图像分类网络中最常用。

     Softmax为神经网络定义了一个新的输出层,即它的激活函数不再是Sigmoid,而是Softmax函数。

    

神经网络实验报告心得 神经网络心得体会_权重_58

     

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_59

所以Softmax层的输出可以看作一个概率分布。

     与Softmax相比,Sigmoid层的输出不能形成一个概率分布,且没有一个直观、简单的解释。

6.4.1 Softmax如何解决学习速度慢的问题?

     

神经网络实验报告心得 神经网络心得体会_权重_60

     从以上梯度公式中可知,对于解决学习速度慢的问题:【Softmax输出层+对数似然成本函数】与【Sigmoid输出层+交叉熵成本函数】效果相当。

     在二者间如何做出选择呢?

【Softmax输出层+对数似然成本函数】。    


7. 过拟合和规范化

7.1 过拟合(Overfitting)    

       在神经网络中,过拟合(Overfitting)是一个主要问题。此问题在现代网络中特别突出,因为现代网络有大量的权重和偏差。为了进行有效的训练,我们需要一个检测是否过拟合的方法,以防止过度训练(Overtraining),并且我们还需要可以减少过拟合效果的技术。

      最直接的检测过拟合的方法是:跟踪测试数据在训练过的网络中的准确性。如测试数据分类的准确性不再改善,我们应当停止训练;或测试数据分类的准确性和训练数据分类的准确性都不再改善,我们应当停止训练。

      如果对训练样本过拟合,则其推广能力就差,导致对新的数据的预测或分类的准确性变差。

7.2 规范化(Regularization)-减少过拟合

      增加训练数据是减少过拟合的方法之一。
      规范化(Regularization)也是减少过拟合的方法之一。有时候被称为权重衰减(weight decay)或者L2 规范化。L2 规范化的思想是增加一个额外的项到成本函数中,这个项叫做规范化项。规范化的交叉熵如下:

      

神经网络实验报告心得 神经网络心得体会_过拟合_61

      

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_62

>0是规范化参数(regularization parameter)     

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_63

     C0是原来常规的成本函数。 如果

神经网络实验报告心得 神经网络心得体会_神经网络_64

较小,我们期望最小化原始成本函数;如果

神经网络实验报告心得 神经网络心得体会_权重_65

较大,我们期望最小化权重。

     则可得:

     

神经网络实验报告心得 神经网络心得体会_神经网络_66


     可进一步得到:

     

神经网络实验报告心得 神经网络心得体会_过拟合_67

衰减因子:

神经网络实验报告心得 神经网络心得体会_神经网络_68

    针对小批量训练样本(m个),则有:

    

神经网络实验报告心得 神经网络心得体会_权重_69

7.3 为什么规范化可以减少过拟合

权重越小,复杂度就越低;可以为数据提供更简洁更有力的解释。

     当有异常输入时,小的权重意味着网络输出变化不大,即不易学习到数据中的局部噪声。总而言之,规范化网络基于训练数据的主要规律,从而创建一个相对简单的模型,并且拒绝学习训练数据中的噪声(异常数据)。这样强制网络学习数据的本质规律,并把学到的规律进行更好地推广。


8. 权重初始化

可加快学习速度。    

    假设输入层有1000个神经元,且已经使用归一化的高斯分布初始化了连接第个隐层的权重。如下图所示:

    

神经网络实验报告心得 神经网络心得体会_权重_70

    为了简化,设输入层一半神经元值为1,另一半为0。让我们考虑隐层神经元输入的带权和z:

    

神经网络实验报告心得 神经网络心得体会_权重_71

       其中500项消去了,因为对应的输xj 为0。所以z 是包含501个归一化的高斯随机变量的和,包含500个权重项和1个偏差项。因此z本身是一个均值为0、标准差为

神经网络实验报告心得 神经网络心得体会_神经网络_72

(方差为501)的高斯分布。它是一个非常宽的高斯分布,根本不是非常尖的形状:     

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_73

注:

随机变量X服从一个数学期望为μ、方差为σ^2的高斯分布,记为N(μ,σ^2)。

       正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。

       

神经网络实验报告心得 神经网络心得体会_权重_74

标准正态分布服从N(0,1)
       两个都服从正太分布的变量,例如X服从N(a,b),Y服从N(c,d),且X和Y相互独立,则有:

       1)X+Y服从N(a+c,b+d)

       2)X-Y服从N(a-c,b+d)

方差始终是相加。


       从上图上可以看出|z|会变得很大,即z>>1或z<<-1。如果这样,隐层神经元的输出

神经网络实验报告心得 神经网络心得体会_权重_75

就会接近1或者0,即隐层神经元进入饱和状态了。即隐层神经元的输出

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_76

将非常接近于0或1。在这种情况下,权重的修改对隐层神经元的输出激活值影响很小,从而对下一层的隐层神经元、直到对输出层的神经元的输出都很小,从而导致学习速度慢的问题。

        (注:输出层神经元饱和于错误值也会导致学习速度慢的问题,这可以通过选择成本函数<如交叉熵>来避免,但选择成本函数的方法不能解决隐层神经元饱和的问题)

隐层神经元的权重服从N(0,1)分布,它将导致隐层神经元的激活值接近于0或1,并且导致学习速度下降,如何解决此问题呢?

通过选择更好的初始化权重和偏差可以解决此问题。

       答案是:初始化权重服从N(0,1/

神经网络实验报告心得 神经网络心得体会_权重_77

)分布,偏差服从N(0,1)。其中

神经网络实验报告心得 神经网络心得体会_过拟合_78

表示此层神经元输入权重个数(即此隐层神经元的输入神经元个数,如上例中

神经网络实验报告心得 神经网络心得体会_神经网络_79

=1000)。权重之后为:

神经网络实验报告心得 神经网络心得体会_权重_80

,其服从N(0,3/2)。

       方差的计算方法:500*1/1000+1=1500/1000=3/2。其图形非尖,如下图所示:

       

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_81

        此神经元饱和的可能性很低,从而导致学习速度慢的可能性也很低。


9. 神经网络可以计算任何函数

     “神经网络可以计算任何函数”的真正含义:

     1)不是说一个网络可以被用来准确地计算任何函数,而是我们可以获得尽可能好的一个近似。通过增加隐层神经元的数量,可以提升近似的精度。

     2)可以按照上面的方式近似的函数类其实是连续函数。如果函数不是连续的,也就是会有突然、极陡的跳跃,那么一般来说无法使用一个神经网络进行近似。
     总而言之:包含一个隐层的神经网络可以被用来按照任意给定的精度近似任何连续函数。

10. 为什么训练深度神经网络比较困难?

      对于学习算法,前面使用的是苦力般的学习方法(基于反向传播的随机梯度下降)来训练深度网络,这样产生的问题是:深度神经网络并不比浅层网络性能好太多。

      其根据原因是:在深度网络中,不同层的学习速度差异很大。尤其是, 在网络后面层的学习速度很好的时候,前面层在训练时停滞不变,基本上学不到东西;或先前的层学习的比较好,但是后面层却停滞不变。其停滞不前的原因是学习速度下降了,学习速度下降与基于梯度的学习方法有关。

       实际上,我们发现在深度神经网络中使用基于梯度下降的学习方法本身存在着内在不稳定性。这种不稳定性使得前面或者后面层的学习速度受到抑制。在真正理解了这些难点之后,我们就能够获得有效训练深度网络的更深洞察力。

       在某些深度神经网络中,在我们在隐层BP的时候梯度倾向于变小。这意味着在前面的隐层中的神经元学习速度要慢于后面的隐层。在多数的神经网络中都存在着这个现象,这个现象也被称作是:消失的梯度问题(Vanishing Gradient Problem)。

       在前面层中的梯度会变得非常大,这叫做:激增的梯度问题(Exploding Gradient Problem),这也没比消失的梯度问题更好处理。更加一般地说,在深度神经网络中的梯度是不稳定的,在前面层中或会消失,或会激增。这种不稳定性才是深度神经网络中基于梯度学习的根本问题。

10.1 消失的梯度问题的根本原因?

      深度神经网络中的梯度不稳定性。

      由于梯度的值小于1,在随机梯度下降算法中,前面层的梯度由后面层的梯度参与相乘,所以造成前面层的梯度很小,后面层的梯度依次变大。从而造成了梯度的不均衡性。

11. 卷积神经网络(CNN)

      CNN(Convolutional neural networks):使用了一个特殊架构来进行图像分类。

      它的三个基本概念为:局部感受野(Local receptive fields),共享权重(Shared weights),和混合(Pooling)。

11.1 基本概念

11.1.1 局部感受野

局部感受野(Local receptive fields)。如下图所示:

       

神经网络实验报告心得 神经网络心得体会_过拟合_82


       每个连接学习一个权重,且隐层神经元也学习一个总的偏差。即此隐层神经元正在对输入图像的此区域进行学习、了解。一个隐层神经元与一个局部感受野一一对应,即每个隐层神经元有:5x5个权重和1个偏差。

       如上图所示,对于一个28x28的输入图像,如果局部感受野的大小为5x5,则第一个隐层中有24x24个神经元。

11.1.2 共享权重和偏差

每组24x24个隐层神经元使用相同的权重和偏差。即对于每组中的第(j,k)隐层神经元,其激活值为:

       

神经网络实验报告心得 神经网络心得体会_权重_83

          

       即每组有5x5个权得和1个偏差,其26个需要学习的参数。这表示第一个隐层中的所有神经元在输入图像的不同地方检测相同的特征。(图像具有平移不变性)

特征映射:从输入层到隐层的映射。

特征映射的权重。

特征映射的偏差。

      卷积核或滤波器:共享权重和偏差。

      为了做图像识别,需要多个特征映射,且一个完整的卷积层由多个不同的特征映射组成,如下图包含三个特征映射:

      

神经网络实验报告心得 神经网络心得体会_神经网络_84

       

神经网络实验报告心得 神经网络心得体会_神经网络_85

       上面20幅图像对应20个不同的特征映射(或滤波器、或卷积核),每个特征映射用5x5方块图表示,对应局部感受野的5x5个权重。白色表示小权重,黑色表示大权重。

        共享权重和偏差最大的优点是:大大减少了网络中参数的数量。如全连接网络的参数是卷积网络参数的30倍左右。(卷积网络20个特征:20x26=520, 全连接20个隐层神经元:20x784=15680)

11.1.3 混合层

       卷积神经网络除包含卷积层之外,还包含混合层(Pooling Layers),混合层在卷积层之后,它的职责是简化(总结)卷积层输出的信息。

       混合层根据卷积层输出的所有特征映射,然后提炼出新的特征映射。

       1)Max-Pooling

        

神经网络实验报告心得 神经网络心得体会_神经网络实验报告心得_86

       从2x2区域中找一个最大的激活值输出。

       

神经网络实验报告心得 神经网络心得体会_神经网络_87

       Max-Pooling是一个用于询问:是否在图像的一个区域内发现了指定的特征。

       2)L2-Pooling

       L2-Pooling就是计算矩阵2x2的2范数(先计算4个数的平方的和,然后开平方)。

       L2-Pooing:是一个从卷积层提炼信息的方法。

11.1.4 完整的卷积神经网络

       

神经网络实验报告心得 神经网络心得体会_过拟合_88

       最后一层与前面一层是全连接,其连接数为:3x12x12x10。

使用训练数据训练网络的权重和偏差,然后对输入的图像做出正确的分类。