From fd23ff5e20c935ecfa6329bce939b7959474231e Mon Sep 17 00:00:00 2001 From: scruel Date: Thu, 25 Jan 2018 13:05:41 +0800 Subject: [PATCH] correct derivation mistakes correct the derivation mistakes in week5 --- week3.html | 20 ++++++++--------- week3.md | 2 +- week5.html | 4 ++-- week5.md | 64 ++++++++++++++++++++++++++++++++++++------------------ 4 files changed, 56 insertions(+), 34 deletions(-) diff --git a/week3.html b/week3.html index e479cec..bb46e3b 100644 --- a/week3.html +++ b/week3.html @@ -332,18 +332,18 @@ header, .context-menu, .megamenu-content, footer { font-family: "Segoe UI", Aria -

6 逻辑回归(Logistic Regression)

6.1 分类(Classification)

在分类问题中,预测的结果是离散值(结果是否属于某一类),逻辑回归算法(Logistic Regression)被用于解决这类分类问题。

讨论肿瘤诊断问题:

肿瘤诊断问题的目的是告诉病人是否为恶性肿瘤,是一个二元分类问题(binary class problems),则定义 ,其中 0 表示负向类(negative class),代表恶性肿瘤("-"),1 为正向类(positive class),代表良性肿瘤("+")。如图,定义最右边的样本为偏差项

在未加入偏差项时,线性回归算法给出了品红色的拟合直线,若规定

,预测为 ,即正向类;

,预测为 ,即负向类。

即以 0.5 为阈值(threshold),则我们就可以根据线性回归结果,得到相对正确的分类结果

 

接下来加入偏差项,线性回归算法给出了靛青色的拟合直线,如果阈值仍然为 0.5,可以看到算法在某些情况下会给出完全错误的结果,对于癌症、肿瘤诊断这类要求预测极其精确的问题,这种情况是无法容忍的。

不仅如此,线性回归算法的值域为全体实数集(),则当线性回归函数给出诸如 等很大/很小(负数)的数值时,结果 ,这显得非常怪异。

 

区别于线性回归算法,逻辑回归算法是一个分类算法,其输出值永远在 0 到 1 之间,即

6.2 假设函数表示(Hypothesis Representation)

为了使 ,引入逻辑回归模型,定义假设函数

对比线性回归函数 表示逻辑函数(logistic function),复合起来,则称为逻辑回归函数。

逻辑函数是 S 形函数,会将所有实数映射到 范围。

sigmoid 函数(如下图)是逻辑函数的特殊情况,其公式为

sigmoid function

应用 sigmoid 函数,则逻辑回归模型:

逻辑回归模型中, 的作用是,根据输入 以及参数 ,计算得出”输出 “的可能性(estimated probability),概率学中表示为:

 

以肿瘤诊断为例, 表示病人有 的概率得了恶性肿瘤。

6.3 决策边界(Decision Boundary)

决策边界的概念,可帮助我们更好地理解逻辑回归模型的拟合原理。

在逻辑回归中,有假设函数

为了得出分类的结果,这里和前面一样,规定以 为阈值:

回忆一下 sigmoid 函数的图像:

sigmoid function

观察可得当 时,有 ,即

同线性回归模型的不同点在于:

直观一点来个例子, 是下图模型的假设函数:

根据上面的讨论,要进行分类,那么只要 时,就预测 ,即预测为正向类。

如果取 ,则有 ,当 时,易绘制图中的品红色直线即决策边界,为正向类(以红叉标注的数据)给出 的分类预测结果。

 

上面讨论了逻辑回归模型中线性拟合的例子,下面则是一个多项式拟合的例子,和线性回归中的情况也是类似的。

为了拟合下图数据,建模多项式假设函数:

这里取 ,决策边界对应了一个在原点处的单位圆(),如此便可给出分类结果,如图中品红色曲线:

 

当然,通过一些更为复杂的多项式,还能拟合那些图像显得非常怪异的数据,使得决策边界形似碗状、爱心状等等。

 

简单来说,决策边界就是分类的分界线,分类现在实际就由 (中的 )决定啦。

6.4 代价函数(Cost Function)

那我们怎么知道决策边界是啥样? 多少时能很好的拟合数据?当然,见招拆招,总要来个

如果直接套用线性回归的代价函数:

其中 ,可绘制关于 的图像,如下图

回忆线性回归中的平方损失函数,其是一个二次凸函数(碗状),二次凸函数的重要性质是只有一个局部最小点即全局最小点。上图中有许多局部最小点,这样将使得梯度下降算法无法确定收敛点是全局最优。

如果此处的损失函数也是一个凸函数,是否也有同样的性质,从而最优化?这类讨论凸函数最优值的问题,被称为凸优化问题(Convex optimization)

当然,损失函数不止平方损失函数一种。

对于逻辑回归,更换平方损失函数为对数损失函数,可由统计学中的最大似然估计方法推出代价函数

则有关于 的图像如下:

如左图,当训练集的结果为 (正样本)时,随着假设函数趋向于 ,代价函数的值会趋于 ,即意味着拟合程度很好。如果假设函数此时趋于 ,则会给出一个很高的代价,拟合程度,算法会根据其迅速纠正 值,右图 同理。

区别于平方损失函数,对数损失函数也是一个凸函数,但没有局部最优值。

6.5 简化的成本函数和梯度下降(Simplified Cost Function and Gradient Descent)

由于懒得分类讨论,对于二元分类问题,我们可把代价函数简化为一个函数: -

,左边式子整体为 ,当 ,则 ,右边式子整体为0,也就和上面的分段函数一样了,而一个式子计算起来更方便。

向量化实现:

 

为了最优化 ,仍使用梯度下降法,算法同线性回归中一致:

解出偏导得:

注意,虽然形式上梯度下降算法同线性回归一样,但其中的假设函不同,即,不过求导后的结果也相同。

向量化实现:

 

逻辑回归中代价函数求导的推导过程:

忆及 ,则

-

忆及 ,对 求偏导则没有 的项求偏导即为 ,都消去,则得:

所以有:

- - - - - -

则可得代价函数的导数:

6.6 进阶优化(Advanced Optimization)

运行梯度下降算法,其能最小化代价函数 并得出 的最优值,在使用梯度下降算法时,如果不需要观察代价函数的收敛情况,则直接计算 的导数项即可,而不需要计算 值。

我们编写代码给出代价函数及其偏导数然后传入梯度下降算法中,接下来算法则会为我们最小化代价函数给出参数的最优解。这类算法被称为最优化算法(Optimization Algorithms),梯度下降算法不是唯一的最小化算法1

一些最优化算法:

比较梯度下降算法:一些最优化算法虽然会更为复杂,难以调试,自行实现又困难重重,开源库又效率也不一,哎,做个调包侠还得碰运气。不过这些算法通常效率更高,并无需选择学习速率 (少一个参数少一份痛苦啊!)。

Octave/Matlab 中对这类高级算法做了封装,易于调用。

 

假设有 ,要求参数 的最优值。

下面为 Octave/Matlab 求解最优化问题的代码实例:

  1. 创建一个函数以返回代价函数及其偏导数:
 
  1. costFunction 函数及所需参数传入最优化函数 fminunc,以求解最优化问题:
 

'GradObj', 'on': 启用梯度目标参数(则需要将梯度传入算法)

'MaxIter', 100: 最大迭代次数为 100 次

@xxx: Octave/Matlab 中的函数指针

optTheta: 最优化得到的参数向量

functionVal: 引用函数最后一次的返回值

exitFlag: 标记代价函数是否收敛

注:Octave/Matlab 中可以使用 help fminunc 命令随时查看函数的帮助文档。

  1. 返回结果
 

6.7 多类别分类: 一对多(Multiclass Classification: One-vs-all)

一直在讨论二元分类问题,这里谈谈多类别分类问题(比如天气预报)。

原理是,转化多类别分类问题为多个二元分类问题,这种方法被称为 One-vs-all。

正式定义:

: 输出 (属于第 个分类)的可能性

: 类别总数,如上图

注意多类别分类问题中 的结果不再只是一个实数而是一个向量,如果类别总数为 ,现在 就是一个 维向量。

对于某个样本实例,需计算所有的 种分类情况得到 ,然后看分为哪个类别时预测输出的值最大,就说它输出属于哪个类别,即

7 正则化(Regularization)

7.1 过拟合问题(The Problem of Overfitting)

对于拟合的表现,可以分为三类情况:

线性模型中的拟合情况(左图欠拟合,右图过拟合): +

6 逻辑回归(Logistic Regression)

6.1 分类(Classification)

在分类问题中,预测的结果是离散值(结果是否属于某一类),逻辑回归算法(Logistic Regression)被用于解决这类分类问题。

  • 垃圾邮件判断
  • 金融欺诈判断
  • 肿瘤诊断

讨论肿瘤诊断问题:

肿瘤诊断问题的目的是告诉病人是否为恶性肿瘤,是一个二元分类问题(binary class problems),则定义 ,其中 0 表示负向类(negative class),代表恶性肿瘤("-"),1 为正向类(positive class),代表良性肿瘤("+")。如图,定义最右边的样本为偏差项

在未加入偏差项时,线性回归算法给出了品红色的拟合直线,若规定

,预测为 ,即正向类;

,预测为 ,即负向类。

即以 0.5 为阈值(threshold),则我们就可以根据线性回归结果,得到相对正确的分类结果

 

接下来加入偏差项,线性回归算法给出了靛青色的拟合直线,如果阈值仍然为 0.5,可以看到算法在某些情况下会给出完全错误的结果,对于癌症、肿瘤诊断这类要求预测极其精确的问题,这种情况是无法容忍的。

不仅如此,线性回归算法的值域为全体实数集(),则当线性回归函数给出诸如 等很大/很小(负数)的数值时,结果 ,这显得非常怪异。

 

区别于线性回归算法,逻辑回归算法是一个分类算法,其输出值永远在 0 到 1 之间,即

6.2 假设函数表示(Hypothesis Representation)

为了使 ,引入逻辑回归模型,定义假设函数

对比线性回归函数 表示逻辑函数(logistic function),复合起来,则称为逻辑回归函数。

逻辑函数是 S 形函数,会将所有实数映射到 范围。

sigmoid 函数(如下图)是逻辑函数的特殊情况,其公式为

sigmoid function

应用 sigmoid 函数,则逻辑回归模型:

逻辑回归模型中, 的作用是,根据输入 以及参数 ,计算得出”输出 “的可能性(estimated probability),概率学中表示为:

 

以肿瘤诊断为例, 表示病人有 的概率得了恶性肿瘤。

6.3 决策边界(Decision Boundary)

决策边界的概念,可帮助我们更好地理解逻辑回归模型的拟合原理。

在逻辑回归中,有假设函数

为了得出分类的结果,这里和前面一样,规定以 为阈值:

回忆一下 sigmoid 函数的图像:

sigmoid function

观察可得当 时,有 ,即

同线性回归模型的不同点在于:

直观一点来个例子, 是下图模型的假设函数:

根据上面的讨论,要进行分类,那么只要 时,就预测 ,即预测为正向类。

如果取 ,则有 ,当 时,易绘制图中的品红色直线即决策边界,为正向类(以红叉标注的数据)给出 的分类预测结果。

 

上面讨论了逻辑回归模型中线性拟合的例子,下面则是一个多项式拟合的例子,和线性回归中的情况也是类似的。

为了拟合下图数据,建模多项式假设函数:

这里取 ,决策边界对应了一个在原点处的单位圆(),如此便可给出分类结果,如图中品红色曲线:

 

当然,通过一些更为复杂的多项式,还能拟合那些图像显得非常怪异的数据,使得决策边界形似碗状、爱心状等等。

 

简单来说,决策边界就是分类的分界线,分类现在实际就由 (中的 )决定啦。

6.4 代价函数(Cost Function)

那我们怎么知道决策边界是啥样? 多少时能很好的拟合数据?当然,见招拆招,总要来个

如果直接套用线性回归的代价函数:

其中 ,可绘制关于 的图像,如下图

回忆线性回归中的平方损失函数,其是一个二次凸函数(碗状),二次凸函数的重要性质是只有一个局部最小点即全局最小点。上图中有许多局部最小点,这样将使得梯度下降算法无法确定收敛点是全局最优。

如果此处的损失函数也是一个凸函数,是否也有同样的性质,从而最优化?这类讨论凸函数最优值的问题,被称为凸优化问题(Convex optimization)

当然,损失函数不止平方损失函数一种。

对于逻辑回归,更换平方损失函数为对数损失函数,可由统计学中的最大似然估计方法推出代价函数

则有关于 的图像如下:

如左图,当训练集的结果为 (正样本)时,随着假设函数趋向于 ,代价函数的值会趋于 ,即意味着拟合程度很好。如果假设函数此时趋于 ,则会给出一个很高的代价,拟合程度,算法会根据其迅速纠正 值,右图 同理。

区别于平方损失函数,对数损失函数也是一个凸函数,但没有局部最优值。

6.5 简化的成本函数和梯度下降(Simplified Cost Function and Gradient Descent)

由于懒得分类讨论,对于二元分类问题,我们可把代价函数简化为一个函数: +

,左边式子整体为 ,当 ,则 ,右边式子整体为0,也就和上面的分段函数一样了,而一个式子计算起来更方便。

向量化实现:

 

为了最优化 ,仍使用梯度下降法,算法同线性回归中一致:

解出偏导得:

注意,虽然形式上梯度下降算法同线性回归一样,但其中的假设函不同,即,不过求导后的结果也相同。

向量化实现:

 

逻辑回归中代价函数求导的推导过程:

忆及 ,则

+

忆及 ,对 求偏导则没有 的项求偏导即为 ,都消去,则得:

所以有:

+ + + + + +

则可得代价函数的导数:

6.6 进阶优化(Advanced Optimization)

运行梯度下降算法,其能最小化代价函数 并得出 的最优值,在使用梯度下降算法时,如果不需要观察代价函数的收敛情况,则直接计算 的导数项即可,而不需要计算 值。

我们编写代码给出代价函数及其偏导数然后传入梯度下降算法中,接下来算法则会为我们最小化代价函数给出参数的最优解。这类算法被称为最优化算法(Optimization Algorithms),梯度下降算法不是唯一的最小化算法1

一些最优化算法:

  • 梯度下降法(Gradient Descent)

  • 共轭梯度算法(Conjugate gradient)

  • 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods)

    • DFP算法
    • 局部优化法(BFGS)
    • 有限内存局部优化法(L-BFGS)
  • 拉格朗日乘数法(Lagrange multiplier)

