总结图
图像表示
图像类型:3种
大多数图像分类算法要求输入向量
将图像转换成向量的方法有很多:最简单的直接转换为矩阵
分类模型
线性分类器:
特点:
1.形式简单、易于理解
2.通过层级结构(神经网络)或者高维映射(支撑向量机)可以形成功能强大的非线性模型
大样本:神经网络最有效
小样本:支撑向量机最有效
定义:线性分类器是一种线性映射,将输入的图像特征映射为类别分数
线性分类器的矩阵表示:
问题:CIFAR10 数据集分类任务的分类器, x,w,b,f的维度是多少?
回答:CIFAR10有10个类别且图像大小为32x32x3,因此:
x是图像向量,其维度为3072维;
w 是权值矩阵,其维度为10x3072;
b是偏置向量,其维度为10x1的向量;
f是得分向量,其维度为10x1的向量
w可以看出模板!
输入图像与评估模板的匹配程度越高,分类器输出的分数就越高
线性分类器的决策边界:
就是找到一个分界面,找到决策边界
b控制着线的偏移
箭头方向代表分类器的正方向,沿着箭头方向距离决策面越远分数就越高。
给出最优的分类模型,还需要损失函数与优化算法的帮忙。
损失函数
更希望损失函数和参数有着某种的关联!
损失函数搭建了模型性能与模型参数之间的桥梁,指导模型参数优化。
- 损失函数是一个函数,用于度量给定分类器的预测值与真实值的不一致程度,其输出通常是一个非负实值。
- 其输出的非负实值可以作为反馈信号来对分类器参数进行调整,以降低当前示例对应的损失值,提升分类器的分类效果
多类支撑向量机损失:
max(0,M) 损失——常被称为折页损失(hingeloss)
损失函数输出的一定是非负实值!!!!!!他一定和模型参数有关!!!!!!
最后看的是所有样本的平均损失,不能只看一个!
关于多类支撑向量机损失的一些问题:
1.最小为0,最大为无穷
2.检测编码是否错误
3.每一项多了1,并无太大影响
4.变大N倍,并不影响和其他的比较
5.加平方后会影响分类器的性能
正则项和超参数
假设存在一个W使损失函数L=0,这个W是唯一的吗?
不唯一!
例如下图:
不唯一,因为w2同样有L = 0
应该如何在w1和w2之间做出选择?
正则项:
入是一个超参数控制着正则损失在总损失中所占的比重
什么是超参数?
在开始学习过程之前设置值的参数,而不是学习得到。
超参数一般都会对模型性能有着重要的影响。
L2正则项
第二组权值容错性能更好!
所以L2正则项喜欢分散权重,鼓励分类器考虑所有特征,而不是只依赖其中几维特征!增强偏好性!
参数优化
参数优化是机器学习的核心步骤之一,它利用损失函数的输出值作为反馈信号来调整分类器参数,以提升分类器对训练样本的预测性能。
优化算法目标:损失函数:是一个与参数%有关的函数,优化的目标就是找到使损失函数:达到最优的那组参数W。直接方法是使L对W的导数为0。
通常,L形式比较复杂,很难从这个等式直接求解出 W!
常用方法:梯度下降法:一种简单而高效的迭代优化方法!
步长就是学习率!
如何计算梯度?
数值梯度: 近似, 慢, 易写
解析梯度: 精确, 快, 易错
数值梯度有什么作用?
答:求梯度时一般使用解析梯度,而数值梯度主要用于解析梯度的正确性校验(梯度检查)。
梯度下降算法效率太慢
M是需要指定的!m取2的倍数!
在论文中更强调epoch!
总结
数据集划分
:
测试集用于评价泛华性能!
训练集用于给定的超参数时分类器参数的学习;
验证集用于选择超参数;
测试集评估泛化能力;
K折交叉验证:
问题:如果数据很少,那么可能验证集包含的样本就太少,从而无法在统计上代表数据。
这个问题很容易发现:如果在划分数据前进行不同的随机打乱,最终得到的模型性能差别很大,那么就存在这个问题。接下来会介绍K 折验证与重复的K 折验证,它们是解决这一问题的两种方法
K指的是分的份数!
还可以带有打乱数据的重复K折验证:随机性更好!
数据预处理
不受到数值范围的影响:去均值
去掉量纲的影响:归一化
去相关:让数据独立出来,同时降维
白化
神经网络中常用去均值和归一化!!!