导图社区 220917_深度学习基础
深度学习基础,内容包含 优化器、损失函数、ML概念、激活函数、卷积、计算、评价指标、归一化、Attention、池化、Dropout、知识蒸馏、初始化。
编辑于2023-05-26 19:30:59 上海深度学习
优化器
梯度下降法
标准梯度下降法(GD,Gradient Descent)
步骤
1. 遍历全部训练样本,计算当前时刻下降的梯度
2. 根据梯度更新参数值
优势:每次更新都是局部梯度下降最快的方向
劣势:每次训练遍历整个训练样本,容易落入局部最优点
随机梯度下降法(SGD,Stochastic Gradient Descent)
步骤
1. 随机选取一个样本,计算当前时刻下降的梯度
2. 根据梯度更新参数值
优势:训练Faster-RCNN模型每个样本都有大量候选框,适合使用SGD
劣势:其他应用下降速度慢,每次梯度更新只关注局部点,单样本会容易引入训练噪声
批量梯度下降法(BGD,Batch Gradient Descent)
部分博文将其等同为标准梯度下降法,部分为MBGD
小批量梯度下降法(MGBD,Mini-Batch Gradient Descent)
步骤
1. 随机抽取一小批次数据,计算当前时刻下降梯度
2. 根据梯度更新参数值
优势:加快收敛,可并行
劣势:BatchSize选择不当可能导致不收敛
动量优化法
标准动量优化方法(SGDM,SGD with Momentum)
为了抑制SGD震荡,SGDM加入惯性,下坡时坡度越大,步长越大
惯性使用一阶动量表示,一阶动量由此前累计的下降梯度计算得到
经验上看,当前下降方向是0.9的此前下降步长+0.1当前计算得到的梯度方向组合而成
牛顿加速梯度动量优化方法(NAG,Nesterov Accelerated Gradient)
梯度计算:NAG不计算当前时刻梯度,而是按照一阶动量走了一步后,那时的梯度方向,与一阶动量结合,作为当前时刻迭代的梯度
自适应学习率优化算法
AdaGrad
Innovation:根据历史更新频率,自适应参数学习率经常更新的参数,我们已经积累了⼤量关于它的知识,不希望被单个样本影响太⼤,希望学习速率慢⼀些偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学⼀些,即学习速率⼤⼀些。
二阶动量可以度量历史更新频率得到,二阶动量是迄今为止所有梯度值的平方和
优势:前期放大梯度,后期缩小梯度;数据分布稀疏情况下适应性较好
劣势:依赖人工设置学习率;训练可能提前结束
RMSProp(Root Mean Square Prop)
将AdaGrad的梯度变成指数加权的移动平均,避免了后期提前结束训练
AdaDelta
将AdaGrad的累计历史所有梯度值变为SlideWindow累计过去一段窗口
Adam(Adaptive Momentum)
将一阶动量和二阶动量都加入梯度计算,是前述所有方法的集成
损失函数
L1Loss
输出和GT之间的差的绝对值
平方差损失(MSE)
输出和GT之间的均方误差
适合回归问题使用
交叉熵(Cross Entropy)
交叉熵衡量两个分布之间的相似度
二分类
多分类
分类问题适合使用交叉熵的原因:MLP的w和b的梯度和激活函数的梯度成正比计算梯度时,MSE由于有sigmoid激活,sigmoid在1和0附近梯度小,而交叉熵Loss则是残差越大,梯度越大
KL散度(KL Diversity,相对熵)
KL散度=交叉熵-信息熵,信息熵为常数时两者等价
Focal Loss
交叉熵对于正样本⽽⾔,输出概率越⼤损失越⼩对于负样本⽽⾔,输出概率越⼩损失越⼩
当训练负样本远多于正样本时,使用交叉熵可能导致模型倾向于将正样本判为负样本
FL将正样本和负样本的Loss区别计算,提高正样本的Loss占比,在one-stage目标检测中使用
IOULoss
目标检测时BBox之间的面积计算的Loss
Metric Learning
metric learning:学习一个变换函数L,将数据从原向量空间映射到新向量空间,新向量空间中相似数据距离更小,非相似数据距离更大
metric learning常用loss:triplet,n pair mc,proxy nca,lifted struct,ranked list loss
ML概念
Logistic Regression
功能:一种用于解决二分类(0 or 1)问题的机器学习方法
与线性回归的关系
逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)
逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布
去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归;逻辑回归通过Sigmoid函数引入了非线性因素
Softmax Regression
本质:softmax 回归(softmax regression)其实是 logistic 回归的一般形式,logistic 回归用于二分类,而 softmax 回归用于多分类
激活函数
sigmoid
别名:Logistic Function
函数性质:将[-∞, +∞]映射到[0, 1],S形曲线
特点
优势:方便求导;尺度归一
劣势:训练后期梯度消失(越往两侧走导数逐渐趋近0);不是零均值,值域[0, 1],对后续的梯度产生影响;计算复杂度稍高(指数形式)
用于:多(二)标签分类任务输出层,表示各个类别的可能性,对应多个正确答案,各个输出之间独立,但一般用于二分类
softmax
sigmoid的多分类版本
函数性质:将多个[-∞, +∞]值映射到(0, 1),并且和为1
用于:单标签多(二)分类任务输出层,只有一个正确类别,各类别的可能性互斥(公式分母有Σ实现)
功能理解
argmax的一种平滑近似
输入向量归一化映射到一个类别概率分布(和为1),常常将softmax作为MLP的最后一层
一个概率无向图上的联合概率
tanh
将sigmoid变成0均值(值域-1到1)
ReLU
优势:收敛比sigmoid和tanh快;计算复杂度低
劣势:某些神经元可能永远不激活;不是zero-center;数据尺度不压缩(即不会归到01之间)
Leaky ReLU
输入为负数增加一个极小斜率
softplus
ReLU的平滑近似
卷积
2D卷积
2D卷积
1x1Conv
改变通道数
1x1不改变h和w,但可以改变channel数
增加非线性
利用激活函数增加非线性,增加网络层数
跨通道信息交互
3x3x64channels的卷积核后⾯添加⼀个1x1x28channels的卷积核,就变成了3x3x28channels的卷积核
空洞卷积(Dilated Convolution)
dilation=2表示隔一个像素采集一个数值用于卷积
增大感受野
反卷积/转置卷积(Deconvolution)
向上采样
反卷积易产生棋盘格现象(在stride是kernel_size的整数倍时有所缓解)
与上采样的区别是反卷积有参数
2stage上采样
先采用线性或B曲线上采样将feature-map上采样到合适大小,再进行卷积
此方法在超分领域效果良好
亚像素卷积(Sub-pixel Convolution)
可分离卷积(Separatable Convolutions)
空间可分离卷积
将3x3卷积核变成两个3维向量分别进行行列卷积
优势:计算量和参数量少于一半卷积
劣势:训练结果可能不佳
深度可分离卷积
用于3D卷积,将3D卷积核(是一个3x3x3张量)分为深度卷积核1x1卷积两部分
扁平卷积(Flattened Convolutions)
分组卷积(Grouped Convolution)
将卷积分组后放到两个GPU执行,最后进行合并,一般是在channel层面进行分组
混洗分组卷积(Shuffled Grouped Convolution)
输入层卷积计算的结果仍按照原先的顺序进⾏合并组合,这就阻碍了模型在训练期间特征信息在通道组之间流动
混洗分组卷积,将分组卷积后的计算结果混合交叉在⼀起输出
3D卷积
计算
参数量
卷积核大小(kernel_size)
output = input - kernel_size + 1
步长(stride)
output = (input - kernel_size) / stride + 1
除之后有小数则向下取整
填充(padding)
output = (input-kernel_size + 2*padding) / stride + 1
举例
卷积层上一层15*15*16(16为channel),下一层10*10*32,5*5卷积核,那么对应的参数量为5*5*16*32
全连接层上一层50维,下一层10维,参数量为50*10+10
计算速度(FLOPS,Floating Point of Per Second)
每秒浮点运算次数
衡量硬件性能
计算量(FLOPs,Floating Point of Operations,常见)
浮点运算次数
衡量算法和模型复杂度,是模型中乘和加的次数
举例
卷积层kw和kh是kernel宽高
# 先不考虑biascin * kw * kh 次乘法cin * kw * kh - 1 次加法 # 加法运算数,因为n个数相加,要加n-1次2 * cin * kw * kh - 1 次乘法和加法
# 如果考虑 bias 2 * cin * kw * kh 次乘法和加法 # 加法多bias这⼀次
# 再考虑输出的feature map⼤⼩和通道 H*W*cout(2 * cin * kw * kh)* H * W * cout
全连接层
# 先不考虑bias(2 * I - 1)
# 如果考虑 bias2 * I = (2 * I - 1) + 1
# 再考虑输出维度(2 * I) * O
评价指标
基本概念
若⼀个实例是正类,并且被预测为正类,即为真正类(True Positive TP)若⼀个实例是正类,但是被预测为负类,即为假负类(False Negative FN)若⼀个实例是负类,但是被预测为正类,即为假正类(False Positive FP)若⼀个实例是负类,并且被预测为负类,即为真负类(True Negative TN)
Accuracy
正确分类的样本数/总样本数
Accuracy=(TP+TN)/(TP+TN+FP+FN)
Precision
正确分类为正样本的数量/被分为正样本的样本数
Precision=TP/(TP+FP)
Recall
正确分类为正样本的数量/总的正样本数
Recall=TP/(TP+FN)
PR曲线
Recall为横坐标,Precision为纵坐标绘制图像
PR曲线的阈值是一个类别被分为正例(或负例)的概率阈值,网络预测此样本的输出为0.4,规定阈值大于0.3为正例,则此例为正例
F1值
F1 = {精确率*召回率*2} / {精确率+召回率}
Average Precision
多分类结果的Precision平均值
Sensitivity(TPR)
等于Recall
Specificity(TNR)
正确分类的负样本/总的负样本数
TNR=TN/(TN+FP)
ROC(Receiver Operating Characteristic Curve)曲线
横轴1-Specificity
纵轴Sensitivity
ROC不会随正负样本的分布变化而变化,当负样本很多时,可以真实反应模型效果
可以查看任意阈值对模型泛化性能的影响
最近靠近左上角的ROC曲线点时分类错误最少的点,其FN和FP总和最少
AUC(Area Under Curve)
ROC曲线下的面积
IOU(Mean Intersection Over Union)
平均交并比
用于语义分割,预测的区域与GT的交集面积/并集面积
归一化
BatchNormalization
痛点:随着网络加深和训练的进行,激活函数输入值逐渐靠近取值区间的上下限,导致反向传播时低层网络梯度消失
作用:将输入数据分布归一到标准分布附近,使输入保持在激活函数的敏感区域
方法:对一个batch输入的batch size维度做归一化,与batch size有关系,batch size变化那么归一化的结果也会变化,batch除了体现在输入端,也可存在于网络的任何一层
步骤
1. 求Batch均值
2. 求Batch方差
3. 将Batch数据归一化
4. 用Gamma和Beita分别施加尺度变化和平移
可学习参数:Gamma(尺度)和Beita(平移)使输出分布变为均值为Beita标准差为Gamma的分布;一个channel对应一组Gamma和Beita,一个BN层参数量为2*channels
放置:放在激活层之前或之后
注意
BatchSize太小则BN效果差,因为样本少,统计信息失效
Mini-Batch训练,单例inference可能效果差,可以用之前训练时记录的Mini-Batch统计值直接在inference时使用
LayerNormalization
对单个样本的所有维度进行归一化,与batch size没有关系
Attention
self attention
positional encoding
可以训练网络,也可以用固定公式,固定公式好处是维度变化过后可直接迁移,比如attnention is all you need用了三角函数
将一个句子的vec concat成一个矩阵X (n x d),行数n等于词数,维度等于token的embedding vector维度
经过WQ WK WV (d x m,m为QKV特征向量的维度)线性变换层转换到QKV各自的线性空间,注意是X ·WQ,得到(n x m)维线性变换后的特征向量
QKV是64维dot product attention基本公式Attention(Q, K, V) = softmax(Q K^T) Vscaled dot product attention在softmax里面再除以一个词向量维度attention是value的加权和,每一个value的权重取决于Q K之间的相似度,越相似的key对应value的权重越大Q K^T 为 (n x n)最终输出是与QKV维度相同的矩阵Z (n x m)
multi head attention,拥有多个上述线性映射加QKV模块,最终将8个QKV输出的Z 横向concat在一起,维度(n x 8m) ,经过一个线性映射(8m x d)成与输入X同维度的Z(n x d)
残差模块上述计算出来的Z是残差,与X相加,得到更正之后的X,之后执行layer normalization
接一个feed forward层,其实就是两层mlp
残差连接,ff层输出也与前面的网络结果相加,再LN得到最终结果
最终输出为信息矩阵C,与输入维度完全相同,这个信息矩阵加入了周边单词的信息,整个self attention相当于embedding模块的一种信息增强,如果只有word2vec,相当于只有当前单词的意思
cross attention
Attention(Q, K, V)公式中,使用来自Encoder的KV,但使用来自Decoder自己的Q
transformer
encoder一个self attention得到信息矩阵C
decoder对输出端,最开始输入的是begin信号(占位符)先经过masked multi head attention构成的self attention模块,之后decoder的kv与encoder的q构成attention,共同组成最后的输出,经过MLP映射成词向量
通过词向量查找对应单词
Feed Forward
seq2seq
相对位置编码VS绝对位置编码
https://zhuanlan.zhihu.com/p/397269153
池化
特点
池化不改变通道数,在不同通道上进行
没有可学习参数,只有池化核大小
作用
下采样
实现非线性
扩大感受野
实现不变性
分类
平均池化
保留整体信息
接近分类器末端时代替Flatten操作
最大池化
做特征选择,传递稀疏特征,提供非线性
重叠池化
相邻池化窗口之间有重叠区域
空间金字塔池化(Spatial Pyramid Pooling)
将一个单尺度pooling变成多尺度pooling
Dropout
作用
如果参数太多,训练样本太少,则会出现过拟合
正常训练步骤
1. x输入网络进行forward得到输出
2. 计算Loss,把误差反向传播让模型学习参数
Dropout训练步骤
1. 随机临时地删除一些神经元(输入和输出层保持不变)
2. 进行正常的前向和反向传播
3. 恢复删除的神经元
4. 重复上述过程
知识蒸馏
利用大模型学习到的知识指导小模型训练,使小模型具有与大模型相当的性能,但参数量大幅降低
Soft-Target
Hard-Target表示分类GT是0,1构成的,而Soft是0~1之间小数构成的概率值
显然Soft-Target包含更多信息(例如一个分类问题中,一个输入同时很像两类)
Soft-Target在Softmax中加入温度系数,温度越高,得到的概率结果更相近(更趋近均匀分布),信息量越大
小模型参数量越小,温度应当设置越小,因为更小的模型能学到的知识更少,所以要减少训练数据的信息
步骤
1. 训练Teacher模型
2. 设置温度,产生Soft-Target
3. 训练Student模型
4. Student执行Inference(温度设置为1,退化成普通Softmax)
初始化
随机
标准
参数使用均匀分布进行初始化
Xavier
Glorot条件:好的初始化应该使得各层的激活值和梯度的⽅差在传播过程中保持⼀致
保持每层的输⼊与输出⽅差相等,保持信息在神经⽹络中流动过程的⽅差不变, ⽽参数的分布采⽤均匀分布或⾼斯分布
主要用于初始化tanh,不适用ReLU
HeKaiming初始化
条件:正向传播时,状态值的⽅差保持不变;反向传播时,关于激活值的梯度的⽅差保持不变