从0到1:神经网络实现图像识别

Posted 艾克斯007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从0到1:神经网络实现图像识别相关的知识,希望对你有一定的参考价值。

”. . .  we may have knowledge of the past and cannot control it; we may control the future but have no knowledge of it.” — Claude Shannon 1959

往者可知然不可谏,来者可追或未可知。

,介绍了神经网络的理论基石 - ;感知机模型是一个简洁的二类分类模型,这里,我们把它推广到多类分类问题,不借助计算框架,构建一个全连接神经网络,再应用于手写数字识别场景。

从二分类到多分类问题


一种思路是把 K 类分类问题,视为 K 个二类分类问题:第一次,把样本数据集的某一个类别,和余下的K-1类(合并成一个大类)做二类分类划分,识别出某一类;第 i 次,划分第i类和余下的K-i类;经过 K 次 二类分类迭代,最终完成 K 类分类。

这里,我们选用一种更直接的思路,回忆感知机二类分类模型,只包含了一个输出节点;现在把输出节点扩展为K个 ;权值向量w扩展为 D x K的权值矩阵W,偏置(bias) b扩展为长度为K的数组;这样一来,一个样本点经过模型处理,会得到这个样本点在所有K个类别上的归类可能性得分 z

z同样是长度为K的数组,某一个元素z [j]的数值越大,输入样本点属于对应分类类别j的可能性也越高。

Softmax


Softmax方法,用于把输出z进一步标准化normalize),得到某个样本点,归属于各个类别的概率分布。

例如,归属于类别 j 的概率为:

从0到1:神经网络实现图像识别(三)

这个结果满足了概率分布的标准化要求:在所有类别上的输出概率都不小0,且所有类别上的输出概率和等于1。就得到了模型预测输出结果的标准概率分布。

对应的,目标问题MNIST数据集的正确标签,也可以视为概率分布:一张手写数字图片,在正确类别上的概率分布视为1,其它类别上为0;数字9的图片,所对应的正确标签为(0,0,0,0,0,0,0,0,0,1),可视为放平之后的分类期望向量 从0到1:神经网络实现图像识别(三)

有了预测输出和正确答案的概率分布,就可以刻画两者之间相似度,简便地度量模型预测的损失。

损失函数-交叉熵


经过 Softmax 转换为标准概率分布的预测输出 ,与正确类别标签从0到1:神经网络实现图像识别(三)之间的损失,可以用两个概率分布的 交叉熵cross entropy)来度量:从0到1:神经网络实现图像识别(三)

所以,某一样本点使用模型预测的损失函数,可以写为

从0到1:神经网络实现图像识别(三)你可以跳过关于交叉熵的展开介绍,从学习算法处继续阅读,不影响方法使用。

再深一点:关于交叉熵



从0到1:神经网络实现图像识别(三)

1948年,Claude E Shannon首次提出信息熵(Entropy)概念。

交叉熵Cross Entropy)的概念来自信息论 :若离散事件以真实概率从0到1:神经网络实现图像识别(三)布,则以隐概率分布从0到1:神经网络实现图像识别(三)一系列随机事件从0到1:神经网络实现图像识别(三)最短编码,所需要的平均比特(bits)长度。其中,定义从0到1:神经网络实现图像识别(三), 显然,较短的编码长度从0到1:神经网络实现图像识别(三),应当被用于出现频度从0到1:神经网络实现图像识别(三) 高的编码片段,以提高传输效率。

从0到1:神经网络实现图像识别(三)

直观理解,如果有  从0到1:神经网络实现图像识别(三) ,  则相对于 从0到1:神经网络实现图像识别(三),  概率分布从0到1:神经网络实现图像识别(三) 同真实概率分布 从0到1:神经网络实现图像识别(三) 更相似。

交叉熵对两个概率分布的度量结果,不具对称性,所以交叉熵并不是严格意义上距离

交叉熵概念的源头,用比特(bits)信息为单位,以2为底做对数计算,那么用作损失函数Loss时,对数计算是否必须以2为底呢?

