计算机视觉,发展起来的日子并不长,早在2012年之前,深度学习一直没有得到重视,在2012年,深处美国的李飞飞提出了ImageNet数据集,呼吁全美大学生为数据集做标签,之后提出了一项相关比赛,而在比赛中,利用神经网络来进行比赛的参赛选手,不仅获得了冠军,并且罕见的拉开了冠军和亚军之间的分数差距,之后便推动了深度学习的发展,年仅三年,在2015年深度学习计算机视觉的判断结果就超过了人类视觉,随后在2017年,李飞飞停止了比赛,开始了其他方面的研究。
在深度学习的发展过程中并不是一蹴而就,凭空就知道计算机视觉中的CNN是好用的,而是从简单的方式一步一步优化来的。而最早的图像处理方法叫做K近邻(周围什么多,则是什么)。以方块和三角两类点作为数据:
根据图中所示,在圆圈中三角的数量多于正方形,说明圆圈是三角的概率更大,因此就会将其判断为三角。他的基本流程是:1.计算已知类别数据集中的点与当前点的距离;2.按照距离进行排序;3.选取与当前点距离最小的K个点;4.确定前K个点所在类别出现的概率;5.返回前K个点出现频率最高的类别作为当前点的预测分类。
然而这种方法不太适用于计算机视觉方面,因为他是将全体像素点进行检测,不能区分主体和背景,因此分类效果并不好。
之后便逐步进行修改,主要引入的是高等代数中矩阵的内容。
首先介绍的便是线性函数,又叫做得分函数。通过计算每个类别中的得分,来进行分类。具体公式为f(x,W)=Wx+b,x是预处理后的像素点条(纵向矩阵),W为权重参数(横向矩阵),b是偏执参数。其中,有多少个类别,就有多少个W,经过计算后得出一个数,则是不同类别的得分。由于不同的情况,权重参数可能并不是时时刻刻都是最优的,因此引入了损失函数。
损失函数基本公式为: 。其中Sj表示其他类别得分,Si表示正确类别,1是容错。当Li<0,Li=0,损失为0。当Li0时,损失越小,结果越准确。
但既然是数值计算,就有可能出现不同数据结果相同的情况。例如输入x[1,1,1,1],M1 w1=[1,0,0,0],M2 w2=[0.25,0.25,0.25,0.25],WT1=WT2=1。从这个例子中可以看出来,两个不同的类别的权重参数计算的结果是一样的,但是对比两个权重参数来说,w2对图像信息的提取更为全面,而w1更注重于一小部分,称之为过拟合。目前处理过拟合的方法多用以下两种:1.正则化惩罚项R(W);2.DROP-OUT。
正则化惩罚项的具体使用方法为:损失函数=数据损失+λ*正则化惩罚项,R(W)的具体数值为所有权重相加,λ的取值控制着过拟合程度,λ越大,过拟合程度越小,λ越小,过拟合程度越大。
DROP-OUT的具体使用方法为随机去掉部分神经元,每次训练都不同,来降低过拟合风险。