机器视觉与深度学习基础知识补漏Week1
线性分类器
分类器设计总体流程
图像表示
二值化图像;(0or1)
灰度图像;(0-255 单通道)
彩色图像;(三通道RGB)
分类模型
线性分类器:
f(x,w)计算分类得分,选取其中最高的分类得分作为分类输出。
其中w其实是作为权重矩阵,w表示对图像中特殊部分进行突出显示,b为偏置项。(模板)
线性分类器其实就是寻找分类的决策边界。通过决策边界来判断样本的分类情况。
### 损失函数
损失值:真实值和预测值的差值。
一般数据集的损失函数定义:
多累支撑向量机损失:
其中存在一个+1操作,是为了防止两类误差分类预测值相近,虽然预测正确,但是分类器仍需优化的情况。
引入正则损失(对参数的损失,参数平衡)。其中包含一个超参数用来调整数据损失和正则损失的权重关系。
优化算法
目标旨在:寻找使得损失函数达到最小时的那一组W参数。
直接方法:使得损失函数对W求导得0。
梯度下降算法:
梯度下降的方向以及步长(lr)。
具体流程:计算梯度->更新梯度
梯度计算方法:
1.按照导数公式求导,(f(x+n)-f(x))/n这一套。
2.使用解析法,现有的求导公式。
随机梯度下降法:相较于梯度下降法,其是随机使用一个样本进行计算梯度,减少了计算量,在大量的数据下其正向优化效果能掩盖噪声带来的负面影响。
小批量梯度下降法:每次随机选取m个样本计算梯度。m=1时就是随机梯度下降法。
iteration;
batch_size;
epoch;
数据集划分:
这里搞清楚了验证集和训练集的区别:
训练集只能用俩评估最终模型的性能;
验证集是用来判定不同朝参属下的模型的性能,本质上用于选择超参数;
训练集用来训练模型里面的参数;
K折交叉验证:数据量小的时候使用,分为shuffled和not..
数据预处理(去范围,去量纲):
全连接神经网络
网络结构
激活函数
损失函数
SOFTMAX:将输出分数压缩到0-1内,即一个概率分布。相较于之前的输出分数,这里我们输出的是一个概率。因此对应的损失函数也应该改变。
交叉熵损失:对于SOFTMAX预测概率和真实one-hot编码的真实值进行损失值计算的方法。
这里介绍了三个概念:熵、交叉熵和相对熵;其关系是交叉熵=熵+相对熵。由于在我们的分类任务中,确定分类结果的熵为0,所以我们可以使用交叉熵来代替相对熵来度量两个分布的不相似性。
我们再将之前了解的多类支持向量机损失和交叉熵损失进行比较:其计算过程也不同。
前者将每一类预测得分-真实值求和;而后者则使用真实的类别预测概率做负对数求损失。
举个例子:
计算图
计算图是一种有向图,它用来表达输入、输出及中间变量的计算关系,图中的每一个节点对应着一种数学运算。
计算图可以更好的帮我们表示计算机中表达式运算的过程,尤其是在反向传播中进行求梯度的链式求导的过程。
小知识点:计算图的颗粒度。
使用计算颗粒度大的门,也就是这个门不仅仅是一个符号,而是一个公式,会大大减小我们的计算量,提高计算效率,但是这种门/公式得需要自己设计。
动量法
对于SGD,其可能存在山谷问题,导致出现震荡。引入动量法,实际上就是引入了历史梯度信息协同更新梯度。这里引入了动量系数,用以表示历史梯度信息所占的权重(可以理解为摩擦系数)。
动量法的另一个优势:通过一个历史梯度能将我们推出鞍点这个范围。
另一种方法:自适应梯度法
自适应梯度法:本质就是在震荡的方向减小其步长,在平缓的方向增大其步长。
而对于如何分辨震荡和平缓,其依据是梯度幅度的平方大小,大的为震荡方向,小的为平缓方向。
缺陷就是:随着步数的累计,历史梯度值越来越大,导致整体步长被压制,步长越来越小。
为了解决这个缺陷同样引入了一个权值(类似动量),用以控制历史梯度值的影响范围。
动量法和自适应梯度法结合:Adam。
这里有一个细节:由于在累计梯度和累计平方梯度时,导致一开始的用来更新权值的梯度被缩小(冷启动),模型很难收敛,因此提出了一个修正偏差。其保证了初试的修正动量和修正自适应梯度能保持原有的梯度,在经过一段时间的更新后,缩小当前梯度的影响,放大两者结合的优点(累计梯度和累计平方梯度)。
权值初始化
首先要避免全0初始化,这样导致输出全为0,并且方向传播时的梯度也一样,最后更新后的权值也全部一样,也就是所有神经元学习到的东西全部一样,等价为1一个神经元,导致无法训练。
其次权值随机初始化,保证权值服从N(0,0.01)的高斯分布。
但是我们发现在第三个及之后的隐层的输出全为0,也就是前向传播的信息全部丢失了。并且因此在反向传播时局部梯度也为0,反向传播也消失。
我们的神经元全部处于饱和阶段,正向传播信息传递过去了,但是在反向传播时局部梯度全部为0(梯度消失)。
可以看出我们希望得到一个在正向传播过程和反向传播过程中信息不丢失的初始化方法。
Xavier初始化:使得输入与输出分布相同(都为正态分布)
通过分析可以知道,我们W的分布要为(0,1/N)时,输入和输出的分布才相同。
批归一化
解决前向过程中信号消失的问题(输出不至于小到0)。在反向传播中让较小的值回归到0均值1方差左右。
下面是归一化的过程
最后增加了4.平移缩放,因为0均值1方差不一定是最好的结果,需要根据数据的情况来指定,其中y是对方差的调整,p是对均值的调整都是从数据集中学习而来的。
对于单张样本测试时,均值和方差来自于训练中累加的每个批次的均值和方差,最后取平均的结果作为预测时的均值和方差。
过拟合
模型在训练集上准确率很高,但是在真实场景下识别率很低。
最好的解决方案是:增大数据集
次优解:正则化:1.调节模型大小2.增加正则项(正则损失),对于大数值权值向量进行惩罚,鼓励更加分散的权重向量,使模型更倾向于用所有输入特征作决策。
欠拟合
模型训练效果不佳,在训练集上效果就不行,更不提测试集及其泛化能力了。
Dropout
Dropout:让隐层的神经元以一定概率失活(不起作用),需要设置一个比例,将某一层的输出值舍弃(设置为0)。
解释Dropout为什么能防止过拟合?
1.更新梯度时参与计算的网络参数变少,降低模型容量。
2.鼓励权重分散(通正则化)
3.模型集成(很像集成学习-投票)
细节问题:在dropout之后需要保持训练层和预测层的输出水平一致。
超参数调优
超参数是人为设计的,在模型设计阶段就需要指定。
网格索搜,随机搜索。
一般先采用随机搜索确定大致范围再使用网格搜索精细查找。
使用标尺空间后,我们在不同量纲下分布比较均衡。
访客
感谢分享补充
博主
谦虚奥 😳