不是必须的。

机器学习领域,交叉熵被用来衡量两个概率分布的相似度,交叉熵越小,两个概率分布越相似。工程实践中,出于简化公式推导,或优化数值计算效率的考虑,对数的底可以做出其它选择。

例举以e为底的情况,由换底公式:

从0到1:神经网络实现图像识别(三)

可知,对数的底由2换成e,对Loss的影响是,缩小了常数倍从0到1:神经网络实现图像识别(三),我们提到,优化损失函数使损失极小的场景下,函数取值的数值缩放正倍数不影响优化方法。

所以损失函数也可以写为:从0到1:神经网络实现图像识别(三)
学习算法


用上一次介绍的方法,你可以先为 W, b 设置初始值比如 0,然后用梯度下降法( gradient descent),让参数不断更新梯度△W△b,来极小化损失函数。

从0到1:神经网络实现图像识别(三)

对包含D维输入特征的K类分类样例点,根据损失函数计算参数更新的梯度:


从0到1:神经网络实现图像识别(三)

对   从0到1:神经网络实现图像识别(三) , 将从0到1:神经网络实现图像识别(三)积运算展开,易得:


从0到1:神经网络实现图像识别(三)

对后一部分, 应用链式法则:

从0到1:神经网络实现图像识别(三)
从而


从0到1:神经网络实现图像识别(三)
同样

从0到1:神经网络实现图像识别(三)得到参数更新的梯度:


从0到1:神经网络实现图像识别(三)

从0到1:神经网络实现图像识别(三)
其中   从0到1:神经网络实现图像识别(三)
反向传播(backpropagation)


反向传播(backpropagation)是相对前向推断inference)过程而言的。

抽取训练数据,得到预测分类结果,再使用训练数据的正确标注,计算样本预测损失,然后根据损失更新神经网络模型参数,这个迭代过程就是反向传播过程

工程实践中,往往从训练样本集中,抽取一批(batch)训练样本,通过整批数据的矩阵运算,得到这批样本损失的均值,减少更新梯度的次数,提高训练效率;每轮训练后,使用该批次的梯度均值更新参数,较快得到接近梯度下降的收敛结果。从0到1:神经网络实现图像识别(三)实现


你可以通过原文Github链接,获得上述算法的python实现,不借助Tensorflow计算框架,直接从算法实现层面,了解全连接神经网络的基本结构,跟踪训练过程:

从0到1:神经网络实现图像识别(三)

在一千五百次参数更新迭代后,模型参数在验证集上准确率超过90%;五千次迭代后,验证数据集上预测损失(Loss)趋于稳定。

从0到1:神经网络实现图像识别(三)



预测准确率(acc)在验证数据集上稳定于92%附近。



上述内容,介绍了全连接神经网络的基本结构,你可以结合原理与算法了解并实现它。

下一次,将介绍过拟合(over-fittingt)问题和解决方法,并在目前的基本结构上,引入一个隐藏层(Hidden Layer),将模型去线性化,使异或问题得以解决,从而将模型的预测准确率,进一步提高到96%以上。

(完)


参考

[1]  斯坦福大学 class CS231n:The Stanford CS class CS231n

[2] de Boer, PT., Kroese, D.P., Mannor, S. et al. A Tutorial on the Cross-Entropy Method. Ann Oper Res (2005) 134: 19.


长按订阅,获得更新

可以通过“原文” 查看文中链接和Github源码。


以上是关于从0到1:神经网络实现图像识别的主要内容,如果未能解决你的问题,请参考以下文章

毕业设计 题目:基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别

如何通过人工神经网络实现图像识别

京东金融大数据竞赛猪脸识别- 图像特征提取之一

神经网络做MNIST手写数字识别代码

项目实战解析:基于深度学习搭建卷积神经网络模型算法,实现图像识别分类

拔刺 | 如何通过人工神经网络实现图像识别?