码迷,mamicode.com
首页 > 其他好文 > 详细

神经网络-梯度优化

时间:2017-10-27 20:35:01      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:style   就是   display   size   span   求和   起点   改善   ram   

cost function

为了衡量神经网络的识别能力,定义cost function:

          C(w,b)=12nx(||y(x)?a||2)

其中,w表示weight参数,b表示bias参数,n表示训练集中所有数据的个数,a表示对于输入x,通过神经网络后的输出为ay(x)是数据x的实际标签。如果C(w,b)的值越小,则说明越多的训练数据被正确归类,或者说明当前的网络的正确识别能力越强。

梯度下降 

为了获得适当的参数w,b使得C(w,b)尽可能地小,可以通过梯度下降算法来优化求解。首先我们先简化问题,假设C是关于单变量v函数,即C(v)。梯度下降求最优参数v的基本思想就是从一个随机起点开始,沿着梯度的反方向前进一小步,更新v,这样不断依次地更新参数,直至使得cost function足够小为止。v的更新方程如下,其中η是步长系数。

           vv?η?C?v

而在神经网络中存在两组参数w,b,同样可以按照相同的方式来迭代优化,使cost function不断减小,

           ww?η?C?w

           bb?η?C?b

但是这里会有个小问题,我们回过头来看原本的cost function C=12nx(||y(x)?a||2),它是由所有训练数据的cost之和构成的。那么在计算梯度?C时,同样要基于所有训练数据来进行计算,实际上有,?C=1nx?Cx?Cx是训练数据x对应的梯度值。那么问题就来了,当训练集中的数据庞大时,就势必会影响到模型的整体训练效率。所以由此引出随机梯度下降的概念(stochastic gradient descent)

随机梯度下降

下降法受到训练数据集数量的限制,容易存在效率问题,所以引入随机梯度下降的概念来改善这个问题。既然使用所有的训练集计算梯度会耗费较多的时间,那么我们考虑在所有训练集上随机选取一个小的子集上进行训练,可以认为在这个子集上训练的平均误差与在整个训练集上的训练误差是比较接近的,而又由于训练数据的减少,就可以明显减少模型整体的训练时间。基于这样的想法,我们将所有的训练数据分为若干个子集X1,X2,...,Xm,称之为mini-batch。对于子集Xj,有

          mj=1?CXjmx?Cxn=?C

所以wk,bl的更新公式可以重新写为:

          wkwk?ηmj?CXj?wk

          blbl?ηmj?CXj?bl

 上述公式的求和是针对当前mini-batch中的所有训练数据进行的,然后再随机选择下一个mini-batch,直至将训练集中的所有训练数据遍历完为止,这样的一个过程称为一个epoch。结束一个epoch后,可以继续进行下一个epoch。epoch的次数以及mini-batch的大小需要单独作为参数设置。

 

神经网络-梯度优化

标签:style   就是   display   size   span   求和   起点   改善   ram   

原文地址:http://www.cnblogs.com/Bella2017/p/7744969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!