CS231n简介
详见 CS231n课程笔记1:Introduction。
注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。
课程笔记
1. 图像分类问题简介
-
a. API: input image, output label
b. 难点:
- i.illumination (光强)
- ii. deformation (变形)
- iii. occlusion (遮挡)
- iv. background cluster(背景混淆)
- v. intraclass variation(类内区别,如猫有不同种类)
c. 没有hard code(直接编程)的算法
d. 传统算法:提取特征–>分类器
e. 这堂课介绍的算法:数据驱动算法
2. KNN
2.1. NN(nearest neighbor)最近邻算法
与训练集中距离该点最近的点分类相同。
不同变种:距离的定义不同,常见的是L1(差的绝对值和),L2(差的平方和)。
2.2. kNN(k nearest neighbor)k近邻算法
距离该点最近的k个点投票。
变种也在于距离的定义 。
k为超参数,通过交叉验证确定。
kNN某种程度上降低了variance,增加了bias。
2.3. 优缺点
- 测试速度与训练集大小成线性关系。(CNN是训练时间长,测试时间短(与模型有关,与训练集无关))
1.1. 可以使用kd-tree降低搜索时间(但也是log随训练集增长)。 - kNN有维数灾难,即特征维数越高,需要的数据越多,是几何倍数增长。
2.1. 假设归一化到0-1区间内,那么为了达到密度为100,1维需要100个点,二维就需要100^2,n维就需要100^n。(密度的作用是使得每个点附近都有足够多的点来投票,如果点数较少,可能需要(0.9,0.9)的点给(0.1,0.1)处的点进行投票,决定其类别,这与直觉相悖。) - 很少有人直接将kNN算法作用于像素点。
上图所有的三种操作(平移,遮挡,降低光强)在kNN中都与原图距离相同,这和直觉相悖,因为遮挡了主要特征的图形已经难以看出与原图是同一个人。 - kNN在大多数机器学习问题上可以得到一个不差的结果,可以作为问题处理的下届。(是有传统机器学习中的概率证明)