首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习——神经网络代价函数、反向传播、梯度检验、随机初始化

机器学习(十二)

——神经网络代价函数、反向传播、梯度检验、随机初始化

(原创内容,转载请注明来源,谢谢)

一、代价函数

同其他算法一样,为了获得最优化的神经网络,也要定义代价函数。

神经网络的输出的结果有两类,一类是只有和1,称为二分分类(Binary classification),另一种有多个结果,称为多分类。其中,多个结果时,表示方式和平时不太一样。例如,y的结果范围在0~5,则表示y=2,用的是矩阵y=[0 1 0 0 0]T来表示,如下图:

代价函数可以类比logistic回归的代价函数,logistic回归是在输出结果两个的情况下的公式,而神经网络将其拓展到k维的一般化形式,其中,总层数用L表示,Sl表示第l层的神经元的数量,K表示输出的结果个数。公式如下:

二、反向传播算法初涉感悟

关于bp算法,我目前也没太搞懂,就这当前知道的内容,就这吴恩达大神的ppt,说一说我的理解。这个算法在神经网络中非常重要,后面有更多理解后会继续讨论bp算法。

反向传播算法(backpropagation algorithm,又称BP算法),目的是为了更方便的求解代价函数的最小值。

首先,反向传播相对的,叫做前向传播(frontpropagation),即对于神经网络的层次,从第一层开始,根据输入的训练样本,逐个的推导出输出结果公式h(x)的过程。

而反向传播,目的是为了求解代价函数的偏导数,以在梯度下降算法中使用。反向传播,是从后往前推的,根据最后一层的h(x)与最终样本的y的值的差,求出最后一层的误差Δ。接着在输出层的前一层,利用输出层的误差Δ,计算出本层的误差。以此类推。第一层(即输入层)不需要计算,因为输入层就是样本,计算误差没有意义。

总的来说,计算公式如下:其中l表示第l层,这是一个循环,遍历所有的输入的样本,最终得到的结果D即为偏导数的结果,也即代价函数J的偏导数的计算结果。

三、进一步分析FP与BP

1、FP

就着某一层的神经元而言,以下图第二排中间那个红圈的神经元为例,其值是前一层(即输入层)经过一些权重(即θ)后线性组合得到的。其他的神经元的计算公式也都可以类推得到。

这样,就可以前向传播的方式,根据输入的样本若干个x,最终得到输出的h(x)的式子。

2、BP

BP是反向的求解过程,目的是求得代价函数J的每个偏导数。前面一层的每个神经元的偏导数,都是由后面一层推导出来的。

这也是反向传播速度较快的一个原因。由于前面一层的神经元,都需要用到后面一层的每个神经元的偏倒公式,而反向传播,相当于把后一层的每个神经元的偏导数的结果,直接保存在当个神经元中,前面一层的神经元计算偏差的时候,只要直接拿过来乘就可以,不需要再次计算偏导数。

四、梯度检验

梯度检验(gradientchecking),目的是为了校验BP算法的准确性,其本质是采用另一种方式来计算偏导数。这个计算方式速度很慢,因此仅仅用于校验,确认无误后通常不会在代码执行过程中再次执行这个校验。

梯度检验的求偏倒方式,采用最初的偏导数的定义,即横坐标变化了一个微小的值时,求出纵坐标的变化程度,以及两者的商,即为倒数。

这里ε采用很小的一个数,如10-4,另外采用的是两倍的ε,称为双侧拆分求导,这种方式求得的结果比单侧拆分(下图打叉部分)精确度要高。

对于多个变量,则每个遍量去求偏倒,公式如下:

求得这些偏倒后,再与BP算法求得的D进行比较,如果相近则表示结果一致。

需要注意的是,这种算法计算量非常大,速度很慢,因此仅仅作为校验,校验完后真正上线的代码不能执行这个内容。

五、随机初始化

使用梯度下降,涉及到初始点在哪的问题。神经网络初始不能所有θ都为,求证过程如下:

如果初始θ都为,则所有的输入变量xi都对后面的隐藏神经元不起作用,会导致所有的隐藏神经元结果都一样。递推下去,每次循环的时候都会求得一样的隐藏神经元,最终所有的θ都会是一样的。这是不正确的。

为了解决此问题,神经网络里面采用了随机初始化(random initialization)方法,即初始的时候,另每个θ的范围都在一个很小的正负ε之间。这个ε和上面梯度检验的ε没有任何关系,只是符号一样,都表示一个很小的数而已。

六、小结

要获得可靠的神经网络,分为两大步骤:确定神经网络的架构、训练神经网络。

1、确定神经网络的架构

架构的意思是神经网络的连接模式,根据输入样本特征值x的个数、输出的种类数,需要确定隐藏层的数量。

通常,每个隐藏层的神经元数量都一致,且稍大于特征值数量;另外,隐藏层数量通常越多越好,但是太多隐藏层会导致计算量太大。

另外需要注意的是,多个结果时,表示方式和平时不太一样。例如,y的结果范围在0~5,则表示y=2,用的是矩阵y=[0 1 0 0 0]T来表示。

2、训练神经网络

步骤如下:

1)随机初始化所有的权重θ。

2)执行前向传播(FP算法),得到关于x的式子h(x)。

3)计算代价函数J(θ)。

4)执行后向传播(BP算法),计算J(θ)的偏导数。这里BP算法,目的即在于确认梯度下降算法的最佳的下降方向。

5)梯度检验法检查后向传播结果的正确性,检查完后删除梯度检验法相关的代码。

6)使用梯度下降或者其他高级算法,配合BP算法,得到最小化的J(θ)。这里得到的J(θ)是非凸函数(non-convex),即其存在多个极小值,因此梯度下降算法只能求得其中的一个局部最小值,但是正确运用BP算法,这个对结果影响不大。

七、个人感悟

1、关于BP算法

神经网络的BP算法感觉还是比较复杂,学习的过程中感觉没完全学懂BP算法,里面的部分公式为什么那么列。但是我决定先往后学,让自己对机器学习有个更全面的认识。后面有打算学深度学习,到时候会继续研究这个算法的。

2、其他

神经网络实际上像是编程实现一系列的黑盒子,然后让代码通过输入后的一系列处理,得到输出值。目前先这么理解,不会那么的抽象。

——written by linhxx 2018.01.10

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180110B0AIYC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券