热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

神经网络和深度学习学习总结

1.简介神经网络和深度学习是由MichaelNielsen所写,其特色是:兼顾理论和实战,是一本供初学者深入理解DeepLearning的好书。2.感知器与sigmoi

1. 简介

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


2. 感知器与sigmoid神经元

2.1 感知器(Perceptrons)

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

     

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

    

    记wx=jwjxj,b=-threshold,则有

    

    其w是权重,b是偏差。

2.2 Sigmoid神经元(Sigmoid Neurons)

    为了使学习变得可能,需要具备的【学习特征】:权重或偏差有较小的变化,导致输出也有较小的变化。如下图所示:

        

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

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

   Sigmoid函数:

       

   Sigmoid神经元输出:

        

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

     1) 感知器只输出0或1

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

3. 神经网络架构

    

3.1 手写数字识别

    

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

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

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

           其它以此类推。

3.2 算法描述

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

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

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

    

    w:所有权重的集合

    b:所有偏差的集合

    n:训练样本数

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

    x:一幅训练图像

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

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

    如果接近于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 梯度下降更新规则

   

    :表示学习速度(Learning Rate)

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

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

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

    

    令为梯度向量,则有:

    

     现在的问题是如何选择,使负数,则有:

     

      则v的更新规则为:

      

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

      总之,梯度下降法是:重复计算梯度,然后向相反的方向移动(即下坡最快最陡的方向),如下图所示:

      

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

      

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

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

      

        则w和b的更新规则为:

        

        注:如果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。 

      BP的真正目标:是计算每个样本的偏导数:

4.1 定义标记符号

             

      

       则有激活值的如下公式:

       

       函数向量化有如下形式:

      

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

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

      

      记,则有

4.2 公式推导过程

4.2.1 计算激活值

     

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

    

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

    

4.2.4 定义误差

    

4.2.5 定义输出层误差

    

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

      

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

     

4.2.8 计算目标值

     

4.2.9 BP的四个基本方程式

     

4.3 证明四个基本议程式

4.3.1 证明BP1

      

4.3.2 证明BP2

      

4.4 BP计算过程

      

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

6. 改进神经网络学习方法
    理想地,期望我们的神经网络能从自己的错误中快速地进行学习。
    神经元通过改变权重和偏差的来进行学习的学习速度由成本函数的偏导数()决定,所以学习速度慢的根本原因是:偏导数太小。

6.1 交叉熵成本函数

    交叉熵成本函数定义如下:
    
    对权重w的求导结果为(n为训练样本数):
    
      
      根据上面的求导公式,则避免了在二次成本函数中由导致的学习速度慢问题。

6.2 推广交叉成本函数

      把交叉成本函数推广到具有多个神经元的多层网络中,则交叉成本函数变为:
     
      
     
    与二次成本函数相比,唯一不同的是的计算方法,其它计算方法完全相同。

6.3 交叉熵的含义

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

6.4 Softmax(柔性最大值)

     Softmax+log-likelihood(对数似然)成本函数:在现代图像分类网络中最常用
     Softmax为神经网络定义了一个新的输出层,即它的激活函数不再是Sigmoid,而是Softmax函数。
    
     
     Softmax的每个神经元的输出都为正,且它们的和为1。所以Softmax层的输出可以看作一个概率分布
     与Softmax相比,Sigmoid层的输出不能形成一个概率分布,且没有一个直观、简单的解释。

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

     
     从以上梯度公式中可知,对于解决学习速度慢的问题:【Softmax输出层+对数似然成本函数】与【Sigmoid输出层+交叉熵成本函数】效果相当。
     在二者间如何做出选择呢?
     当你需要把输出当做概率解释时,则需要使用【Softmax输出层+对数似然成本函数】    

7. 过拟合和规范化

7.1 过拟合(Overfitting)    

       在神经网络中,过拟合(Overfitting)是一个主要问题。此问题在现代网络中特别突出,因为现代网络有大量的权重和偏差。为了进行有效的训练,我们需要一个检测是否过拟合的方法,以防止过度训练(Overtraining),并且我们还需要可以减少过拟合效果的技术。
      最直接的检测过拟合的方法是:跟踪测试数据在训练过的网络中的准确性。如测试数据分类的准确性不再改善,我们应当停止训练;或测试数据分类的准确性和训练数据分类的准确性都不再改善,我们应当停止训练。
      如果对训练样本过拟合,则其推广能力就差,导致对新的数据的预测或分类的准确性变差。

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

      增加训练数据是减少过拟合的方法之一。
      规范化(Regularization)也是减少过拟合的方法之一。有时候被称为权重衰减(weight decay)或者L2 规范化。L2 规范化的思想是增加一个额外的项到成本函数中,这个项叫做规范化项。规范化的交叉熵如下:
      
      >0是规范化参数(regularization parameter)
     
     C0是原来常规的成本函数。 如果较小,我们期望最小化原始成本函数;如果较大,我们期望最小化权重。
     则可得:
     

     可进一步得到:
     
    权重衰减因子:
    针对小批量训练样本(m个),则有:
    

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

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

