浅析神经网络中一点优化知识

  在我们了解过神经网络的人中,都了解神经网络一个有很常见的训练方法,BP训练算法.通过BP算法,我们可以不断的训练网络,最终使得http://hz.chinamaofa.com/huxu/12996.html网络可以无限的逼近一种我们想要拟合的函数,最终训练好的网络它既能在训练集上表现好,也能在测试集上表现不错!

  那么BP算法具体是什么呢?为什么通过BP算法,我们就可以一步一步的走向最优值(即使有可能是局部最优,不是全局最优,我们也可以通过其它的方法也达到全局最优),有没有一些什么数学原理在里面支撑呢?

  这几天梳理了一下这方面的知识点,写下来,一是为了记录,二也可以分享给大家,防止理解错误,一起学习交流.

  BP算法

  BP算法具体是什么,可以参考我上篇文章推送(详细的将BP过程走了一遍,加深理解通俗理解神经网络BP反向传播算法)。

  那么下面解决这个问题,为什么通过BP算法,就可以一步一步的走向更好的结果.

  首先我们从神经网络的运行原理来看,假如现在有下面这个简单的网络,如图:

  

  我们定义符号说明如下:

  

  则我们正向传播一次可以得到下面公式:

  

  如果损失函数C定义为

  

  那么我们希望训练出来的网络预测出来的值和真实的值越接近越好.

  我们先暂时不管SGD这种方法(感兴趣的可以参考我的这篇文章详解梯度下降法的三种形式BGD,SGD以及MBGD),最暴力的我们希望对于一http://www.chinamaofa.com/个训练数据,C能达到最小,而在C表达式中,我们可以把C表达式看做是所有w参数的函数,也就是求这个多元函数的最值问题.那么成功的将一个神经网络的问题引入到数学中最优化的路上了.

  一点思考

  好,我们现在顺利的将一个神经网络要解决的事情转变为一个多元函数的最优化上面来了.

  现在的问题是怎么修改w,来使得C越来越往最小值靠近呢.常见的方法我们可以采取梯度下降法(为什么梯度下降法中梯度的反方向是最快的方向,可以参考我的这篇文章为什么梯度反方向是函数下降最快的方向?).

  可能到这还有点抽象,下面举一个特别简单的例子.

  假如我们的网络非常简单,如下图(符号说明跟上面一样):

  

  那么我们可以得到:

  

  其中

  

  只有w参数是未知的,那么C就可以看做是关于w的二元函数(二元函数的好处就是我们可以在三维坐标上将它可视化出来,便于理解~).图片来自于网络:

  

  下面走一遍算法过程:

  我们先开始随机初始化w参数,相当于我们可以在图上对应A点.

  下面我们的目标是到达最低点F点,于是我们进行往梯度反方向进行移动,公式如下:

  

  每走一步的步伐大小由前面的学习率决定,假如下一步到了B点,这样迭代下去,如果全局只有一个最优点的话,我们在迭代数次后,可以到达F点,从而解决我们的问题。

  那么好了,上面我们给出二元函数这种简单例子,从分析到最后求出结果,我们能够直观可视化最后的步骤。

  那么如果网络复杂后,变成多元函数的最优值求法原理是一模一样的!

  到此,我结束了该文要讲的知识点了.欢迎各位同学指错交流~

  最终的思考

  在我学习的时候,我已经理解了上面的知识了,但是我在思考既然我最后已经得到一个关于w的多元函数了。

  那么我为什么不直接对每一个w进行求偏导呢,然后直接进行更新即可,为什么神经网络的火起还需要bp算法的提出才复兴呢!

  我的疑惑就是为什么不可以直接求偏导,而必须出现BP算法之后才使得神经网络如此的适用呢?下面给出我的思考和理解(欢迎交流~)

  1.为什么不可以直接求导数

  在神经网络中,由于激活函数的存在,很多时候我们在最后的代价函数的时候,包含w参数的代价函数并不是线性函数,比如最简单的

  

  这个函数对w进行求导是无法得到解析解的,那么也就说明了无法直接求导的原因

  2. 那么既然我们我们不能够直接求导,我们是否可以近似的求导呢?

  比如可以利用

  

  根据这个公式我们可以近似的求出对每个参数的导数,间距越小就越接近,那么为什么不可以这样,而必须等到BP算法提出来的时候呢?思考中.......

  答:是因为计算机量的问题,假设我们的网络中有100万个权重,那么我们每一次算权重的偏导时候,都需要计算一遍改变值,而改变值必须要走一遍完整的正向传播.

  那么对于每一个训练样例,我们需要100万零一次的正向传播(还有一次是需要算出C)。

  而我们的BP算法求所有参数的偏导只需要一次反向传播即可,总共为俩次传播计时。

  到这里我想已经解决了为什么不能够用近似的办法,因为速度太慢,计算复杂度太大了~每一次的传播,如果参数多的话,每次的矩阵运算量非常大,以前的机器速度根本无法承受~所以直到有了BP这个利器之后,加快了神经网络的应用速度.

