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

lecture1 课程介绍

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

lecture2 图像分类

knn

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

    d2(I1,I2)=p(Ip1Ip2)2 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损失函数,使正确类别获得得分高,损失为

Li=jyimax(0,sjsyi+Δ) L i = ∑ j ≠ y i m a x ( 0 , s j − s y i + Δ )

这里写图片描述

正则化

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

L=1Nijyi[max(0,f(xi;W)jf(xi;W)yi+Δ)]+λklW2k,l 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(xi;W) s = f ( x i ; W ) ,则 P(Y=k|X=xi)=eskesj P ( Y = k | X = x i ) = e s k ∑ e s j ,损失函数 Li=logP(Y=yi|X=xi) L i = − l o g P ( Y = y i | X = x i )
最优化目标函数:梯度下降法。
SVM得到类别得分,Softmax分类器得到属于该类别的概率,效果差不多。

最优化

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

计算梯度

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

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

    ddwjLi=1(wTjxiwTyixi+Δ>0)xi 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等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值