比较梯度下降算法:一些最优化算法虽然会更为复杂,难以调试,自行实现又困难重重,开源库又效率也不一,哎,做个调包侠还得碰运气。不过这些算法通常效率更高,并无需选择学习速率 (少一个参数少一份痛苦啊!)。

Octave/Matlab 中对这类高级算法做了封装,易于调用。

 

假设有 ,要求参数 的最优值。

下面为 Octave/Matlab 求解最优化问题的代码实例:

  1. 创建一个函数以返回代价函数及其偏导数:
 
  1. costFunction 函数及所需参数传入最优化函数 fminunc,以求解最优化问题:
 

'GradObj', 'on': 启用梯度目标参数(则需要将梯度传入算法)

'MaxIter', 100: 最大迭代次数为 100 次

@xxx: Octave/Matlab 中的函数指针

optTheta: 最优化得到的参数向量

functionVal: 引用函数最后一次的返回值

exitFlag: 标记代价函数是否收敛

注:Octave/Matlab 中可以使用 help fminunc 命令随时查看函数的帮助文档。

  1. 返回结果
 

6.7 多类别分类: 一对多(Multiclass Classification: One-vs-all)

一直在讨论二元分类问题,这里谈谈多类别分类问题(比如天气预报)。

原理是,转化多类别分类问题为多个二元分类问题,这种方法被称为 One-vs-all。

