zoukankan      html  css  js  c++  java
  • 深度学习基本知识


    概念与理解

    来源:https://zhuanlan.zhihu.com/p/22888385

    一、基本变换:层。层在做什么?

    神经网络由层来构建。每一层的工作内容:

    (动态图5种空间操作)

      每层神经网络的数学理解:用线性变换跟随着非线性变化,将输入空间投向另一个空间。

     

      每层神经网络的物理理解:通过现有的不同物质的组合形成新物质。

     二、理解视角:层的行为如何完成识别任务?

     数学视角:“线性可分”

      

           

          

           这里有非常棒的可视化空间变换demo,一定要打开尝试并感受这种扭曲过程。更多内容请看Neural Networks, Manifolds, and Topology

           线性可分视角:神经网络的学习就是学习如何利用矩阵的线性变换激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间分类/回归。 
      增加节点数:增加维度(W权重矩阵的维度),即增加线性转换能力。 
           增加层数:增加激活函数的次数,即增加非线性转换次数

    物理视角:“物质组成”

    • 类比:回想上文由碳氧原子通过不同组合形成若干分子的例子。从分子层面继续迭代这种组合思想,可以形成DNA,细胞,组织,器官,最终可以形成一个完整的人。继续迭代还会有家庭,公司,国家等。这种现象在身边随处可见。并且原子的内部结构与太阳系又惊人的相似。不同层级之间都是以类似的几种规则再不断形成新物质。你也可能听过分形学这三个字。可通过观看从1米到150亿光年来感受自然界这种层级现象的普遍性。
    • 人脸识别情景:我们可以模拟这种思想并应用在画面识别上。由像素组成菱角再组成五官最后到不同的人脸。每一层代表不同的不同的物质层面 (如分子层)。而每层的W存储着如何组合上一层的物质从而形成新物质。 如果我们完全掌握一架飞机是如何从分子开始一层一层形成的,拿到一堆分子后,我们就可以判断他们是否可以以此形成方式,形成一架飞机。 附:Tensorflow playground展示了数据是如何“流动”的。

     

      物质组成视角:神经网络的学习过程就是学习物质组成方式的过程。 
      增加节点数:增加同一层物质的种类,比如118个元素的原子层就有118个节点。
      增加层数:增加更多层级,比如分子层,原子层,器官层,并通过判断更抽象的概念来识别物体。

    三、神经网络的训练

      神经网络的学习过程就是学习控制着空间变换方式(物质组成方式)的权重矩阵W。如何学习W?

      如何训练:

       既然我们希望网络的输出尽可能的接近真正想要预测的值。那么就可以通过比较当前网络的预测值和我们真正想要的目标值,再根据两者的差异情况更新每一层的权重矩阵(比如,如果网络的预测值高了,就调整权重让它预测低一些,不断调整,直到能够预测出目标值)。因此就需要先定义“如何比较预测值和目标值的差异”,这便是损失函数或目标函数(loss function or objective function),用于衡量预测值和目标值的差异的方程。loss function的输出值(loss)越高表示差异性越大。那神经网络的训练变成了尽可能的缩小loss的过程。 所用的方法是梯度下降(Gradient descent):通过使loss值向当前点对应梯度的反方向不断移动,来降低loss。一次移动多少是由学习速率(learning rate)来控制的。

       

      梯度下降的问题:

       使用梯度下降训练神经网络拥有两个主要难题。

        

       

      试图解决“卡在局部极小值”问题的方法分两大类:

    • 调节步伐:调节学习速率,使每一次的更新“步伐”不同。常用方法有:
      • 随机梯度下降(Stochastic Gradient Descent (SGD):每次只更新一个样本所计算的梯度
      • 小批量梯度下降(Mini-batch gradient descent):每次更新若干样本所计算的梯度的平均值
      • 动量(Momentum):不仅仅考虑当前样本所计算的梯度;Nesterov动量(Nesterov Momentum):Momentum的改进
      • Adagrad、RMSProp、Adadelta、Adam:这些方法都是训练过程中依照规则降低学习速率,部分也综合动量
    • 优化起点:合理初始化权重(weights initialization)、预训练网络(pre-train),使网络获得一个较好的“起始点”,如最右侧的起始点就比最左侧的起始点要好。常用方法有:高斯分布初始权重(Gaussian distribution)、均匀分布初始权重(Uniform distribution)、Glorot 初始权重、He初始权、稀疏矩阵初始权重(sparse matrix)

       

      2、梯度的计算

       机器学习所处理的数据都是高维数据,该如何快速计算梯度、而不是以年来计算。 其次如何更新隐藏层的权重? 解决方法是:计算图,反向传播算法。这里的解释留给非常棒的Computational Graphs: Backpropagation 需要知道的是,反向传播算法是求梯度的一种方法。如同快速傅里叶变换(FFT)的贡献。 而计算图的概念又使梯度的计算更加合理方便

      基本流程图:

       下面结合图简单浏览一下训练和识别过程,并描述各个部分的作用。要结合图解阅读以下内容。

     

      

        

         

          

        • 预测新值:训练过所有样本后,打乱样本顺序再次训练若干次训练完毕后,当再来新的数据input,就可以利用训练的网络来预测了。这时的output就是效果很好的预测值了。

         

      为了理解深层神经网络,需要明白最基本的训练过程。 若能理解训练过程是通过梯度下降尽可能缩小loss的过程即可。 若有理解障碍,可以用python实践一下从零开始训练一个神经网络,体会整个训练过程。若有时间则可以再体会一下计算图自动求梯度的方便利用TensorFlow

      结合Tensorflow playground理解5种空间操作和物质组成视角

       https://zhuanlan.zhihu.com/p/22888385

       

      

    四、表现原因

      文章的最后稍微提一下深层神经网络。深层神经网络就是拥有更多层数的神经网络。

      按照上文在理解视角中所述的观点,可以想出下面两条理由关于为什么更深的网络会更加容易识别,增加容纳变异体(variation)(红苹果、绿苹果)的能力、鲁棒性(robust)。

      数学视角:变异体(variation),很多的分类的任务需要高度非线性的分割曲线。不断的利用那5种空间变换操作将原始输入空间像“捏橡皮泥一样”在高维空间下捏成更为线性可分/稀疏的形状。

      物理视角:通过对“抽象概念”判断识别物体,而非细节。比如对“飞机”的判断,即便人类自己也无法用语言或者若干条规则来解释自己如何判断一个飞机。因为人脑中真正判断的不是是否“有机翼”、“能飞行”等细节现象,而是一个抽象概念。层数越深,这种概念就越抽象,所能涵盖的变异体就越多,就可以容纳战斗机,客机等很多种不同种类的飞机。


     深度学习

    参考:https://zhuanlan.zhihu.com/p/24245040


    参考:

    https://zhuanlan.zhihu.com/p/24245040

    https://zhuanlan.zhihu.com/p/22888385

    https://www.zhihu.com/question/26006703/answer/126777449

  • 相关阅读:
    软件需求模式阅读笔记02
    软件需求模式阅读笔记1
    问题账户需求分析
    浅谈软件架构师的工作过程
    架构之美阅读笔记五
    架构之美阅读笔记四
    架构之美阅读笔记三
    架构之美阅读笔记二
    架构之美阅读笔记一
    软件需求与分析课堂讨论一
  • 原文地址:https://www.cnblogs.com/xianhan/p/8609573.html
Copyright © 2011-2022 走看看