机器学习(十二)
——神经网络代价函数、反向传播、梯度检验、随机初始化
(原创内容,转载请注明来源,谢谢)
一、代价函数
同其他算法一样,为了获得最优化的神经网络,也要定义代价函数。
神经网络的输出的结果有两类,一类是只有和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
领取专属 10元无门槛券
私享最新 技术干货