正式定义:

: 输出 (属于第 个分类)的可能性

: 类别总数,如上图

注意多类别分类问题中 的结果不再只是一个实数而是一个向量,如果类别总数为 ,现在 就是一个 维向量。

对于某个样本实例,需计算所有的 种分类情况得到 ,然后看分为哪个类别时预测输出的值最大,就说它输出属于哪个类别,即

7 正则化(Regularization)

7.1 过拟合问题(The Problem of Overfitting)

对于拟合的表现,可以分为三类情况:

  • 欠拟合(Underfitting)

    无法很好的拟合训练集中的数据,预测值和实际值的误差很大,这类情况被称为欠拟合。拟合模型比较简单(特征选少了)时易出现这类情况。类似于,你上课不好好听,啥都不会,下课也差不多啥都不会。

  • 优良的拟合(Just right)

    不论是训练集数据还是不在训练集中的预测数据,都能给出较为正确的结果。类似于,学霸学神!

  • 过拟合(Overfitting)

    能很好甚至完美拟合训练集中的数据,即 ,但是对于不在训练集中的新数据,预测值和实际值的误差会很大,泛化能力弱,这类情况被称为过拟合。拟合模型过于复杂(特征选多了)时易出现这类情况。类似于,你上课跟着老师做题都会都听懂了,下课遇到新题就懵了不会拓展。

线性模型中的拟合情况(左图欠拟合,右图过拟合):

逻辑分类模型中的拟合情况:

 

为了度量拟合表现,引入:

  • 偏差(bias)

    指模型的预测值与真实值的偏离程度。偏差越大,预测值偏离真实值越厉害。偏差低意味着能较好地反应训练集中的数据情况。

  • 方差(Variance)

    指模型预测值的离散程度或者变化范围。方差越大,数据的分布越分散,函数波动越大,泛化能力越差。方差低意味着拟合曲线的稳定性高,波动小。

据此,我们有对同一数据的各类拟合情况如下图: -

据上图,高偏差意味着欠拟合,高方差意味着过拟合。

我们应尽量使得拟合模型处于低方差(较好地拟合数据)状态且同时处于低偏差(较好地预测新值)的状态。

避免过拟合的方法有:

  • 减少特征的数量

    • 手动选取需保留的特征
    • 使用模型选择算法来选取合适的特征(如 PCA 算法)
    • 减少特征的方式易丢失有用的特征信息
  • 正则化(Regularization)

    • 可保留所有参数(许多有用的特征都能轻微影响结果)
    • 减少/惩罚各参数大小(magnitude),以减轻各参数对模型的影响程度
    • 当有很多参数对于模型只有轻微影响时,正则化方法的表现很好

7.2 代价函数(Cost Function)

很多时候由于特征数量过多,过拟合时我们很难选出要保留的特征,这时候应用正则化方法则是很好的选择。

