PPC的C/C++和人工智能学习笔记
每一篇学习笔记,都只是为了更好地掌握和理解

深度学习(1)-基本概念

开始接触人工智能方面的课程,由于基础比较差,所以就是摸着石头过河,先从这里开始吧。

其实,我是个坚定的实用主义者,学一门技术,总是要用来解决实际问题的,那么带着问题来学习,也总是我坚持的东西,我想解决的问题有:验证码的识别,图文混和情况下的印刷体汉字的识别,图片中物体的定位和识别,会三人斗地主的机器人,会玩魔方的机器人,会识别视频中人物动作的机器人等等。当然,这些是不是和深度学习这门课程有关,我学完这么深度学习的课程能不能解决这些问题,我也不清楚,但是,总要学了才知道,对不?

 

深度学习,在上世纪90年底就已经有了,美国人用来验证支票签字的真伪性,但是真正的大发展也就是最近几年的事情,主要是因为大数据的发展,给深度学习带来了巨大的机会。比如,取得围棋比赛胜利的AlphaGo,至少部分是基于深度学习的。

 

智能的本质是学习的能力;深度学习的核心是人工神经网络、卷积神经网络。

 

深度学习算法传统人工智能算法的区别:在数据规模较小时候可能相差不大,但是随着数据规模的不断增大,深度学习算法会比传统人工智能算法效果更好,尤其是在海量数据的时候,深度学习算法会强得多。所以说大数据时代的到来,给深度学习带来了革命性的机会。

深度学习能做的事情:验证码识别(比如360的抢票软件),述说图片的故事(根据图片描述图片表达的内容),无人驾驶汽车等等,归纳起来就是两类:自然语言处理和计算机视觉。

深度学习的工具:Caffe框架,是用C++写的,有Python、MATLAB接口。基本上是不需要编程的。

 

图像分类:计算机视觉的核心任务。(输入一个图像,计算机要能辨别出它是什么类别)

 

图像在计算机中是按照像素存放的,常规的24位彩色图片,每个像素用3个字节来表示红色R、绿色G和蓝色B分量,所以,一个300×300的小小图片(我们现在常用的计算机屏幕是1920×1080的,300像素相等于屏幕宽度的1/6都不到),在计算机中存放的就是300×300×3=27万个字节的数据(0-255之间的数据)。那么,对于一个相同的物体(比如猫),从不同角度拍照、改变光照强度、形状改变(比如猫的各种姿态)、部分被遮挡、背景混入(如背景和猫很相似,但是人眼仔细看能分辨出来)、尺寸变化等等都会引起这些数据发生翻天覆地的变化,这些都给计算机识别增加了难度。

 

机器学习(深度学习)的常规套路:(就是这个机器学习到底是怎么工作的,工作流程)

第一步:收集数据(DATA)并给定标签(LABEL)。比如做1个三分类的任务,输入图片是猫、狗和飞机,那么就需要找到大量这样的图片,而且每一张图片都要告诉计算机是属于哪个分类(是猫是狗还是飞机(LABEL))。[这里其实就是先要给出学习数据]

第二步:训练一个分类器。根据给的数据,训练出一个分类器,就是能对输入进行判断是哪个分类的一个决策器。[这里其实是学习过程]

第三步:测试、评估。可以根据测试结果调优分类器以达到满意的效果。最终的测试数据是必须不同于第一步给的数据的,根据测试数据进行分类器的评估(评估其好坏,比如准确率是多少)。[这里其实是学习考试,得分的高低就代表好坏]

 

K-近邻算法:一个最简单的机器学习算法

上图中,是一个二分类的问题,一共就两种类型,三角和方形。他们的分布图如上,那么现在给出一个点(绿色圆点),请机器判断这个绿色点是属于哪一类(属于三角还是方形)。其实这个问题,我们人来判断也只能做个大概(也许会觉得是三角更加合理一些)。

K-近邻的意思就是,看看它周围(近邻)都是哪些类别(所谓物以类聚)或者哪些类别更加多些,那么它就是哪个类别。

但是,我们会发现:假定这个靠近是指直线距离,那么选取这个K值(就是判断几个点和它近邻)其实会影响结果。上图中,K值选小一些(内圈),判断就是三角(2:1);K值选大一些(外圈),判断就是方形(2:3)。计算机在判断的时候,必须把所有点到要检测点的距离计算出来,然后进行排序才能得到结果。

KNN(K-近邻)算法本身简单有效,它是一种懒学习(Lazy-Learning)算法(不要训练)。

分类器不需要使用数据集进行训练,训练时间复杂度是0。

KNN分类算法的计算复杂度和训练集中的文档数目成正比,设训练集中的文档数是n,那么KNN的分类时间复杂度是O(n)。样本数量很大的时候,非常慢。

K值的选择,距离度量(选什么为距离标准),分类决策规则是该算法的三个基本要素。

在样本不均衡的情况下,还要给不同的样本加上不同的权重。

介绍一个数据库样例:CIFAR-10,用来学习的好东西。(因为深度学习需要大量的数据,这里提供了大量的数据)。可以在网上下载。

 

我们用这个训练集,来测试下KNN算法,距离用像素点各颜色的差值的绝对值之和(L1)(也可以用差的平方和开根号L2,也就是所谓的超参数)来表示。结果很不满意(30%多的准确率),说明图片的分类,用这样的方法是不行的。

 

我们在训练的时候,可以把训练数据分成几份,交叉验证来用来观察分类器的好坏。

 

1、选取超参数的正确方法:将原始训练集分为训练集和验证集,我们在验证集上尝试不同的超参数,最后保留表现最好的那个。

2、如果训练数据量不够,使用交叉验证方法,它能帮助我们在选取最优超参数的时候减少噪音。

3、一旦找到最优的超参数,就让算法以该参数在测试集跑且只跑1次,并根据测试结果评价算法。

4、最近邻分类器能够在CIFAR-10上得到近40%的准确率。该算法简单易实现,但需要存储所有训练数据,并在测试的时候过于耗费计算能力

5、最后,我们知道了仅仅使用L1和L2范数来进行像素比较是不够的,图像更多的是按照背景和颜色被分类,而不是语义主体分身。

(2017-02-01 www.vsppc.com)

学习笔记未经允许不得转载:PPC的C/C++和人工智能学习笔记 » 深度学习(1)-基本概念

分享到:更多 ()

评论 抢沙发

评论前必须登录!