神经网络分类

神经网络分类

  • 1. 二元分类
  • 2. 多元分类
  • 3. 实现多元分类

我们都知道,需要采用监督学习算法的主要机器学习应用是分类与回归。虽然神经网络对分类和回归都可以适用,但是很少有人用神经网络处理回归问题,因为大部分回归问题都可以用更简单的模型解决,因此本博文只阐述分类问题。在应用神经网络进行分类时,输出层通常因数据类别的数量变化而变化,而不会影响到隐含层的节点。(文中涉及的编程不给出代码,大家可尝试自行编程,如果实在不会,可以看我发布的资源MATLAB实现)

1. 二元分类

二元分类是最简单的分类,它将输入数据分成两类,这种分类器应用极其广泛。对于二元分类,神经网络采用单个输出节点就已经足够了,这是因为神经网络可以根据输出值大于还是小于阈值对输入数据进行分类,这里用一个简单的例子进行说明,对于下图
神经网络分类_第1张图片
对于给定的坐标 ( x , y ) (x,y) (x,y),模型用于确定类别。这儿只有两类,一类是圆圈,一类是三角形,但是计算机不能用符号计算误差,因此需要将特定的符号转换为数值,比如圆圈代表1,三角形代表0,那么任何一个数据点都包含了三个数值,形式为 [ 4 , 5 , 1 ] [4 ,5,1] [4,5,1],前两个为坐标,最后一个为标准输出。对于这个模型,可以考虑输入层包含两个节点,隐含层包含四个节点,输出层只有一个节点,采用Sigmoid激活函数和交叉熵驱动的学习规则训练神经网络。这个二元分类的步骤其实与我之前讲过的反向传播算法步骤一样,只是这儿需要明确输入层与输出层节点数以及类别怎么表示。

2. 多元分类

知道了二元分类的定义之后,多元分类就好理解多了,直接用一个简单例子说明多元分类,看下图
神经网络分类_第2张图片
众所周知,根据分类的数量确定输出节点的数量是最可能得到良好效果的方法,因为本例需要分为三类,因此采用3个输出节点,那么问题来了,如何用数值形式代表类别呢?一般,我们都考虑向量形式
神经网络分类_第3张图片
这种表示方法称为one-hot编码,对于这种情况,输出节点的激活函数就不能使用Sigmoid函数了,通常多元分类使用Softmax函数作为输出节点的激活函数,因为Softmax函数考虑了所有输出值的相对大小,保证输出值之和为1,而Sigmoid函数仅仅考虑自身输出,就可能出现3个1或者2个1或者3个0的情况,这是不允许的。Softmax函数计算公式为
神经网络分类_第4张图片
除了以上区别之外,其他均与二元分类一样。

3. 实现多元分类

本节以一个数字图像识别问题来实现多元分类,这个思想可以应用在任何领域。
神经网络分类_第5张图片
这里有五个分类,属于多元分类,每个分类用一幅图片描述,每幅图片都是 5 ∗ 5 5*5 55的像素矩阵,因此需要设置25个输入节点,红色区域用1表示,浅蓝色区域用0表示。另外,由于分类数量有5个,因此输出节点有5个,也是用向量的形式代表类别,采用Softmax激活函数。隐含层节点定为50个,采用Sigmoid函数。编程的时候需要好好思考一下,以防出错,最后所得到的结果当然可以正确识别其中的数字图像。但是,真实数据未必与训练数据相符,比如下图
神经网络分类_第6张图片
采用训练好的神经网络来进行识别,识别后的结果以向量形式显示,合成矩阵分别是
神经网络分类_第7张图片
神经网络判定第一幅图像是4的概率为91.64%,这个分类结果似乎是合理的。神经网络判定第二幅图像的是2的概率为99.61%,这也是合理的。神经网络判定第三幅图像的是3的概率为97.98%,这也是合理的。但是我们仔细看可以发现,第二幅图像和第三幅图像仅仅相差一个像素点,却得到了两种不同的分类结果,神经网络能够捕捉到这么微小的差异是很令人吃惊的。对于第四幅图像,神经网络判定为2的概率为30.57%,判定为3的概率为53.97%,对于第五幅图像,神经网络判定为2的概率为32.14%,判定为5的概率为55.06%,对于这种情况是很正常的,原因就是训练数据太单一了,我们应该用更具多样性的数据训练神经网络,这样得出来的神经网络才能对真实情况具有最好的普适性,而不会出现模棱两可的情况。

你可能感兴趣的:(神经网络)