【Machine Learning, Coursera】机器学习Week5 Neural Networks: Learning

Neural Networks: Learning

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


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

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

相关机器学习概念:
反向传播算法(backpropagation algorithm)


一、代价函数 Cost Function

【Machine Learning, Coursera】机器学习Week5 Neural Networks: Learning
本质上,神经网络是一种通过logistic模型,从旧特征中学习到新特征,经过一定层数的学习后最终输出分类结果的算法。因此,我们可以根据logistic回归的代价函数得到神经网络的代价函数。

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

J(θ)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]+λ2mj=1nθj2

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

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

J(Θ)=1mi=1mk=1K[yk(i)log(hΘ(x(i)))k+(1yk(i))log(1hΘ(x(i)))k]+λ2ml=1L1i=1slj=1sl+1(Θjil)2

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

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

二、计算ΘijlJ(Θ)

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

(一)前向传播算法

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

以一个训练样本为例,令输入层的激励值a(1)=x,运用前向传播算法得到每层的激励值a(l).
【Machine Learning, Coursera】机器学习Week5 Neural Networks: Learning

(二)反向传播算法 Backpropagation Algorithm

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

θjJ(θ)=1mi=1m(hθ(x(i))y(i))xj(i)

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

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

δ(4)=a(4)y

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

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

【Machine Learning, Coursera】机器学习Week5 Neural Networks: Learning


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

(三)ΘijlJ(Θ)=Dij(l)

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

Dij(l)={1mi=1m(error of activation δi(l+1))(feature value aj(l))+λm(parameter value Θijl)if j01mi=1m(error of activation δi(l+1))(feature value aj(l))if j=0

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

Step2: 计算i=1m(error of activation)(feature value)
对训练样本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).(1a(l)),计算δ(L1),δ(L2),...δ(2)
5. 累积偏导数项,Δij(l):=Δij(l)+aj(l)δi(l+1). 向量化表示为Δ(l):=Δ(l)+δ(l+1)(a(l))T,它是偏导数矩阵

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

【Machine Learning, Coursera】机器学习Week5 Neural Networks: Learning
注:图中有错,Dij(l):=1m(Δij(l)+λΘij(l)) if j ≠0