CS231n 是斯坦福大学开设的计算机视觉与深度学习的入门课程,授课内容在国内外颇受好评。但是只听课不复习,不做作业来巩固知识点的话,效果肯定不好。 AI 研习社在近期的线上公开课上请来了一位技术大牛为大家来讲解这门课的配套作业。
本文根据 AI 研习社公开课上的直播视频内容整理而成,主要介绍 Assignment 1 的完成思路与重点部分代码实现。如果你还没开始听 CS231n,可直接点击课程链接(http://www.mooc.ai/open/course/364 )观看回放视频。
王煦中,CS 硕士,主要研究方向为自然语言处理与深度学习。知乎专栏喵神大人的深度工坊(http://t.cn/RTc9wfy)作者,日语及 ACGN 爱好者。
分享主题
CS231n 课后作业讲解第一讲(含代码实现)作业链接:https://github.com/Observerspy/CS231n
分享提纲
CS231n 作业介绍,
kNN 的介绍
关于 SVM
关于 Softmax
关于 Two-Layer NN
关于 Features
以下是分享内容:
CS231n 的全称是 CS231n: Convolutional Neural Networks for Visual Recognition,即面向视觉识别的卷积神经网络。该课程是斯坦福大学计算机视觉实验室推出的入门课程,授课内容在国内外颇受好评。所有课程资料、PPT 等都可以在网络上下载:http://cs231n.stanford.edu/syllabus.html 。课程的目的是帮助学生深入了解深度学习框架的细节,主要面向视觉识别任务(尤其是图像分类任务)的端到端学习模型。
关于 kNN
kNN 主要分为两步:第一步是训练,分类器简单地记住所有的训练数据。
第二步是测试,比第一步要重要。每一个测试样本要和每一个训练数据分别计算距离,选取 k 个最近的训练样本的 label,通过投票机制获得预测值。
投票机制就是大家在一起对所有的类投票,哪一个类的投票数最多,这个测试样本就会被分为该类的下面。
这个作业主要分为三步,第一步用双循环实现 kNN, 双循环就是对每个测试数据和每个训练数据分别计算,第一层循环就是对测试数据的循环,第二层循环是对训练
下面使用单循环实现。单循环要求每个测试数据通过一次计算就可以得到和训练数据整体的距离。训练分为两个部分,首先是每个测试数据和训练数据做差,需要注意参数 axis 的设置,用了广播机制。
使用无循环实现
具体的实现代码,可以观看回放视频学习。
最后的一个部分是预测:np.argsort() 可以对 dist 进行排序选出 k 个最近的训练样本的下标;np.bincount() 会统计输入数组出现的频数,结合 np.argmax() 就可以实现 vote 机制。
该部分作业要求在测试样本中需要得到 28% 的准确率。
关于线性多分类 SVM
推导 SVM 过程很复杂,这里不涉及过多问题,用线性计算就可以了。注意下面这个式子汇总只有错误的分类才能产生 loss。即 j=i 正确分类是没有 loss 的。
分别对 Wj 和 Wyi 求导,具体的实现代码可以观看视频回播。这个作业要求在验证集上得到大约 40% 的正确率。
关于 Softmax
Softmax 的公式如图
需要注意的是,所有的分类问题都是一对一的,一个测试样本只能分到一个类下面。
loss 具体代码实现过程可观看视频回放。有了 loss 之后,在 j=i 和 j≠i 的情况下,分别对 w 求导:
这部分作业要求在验证集上达到 35% 的准确率。
关于 Two-Layer NN,实现两层的神经网络
具体详解过程见视频回放。实现反向传播后,要求调一些参数在测试集上达到 48% 以上的准确率。
特征
该部分不再直接输入图片,而是输入图片的特征。
使用 SVM 需要在验证集上达到 44% 的准确率,使用双层神经网络可以很轻松达到 55% 以上的准确率,在测试机的分类准确率可达到 59.4%。
以上为 AI 研习社公开课上的关键内容提要。视频回放课程可到 AI 慕课学院观看,或直接点击链接:
http://www.mooc.ai/open/course/364
作业链接
https://github.com/Observerspy/CS231n
NLP 工程师入门实践班:基于深度学习的自然语言处理
三大模块,五大应用,手把手快速入门 NLP
海外博士讲师,丰富项目经验
算法 + 实践,搭配典型行业应用
随到随学,专业社群,讲师在线答疑
▼▼▼
新人福利
关注 AI 研习社(okweiwu),回复 1 领取
【超过 1000G 神经网络 / AI / 大数据,教程,论文】
CS231n 2017 正式开课!双语字幕版独家上线!
▼▼▼