原文地址:https://www.cnblogs.com/zhang-864200/p/9497222.html

时间: 2024-08-29 18:19:40

浅析神经网络中一点优化知识的相关文章

C++ 中有关const引用的一点小知识

在读<C++ Primer>时,发现之前对const的概念不是很清晰,只知道如何去使用,于是翻开const引用部分又阅读了一遍,发现有两点自己要注意的地方 1.const限定的对象不可以初始化非const引用 ex. 1 const int src = 512; 2 const int &ok_dest = src; //ok: 引用和初始化对象都是const 3 int &err_dest = src; //error : 引用为非const 原因很简单, src 是不可以被

浅析MySQL中的Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化

本文出处:http://www.cnblogs.com/wy123/p/7374078.html(保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) ICP优化原理 Index Condition Pushdown (ICP),也称为索引条件下推,体现在执行计划的上是会出现Using index condition(Extra列,当然Extra列的信息太多了,只能做简单分析)ICP原理通俗讲就是,查询过程中,直接在查询引擎

Unity教程之再谈Unity中的优化技术

这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的”顶点处理“一项.这里的几何体就是指组成场景中对象的网格结构. 3D游戏制作都由模型制作开始.而在建模时,有一条我们需要记住:尽可能减少模型中三角形的数目,一些对于模型没有影响.或是肉眼非常难察觉到区别的顶点都要尽可能去掉.例如在下面左图中,正方体内部很多顶点都是不需要的,而把这个模型导入到Unity里就会是

如何选取一个神经网络中的超参数hyper-parameters

1.什么是超参数 所谓超参数,就是机器学习模型里面的框架参数.比如聚类方法里面类的个数,或者话题模型里面话题的个数等等,都称为超参数.它们跟训练过程中学习的参数(权重)是不一样的,通常是手工设定的,经过不断试错来调整,或者对一系列穷举出来的参数组合一通枚举(叫做网格搜索).深度学习和神经网络模型,有很多这样的参数需要学习. 2.一些启发式规则 在实际应用中,当你使用神经网络去解决问题时,很难找到好的超参数.假设我们现在正在处理MINIST数据库的问题,并且对超参数是如何使用的一无所知.假设我们大

android网络交互之DNS优化知识整理

android网络交互之DNS优化知识整理 之前的工作中,经常会遇到DNS解析出问题导致网络交互的操作无法正常进行. 在很多的移动开发过程中,与服务端的交互的url通常是包含域名的.而在实际的网络交互的过程中,第一步就需要对域名进行dns解析. 复杂的网络环境里面,dns解析会耗费很长的时间.甚至是解析失败.这是经常会发生的. 所以这一步的优化是非常至关重要的. 有那么一种方案叫:IP直连 就是在网络交互的过程中,跳过域名的DNS解析,直接用IP进行网络交互.可以避免这一大麻烦. 针对这一方案,

浅析Java中的final关键字(转)

浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下面是本文的目录大纲: 一.final关键字的基本用法 二.深入理解final关键字 若有不正之处,请多多谅解并欢迎指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3736238.html 一

Caffe中的优化方法

在Deep Learning中,往往loss function是非凸的,没有解析解,我们需要通过优化方法来求解.Caffe通过协调的进行整个网络的前向传播推倒以及后向梯度对参数进行更新,试图减小损失. Caffe已经封装好了三种优化方法,分别是Stochastic Gradient Descent (SGD), AdaptiveGradient (ADAGRAD), and Nesterov's Accelerated Gradient (NAG). Solver的流程: 1.     设计好需

浅析Java中的访问权限控制

浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但是工程师A并不希望ClassA被该应用中其他所用的类都访问到,那么该如何处理? 场景2:如果工程师A编写了一个类ClassA,其中有两个方法fun1.fun2,工程师只想让fun1对外可见,也就是说,如果别的工程师来调用ClassA,只可以调用方法fun1,那么该怎么处理? 此时,访问权限控制便可以

搜索引擎优化知识35条

以下35条搜索引擎优化知识,假设能做好,我相信排名不会非常差! 1.从标题说起,每一个页面标题字数最好控制在30个字左右,别问为什么. 2.关键词选择,做不了热门的,就选择中等的来做,不然会让你失去信心. 3.目标关键词放在首页,长尾关键词放在内容页. 4.每一个页面选择3个关键词,千万别想得到太多. 5.最重要的关键词放在标题首位,依此类推. 6.站点描写叙述简单,明了.開始 - 中间 - 结束部分自然出现关键词. 7.站点导航非常重要,用图片做导航讨好了用户,但缺失去了搜索引擎. 8.站点图