8. 权重初始化
   可加快学习速度。    
    假设输入层有1000个神经元,且已经使用归一化的高斯分布初始化了连接第个隐层的权重。如下图所示:
    
    为了简化,设输入层一半神经元值为1,另一半为0。让我们考虑隐层神经元输入的带权和z:
    
       其中500项消去了,因为对应的输xj 为0。所以z 是包含501个归一化的高斯随机变量的和,包含500个权重项和1个偏差项。因此z本身是一个均值为0、标准差为(方差为501)的高斯分布。它是一个非常宽的高斯分布,根本不是非常尖的形状:
     
   注:
       随机变量X服从一个数学期望为μ、方差为σ^2的高斯分布,记为N(μ,σ^2)。
       正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。
       
       标准正态分布服从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。如果这样,隐层神经元的输出就会接近1或者0,即隐层神经元进入饱和状态了。即隐层神经元的输出将非常接近于0或1。在这种情况下,权重的修改对隐层神经元的输出激活值影响很小,从而对下一层的隐层神经元、直到对输出层的神经元的输出都很小,从而导致学习速度慢的问题。
        (注:输出层神经元饱和于错误值也会导致学习速度慢的问题,这可以通过选择成本函数<如交叉熵>来避免,但选择成本函数的方法不能解决隐层神经元饱和的问题)
       从以上分析可知,如果隐层神经元的权重服从N(0,1)分布,它将导致隐层神经元的激活值接近于0或1,并且导致学习速度下降,如何解决此问题呢?
       通过选择更好的初始化权重和偏差可以解决此问题
       答案是:初始化权重服从N(0,1/)分布,偏差服从N(0,1)。其中表示此层神经元输入权重个数(即此隐层神经元的输入神经元个数,如上例中=1000)。权重之后为:,其服从N(0,3/2)。
       方差的计算方法:500*1/1000+1=1500/1000=3/2。其图形非尖,如下图所示:
       
        此神经元饱和的可能性很低,从而导致学习速度慢的可能性也很低。

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 局部感受野

       在之前的全连接网络中,输入被描绘成纵向排列的神经元,但在卷积神经网络中,把输入看作28 x 28的方形神经元排列。第一个隐层中的每个神经元只与输入图像的一个小区域(如5x5)连接,这个输入图像的小区域叫做隐层神经元的局部感受野(Local receptive fields)。如下图所示:
       
       每个连接学习一个权重,且隐层神经元也学习一个总的偏差。即此隐层神经元正在对输入图像的此区域进行学习、了解。一个隐层神经元与一个局部感受野一一对应,即每个隐层神经元有:5x5个权重1个偏差
       如上图所示,对于一个28x28的输入图像,如果局部感受野的大小为5x5,则第一个隐层中有24x24个神经元。

11.1.2 共享权重和偏差

       每组24x24个隐层神经元使用相同的权重和偏差。即对于每组中的第(j,k)隐层神经元,其激活值为:
                 
       即每组有5x5个权得和1个偏差,其26个需要学习的参数。这表示第一个隐层中的所有神经元在输入图像的不同地方检测相同的特征。(图像具有平移不变性)
      特征映射:从输入层到隐层的映射。
      共享权重:定义特征映射的权重。
      共享偏差:定义特征映射的偏差。
      卷积核或滤波器:共享权重和偏差。
      为了做图像识别,需要多个特征映射,且一个完整的卷积层由多个不同的特征映射组成,如下图包含三个特征映射:
      
       
       上面20幅图像对应20个不同的特征映射(或滤波器、或卷积核),每个特征映射用5x5方块图表示,对应局部感受野的5x5个权重。白色表示小权重,黑色表示大权重。
        共享权重和偏差最大的优点是:大大减少了网络中参数的数量。如全连接网络的参数是卷积网络参数的30倍左右。(卷积网络20个特征:20x26=520, 全连接20个隐层神经元:20x784=15680)

11.1.3 混合层

       卷积神经网络除包含卷积层之外,还包含混合层(Pooling Layers),混合层在卷积层之后,它的职责是简化(总结)卷积层输出的信息。
       混合层根据卷积层输出的所有特征映射,然后提炼出新的特征映射。
       1)Max-Pooling
        
       从2x2区域中找一个最大的激活值输出。
       
       Max-Pooling是一个用于询问:是否在图像的一个区域内发现了指定的特征。
       2)L2-Pooling
       L2-Pooling就是计算矩阵2x2的2范数(先计算4个数的平方的和,然后开平方)。
       L2-Pooing:是一个从卷积层提炼信息的方法。

11.1.4 完整的卷积神经网络

       
       最后一层与前面一层是全连接,其连接数为:3x12x12x10。
       卷积神经网络与全连接神经网络的架构不一样,但其目标是一样的, 它们的目标为:使用训练数据训练网络的权重和偏差,然后对输入的图像做出正确的分类
      

来源: http://blog.csdn.net/myarrow/article/details/51322433



来自为知笔记(Wiz)



推荐阅读
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 业务团队与独立团队在数据分析领域的效能对比:谁更胜一筹?
    业务团队与独立团队在数据分析领域的效能对比:谁更胜一筹? ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 对于众多创业公司而言,选择小程序或小视频的发展方向至关重要。本文将深入分析小程序和小视频的特点、优势及局限,帮助创业者做出更明智的选择。 ... [详细]
  • 在2019中国国际智能产业博览会上,百度董事长兼CEO李彦宏强调,人工智能应务实推进其在各行业的应用。随后,在“ABC SUMMIT 2019百度云智峰会”上,百度展示了通过“云+AI”推动AI工业化和产业智能化的最新成果。 ... [详细]
  • 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4277。作者:Bob Lee,日期:2012年9月15日。题目描述:给定n个木棍,求可以组成的不同三角形的数量,最多15根木棍。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
author-avatar
44要和自己交个朋友
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有