目录
1、计算机视觉的任务(分类)
计算机视觉的任务,其实是个哲学问题:我是谁?而你!又是谁?这是个分类问题。尽管深度学习的内部过程中,提取特征是个黑盒子,但是,我们学习过程中还是要了解里面发生了什么才行,要清楚深度学习做分类任务的原理
1.1 图像的表示
计算机视觉中,一般图像都可以表示为一个矩阵,我们可以用像素来表示成3维图片,每个像素从0到255(越大表示越亮),例如:300*300*3,含义如下,
高度:300
宽度:300
颜色通道:3,RGB三颜色通道
计算机视觉中,基本也都是基于三通到像素矩阵进行各种任务,比如分类
1.2 图像分类的难点
当然这种矩阵表示,也是会碰到的问题,比如环境嘈杂、杂七杂八的东西多、遮蔽等等,都会影响。像李飞飞2017年的时候就结束了,因为计算机能识别的精度远远超过人类了,再去组织图像分类比赛,已经没有意义了,所以这个比赛就解散了。
解决办法:不会的场景,你就针对这个场景标记出来,神经网络就会学习到,所以,输入不能识别的数据就可以,最好带上真实的标签。
1.3 机器学习套路
机器学习的套路,神经网络和机器学习的套路也是差不多的
2、当传统算法和CV碰撞(憋屈)
2.1 用K紧邻算法做CV分类
用传统算法做计算机视觉可能会遇到问题
我们现在不知道绿色的点是什么形状?就看他周围的圈圈都是啥类型的(绿色点以XX半径画一个圆),周围什么多,他就是什么(K就表示是看周围几个,这个值还挺关键的,比如K=3,绿色周边三角形多,那他就是三角形,但是k=5,他周围是正方形多,他又是正方形了),他的计算基本过程如下:
2.2 好用的数据集CIFAR-10
CIFAR只有100多M(数据大小比较小,都是32*32大小的,有10类标签,50000个训练数据,10000个测试数据,虽然小,但是很适合我们),是我们学习过程中可以玩起来的,很好的数据集。李飞飞的虽然千万级别的,其实 我们根本跑不动,起码要7,8万以上的服务器,才玩的起来,这就没意思了,我就穷屌丝一个,哪买的起。
那接下来,我们就开始设计怎么做分类任务:怎么判断当前的图像属于那个类别。
测试数据:4*4的矩阵图像,判断他是属于10个类别中的哪类?将测试数据和5万个训练数据的像素点的距离都计算出来,看看离哪个比较进:和训练数据集中的每个图片的像素进行矩阵减法,得到差值 ,把每个像素得到的差再相加起来,得到他的偏差了,这个偏差就是和某个图片的距离了。
5万个图像距离都计算出来, 然后,针对这10个类,每个类都选出偏差最小的前10个,看看,有的结果还可以,有的做错了,而且错的离谱。根本问题在于:当前的算法很多特征它还没考虑到。比如马,外侧都是黑色的,跟他相似的都是边界为黑框的,只是对应相减,并没有告诉他哪个是主体,哪个是背景。
结论:背景相同的图片都放在一起了,因为K紧邻没有学习的过程,他不知道哪个是最重要的,哪个应该关注,所以K近邻不适合做图像分类任务。
3、他来了他来了(神经网络)
3.1 线性函数神经网络
假设猫这个图像就是3个像素点:56,231,24,2,然后做3分类;权重值是3*4的矩阵,3表示3个类(猫:0.2,-0.5,0.1;狗:1.5,1.3,2.1,0.0;船:0,0.25,0.2,-0.3,这些权重就是这些动物的特征,负表示抑制的作用,这个矩阵哪里来的呢,矩阵是优化而来的,开始随机产生,随机算出来),b是偏执,通过矩阵计算得到相应的3*1的矩阵,分别得到相应分类的得分;明明是一只猫,结果得到的还是负数分数,说明w的值不好,需要迭代调整、改进w参数
这个w,权重参数表示比较大,表示对结果影响比较重要,比如2.1(狗的w权重参数会影响决策边界,控制边界走势,b偏置参数,只是微调)
3.2 如何衡量分类的好坏(损失函数)
上面那个猫的分类,得到负分,说明算法做的不好,那他到底又多不好呢,要告诉出来具体的差距是多少,可以通过该损失函数来说明差距具体是多少。损失函数,衡量分类的结果好坏。
损失函数公式:两两之间 max(Sj错误类别-Syj正确类别+1)做个差值,然后将差值相加,就得到一个损失函数的值。
猫的得分,汽车的分类得分还是最高的,说明分类的不好,两两之间 max(Sj错误类别-Syj正确类别+1)做个差值,然后将差值相加,就得到一个损失函数的值。为了防止比较接近的时候取到了,所以加了一个1)先当与是一个容忍程度,错误越离谱的时候,得到的数值会越大
算完之后:猫的损失2.9,汽车为0(做的挺好的),青蛙10.9(损失很大,做的不好)
3.3 正则化惩罚(规避过拟合)
两个模型损失函数值相同,那2个模型都一样么
模型A和模型B算,乘以内积,出来的都是一样的结果,但是模型A只关注第一个(只关注局部,过拟合,产生变异了),模型B均匀的分配到每个点(关注全局,平常会倾向于这样的),再模型训练的时候,参数容易导致类似于模型A这样的情况,出现过拟合,这种情况是要避免的,要有手段减轻负面影响, ,因此就有了正则化惩罚项,入越大,那就对这中过拟合就越敏感
3.4 求损失函数值
第一大部分:表示的是数据的损失函数的损失,后面的这个模型由于权重参数所带来的损失,入越大,不要变异的,小的时候,意识以下就行了,通常我们希望模型不要太复杂。担心神经网络过于强大,导致过你和。
希望神经网络别太强了,容一学傻,
4、计算分类得分数值
4.1 得分转为概率Softmax(分类)
分类我们要做的是术语哪个类,是要算概率,现在给出一个值,还没法表示出概率来。通过softmax,将一个数值,转为一个概率值
第一个矩阵:是猫对应归属丶的得分值(3.2,5.1,-1.7,差距看上不是很大),通过e的x次方,放大这个差异,
4.2 对数函数将损失归一化(可比性)
normalize,做归一化:就是24.5+164+0.18求和,然后分别除这个和,就得到概率值了。有了这个概率值之后,怎么去计算损失呢,用给对数函数
这里我们看到属于正确类别的概率值为0.13,那对于理想的猫的概率,肯定是希望他这个概率为1才好,越接近1,就越没有损失,就越准确。所以用对上数(求出来的都是负数,所以前面加个负号)函数来求损失。到目前为止,这些都还是前向传播,把损失函数算出来了,那如何去更新这个模型,更新里面的w呢,这个就需要反向传播技术。
特别鸣谢:以上材料来自唐宇迪博士讲课素材,表示感谢,更多AI文章请关注VX公众号