Stanford机器学习-Neural Networks : learning

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Forlogen/article/details/82824511

一、代价函数

在这里插入图片描述
前面学习了有关神经网络的基本知识和一些小的例子,这节课学习更深层次的东西,首先来看代价函数。

在这里插入图片描述
我们假设我们的神经网络如图所示,给定数据集D={(x1,y1)…(xn,yn)},x表示输入信号,y表示输出信号,L表示神经网络的层数
Sl表示每一层上神经元单元的个数。

在分类问题中,我们可以粗略的分为两类
1. 二分类问题
在输出单元我们可以用1表示正例,0表示负例,或者相反;
2. 多分类问题
在多分类问题中,我们不用单个的不同数字表示不同的类别,而是采用不同向量的方式,K的类别我们就是用K个向量区分
在这里插入图片描述

在前面的Logistic回归中,我们的代价函数J(θ)如图所示,我们需要输出变量可以分开类别,所以输出变量只有一个y,而在神经网络中我们的输出问题可能会有K个类别,因此我们的输出单元需要K维的向量,那么我们的代价函数就如上图所示。

复杂的结构背后的思想和前面的仍然一样,我们希望通过计算代价来看一下预测的值和真实的值的误差,选择误差最小的那一个。但在多分类问题中,我们通常会给出K个预测的输出,我们利用循环对每一个特征都预测k个不同的结果,然后在循环中选择K个预测中可能性最高的那一个,再与真实的值进行比较。

二、后向传播算法

在这里插入图片描述
这节主要学习神经网络中最重要的一个算法:后向传播算法。

在这里插入图片描述
在前面我们学习了前向传播算法,这里假设我们的代价函数如上图所示,目标是找到使代价函数值最小的参数,为此我们需要计算J(θ)的偏导数。
在这里插入图片描述

前向传播算法如上图所示,假设训练集只有一个实例(x1,y1),我们的神经网络有四层,输出层有四个神经单元,具体的计算过程如图所示。

在这里插入图片描述
而在后向传播算法中,我们需要从最后一层开始计算,误差用δ表示,每一层的计算过程如上。
首先我们计算输出层,也就是这里的第四层,它的过程为:
在这里插入图片描述
然后我们利用这个值带入公式计算第三层的误差:
在这里插入图片描述
这里的后的g(z)是一个S形函数的导数,他就等于a(3).(1-a(3)),而*前面的部分是权重导致的误差和,同理我们计算第二层的误差:

在这里插入图片描述

因为第一层就是我们的输入层,没有误差这一说,所以不必计算。当我们将所有的误差都计算出来后,便可以计算代价函数的偏导数,
假设我们不做归一化处理,计算公式如下:

在这里插入图片描述
表达式中,l 表示是第几层;j表示计算层神经单元的下标,也就是下一层第j个输入变量的下标;I 表示下一层误差单元的下标,
也就是受到权重矩阵中第 i行影响的下一层中误差单元的下标。

一般情况下,我们需要计算每一层的误差单元,同样我们需要为整个训练集计算误差单元,此时误差单元也是矩阵,用
在这里插入图片描述

表示第l层的第i的神经单元受到第j个参数而导致的误差,算法伪代码如下:

在这里插入图片描述
在求出误差单元的值后,我们计算代价函数的偏导数,如图左下角所示的公式。

三、Backpropagation intuition

在这里插入图片描述
前向传播算法如下,这里我们设置每一层的偏置单元都为+1:

在这里插入图片描述
计算过程示意图如下:
在这里插入图片描述
反向传播算法如下:

在这里插入图片描述
下面介绍了怎样把参数从矩阵展开成向量,便于在高级最优化步骤中使用:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、梯度检测

在这里插入图片描述
在神经网络等模型中使用梯度下降算法计算时,如果在计算过程中出现了一些小的错误,虽然整体下降的趋势不会改变,但是最后的结果却不是最优解了。

为了解决这个问题,我们使用一种叫梯度检验的方法,它通过估计梯度值来检验我们计算的导数值 是不是我们需要的来实现。

那么如何实现呢?在微积分中我们学过以直代曲,这里我们这里沿着切线方向选择两个非常近的点然后计算量的点的平均值来估计梯度。
例如我们在x=θ的左右两侧取一个距离很小的值(常取0.001),然后计算两个代价的平均,用来估计在θ处的代价值。

在这里插入图片描述
当θ是一个向量时,我们需要检验偏导数,道理是一样的,学过微积分的应该很容易理解。
在这里插入图片描述

五、参数的初始化

随机初始化,任何优化算法的参数都需要一定的初始值,如果我们都设置为0或是相同的非零数,那么下一层神经单元的计算值都将一样,显然是不可行的。我们通常初始化为一个很小的范围之间的随机值。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、总结

在这里插入图片描述

网络结构:第一件要做的事是选择网格结构,即决定多少层以及每层分别有少个单元。

第一层的单元数即我们训练集特征量。
最后一层的单元数是我们训练集结果类量。
如果隐藏层数大于 如果隐藏层数大于 确保每个隐藏层的单元数 相同,通常情况下,确保每个隐藏层的单元数 相同通常情况下,确保每个隐藏层的单元数 相同通常情况下越多好。

我们需要决定隐藏层的单元个数和每个中间层的单元数。

在这里插入图片描述

训练神经网络的步骤如下:
1. 参数的随机初始化
2. 利用正想传播算法计算所有的hθ(x)
3. 编写计算代价函数的代码
4. 利用反向传播算法计算所有的偏导数
5. 利用数值检验方法检验这些偏导数
6. 使用优化算法来最小化代价函数

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Forlogen/article/details/82824511