【Machine Learning, Coursera】机器学习Week5 Neural Networks: Learning
Neural Networks: Learning
基础知识回顾:https://blog.****.net/weixin_42395916/article/details/81099945
实际应用回顾:https://blog.****.net/weixin_42395916/article/details/81160314
根据前几周的内容我们知道,应用梯度下降法或者其他高级优化算法求解参数需要写出代码计算
1)
2)
本节介绍神经网络的代价函数及其偏导项的计算。
相关机器学习概念:
反向传播算法(backpropagation algorithm)
一、代价函数 Cost Function
本质上,神经网络是一种通过logistic模型,从旧特征中学习到新特征,经过一定层数的学习后最终输出分类结果的算法。因此,我们可以根据logistic回归的代价函数得到神经网络的代价函数。
逻辑回归的代价函数(含正则项):
神经网络代价函数的表达与之类似,但由于神经网络分类结果是以单位列向量的形式输出的,计算代价函数时不仅需要对所有训练样本的cost求和,还要对每一类的cost求和。此外,正则项需要对每一层的除偏置项外的参数求和。
神经网络的代价函数(含正则项):
其中,表示输出层的第i个输出结果,.
易错点:正则项中并不包含偏置项
二、计算
神经网络代价函数的偏导计算比较复杂,需要用到反向传播算法(backpropagation algorithm)。偏导的计算分为三步:
1) 前向传播算法计算各层激励值
2) 反向传播算法计算各层激励值的误差
3) 求偏导
(一)前向传播算法
*前向传播算法具体参见:https://blog.****.net/weixin_42395916/article/details/81099945
以一个训练样本为例,令输入层的激励值,运用前向传播算法得到每层的激励值.
(二)反向传播算法 Backpropagation Algorithm
线性回归和逻辑函数代价函数(不含正则项)求偏导结果形式均为
括号内为计算值和实际值的误差。在神经网络算法中,将误差项记作,它捕捉了l层第j个神经节点激励值的误差。我们用反向传播算法计算它。反向传播算法先计算输出层的,然后计算上一层的,重复该过程直至第二层。
首先计算输出层的误差,显然,就是激励值减去实际值。用向量形式可写作
接下来计算隐藏层的误差,计算方法见下图。根据sigmoid函数的性质,,所以有
易错点:不用计算输入层的误差,因为这是我们在训练集中观察到的值,所以不存在误差。
(三)
将上述内容整合起来,下图是根据激励值和误差得到对求偏导的值的详细流程(m个训练样本).
完整的包含正则项的偏导数形式应为
Step1: 初始化
给定m个训练样本,令, 因此是一个零矩阵。它用于之后偏导数的计算。
Step2: 计算
对训练样本t=1:m执行以下循环(下图中为i=1:m,但这个i和下面的角标i无关,有歧义,故改成t):
1. 令
2. 执行前向传播算法得到每层的激励值
3. 根据,计算
4. 根据,计算
5. 累积偏导数项,. 向量化表示为,它是偏导数矩阵
Step3: 计算
写出完整的偏导数表达式
注:图中有错, if j ≠0