Stanford-cs231n课程学习笔记(一)


Stanford课程原版是英文,奈何本人英语菜的一批。原版网站放在下面,xdm可以多多学习。BUT! B站up<同济子豪兄>yyds好吧!!!
Stanford231n

文章目录

  • Stanford-cs231n课程学习笔记(一)
  • 前言
  • 一、传统算法
    • 最邻近分类器 Nearest Neighbor classifier
    • 存在问题
  • 二、深度神经网络
    • 1.线性变换
    • 2.梯度下降
      • 损失函数
      • 优化函数
  • 总结

前言

刚开始在犹豫‘我一个学搞music的可以学cv嘛?’ 咱就是说,学就完事了。毕竟直接搞music咱也不会啊。

CV是当下人工智能热门领域。计算机视觉领域有许多细分方向:物体检测、图像标注、三维重建、人体姿势识别、图片描述等。
课程主要:使用深度学习 (使用深度神经网络实现机器学习的技术) 解决CV领域的问题,特别是针对图像分类技术等。
子豪兄使用亲切的母语进行讲解,小白极度友好!
实现图像分类技术的方法有很多:
①:使用传统的机器学习算法,也就是文章中提到的线性分类器。如KNN、SVM等方法。通过构造特征,使用算法达到分类效果。
②:采用数据驱动的方式,使神经网络自动学习特征,根据所学到的特征进行分类。
③:当然,现在也有一些迁移学习可以使用少量数据重新训练一个预训练模型,使其达到很好的分类效果。

本文简单记录从课程中学到的前两种方法。


一、传统算法

传统算法包括KNN、SVM、决策树等算法,可以很简单的从sklearn库中进行调用,现在通常运用在一些数据分析中。这些算法构造的线性分类器(线性分类器 – 决策边界是特征的线性函数的分类器)如何进行图片的分类?

最邻近分类器 Nearest Neighbor classifier

最邻近算法:找到最邻近的样本的分类,利用‘近朱者赤’原则,进行新样本的归类。
K-NN算法,多找几个人!K个人!一个人容易产生误差!

图片展示的使使用knn进行二分类,通过人工构造的特征空间,将样本在空间中进行映射,形成不同的分布,最终根据分布,模型产生一个最优的分解面,对新样本进行分类。KNN是使用样本之间的垂直平分线的组合进行边界的划分。
对于图像分类操作步骤如下:
第一步:首先使用像素点分布,将图片映射到空间中。(train)
补充一点我不会的知识:一个视觉单位取值范围为0~255、8bit表示一个像素点、3通道RGB 通常用一个网格表示
第二步:进行样本之间的距离计算。(test)
计算样本之间的距离通常使用:

L1距离<曼哈顿距离、L1范数>:求和-对应位置差的绝对值  与坐标系关系比较密切、特征之间有明确的语义
L2距离:<欧氏距离> :高中两点距离公式,圆上距离圆点的距离都相同
需要计算每一个待分类样本和分布空间各个点的距离。通常具有很高的时间复杂度。


听起来似乎很好理解,解释性也较强,但是存在一个问题,这种分类是否具有较高的可信度?


图片展示的是使用L2距离进行变换后的图片和原图的比较,在故意设计下,后三张变换过后的图片和原图具有相同的L2距离。可见,使用L2距离简单的进行计算像素之间的距离进行分类,可靠性不强。
同时,在随着样本维度的升高,逐渐出现空间维度爆照等问题。

因此我们可以发现KNN具有以下优缺点:

优点:简单,易于理解,易于实现,无需估计参数,无需训练适合对稀有事件进行分类特别适合于多分类问题(multi-modal,对象具有多个类别标签)。
缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢可解释性较差,无法给出累决策树的规则。

在日常生活中,仍然有用到KNN的地方。如我们常见的推荐算法,通常根据余弦相似度、L距离等计算用户之间、商品之间某些特征的距离,进行推荐。(用户注册时的标签选择就是为了一定程度上解决推荐算法的冷启动问题)

存在问题

上面我们提到,使用像素不能很好的进行图片的描述,进而分类器效果也不理想。如果我们采用一种对于物体的某些特征进行描述,是否会更好的分类呢?比如,猫咪:两只尖尖的耳朵、胡子等

问题又出现,猫咪有很多种,同时世界上还有很多生物,我们无法做到每一个都达到细粒度划分。

这时,我们便需要使用深度神经网络,帮助我们学习到图片中的某些特征,进而根据自己所学到的特征,进行新样本的分类。

二、深度神经网络

神经网络在很早就被提出,但是当时的CPU算力有限,没有使人们注意到这块金子!

1.线性变换


线性分类器和我们学习的初等函数中的线性函数相似,其中W表示权重(是一个分类数*特征的矩阵),b表示偏差。构造分界面,能够将样本进行分类。其中10表示最终分类类别数,3072(32 * 32 * 3)表示特征数

通过矩阵乘法,计算出每一个类别所获得的分数。分数最高的类别即为分类类别。

2.梯度下降

在随机初始化的W和b,得到的分类结果几乎没有什么卵用。我们如何进行参数更新,使其能够好起来?

损失函数

在给定的数据集中,计算模型分类标签和真是标签之间的差距,也就是我们所说的损失。

图片所示的是SVM中用到的损失,也称为铰链损失。

当然还有多种损失函数L1、L2损失、 交叉熵损失函数、最大似然估计(某种时间发生的概率最大)、KL散度
等。(留个坑!明天一定补!!!)

