参考:https://www.bilibili.com/video/BV1V54y1B7K3
什么是图像分类任务,它有哪些应用场合?
图像分类任务有哪些难点?
视觉、光照、尺度、遮挡、形变、遮挡、形变、背景杂波、类内形变、运动模糊
基于规则的方法是否可行?
什么是数据驱动的图像分类范式?
常用的分类任务评价指标是什么?
有监督、无监督数据
图像表示:
像素表示
全局特征表示(如GIST,抽出频率,适合城市建筑、风景、大场景分类)
局部特征表示(如SIFT特征+词袋模型)
了解每个工具的优势和劣势,
懂原理:工具需要修改,以适应场景
一阶方法
二阶方法
正确率
错误率
top1、top5正确率
数据集:CIFAR10数据集
线性分类器是一种线性映射,将输入的图像特征映射为类别分数。
定义:用于度量分类器预测值和真实值不一致成都,输出的非负实值可以作为反馈信号来对分类器参数进行调整,以降低当前示例对应的损失值,提升分类器分类效果
超参数:在开始学习过程之前设置,对模型性能有着重要的影响。
定义:机器学习核心步骤之一,利用损失函数的输出值作为反馈信号来调整分类器参数,以提升分类器对训练样本的预测性能
方向:负梯度方向
走多远:步长,学习率
2.解析法,精确 速度快 函数导数推导容易错
数值梯度有什么作用?
答:求梯度时一般使用解析梯度,而数值梯度主要用于解析梯度的正确性校验(梯度检查)。
梯度下降算法的计算效率
速度太慢
总结
测试集 上计算精度
K折交叉验证
数据太少,验证集合包含的样本太少,如果再划分数据钱进行不同的随机打乱,最终得到的模型性能差别很大。
去均值:数值都在中心,反映相对差值,,不会受到数值范围影响
归一化:让两个方向不会受到数值范围影响,去量纲影响
全连接神经网络级联多个变换来实现输入到输出的映射。
/多个线性分类器通过级联后的结果
通过指定模板个数,使得模板更准确,模板越多,记录的信息越准确
(全联接神经网络的描述能力更强。因为调整W行数等于增加模板个数,分类器有机会学到两个不同方向的马的模板)
全连接神经网络与线性分类器区别:
线性分类器只能解决线性可分的问题
全连接神经网络可以解决线性不可分的问题
依赖全连接网络非线性操作,通过非线性映射关系, 实现线性不可分的类别的学习
多层感知器最关键的是激活函数
去掉激活函数,全连接神经网络退化成线性分类器
常用激活函数:
sigmoid 不是对称的,5的时候接近于1,映射到(0,1)
tanh 对称,3的时候接近于1,映射到(-1,1)
ReLU,比0大就是自己,小于0等于0
Leaky ReLU=max(0.1x,x)
神经元个数越多,分界面可以越复杂,在这几个集合上的分类能力越强
1.用不用隐层,用一个还是用几个隐层?(深度设计)
2.每隐层设置多少个神经元比较合适?(宽度设计)
没有统一的答案!
依据分类任务的难易程度来调整神经网络模型的复杂程度。分类任务越难,我们设计的神经网络结构就应该越深、越宽。但是,需要注意的是对训练集分类精度最高的全连接神经网络模型,在真实场景下识别性能未必是最好的(过拟合)。
(logistic回归扩展)
把神经网络的绝对输出变成概率
示例
定义:度量两个分布的距离,两个分布越接近,交叉熵损失值越小
预测分布于one-hot表示的真实分布
多类支撑向量机损失,只考虑xi是否大于xj大过1,希望两个分布越接近越好
熵,反映信息量的大小
[1,0,0] H§最小,[1/3,1/3,1/3]H§最大
计算结果:
一个类别概率高的时候,压低别的类别概率方向优化
损失可能变化很小,预测精度上升
计算图帮助计算输出相对于任何w的梯度
计算图是一种有向图,它用来表达输入、输出以及中间变量之间的计算关系,图中的每个节点对应着一种数学运算。
正向:可以求结果
反向:使用链式法则,可以算输出到输入梯度
总结
任意复杂的函数,都可以用计算图的形式表示
在整个计算图中,每个门单元都会得到一些输入,然后,进行下面两个计算:
a)这个门的输出值
b)其输出值关于输入值的局部梯度。
利用链式法则,门单元应该将回传的梯度乘以它对其的输入的局部梯度,
从而得到整个网络的输出对该门单元的每个输入值的梯度。
计算图颗粒度
caffe 写出一些函数,把导数求出来,写入到计算模块,提高效率
tensorflow 所有算法拆解成计算图,计算效率比较低
梯度消失,梯度消失 本质是由于链式法则的乘法特性导致的。
sigmoid激活函数,求导后最大为1/4,很多时候为0,梯度回传容易消失
梯度爆炸
梯度爆炸也是由于链式法则的乘法特性导致的。
导致步长太长,可以做梯度裁剪
tanh(x)
relu函数,计算简单
Leakly Relu,0没有导数(但基本不会出现0)
尽量选择ReLU函数或者Leakly ReLU涵数,相对于Sigmoid/tanh,
ReLU函数或者Leakly ReLU函数会让梯度流更加顺畅,训练过程收敛得更快。
梯度算法改进
目标:改进梯度下降算法存在的问题,即减少震荡
改进思想:利用累加历史梯度信息更新梯度
累加值 累加过程中 震荡梯度会被减弱,走的很慢但是一致的方向会被加强
动量法还有什么效果?
避免鞍点
累加过程此消彼长
作用:参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小),并且能够使得陡峭的方向变得平缓,从而加快训练速度。
缺点:由于是累积平方梯度,导致学习率过快接近0
实验结论:
初始化时让权值不相等,并不能保证网络能够正常的被训练。
有效的初始化方法:使网络各层的激活值和局部梯度的方差在传播过程中尽量保持一致,以保持网络中正向和反向数据流动。
Xavier初始
ReLU
多次迭代后输出大部分集中在0
HE初始化(MSRA)
总结
问题:单张样本测试时,均值和方差怎么设置?
回答:来自于训练中。累加训练时每个批次的均值和方差,最后进行平均,用平均后的结果作为测时的均值和方差。
加入批归一化,让神经网络初始值不那么敏感
过拟合:
定义:深度学习常常遇见的现象,出现过拟合,得到的模型在训练集上的准确率很高,但在真实的场景中识别率确很低。
过拟合——是指学习时选择的模型所包含的参数过多,以至于出现这一模型对已知数据预测的很好,但对未知数据预测得很差的现象。这种情况下模型可能只是记住了训练集数据,而不是学习到了数据特征
欠拟合——模型描述能力太弱,以至于不能很好地学习到数据中的规律。产生欠拟合的原因通常是模型过于简单
随机失活 Dropout
模型参数减少
权重分散,起正则化
超参数搜索策略