【Machine Learning, Coursera】机器学习Week5 理解神经网络(三)——参数求解

理解神经网络(Neural Networks)(三)

基础知识回顾:https://blog.csdn.net/weixin_42395916/article/details/81099945
实际应用回顾:https://blog.csdn.net/weixin_42395916/article/details/81160314


根据前几周的内容我们知道,应用梯度下降法或者其他高级优化算法求解参数需要写出代码计算
1) J ( Θ )
2) Θ i j l J ( Θ )

本节介绍神经网络的代价函数及其偏导项的计算


一、代价函数 Cost Function

这里写图片描述
本质上,神经网络是一种通过logistic模型,从旧特征中学习到新特征,经过一定层数的学习后最终输出分类结果的算法。因此,我们可以根据logistic回归的代价函数得到神经网络的代价函数。

逻辑回归的代价函数(含正则项):

J ( θ ) = 1 m i = 1 m [ y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 y ( i ) ) l o g ( 1 h θ ( x ( i ) ) ) ] + λ 2 m j = 1 n θ j 2

神经网络代价函数的表达与之类似,但由于神经网络分类结果是以单位列向量的形式输出的,计算代价函数时不仅需要对所有训练样本的cost求和,还要对每一类的cost求和。此外,正则项需要对每一层的除偏置项外的参数求和。

神经网络的代价函数(含正则项):

J ( Θ ) = 1 m i = 1 m k = 1 K [ y k ( i ) l o g ( h Θ ( x ( i ) ) ) k + ( 1 y k ( i ) ) l o g ( 1 h Θ ( x ( i ) ) ) k ] + λ 2 m l = 1 L 1 i = 1 s l j = 1 s l + 1 ( Θ j i l ) 2

其中, ( h Θ ( x ) ) i 表示输出层的第i个输出结果, h Θ ( x ) K .

易错点:正则项中并不包含偏置项 ( i , j = 0 )

二、计算 Θ i j l J ( Θ )

神经网络代价函数的偏导计算比较复杂,需要用到反向传播算法(backpropagation algorithm)。偏导的计算分为三步:
1) 前向传播算法计算各层激励值
2) 反向传播算法计算各层激励值的误差
3) 求偏导

(一)前向传播算法

*前向传播算法具体参见:https://blog.csdn.net/weixin_42395916/article/details/81099945

以一个训练样本为例,令输入层的激励值 a ( 1 ) = x ,运用前向传播算法得到每层的激励值 a ( l ) .
这里写图片描述

(二)反向传播算法 Backpropagation Algorithm

线性回归和逻辑函数代价函数(不含正则项)求偏导结果形式均为

θ j J ( θ ) = 1 m i = 1 m ( h θ ( x ( i ) ) y ( i ) ) x j ( i )

括号内为计算值和实际值的误差。在神经网络算法中,将误差项记作 δ j ( l ) ,它捕捉了l层第j个神经节点激励值的误差。我们用反向传播算法计算它。反向传播算法先计算输出层的 δ ,然后计算上一层的 δ ,重复该过程直至第二层。

首先计算输出层的误差,显然,就是激励值减去实际值。用向量形式可写作

δ ( 4 ) = a ( 4 ) y

接下来计算隐藏层的误差,计算方法见下图。根据sigmoid函数的性质, g ( z ( l ) ) = a ( l ) . ( 1 a ( l ) ) ,所以有

δ ( 3 ) = ( Θ ( 3 ) ) T δ ( 4 ) . a ( 3 ) . ( 1 a ( 3 ) )

这里写图片描述


易错点:不用计算输入层的误差,因为这是我们在训练集中观察到的值,所以不存在误差。

(三) Θ i j l J ( Θ ) = D i j ( l )

将上述内容整合起来,下图是根据激励值和误差得到 J ( Θ ) Θ i j ( l ) 求偏导的值 D i j ( l ) 的详细流程(m个训练样本).
完整的包含正则项的偏导数形式应为

D i j ( l ) = { 1 m i = 1 m ( e r r o r   o f   a c t i v a t i o n   δ i ( l + 1 ) ) ( f e a t u r e   v a l u e   a j ( l ) ) + λ m ( p a r a m e t e r   v a l u e   Θ i j l ) i f   j 0 1 m i = 1 m ( e r r o r   o f   a c t i v a t i o n   δ i ( l + 1 ) ) ( f e a t u r e   v a l u e   a j ( l ) ) i f   j = 0

Step1: 初始化
给定m个训练样本,令 Δ i j ( l ) = 0 , 因此 Δ ( l ) 是一个零矩阵。它用于之后偏导数的计算。

Step2: 计算 i = 1 m ( e r r o r   o f   a c t i v a t i o n ) ( f e a t u r e   v a l u e )
对训练样本t=1:m执行以下循环(下图中为i=1:m,但这个i和下面的角标i无关,有歧义,故改成t):
1. 令 a ( 1 ) := x ( t )
2. 执行前向传播算法得到每层的激励值 a ( l )
3. 根据 y ( t ) ,计算 δ ( L ) = a ( L ) y ( t )
4. 根据 δ ( l ) = ( Θ ( l ) ) T δ ( l + 1 ) . a ( l ) . ( 1 a ( l ) ) ,计算 δ ( L 1 ) , δ ( L 2 ) , . . . δ ( 2 )
5. 累积偏导数项, Δ i j ( l ) := Δ i j ( l ) + a j ( l ) δ i ( l + 1 ) . 向量化表示为 Δ ( l ) := Δ ( l ) + δ ( l + 1 ) ( a ( l ) ) T ,它是偏导数矩阵

Step3: 计算 D i j ( l )
写出完整的偏导数表达式 D i j ( l )

这里写图片描述
注:图中有错, D i j ( l ) := 1 m ( Δ i j ( l ) + λ Θ i j ( l ) ) if j ≠0

猜你喜欢

转载自blog.csdn.net/weixin_42395916/article/details/81915547
今日推荐