雷锋网:CS231n 2017双语字幕版独家上线!Lecture 2 | Image Classification 更新了!
2017春季CS231n中文版终于上线,课程中文版已经在AI慕课学院(mooc.ai )发布( free free free ),11月10日正式开课,每周五更新,预计持续12周!
雷锋网中文版课程链接:http://www.mooc.ai/course/26
什么是CS231n 2017?
CS231n 的全称是 CS231n: Convolutional Neural Networks for Visual Recognition,即面向视觉识别的卷积神经网络。
该课程是斯坦福大学计算机视觉实验室推出的课程。需要注意的是,我们这次翻译的是 2017 春季(4 月至 6 月)的最新版本。
雷锋网引用课程主页上的官方课程描述如下:
计算机视觉已经在我们的社会中无处不在,并广泛运用在搜索、图像理解、应用程序、测绘、医药、无人机和自动驾驶汽车等领域。这些应用程序的核心技术是视觉识别任务,如图像分类、图像定位和图像检测。近期,神经网络(又名 “深度学习”)方法上的进展极大地提高了这些代表最先进水平的视觉识别系统性能。
本课程深入探讨深度学习架构的细节问题,重点学习视觉识别任务(尤其是图像分类任务)的端到端学习模型。在为期 10 周的课程中,学生将学习如何实现、训练和调试自己的神经网络,并建立起对计算机视觉领域前沿研究方向的详细理解。最后的任务将涉及训练一个有数百万参数卷积神经网络,并将其应用于最大的图像分类数据库(ImageNet)上。
我们将着重教授如何设置图像识别问题,学习算法(例如反向传播),用于训练和微调(fine-tuning)网络的工程实践技巧,引导学生完成实践作业和最终课程项目。本课程的大部分背景知识和素材都来源于 ImageNet Challenge 竞赛。
Lecture 2 | Image Classification 图像分类内容提要
Lecture 2 | Image Classification 由 Justin Johnson授课 ,带着同学们一起讨论了数据驱动方法、K-最近邻算法、线性分类,深层次地了解算法是如何运行的,关注各类算法的技术细节。导师还布置了第一次课程作业,需要同学们在看完本期视频后,学着完成 K-最近邻分类器、线性分类器(SVM,Softmax)、两层神经网络、提取图像特征集,作业通过Python+Numpy完成。不会Python和Numpy的新手们,要尽快开始学习,他们特地写了个教程教你入门上手。
聊完作业和工具,开始进入正题, Justin重点讲了以下几个问题:
Q1:我们怎么研究图像处理的任务?(计算机视觉中真正核心的任务)
Justin:简而言之,就是通过数据。当你做图像分类时,分类系统接收一些输入图像(比如阿猫阿狗),并且系统已经清楚了一些已经确定了的分类或者标签,这里有一些设定了好了的分类标签数据集,那计算机的工作就是看图片,并且给它分配其中一些固定的分类标签。这对于人类来说,太简单不过了,但是对于机器而言,真的是一个非常非常困难的问题。计算机呈现图片的方式其实就是一大堆数字,所以图像可能就是800*600的像素,像素会给出红、绿、蓝三个值。所以这是一个巨大的数字阵列。
Q2:哪些发展推动了图像识别问题的实现?
Justin:数据驱动的方法。抓取大量图片数据集,机器会搜集所有数据用某种方式总结然后生成一个模型,识别不同类的对象的核心要素,然后用模型来识别新的图片。我们的接口需要写两个函数,一个是训练函数(接收图片和标签,输出模型),一个是预测函数(接收模型,对图片种类预测),正是运用了这种方法,过去十几二十年里,图像识别领域的进步非常之大。这种数据驱动类的算法比深度学习更广义的一种理念。
Q3:训练机器进行视觉识别的过程是什么?
Justin:单纯记录所有的训练数据,数据集会不断寻找新的图片,给出新的标签。比如,CIFAR -10训练数据集,其中就有5W训练图,1W测试图。右栏Test images and nearest neighbors图中,左侧是测试图,右侧是训练图,训练图中会显示与测试图最接近的图片。特殊情况下,我们如何来对比两幅图片呢?这就要选择比较函数了。我们用了L1距离(又称为“曼哈顿距离”),对单个像素进行比较,只取测试图(左上角的像素)- 训练图(相应的左上角像素)的绝对值,就是两幅图的像素差别。可以发现两幅图中有456处不同。(这里使用的是Numpy提供的向量运算,只需要一两行Python代码,用于最近邻算法,就能实现)
Q4:在训练集中,训练和测试的过程可以多快呢?
Justin:所需的时间是,存储数据的时间(恒定)+比较训练图和测试图时间(慢)。一般来说,训练过程在数据中心完成的(快),测试过程是在手机、浏览器其它低能耗的设备上完成的(慢),这种方式相当落后。为了让速度加快,我们选择卷积神经网络和其他参数模型,让测试过程加快。使用了最近邻算法。
Q5: 我们想训练图像分类算法,具体怎么操作?
Justin:我们常见的做法,是把数据分为三组,大部分数据作为训练集,然后再建立一个验证集和测试集,在训练集上用不同的超参来训练算法,在验证集上进行评估,然以后再用超参,来选择在验证集上表现最好的,再把这组验证集上表现最佳的分类器拿出来在测试集上跑一跑,这才是你要写到论文中的数据。这个数据告诉你,你的算法在未见的新数据上表现如何。记得,要分隔验证集和测试集,通常到最后一刻我们才会接触到测试集。
Q6:线性分类是什么?
Justin:线性分类是一种非常简单的学习算法,可以帮助我们建立起整个神经网络和卷积网络。神经网络就像玩乐高,你可以拥有不同种类的神经网络组件,并且可以将这些组件组合,来构建不同的大型卷积网络,它是我们在不同类型的深度学习应用程序中,看到的最基本的构建块之一。卷积神经关注图像,而循环神经关注语言,我们可以把这两个网络放在一起,再一起训练,最终得到一个超级厉害的系统。深层神经网络像乐高玩具,而线性分类器就像这个巨大网络中的基础模块。这是线性分类器的基本工作原理。
以上是Lecture 2 | Image Classification的重点内容,当然导师还具体回答了同学们的提问,详细解答了K-最近邻算法、线性分类器的相关技术细节。
为了方便大家交流,AI研习社专门开辟了社区供大家交流。在社区中,目前支持大家提问/回答,以及发布文章,可以插入图片、视频、超链接、代码块、公式编辑器,欢迎大家在社区中进行更多形式的交流~社区地址:www.mooc.ai/bbs
现在我们诚挚邀请正在学习CS231n课程的小伙伴来讲解这门课的课后作业,这门课共有3个 Assignments 以及1个 Final Project ,你可以选择其中一个或几个来进行分享讲解~详情链接:http://cs231n.github.io/
目前雷锋字幕组还有许多优秀AI课程仍在翻译中,希望和我们一起翻译学习进步,欢迎微信联系 julylihuaijiang,加入我们。