上文中, 这样一个复杂的多项式较易过拟合,在不减少特征的情况下,如果能消除类似于 等复杂部分,那复杂函数就变得简单了

为了保留各个参数的信息,不修改假设函数,改而修改代价函数:

上式中,我们在代价函数中增加了 的惩罚项(penalty term) ,如果要最小化代价函数,那么势必需要极大地减小 ,从而使得假设函数中的 这两项的参数非常小,就相当于没有了,假设函数也就“变得”简单了,从而在保留各参数的情况下避免了过拟合问题。

 

根据上面的讨论,有时也无法决定要减少哪个参数,故统一惩罚除了 外的所有参数。

代价函数:

: 正则化参数(Regularization Parameter),

: 不惩罚基础参数

: 正则化项

正则化参数类似于学习速率,也需要我们自行对其选择一个合适的值。

  • 过大

    • 导致模型欠拟合(假设可能会变成近乎 的直线 )
    • 无法正常去过拟问题
    • 梯度下降可能无法收敛
  • 过小

    • 无法避免过拟合(等于没有)

正则化符合奥卡姆剃刀(Occam's razor)原理。在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率。

正则化是结构风险最小化策略的实现,是去过拟合问题的典型方法,虽然看起来多了个一参数多了一重麻烦,后文会介绍自动选取正则化参数的方法。模型越复杂,正则化参数值就越大。比如,正则化项可以是模型参数向量的范数。

7.3 线性回归正则化(Regularized Linear Regression)

应用正则化的线性回归梯度下降算法:

也可以移项得到更新表达式的另一种表示形式

: 正则化项

 

应用正则化的正规方程法2

: 正则化项

: 第一行第一列为 维单位矩阵

Matlab/Octave 代码:

 

 

前文提到正则化可以解决正规方程法中不可逆的问题,即增加了 正则化项后,可以保证 可逆(invertible),即便 不可逆(non-invertible)。

7.4 逻辑回归正则化(Regularized Logistic Regression)

为逻辑回归的代价函数添加正则化项:

前文已经证明过逻辑回归和线性回归的代价函数的求导结果是一样的,此处通过给正则化项添加常数 ,则其求导结果也就一样了。

从而有应用正则化的逻辑回归梯度下降算法:

 


+

据上图,高偏差意味着欠拟合,高方差意味着过拟合。

我们应尽量使得拟合模型处于低方差(较好地拟合数据)状态且同时处于低偏差(较好地预测新值)的状态。

避免过拟合的方法有:

  • 减少特征的数量

    • 手动选取需保留的特征
    • 使用模型选择算法来选取合适的特征(如 PCA 算法)
    • 减少特征的方式易丢失有用的特征信息
  • 正则化(Regularization)

    • 可保留所有参数(许多有用的特征都能轻微影响结果)
    • 减少/惩罚各参数大小(magnitude),以减轻各参数对模型的影响程度
    • 当有很多参数对于模型只有轻微影响时,正则化方法的表现很好

7.2 代价函数(Cost Function)

很多时候由于特征数量过多,过拟合时我们很难选出要保留的特征,这时候应用正则化方法则是很好的选择。

上文中, 这样一个复杂的多项式较易过拟合,在不减少特征的情况下,如果能消除类似于 等复杂部分,那复杂函数就变得简单了

为了保留各个参数的信息,不修改假设函数,改而修改代价函数:

上式中,我们在代价函数中增加了 的惩罚项(penalty term) ,如果要最小化代价函数,那么势必需要极大地减小 ,从而使得假设函数中的 这两项的参数非常小,就相当于没有了,假设函数也就“变得”简单了,从而在保留各参数的情况下避免了过拟合问题。

 

根据上面的讨论,有时也无法决定要减少哪个参数,故统一惩罚除了 外的所有参数。

代价函数:

: 正则化参数(Regularization Parameter),

: 不惩罚基础参数

: 正则化项

正则化参数类似于学习速率,也需要我们自行对其选择一个合适的值。

  • 过大

    • 导致模型欠拟合(假设可能会变成近乎 的直线 )
    • 无法正常去过拟问题
    • 梯度下降可能无法收敛
  • 过小

    • 无法避免过拟合(等于没有)

正则化符合奥卡姆剃刀(Occam's razor)原理。在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率。

正则化是结构风险最小化策略的实现,是去过拟合问题的典型方法,虽然看起来多了个一参数多了一重麻烦,后文会介绍自动选取正则化参数的方法。模型越复杂,正则化参数值就越大。比如,正则化项可以是模型参数向量的范数。

7.3 线性回归正则化(Regularized Linear Regression)

应用正则化的线性回归梯度下降算法:

也可以移项得到更新表达式的另一种表示形式

: 正则化项

 

应用正则化的正规方程法2

: 正则化项

: 第一行第一列为 维单位矩阵

Matlab/Octave 代码:

 

 

前文提到正则化可以解决正规方程法中不可逆的问题,即增加了 正则化项后,可以保证 可逆(invertible),即便 不可逆(non-invertible)。

7.4 逻辑回归正则化(Regularized Logistic Regression)

为逻辑回归的代价函数添加正则化项:

前文已经证明过逻辑回归和线性回归的代价函数的求导结果是一样的,此处通过给正则化项添加常数 ,则其求导结果也就一样了。

从而有应用正则化的逻辑回归梯度下降算法:

 

diff --git a/week3.md b/week3.md index 498dee9..56e9b7d 100644 --- a/week3.md +++ b/week3.md @@ -178,7 +178,7 @@ $J(\theta) = - \frac{1}{m} \displaystyle \sum_{i=1}^m [y^{(i)}\log (h_\theta (x^ $f(\theta)={{y}^{(i)}}\log \left( \frac{1}{1+{{e}^{-z}}} \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-\frac{1}{1+{{e}^{-z}}} \right)$ $=-{{y}^{(i)}}\log \left( 1+{{e}^{-z}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{z}} \right)$ -忆及 $z=\Theta^Tx^{(i)}$,对 $\theta_j$ 求偏导则没有 $\theta_j$ 的项求偏导即为 $0$,都消去,则得: +忆及 $z=\theta^Tx^{(i)}$,对 $\theta_j$ 求偏导则没有 $\theta_j$ 的项求偏导即为 $0$,都消去,则得: $\frac{\partial z}{\partial {\theta_{j}}}=\frac{\partial }{\partial {\theta_{j}}}\left( \theta^Tx^{(i)} \right)=x^{(i)}_j$ diff --git a/week5.html b/week5.html index 77ee7ae..331198e 100644 --- a/week5.html +++ b/week5.html @@ -220,7 +220,7 @@ header, .context-menu, .megamenu-content, footer { font-family: "Segoe UI", Aria -

9 神经网络: 学习(Neural Networks: Learning)

9.1 代价函数(Cost Function)

神经网络的分类问题有两种:

  • 二元分类问题(01分类)

    只有一个输出单元 ()

  • 多元分类问题

    输出单元不止一个()

神经网络的代价函数公式:

: 神经网络的总层数

: 第 层激活单元的数量(不包含偏置单元)

: 分为第 个分类()的概率

: 输出层的输出单元数量,即类数 - 1

: 第 个训练样本的第 个分量值

: 维向量

 

注:此处符号表达和第四周的内容有异有同,暂时先按照视频来,有必要的话可以做下统一.

公式可长可长了是吧,但是不是有些熟悉?对照下逻辑回归中的代价函数:

在神经网络的代价函数中,

  • 左边的变化实际上是为了求解 分类问题,即公式会对每个样本特征都运行 次,并依次给出分为第 类的概率,
  • 右边的正则化项比较容易理解,每一层有多维矩阵 ,从左到右看这个三次求和式 ,就是对每一层间的多维矩权重 ,依次平方后求取其除了偏置权重部分的和值,并循环累加即得结果。

: 即 维向量

: 即 维矩阵

再次可见,神经网络背后的思想是和逻辑回归一样的。

 

9.2 反向传播算法(Backpropagation Algorithm)

类似于回归模型中的梯度下降算法,为了求解神经网络最优化问题,我们也要计算 ,以此

在神经网络中,代价函数看上去虽然不复杂,但要注意到其中 的求取实际上是由前向传播算法求得,即需从输入层开始,根据每层间的权重矩阵 依次计算激活单元的值 。 在最优化代价函数时,我们必然也需要最优化每一层的权重矩阵,再次强调一下,算法最优化的是权重,而不是输入

反向传播算法用于计算每一层权重矩阵的偏导 ,算法实际上是对代价函数求导的拆解。

  1. 首先运行前向传播算法,对于给定训练集 得到初始预测

  2. 接下来则应用反向传播算法,从输出层开始计算每一层预测的误差(error),以此来求取偏导。 -

  3. 输出层的误差即为预测与训练集结果的之间的差值:

    对于隐藏层中每一层的误差,都通过上一层的误差来计算:

    解得

    根据以上公式计算依次每一层的误差

  4. 初始化 矩阵,即令所有的 ,使得 为一个全零矩阵。

    然后依次求解 ,向量化实现即

  5. 求解完 后,最后则可求得偏导

    • , if ,
    • , if .(对应于偏置单元)

: 第 层的误差向量

: 第 层的第 个激活单元的误差

: 从第 层的第 个单元映射到第 层的第 个单元的权重代价的偏导(所有样本实例之和)

: 的样本均值与正则化项之和

 

注意:无需计算 ,因为输入没有误差。

这就是反向传播算法,即从输出层开始不断向前迭代,根据上一层的误差依次计算当前层的误差,以求得代价函数的偏导。

应用反向传播(BP)算法的神经网络被称为 BP 网络,也称前馈网络(向前反馈)。

 

《机器学习》一书中提到的 BP 网络强大之处:

任何布尔函数都可由两层神经网络准确表达,但所需的中间单元的数量随输入呈指数级增长;

任何连续函数都可由两层神经网络以任意精度逼近;

任何函数都可由三层神经网络以任意程度逼近。

9.3 直观理解反向传播(Backpropagation Intuition)

这节给出了反向传播算法中误差的数学意义:

视频内容实际在上文都涉及到了,上节也做了解释:

反向传播算法,即从输出层开始不断向前迭代,根据上一层的误差依次计算当前层的误差,以求得代价函数的偏导。

不过,这块还是有些不好理解,可回顾视频。下面以实际例子为基础给出证明。

 

神经网络中代价函数求导的推导过程

代价函数无正则化项时:

再次的,为了方便起见,这里假设样本只有一个,则有:

忆及 ,代入后整理后可得:

再次为了便于计算,我们用到如上图这个四层神经网络。

我们有

观察考虑各变量与 之间的关系,有

要计算 的偏导,就要按照关系不断往前看,每一次回头看,就称为一次反向传播。

把回头看的关系说的“微积分一点”,那就是 的微小改变会引起 的改变, 的微小改变会引起 的改变, 的微小改变又会引起 的改变,关系方向也可以反过来写:

如果你还记得微积分(不然你应该也不会看到这里(*^_^*)~),听起来像不像在暗示链式求导?

,则有 关于 的偏导:

忆及 ,则

则对于输出层,我们证得

再次忆及

即证得

对于任意的输出层单元,有 关系不变,故证得:

好了,接下来来看一下 关于 的偏导

仍然观察考虑各变量与 之间的关系,有

易求得

即证得

实际上所有隐藏层都可以上面的方式求解并得到同一结果,故证得:

再添回为了计算方便去掉的 和正则化项(时刻记住偏置单元不正则化),即为上节中 的偏导。

 

证明结束,留个课后作业呀,自己来计算一下 关于 的偏导,是不是能得到同样的结果?

9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters)

9.5 梯度检验(Gradient Checking)

9.6 随机初始化(Random Initialization)

9.7 Putting It Together

9.8 自主驾驶(Autonomous Driving)

+

9 神经网络: 学习(Neural Networks: Learning)

9.1 代价函数(Cost Function)

神经网络的分类问题有两种:

  • 二元分类问题(01分类)

    只有一个输出单元 ()

  • 多元分类问题

    输出单元不止一个()

神经网络的代价函数公式:

: 神经网络的总层数

: 第 层激活单元的数量(不包含偏置单元)

: 分为第 个分类()的概率

: 输出层的输出单元数量,即类数 - 1

: 第 个训练样本的第 个分量值

: 维向量

 

注:此处符号表达和第四周的内容有异有同,暂时先按照视频来,有必要的话可以做下统一.

公式可长可长了是吧,但是不是有些熟悉?对照下逻辑回归中的代价函数:

在神经网络的代价函数中,

  • 左边的变化实际上是为了求解 分类问题,即公式会对每个样本特征都运行 次,并依次给出分为第 类的概率,
  • 右边的正则化项比较容易理解,每一层有多维矩阵 ,从左到右看这个三次求和式 ,就是对每一层间的多维矩权重 ,依次平方后求取其除了偏置权重部分的和值,并循环累加即得结果。

: 即 维向量

: 即 维矩阵

再次可见,神经网络背后的思想是和逻辑回归一样的。

 

9.2 反向传播算法(Backpropagation Algorithm)

类似于回归模型中的梯度下降算法,为了求解神经网络最优化问题,我们也要计算 ,以此

在神经网络中,代价函数看上去虽然不复杂,但要注意到其中 的求取实际上是由前向传播算法求得,即需从输入层开始,根据每层间的权重矩阵 依次计算激活单元的值 。 在最优化代价函数时,我们必然也需要最优化每一层的权重矩阵,再次强调一下,算法最优化的是权重,而不是输入

反向传播算法用于计算每一层权重矩阵的偏导 ,算法实际上是对代价函数求导的拆解。

  1. 首先运行前向传播算法,对于给定训练集 得到初始预测

  2. 接下来则应用反向传播算法,从输出层开始计算每一层预测的误差(error),以此来求取偏导。 +

  3. 输出层的误差即为预测与训练集结果的之间的差值:

    对于隐藏层中每一层的误差,都通过上一层的误差来计算:

    隐藏层中, 即为增加偏置单元后的 维度匹配,得以完成矩阵运算。

    即对于隐藏层,有 添加偏置单元

    解得

    则有

    求导前的公式不同于视频内容,经核实为视频内容错误。推导请阅下节。

    根据以上公式计算依次每一层的误差

  4. 初始化 矩阵,即令所有的 ,使得 为一个全零矩阵。

    然后依次求解 ,向量化实现即

  5. 求解完 后,最后则可求得偏导

    • , if ,
    • , if .(对应于偏置单元)

: 第 层的误差向量

: 第 层的第 个激活单元的误差

: 从第 层的第 个单元映射到第 层的第 个单元的权重代价的偏导(所有样本实例之和)

: 的样本均值与正则化项之和

 

注:无需计算 ,因为输入没有误差。

这就是反向传播算法,即从输出层开始不断向前迭代,根据上一层的误差依次计算当前层的误差,以求得代价函数的偏导。

应用反向传播(BP)算法的神经网络被称为 BP 网络,也称前馈网络(向前反馈)。

 

《机器学习》一书中提到的 BP 网络强大之处:

任何布尔函数都可由两层神经网络准确表达,但所需的中间单元的数量随输入呈指数级增长;

任何连续函数都可由两层神经网络以任意精度逼近;

任何函数都可由三层神经网络以任意程度逼近。

9.3 直观理解反向传播(Backpropagation Intuition)

这节给出了反向传播算法中误差的数学意义:

视频内容实际在上文都涉及到了,上节也做了解释:

反向传播算法,即从输出层开始不断向前迭代,根据上一层的误差依次计算当前层的误差,以求得代价函数的偏导。

不过,这块还是有些不好理解,可回顾视频。

前文提到输入层没有偏差,所以没有 ,同样的,偏置单元的值始终为 1,也没有误差,故一般会选择忽略偏置单元项的误差

下面以实际例子为基础给出推导证明。

 

神经网络中代价函数求导的推导过程

代价函数无正则化项时:

再次的,为了方便起见,这里假设样本只有一个,则有:

忆及 ,代入后整理后可得:

再次为了便于计算,我们用到如上图这个四层神经网络。

忆及 ,我们有

观察考虑各变量与 之间的关系,有

要计算 的偏导,就要按照关系不断往前看,每一次回头看,就称为一次反向传播。

把回头看的关系说的“微积分一点”,那就是 的微小改变会引起 的改变, 的微小改变会引起 的改变, 的微小改变又会引起 的改变,关系方向也可以反过来写:

如果你还记得微积分(不然你应该也不会看到这里(*^_^*)~),听起来像不像在暗示链式求导?

,则有 关于 的偏导:

再次忆及 ,则

则对于输出层,我们证得

再次忆及

即证得

对于任意的输出层 ,有 关系不变,故证得:

好了,接下来来看一下 关于 的偏导

仍然观察考虑各变量与 之间的关系,有

易求得

添加偏置单元 ,则

证明时为先求导后添加偏置单元,与前向传播算法顺序一致,实际实现时,求导和添加偏置单元的顺序可作调换,由于一般选择忽略偏置单元的误差,所以并不影响结果。

即证得

对于任意的隐藏层 ,有 关系不变,故证得:

再添回为了计算方便去掉的 和正则化项(时刻记住偏置单元不正则化),即为上节中 的偏导。

 

证明结束,留个课后作业呀,自己来计算一下 关于 的偏导,是不是能得到同样的结果?

9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters)

在 Octave/Matlab 中,如果要使用类似于 fminunc 等高级最优化函数,其函数参数、函数返回值等都为且只为向量,而由于神经网络中的权重是多维矩阵,所以需要用到参数展开这个技巧。

将矩阵展开成向量

 

9.5 梯度检验(Gradient Checking)

9.6 随机初始化(Random Initialization)

9.7 总结起来(Putting It Together)

9.8 自主驾驶(Autonomous Driving)

\ No newline at end of file diff --git a/week5.md b/week5.md index be947fe..e400767 100644 --- a/week5.md +++ b/week5.md @@ -61,8 +61,6 @@ $J(\theta) = - \frac{1}{m} \sum_{i=1}^m [ y^{(i)}\ \log (h_\theta (x^{(i)})) + ( **反向传播算法**用于计算每一层权重矩阵的偏导 $\frac{\partial}{\partial\Theta}J(\Theta)$,算法实际上是对代价函数求导的拆解。 -![](image/20180123_122124.png) - 1. 首先运行前向传播算法,对于给定训练集 $\lbrace (x^{(1)}, y^{(1)}) \cdots (x^{(m)}, y^{(m)})\rbrace$ 得到初始预测 $a^{(L)}=h_\Theta(x)$ 2. 接下来则应用反向传播算法,从输出层开始计算每一层预测的**误差**(error),以此来求取偏导。 @@ -70,13 +68,25 @@ $J(\theta) = - \frac{1}{m} \sum_{i=1}^m [ y^{(i)}\ \log (h_\theta (x^{(i)})) + ( 3. 输出层的误差即为预测与训练集结果的之间的差值:$\delta^{(L)} = a^{(L)} - y$, - 对于隐藏层中每一层的误差,都通过上一层的误差来计算: $\delta^{(l)} = (\Theta^{(l)})^T\delta^{(l+1)} .*\ g'(z^{(l)})\; \; \; \; \; \text{for }l := L-1, L-2,\dots,2.$ + 对于隐藏层中每一层的误差,都通过上一层的误差来计算: + + $\delta^{(l)} = (\Theta^{(l)})^T\delta^{(l+1)} .*\ \frac{\partial a^{(l)}}{\partial z^{(l)}}\; \; \; \; \; \text{for }l := L-1, L-2,\dots,2.$ + + 隐藏层中,$a^{(l)}$ 即为增加偏置单元后的 $g(z^{(l)})$,$a^{(l)}$ 与 $\Theta^{(l)}$ 维度匹配,得以完成矩阵运算。 + + 即对于隐藏层,有 $a^{(l)} = (g(z^{(l)})$ 添加偏置单元 $a^{(l)}_0 = 1)$ + + 解得 $\frac{\partial}{\partial z^{(l)}}g(z^{(l)})=g'(z^{(l)})=g(z^{(l)}) .* \ (1-g(z^{(l)}))$, + + 则有 $\delta^{(l)} = (\Theta^{(l)})^T\delta^{(l+1)} .*\ a^{(l)} .*\ (1-a^{(l)}), \ \ a^{(l)}_0 = 1$。 + + > $\delta^{(l)}$ 求导前的公式不同于视频内容,经核实为视频内容错误。推导请阅下节。 - 解得 $\delta^{(l)} = (\Theta^{(l)})^T\delta^{(l+1)} .*\ a^{(l)} .* \ (1-a^{(l)})$。 + ​ 根据以上公式计算依次每一层的误差 $\delta^{(L)}, \delta^{(L-1)},\dots,\delta^{(2)}$。 -4. 初始化 $\Delta$ 矩阵,即令所有的 $\Delta^{(l)}_{i,j}=0$,使得 $\Delta$ 为一个全零矩阵。 +4. 初始化 $\Delta​$ 矩阵,即令所有的 $\Delta^{(l)}_{i,j}=0​$,使得 $\Delta​$ 为一个全零矩阵。 然后依次求解 $\Delta^{(l)}_{i,j} := \Delta^{(l)}_{i,j} + a_j^{(l)} \delta_i^{(l+1)}$,向量化实现即 $\Delta^{(l)} := \Delta^{(l)} + \delta^{(l+1)}(a^{(l)})^T$ @@ -96,7 +106,7 @@ $J(\theta) = - \frac{1}{m} \sum_{i=1}^m [ y^{(i)}\ \log (h_\theta (x^{(i)})) + ( > > > -> 注意:无需计算 $\delta^{(1)}$,因为输入没有误差。 +> 注:无需计算 $\delta^{(1)}$,因为输入没有误差。 这就是反向传播算法,即从输出层开始不断**向前迭代**,根据**上一层**的误差依次计算当前层的误差,以求得代价函数的偏导。 @@ -124,7 +134,11 @@ $\delta_j^{(l)} = \dfrac{\partial}{\partial z_j^{(l)}} cost(t)$ > 反向传播算法,即从输出层开始不断**向前迭代**,根据**上一层**的误差依次计算当前层的误差,以求得代价函数的偏导。 -不过,这块还是有些不好理解,可回顾视频。下面以实际例子为基础给出证明。 +不过,这块还是有些不好理解,可回顾视频。 + +前文提到输入层没有偏差,所以没有 $\delta^{(1)}$,同样的,偏置单元的值始终为 1,也没有误差,故一般会选择**忽略偏置单元项的误差**。 + +下面以实际例子为基础给出推导证明。 @@ -138,17 +152,17 @@ $\begin{gather*} J(\Theta) = - \frac{1}{m} \sum_{i=1}^m \left[y^{(i)} \log ((h_\ $\begin{gather*} J(\Theta) = -\left[y \log ((h_\Theta (x))) + (1 - y)\log (1 - (h_\Theta(x)))\right] \end{gather*}$ -忆及 $a^{(l)}=g(z^{(l)})$,$h_\Theta(x) = a^{(L)}$,$g(z) = \frac{1}{1+e^{(-z)}}$,代入后整理后可得: +忆及 $h_\Theta(x) = a^{(L)} = g(z^{(L)})$,$g(z) = \frac{1}{1+e^{(-z)}}$,代入后整理后可得: -$J(\Theta) ={y}\log \left( 1+{{e}^{-z}} \right)+\left( 1-{y} \right)\log \left( 1+{{e}^{z}} \right)$ +$J(\Theta) ={y}\log \left( 1+{{e}^{-z^{(L)}}} \right)+\left( 1-{y} \right)\log \left( 1+{{e}^{z^{(L)}}} \right)$ ![](image/20180121_110111.png) 再次为了便于计算,我们用到如上图这个四层神经网络。 -我们有 $h_\Theta(x)=a^{(4)}= g(z^{(4)})=g(\Theta^{(3)}a^{(3)})$ +忆及 $z^{(l)} = \Theta^{(l-1)}a^{(l-1)}$,我们有 $h_\Theta(x)=a^{(4)}= g(z^{(4)})=g(\Theta^{(3)}a^{(3)})$ -观察考虑各变量与 $\Theta^{(3)}$ 之间的关系,有 $J(\Theta) \rightarrow a^{(4)}\rightarrow z^{(4)}\rightarrow \Theta^{(3)}$ +观察考虑各变量与 $\Theta^{(3)}$ 之间的关系,有 $J(\Theta) \rightarrow a^{(4)}\rightarrow z^{(4)}\rightarrow \Theta^{(3)}$ 要计算 $J(\Theta)$ 的偏导,就要按照关系不断往前看,每一次回头看,就称为一次反向传播。 @@ -156,21 +170,21 @@ $J(\Theta) ={y}\log \left( 1+{{e}^{-z}} \right)+\left( 1-{y} \right)\log \left( 如果你还记得微积分(不然你应该也不会看到这里(\*^_^\*)~),听起来像不像在暗示链式求导? -令 $\delta^{(l)} = \frac{\partial}{\partial z^{(l)}} J(\Theta)$,则有 $J(\Theta)$ 关于 $\Theta^{(3)}$ 的偏导: +令 $\delta^{(l)} = \frac{\partial}{\partial z^{(l)}} J(\Theta)$,则有 $J(\Theta)$ 关于 $\Theta^{(3)}$ 的偏导: $\frac{\partial}{\partial\Theta^{(3)}} J(\Theta) = \frac{\partial J(\Theta)}{\partial z^{(4)}} \frac{\partial z^{(4)}}{\partial\Theta^{(3)}} = \delta^{(4)}\frac{\partial z^{(4)}}{\partial\Theta^{(3)}}$ -忆及 $z^{(l)} = \Theta^{(l-1)}a^{(l-1)}$,则 $\frac{\partial z^{(4)}}{\partial\Theta^{(3)}} = a^{(3)}$ +再次忆及 $z^{(l)} = \Theta^{(l-1)}a^{(l-1)}$,则 $\frac{\partial z^{(4)}}{\partial\Theta^{(3)}} = a^{(3)}$ 则对于输出层,我们证得 $\frac{\partial}{\partial\Theta^{(3)}} J(\Theta) = a^{(3)}\delta^{(4)}$。 -再次忆及 $a^{(l)}=g(z^{(l)}), \ g(z) = \frac{1}{1+e^{-z}}$ +再次忆及 $g(z) = \frac{1}{1+e^{-z}}$,$a^{(L)}=g(z^{(L)})$ $\delta^{(4)}=\frac{\partial}{\partial z^{(4)}}J(\Theta)={{y}}\frac{-e^{-z^{(4)}}}{1+e^{-z^{(4)}}}+\left( 1-{{y}} \right)\frac{{e^{z^{(4)}}}}{1+e^{z^{(4)}}} = g(z^{(4)}) - y = a^{(4)}-y$ 即证得 $\delta^{(4)} = a^{(4)}-y$ -对于任意的输出层单元,有 $J(\Theta) \rightarrow a^{(L)}\rightarrow z^{(L)}\rightarrow \Theta^{(L-1)}$ 关系不变,故证得: +对于任意的输出层 $L$ 及 $\Theta^{(L-1)}$,有 $J(\Theta) \rightarrow a^{(L)}\rightarrow z^{(L)}\rightarrow \Theta^{(L-1)}$ 关系不变,故证得: $$ \frac{\partial}{\partial\Theta^{(L-1)}} J(\Theta) = a^{(L-1)}\delta^{(L)}, \ \ \delta^{(L)} = a^{(L)}-y $$ @@ -186,15 +200,17 @@ $\delta^{(3)} = \frac{\partial}{\partial z^{(3)}}J(\Theta) =\frac{\partial J(\Th $g'(z) =\frac{e^{-z}}{(1+e^{-z})^2}=\frac{(1+e^{-z})-1}{(1+e^{-z})^2}=\frac{1}{1+e^{-z}}-\frac{1}{(1+e^{-z})^2}=g(z)(1-g(z))$ -则 $g'(z^{(l)})=a^{(l)} .* \ (1-a^{(l)})$ +即 $g'(z^{(l)})=g(z^{(l)}) .* \ (1-g(z^{(l)}))$ -则 $\frac{\partial a^{(3)}}{\partial z^{(3)}} = g'(z^{(3)}) =a^{(4)} .* \ (1-a^{(4)})$ +有 $a^{(l)} = (g(z^{(l)})$ 添加偏置单元 $a^{(l)}_0 = 1)$,则 $\frac{\partial a^{(3)}}{\partial z^{(3)}}=a^{(3)} .*\ (1-a^{(3)})$, -即证得 $\delta^{(3)}=(\Theta^{(3)})^T\delta^{(4)}.*g(z^{(3)})$ +> 证明时为先求导后添加偏置单元,与前向传播算法顺序一致,实际实现时,求导和添加偏置单元的顺序可作调换,由于一般选择忽略偏置单元的误差,所以并不影响结果。 -实际上所有隐藏层都可以上面的方式求解并得到同一结果,故证得: +即证得 $\delta^{(3)}=(\Theta^{(3)})^T\delta^{(4)}.*(a^{(3)})'=(\Theta^{(3)})^T\delta^{(4)}.*\ a^{(3)} .*\ (1-a^{(3)})$ + +对于任意的隐藏层 $l + 1​$ 及 $\Theta^{(l)}​$,有 $J(\Theta)\rightarrow a^{(L)} \rightarrow z^{(L)} \rightarrow \dots \rightarrow a^{(l+1)} \rightarrow z^{(l+1)} \rightarrow\Theta^{(l)}​$ 关系不变,故证得: $$ -\frac{\partial}{\partial\Theta^{(l)}} J(\Theta) = a^{(l)}\delta^{(l+1)}, \ \ \delta^{(l)} = (\Theta^{(l)})^T\delta^{(l+1)} .*\ g'(z^{(l)})\; \; \; \; \; \text{for }l := L-1, L-2,\dots,2. +\frac{\partial}{\partial\Theta^{(l)}} J(\Theta) = a^{(l)}\delta^{(l+1)}, \ \ \delta^{(l)} = (\Theta^{(l)})^T\delta^{(l+1)}.*\ a^{(l)} .*\ (1-a^{(l)})\; \; \; \; \; \text{for }l := L-1, L-2,\dots,2. $$ 再添回为了计算方便去掉的 $\frac{1}{m}$和正则化项(时刻记住偏置单元不正则化),即为上节中 $J(\Theta)$ 的偏导。 @@ -204,10 +220,16 @@ $$ ## 9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters) +在 Octave/Matlab 中,如果要使用类似于 `fminunc` 等高级最优化函数,其函数参数、函数返回值等都为且只为向量,而由于神经网络中的权重是多维矩阵,所以需要用到参数展开这个技巧。 + +将矩阵展开成向量 + + + ## 9.5 梯度检验(Gradient Checking) ## 9.6 随机初始化(Random Initialization) -## 9.7 Putting It Together +## 9.7 总结起来(Putting It Together) ## 9.8 自主驾驶(Autonomous Driving) \ No newline at end of file