cs231n笔记01:线性分类、最优化

lecture1 课程介绍

  • David Maris70年代阐述对计算机视觉的理解,首先是边缘和曲线,然后是2.5D,将深度信息或场景的不连续结合起来,最终将所有信息组合起来组成3D模型。
  • 计算机视觉,最早用几何体去识别物体,然后是图像分割,90年代用adaboost算法面部识别。21世纪前十年,基于特征识别图像,识别关键特征。开始出现重要的数据集用来做目标识别。
  • 2012年多伦多大学研发的七层卷积神经网络Alexnet在计算机视觉领域取得重大突破。

lecture2 图像分类

knn

  • 现实中很少用来图像分割,一般用于低维数据。
  • 图像间的距离
    d 1 ( I 1 , I 2 ) = p | I 1 p I 2 p |

    d 2 ( I 1 , I 2 ) = p ( I 1 p I 2 p ) 2
  • 调参k:把训练集分成训练集及验证集,交叉验证。
  • knn应用

    1. 归一化数据使数据均值为0
    2. 维度过高考虑PCA降维
    3. 70%-90%数据用于分割训练集与验证集
    4. 如果运行时间过长,考虑近似近邻算法,如FLANN。
  • python 利用knn分类iris数据

# knn交叉验证 iris data
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV,train_test_split
iris = load_iris()
X = iris.data
y = iris.target
x_train,x_test,y_train,y_test = train_test_split(X,y,test_size=0.3)
# 调参
k_range = range(1,15)
weight_options = ['uniform','distance']
param_grid = {'n_neighbors':k_range,'weights':weight_options} 
knn = KNeighborsClassifier(n_neighbors=5)
grid = GridSearchCV(estimator=knn,param_grid=param_grid,cv=10,scoring='accuracy') 
grid.fit(x_train,y_train)
print '最佳参数:%s' % grid.best_params_ #k=8,distance
knn = KNeighborsClassifier(n_neighbors=8,weights='distance')
knn.fit(x_train,y_train)
print knn.score(x_test,y_test) #准确率 0.97

线性分类

线性分类模型f(x,W)=Wx+b
cifar-10图像是32*32*3=3072,10分类,则
W为10*3072矩阵,图像各像素被列成一列,b为10*1。
这里写图片描述

  • 如果衡量W好坏?—损失函数

lecture3 损失函数与最优化

损失函数

多分类SVM损失函数,使正确类别获得得分高,损失为

L i = j y i m a x ( 0 , s j s y i + Δ )

这里写图片描述

正则化

防止过拟合,更喜欢权重分布均匀的参数。
L1正则化实现稀疏。
多维SVM损失函数为

L = 1 N i j y i [ m a x ( 0 , f ( x i ; W ) j f ( x i ; W ) y i + Δ ) ] + λ k l W k , l 2

其中N是训练集样本数,j是错误类别。

多维逻辑斯蒂回归–Softmax分类

s = f ( x i ; W ) ,则 P ( Y = k | X = x i ) = e s k e s j ,损失函数 L i = l o g P ( Y = y i | X = x i )
最优化目标函数:梯度下降法。
SVM得到类别得分,Softmax分类器得到属于该类别的概率,效果差不多。

最优化

找到w使损失函数最小化。SVM损失函数是凸函数,但如果扩展到神经网络,损失函数就不是凸函数了,是凹凸不平的复杂形状。
- 策略1:差劲的初始方案:随机搜索,准确率15.5%
- 策略2:随机本地搜索
W基础上产生一个扰动,只有 W + δ W 使损失函数更低,则会执行更新。
- 策略3:跟随梯度,沿最陡峭的方向下山。

计算梯度

  1. 数值梯度(近似)
    在不计算出错的情况下,使用尽可能小的h,无法取到趋向0的极限,所以只是近似。中心差值公式 [ f ( x + h ) f ( x h ) ] / 2 h 效果较好。步长是最重要超参数之一,小步长下降稳定但进度慢,大步长进展快但风险大。

  2. 分析梯度
    微分计算能快速得到梯度公式(不是近似),但容易出错,所以要和数值梯度作比较。

    d d w j L i = 1 ( w j T x i w y i T x i + Δ > 0 ) x i

  3. 梯度下降
    一般采用小批量数据梯度下降,数目一般选择32,64,128等。

猜你喜欢

转载自blog.csdn.net/qq_33476409/article/details/81867125
今日推荐