神经网络笔记 | 4 – 多元分类问题

如果我们想通过计算机视觉区分不同的物体,我们该怎么做?

实际上就是让神经网络的输出的结果成为一个数组,对应的物体应该输出1

比如如果识别到是行人,那么上面的输出层结果就应该是

[1,0,0,0]

其他的情况以此类推,这就是神经网络对于多元分类问题的基本解决思路。

代价函数

目前来讲,我们现在遇到的分类问题分为多元和二元两种

实际上对应着两种输出模式,如果是二元分类,只需要分别0,1就好。

但是对于多元分类问题,我们就应该使用数组作为输出单位。

现在展示神经网络的代价函数:

这个神经网络的的代价函数看起来异常复杂,这就需要之前的知识来理解,我们需要正则化公式:

这个是一般 正则化的 神经网络 多元线性回归 代价函数方程

很显然这项是将每个输出项的值都进行了一次检查。K即表示输出层的数组数,也表示倒是是几元分类问题。用我们之前的例子,如果案例给我们这个是行人[1,0,0,0]的数据,但是实际上模型跑出来是[0,1,1,1]。对于代价函数来说应该给出很大的惩罚才行。但是如果是[1,1,0,0],实际上偏差不算大,可以惩罚少点,这就是这项的意义

第二项就是所谓正则化的项,他要求把所有层数的所有参数进行平方相加,从而防止过拟合问题。

如果代价函数确定下来了,之后我们需要知道如何球代价函数最小化的问题,这里我们用的方法是反向传播法:

反向传播法

这个算法是让之前提到的让多元分类问题代价函数最小化的方法

如图所示,如果想要知道代价函数的最小值,至少需要知道代价函数的值与其偏导数

这里我们引入一个偏差值的概念,用δ来表示模型数值与样本数值的偏差,其上标表示第几层,而下标表示第几个元素。

另外值得一提的是

这个式子完全可以变成向量形式,因此这个式子可以不存在下标

特别的,针对非最后一层的参数,我们引入如下算法

注意这里并没有δ第一层的说法,毕竟第一层是输入层。

上述的推导过程相当复杂,因此就不予解释了。

最后,让δ全部等于零,就可以非常快地算出所有层的参数。

总结上述的所有做法,实现的流程如下

反向传播法理解

实际上这个理解如果比较难,我们仍可以把这个当成一个黑箱用就完成。

现在先介绍向前传播

随便选取一个隐藏层元素

可以看到它的计算方法,实际上是前面所有的元素乘以一个权重而计算得出的(下图有不同的颜色,可以更好理解)

所以反向传播到底做了什么?我们需要简化下面的式子,我们只关注一个样本,一个输出值,并且不予正则化

那么代价函数实际上是这样的,属于某种方差函数

所以δ实际上求的是代价函数关于某一个确定项的系数,也就是之前提到的Θ

(举个例子:f(x,y)=5x+3y,则对x求偏导就是5,它得到的是x的系数,即这里的权重参数)

反向传播的意义相当是,我们除了关注输出值和样本真实值的误差以外,还关注过程中两者变化的误差。

即,如果我们想要的模型是1→3→5→1,那么1→1→1→2理应被惩罚,就算输出结果差别不大。

反向传播法优化

实际上在真实运作的过程中,我们甚至不需要知道方法的细节,因为有现成的函数可以调用,以下是Octave的一个案例

参数解释

  • theta:给出的θ的初始值
  • jVal:代价函数
  • gradient:导数值
  • fminunc:是一个高级算法的名字

实际上就是将这些参数(theta,costfunction)传入到优化算法,然后进行一系列复杂运算。但是这样必须要使参数向量化,因此我们需要一个向量化的方法。

向量展开

给出的案例(注意多了一个Θ矩阵和D矩阵)

Octave可以把所有的矩阵展开形成一个向量

也可以重新组合回去

没必要深究这个算法的原理,既然Octave可以那么其他语言大概也可以。

总结起来如下

发表评论