【机器学习(八)】神经网络进阶

声明:本文是以吴恩达机器学习系列课程为学习对象而作的学习笔记。本文对应P50-P56。

代价函数

假设我们有一个与下图类似的神经网络结构,再假设我们有一个像这样的训练集,其中有m组训练样本(x(i) ,y(I) )。用L来表示神经网络结构的总层数:
【机器学习(八)】神经网络进阶_第1张图片
我们将会考虑两种分类问题:

  • 二元分类问题

    这里的y只能为0或1,在这种情况下,我们会有一个输出单元即K=1。同时神经网络的输出结果h(x)会是一个实数

  • 多类别分类问题

    拥有K个不同的类,同时有K个输出单元。我们的假设会输出K维向量,同时输出单元的个数会等于K。(一般情况下K>=3)

我们在神经网络中使用的代价函数时逻辑回归中使用的代价函数的一般形式。我们通常使代价函数J(θ)最小化:
【机器学习(八)】神经网络进阶_第2张图片
对于一个神经网络来说,我们的代价函数就会是这个式子的一般形式。这里不再仅有一个逻辑回归输出单元,取而代之的是K个:
【机器学习(八)】神经网络进阶_第3张图片

反向传播算法

【机器学习(八)】神经网络进阶_第4张图片

假设你的整个训练集只包含一个训练样本,也就是实数对(x,y):
【机器学习(八)】神经网络进阶_第5张图片
接下来,为了计算导数项,我们将采用反向传播算法。
反向传播算法从直观上说,就是对每一个结点计算这样一项δ(l) _j,它代表了第l层的第j个结点的误差,因此得到以下式子:
【机器学习(八)】神经网络进阶_第6张图片
【机器学习(八)】神经网络进阶_第7张图片
g(z)求导的结果是a(1-a),其中a=1/1+e^(-z (3))

反向传播法这个名字源于我们从输出层开始计算δ项,然后我们返回到上一层,计算第三隐藏层的δ项。接着我们再往前一步来计算δ(2)。所以说,我们是类似于把输出层的误差反向传播给了第3层,然后再传到第二层。这就是反向传播的意思。

假设我们有m个样本的训练集
【机器学习(八)】神经网络进阶_第8张图片
PS:这一段我没听懂,先放一张吴老师的PPT在这里,等拥有了更多数学知识储备后再回来解决。

没关系,我们先跳过那串该死的计算,为了更好地理解反向传播,我们先进一步地研究一下前向传播的过程。

前向传播的过程

【机器学习(八)】神经网络进阶_第9张图片
这是一个含2个输入单元的神经网络结构(没有显示偏置单元),然后第二层有两个隐藏单元,以此类推。

在进行前向传播时,我们可能有一些特定的样本,比如x(i) ,y(i) 。我们把这个x(i)传到输入层中,因此可以将它们表示为x(i)_1和x(i)_2,它们是我们为输入层设置的值。

当对其进行前向传播到第一个隐藏层时,我们要计算出z(2)_1和z(2)_2。它们是输入单元的加权和。然后我们将sigmoid逻辑函数函数和sigmoid激活函数应用到z值上,得到这些激活值a(2)_1和a(2)_2。

然后继续前向传播,计算出z(3)_1,再应用sigmoid逻辑函数和激活函数得到a(3)_1。就像这样以此类推,最后得到z(4)_1,再应用sigmoid函数得到a(4)_1,它是网络中最后的输出值。
【机器学习(八)】神经网络进阶_第10张图片
拿一个隐藏单元的计算过程来举例:
【机器学习(八)】神经网络进阶_第11张图片

z(3)_1的值即为各权重乘以前面的值再求和。
这就是前向传播。

反向传播的过程

让我们先看看代价函数,这个代价函数一般应用于只有一个输出单元的情况。如果有不止一个输出单元,只需用k作为输出单元的下标,然后对他们进行求和即可。
现在仅有一个单独的样本(x(i) ,y(i)),只有一个输出单元,于是y(i) 就是一个实数。同时我们忽略正则化,即λ=0。
【机器学习(八)】神经网络进阶_第12张图片
现在你可以把cost(i)近似地当成是神经网络输出值与实际值的方差,它表示了神经网络预测样本值的准确程度,也就是网络的输出值和实际观测值y(i)的接近程度。

现在来看看反向传播的过程:
【机器学习(八)】神经网络进阶_第13张图片
一种直观的理解是:反向传播算法就是在计算δ(l) _j项。我们可以把它看作是我们在第l层中第j个单元中得到的激活项的误差。
对于输出层而言,如果我们设δ,比如δ(4)_1,设它等于y(i) 。当我们对训练样本i做前向传播和反向传播的时候,设它为δ(4)_1=y(i) -a(4) _1时,这是一个误差值,也就是y的实际值与预测值的差。然后对这些值进行反向传播,最后可以计算出前一层的δ(3) _1和δ(3) _2,并再反向传播。
【机器学习(八)】神经网络进阶_第14张图片
与前向传播相反,δ(2)_2的值即为各权重乘以后面的值再求和。
【机器学习(八)】神经网络进阶_第15张图片

梯度检验

反向传播有一个不好的特性,它很容易产生一些微妙的bug。当它与梯度下降或是其他算法一同工作时,看起来它确实能正常运行,并且代价函数在每次梯度下降的迭代中也在不断减小。但是到了最后所得到的神经网络,其误差将会比在无bug的情况下高出一个量级。
梯度检验用于保证前向传播以及反向传播都是正确的。

假设有一个代价函数J(θ),在这个例子中假设θ是一个实数。假如现在想要估计函数在θ这一点上的导数。该点的倒数就是图像在该点上切线的斜率。
现在要从数值上来逼近它的倒数:
首先计算出θ+ε与θ-ε,把这两个值对应的点用直线连起来,这条线的斜率就是我们所求的该点导数的近似值。
【机器学习(八)】神经网络进阶_第16张图片
由此得出:
【机器学习(八)】神经网络进阶_第17张图片
刚刚我们只考虑了θ是实数的情况。现在来考虑当θ是向量参数的时候。
设θ是一个n维向量:
【机器学习(八)】神经网络进阶_第18张图片

随机初始化

当你执行一个算法,例如梯度下降法或者高级优化算法时,我们需要为变量Θ选取一些初始值。如果初始值取0的话,会导致初值与结果完全相同,这将造成计算冗余。因此一般采取随机初始化的概念。
在这里插入图片描述
对每一个Θ值,我们将其初始化为一个范围在-ε到ε之间的随机值。因此这些参数的权重将会被随机初始化为-ε到ε之间的某个数。

你可能感兴趣的:(机器学习,神经网络,逻辑回归)