通过异或学习例子理解神经网络如何计算复杂的非线性函数
异或
- 为了学习异或这个显然是非线性判别边界的例子,我们先看一些简单的线性判别边界例子
逻辑与(&&)
逻辑或(||)
逻辑非
异或的实现
- 通过这个例子我们会发现,神经网络能够让我们得到更加复杂的函数。且层数越多,能得到的函数就越复杂
如何用神经网络做多类别分类
- 多类别分类应用范围比较广,像手写数字识别就属于多分类(0~9共分10个类别)。我们用神经网络解决多分类问题时,运用了逻辑回归的多分类的一对多思想
例子
- 现在我们要识别图片是人、汽车、摩托车还是大车,这就是一个多分类问题。
- 当二分类问题时,我们只要建立一个输出单元,输出0或者1的实数;当多分类问题时,我们则建立四个输出单元,并且输出值从实数变成了四维向量。这里就运用了逻辑回归的一对多思想,把一类作为1,其余的看做一类都作为0.
代价函数的给出
- 神经网络的代价函数和逻辑回归的代价函数类似。我们先给出逻辑回归的代价函数,这里要注意的是,正则化项不含参数0.
- 接着,我们看一下神经网络的代价函数。与逻辑回归不同在于,逻辑回归仅仅是一个输出单元,而神经网络则是k个输出单元的求和,即输出层所有单元的求和。而尽管神经网络的正则化项很复杂,但实际上就是把除了每一层的参数0外的所有参数项加起来。(这里参数0加进去也无所谓,只是出于习惯我们一般不加)
用反向传播算法优化代价函数
- 在给出代价函数之后,我们要设法找到参数,使代价函数取得最小值。在找到参数最小化代价函数的过程中,我们通常使用梯度下降算法或者其他的高级优化算法。这些算法往往都需要参数的偏导数项,因此,最小化代价函数的关键,在于如何计算出各个参数的偏导数项。
从只有一个训练样本说起
- 首先,我们令整个训练集只包含一个训练样本,我们先使用前向传播算法,看一下当我们给定输出的时候,假设函数输出的结果
- 下边我们来看一下,如何使用反向传播算法计算偏导数项:
我们要添加theta这个误差参数项,表示第l层第j个单元的误差。接下来我们看一下如何计算theta这个误差参数项。
(1)输出层:a4(假设函数的输出)-训练集的y值
(2)前边误差项的计算:前边的层和后边一层的参数矩阵的转置矩阵*后边一层的误差参数矩阵,再点乘一个导数项。这个导数项实际上=a3乘(1-a3)
(3)第一层没有误差参数,因为第一层输入的是训练集样本,不可能有误差
- 从上边的过程,我们就可以看出反向传播名字的由来:从输出层开始计算参数误差,往前一层层的返回,一直计算到第二层
- 在通过反向传播算法得到误差参数后,我们就可以利用误差参数积累得到偏导数项了。通过for循环积累偏导数项,分参数为0和不为0两种情况讨论。在计算得到偏导数项后,就可以用在梯度下降法中了
- 综上,反向传播就是先由输出层反向直到第二层,计算得到每层的误差参数。然后利用误差参数积累偏导数项
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。