优化函数

损失过大,要用优化。通过计算梯度,找到能够使Loss最小的地方。

数值方法可以帮助我们求梯度,但是存在计算很慢的问题。采用解析解方法进行梯度计算。

优化函数本质:根据各个特征值的变化对于最终Loss的影响,计算梯度,使用梯度下降,使Loss的值逐渐变小。为什么可以通过选择合适的优化函数,使用梯度下降方法进行优化?

是因为Loss通常为非凸函数,可以使用优化方法找到其中的局部最优点、全局最优点,以降低Loss损失。


从图中可以看出,不同的优化函数所产生的优化效果不同。
同时,梯度下降过程中,除了选择合适的优化函数,还需要选择合适的学习率(lr):

lr过小:更新的速度过慢。
lr过大:导致出现震荡现象,不能够达到最后的收敛。

同时还有batch-size的选择问题:

batch-size太大:内存问题、全局梯度计算过慢。
batch-size太小:收敛速度太慢。

总结

提示:*******softmax、正则化明天留着补天******

【CS231n系列】相关推荐

  1. CS231n系列之 Lecture1:Introduction

    实验室老师的要求,是要自己学习斯坦福大学的CS231n的课程,所以,准备做一系列用以记录自己学习的过程.下面的链接是第一节课的视频,ppt,以及字幕,但是字幕比较不好,很多错误,时间关系也就不进行更正 ...

  2. CS231n系列课程Lecture4:Backpropagation and Neural Networks(part 1)

    先贴出课程链接: http://pan.baidu.com/s/1cBznv4 密码: 7nbg 课程开始回顾了一下得分函数,SVM loss, data loss + regularization, ...

  3. CS231n系列课程Lecture6: Training Neural Networks, Part 2

    课程链接: https://pan.baidu.com/s/1mhGp08K 密码: xgex Parameter Updates 1.梯度下降(最速下降法) 这个就是简单的梯度下降,dxdx就是求出 ...

  4. 斯坦福NLP名课带学详解 | CS224n 第11讲 - NLP中的卷积神经网络(NLP通关指南·完结)

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...

  5. 人工智能 - 扩展阅读

    Transformer 1. illustrated-transformer 2. Attention Is All You Need: https://arxiv.org/abs/1706.0376 ...

  6. 深度学习-计算机视觉-0基础-学习历程

    周志华<机器学习>------------------------若是想从基础算法公式开始可以先试着看一下周志华的<机器学习>,由于我对公式推导很头疼,看了几页就跳过了.(在经 ...

  7. CS231n课程笔记翻译系列之目录汇总

    知乎上CS231n课程翻译系列 翻译的笔记非常好,为了方便查看,这里把所有目录列于此,并给出链接. Python Numpy教程(全篇) Python 基本数据类型 容器(列表, 字典, 集合, 元组 ...

  8. 机器学习与深度学习系列连载(NTU-Machine Learning, cs229, cs231n, cs224n, cs294):欢迎进入机器学习的世界

    欢迎进入机器学习的世界 本教程是根据台湾大学李弘毅老师的课程机器学习课程,斯坦福大学CS229.CS231N.CS224N.CS20i.伦敦大学学院 ([UCL-Course])(http://www ...

  9. CS231n公开课系列1_视频+课件+作业下载+GitHub批量下载工具

    主要内容: PPT download notes download assignment download GitHub批量下载工具 CS231n是斯坦福大学教授针对使用深度学习处理图像(计算机视觉处 ...

最新文章

  1. 谢文睿:西瓜书 + 南瓜书 吃瓜系列 6. 神经网络
  2. 自己建文件111 txt python_这可能是最详细的Python文件操作
  3. SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户
  4. 数据中心两种常用流量模型运用mininet的实现
  5. 有一说一,确实。。 | 今日最佳
  6. 海量数据寻找最频繁的数据_寻找数据科学家的“原因”
  7. 【PAT - 甲级 - 1018】Public Bike Management (带权最短路,多条最短路中加条件,DFS)
  8. 基于Keras的卷积神经网络用于猫狗分类(未进行数据增强)+卷积层可视化
  9. Oracle中Number类型字段使用.netTiers和CodeSmith问题的解决方案
  10. 如何阻止机器人杀害人类?
  11. HTTP协议状态码详解(HTTP Status Code)(转)
  12. IA64与x64的区别
  13. 【读书笔记】C#高级编程 第九章 字符串和正则表达式
  14. GLPI 无法登录、账号没有权限的解决方法
  15. Unity-黑暗之魂复刻-翻滚、后跳功能
  16. 辅导作业很“崩溃”?猿辅导教你三招告别怒吼式教育
  17. zarchiver解压提示出错_zarchiver解压操作出错怎么办 zarchiver解压操作出错解决办法...
  18. Microcontent - 微内容
  19. 程序是如何运行起来的
  20. 主线程异常会导致 JVM 退出?

热门文章

  1. oppor9桌面布局设置_oppor9添加桌面图标
  2. android animator
  3. 十、PyQtgraph使用QtDesigner提升3D图形界面
  4. 备用dns服务器修改,修改DNS,让你的上网速度更快!
  5. 「全网最细」接口测试怎么测?接口测试的流程和步骤
  6. 使用Linux训练LoRA模型
  7. 基础知识--封装、继承、多态、抽象
  8. excel公式编写简化,Python生成公式
  9. 静态工厂方法优缺点个人理解
  10. java 哲学家_Java哲学家进餐问题|多线程