机器学习
- 回归:对连续随机变量建模预测的监督学习算法 线性回归 交叉熵损失函数
- 分类:对离散变量建模预测的监督式学习算法 支持向量机 均方差
- 聚类:基于数据的内部规律,寻找其属于不同族群的无监督学习算法 K-means、强化学习、自编码、受陷玻尔兹曼机
1*1卷积核的作用
跨通道信息融合
通过对通道数的降维和升维来减少计算量
ReLU函数的特点
- 计算量更小
- 反向传播过程中,Sigmoid存在饱和区,如果激活函数值落入饱和区,则梯度更新值非常小,导致出现梯度清零消失的现象。
- 可令部分输出为0,造成网络的稀疏性。减少前后层参数对当前层参数的影响,提升了模型的泛化能力。
激活函数的适用范围
Sigmoid:常用于二分类的输出层
tanh:常用于输出对称的结果的时候,比如(-1,1)
ReLU:应用于各种类型的神经网络,卷积神经网络的隐藏层
LeakyReLU:虽然解决了失活神经元的问题,但在实践中并没有发现效果比ReLU有明显的提升。
机器学习和深度学习差别
机器学习需要手动设置特征,深度学习在学习过程中自动提取特征
学习率的算法
SGD、Momentum、AdaGrad、Adam
SGD随机梯度下降,BGD批量梯度下降。一般不用BGD,因为SGD可以作为跳出局部极小值的一种方式,也可能跳出全局最小。
恢复训练的时候要同时保存模型和优化器的参数,如Adam优化器的lr随epochs的改变而改变。
批归一化
解决训练过程中的中间层数据分布发生改变的问题,以防止梯度消失或者爆炸,加快训练速度。
- 使学习快速进行(可以选用较大的lr)
- 降低模型对初始值的敏感性
- 从一定程度上抑制过拟合
正向传播:通过可学习的γ和β参数求出新的分布值。
反向传播:通过链式求导法则,修正γ和β以及相关的极值。
倾向于把BN放在ReLU的后面。
fine tune:冻结大部分前层网络,只对后几层进行调参
线性函数不可以作为激活函数
Dropout仅仅影响训练过程,而不影响测试过程
空洞卷积
在卷积后的特征图上进行0填充,扩大特征图size。既因为有卷积核增大感受野,也因0填充保持计算量不变。
增大感受野的方法
空洞卷积、池化操作、较大卷积核尺寸的卷积操作。
正则化
是在优化器算法中的,如Adam。
在损失函数中加入对模型参数的惩罚项,以平衡因子控制惩罚力度。通过在训练过程中降低参数的数量级,从而降低模型的过拟合现象。
L1&L2正则化会使模型偏好于更小的权值,更小的权值意味着更低的模型复杂度,添加l1l2正则化相当于为模型添加了某种先验,限制了参数的分布,降低了模型复杂度。
常用的有L1\L2\L3正则化
L1\L2:目的是使参数稀疏化,起到了特征选择的作用。如输入了1000维特征,并不是每个特征都起到效果,筛选出重要的特征,使其他的特征权重为0,这样在测试其他数据的时候,与模型没关系的特征就不用考虑进去。
L1适用于特征之间有关联的情况,L2适合没有关联的情况
L3:防止过拟合,提高模型精度
不同点:L1可以让一部分特征的系数缩小到0,从而间接实现特征选择。所以L1适用于特征之间有关联的情况。
L2让所有特征的系数都缩小,但是不会减为0,它会使优化求解稳定快速。所以L2适用于特征之间没有关联的情况
防止过拟合
- Dropout
- 正则化
- BN
- 网络bagging
CNN结构以及优点
输入层、卷积层、激活层、池化层、全连接层、高速通道、BN层、缓解梯度弥散。
- 局部链接:*可以提取局部特征。*图像的空间联系是局部比较紧密的,每个神经元没必要对全局进行感知,只要对局部感知然后将其融合起来就得到了全局信息。
- 权值共享:*减少参数量,降低训练难度(RNN也有类似特性)*图像的一部分统计特性与其他部分是一样的。意味着在这一部分学习的特征也能用在另一部分上,通过设置不同的kernel,获取不同特征的信息。
- 降维:卷积、步幅、池化
- 多层次结构:将低层次的局部特征组合成为较高层次的特征,不同层级的特征可以对应不同的任务
调参效果
- 损失函数
- batchsize:太大陷入局部最小值,太小会抖动的厉害
- 激活函数
- 学习率lr
- 合适的优化算法:在梯度的基础上使用动量,有助于冲出局部最低点。
- 过拟合
池化层的作用
也称为欠采样或者下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。
特征提取的误差主要来源于两个方面:1、领域的大小受限造成的估计值方差增大2、卷积层参数造成的估计均值的偏移。
平均池化能减小第一种物差,更多的保留图像的背景信息;max-pooling减小第二种,保留更多的纹理信息。average更强调对整体特征信息进行向下采样,在全局平均池化的应用比较广。
网络不收敛
- 数据和标签
- 学习率设置:可以采用动态学习率,或者动量
- 网络层数不够深
- label:类别设置0、1、2而不是1、2、3
- 改变图片大小
- 数据归一化:输入归一化和BN
- shuffle数据集
- 减少平衡类别
- 减少正则化:太大的正则化可能使网络严重的欠拟合
当模型抖动比较大的时候,可以试着调大batchsize的值
梯度消失、梯度爆炸梯度弥散
由于链式求导法则,采用sigmoid函数的时候,导数最大值为1/4,当网络特别深的时候,(1/4)^n会变得很小,容易引发梯度消失;同样,如果导数值大与1,梯度指数级增长,会造成梯度爆炸。
梯度消失可能是在深层网络中采用了不合适的激活函数;
梯度爆炸可能是深层网络中权重初始值太大。
解决:梯度消失可以采用ReLU或者leaky-relu函数、采用BN、LSTM结构可以改善RNN的梯度消失问题;梯度爆炸可以采用梯度截断。
越深的网络学习到的东西越少,而浅层网络往往学习到的更多。
梯度弥散:靠近输出层参数更新块,靠近输入层参数更新慢,甚至可以差距10^n倍,这就是梯度弥散。
RNN、LSTM、GRU
RNN:引入循环概念,但是在实际过程中初始信息会随时间消失,所以引入LSTM
LSTM:当前的cell information是通过input gate 控制之后叠加的,具体结构有forget gate, input gate, cell state, hidden information等,长短期神经网络。LSTM用加和的方式取代了乘积,使得很难出现梯度弥散,但是也会出现梯度爆炸的问题。
CBOW、Skip-Gram
CBOW是从原始语句推到目标词汇,而skip-gram相反。
CBOW适用于小语料库,Skip-Gram适用于大语料库。
CBOW会生成规则的文字而Skip-Gram会生成跳跃的文字,比如生僻字问题S的表现比C要好。
Data Augmentation的常见方法
- color jittering:对颜色的数据增强。亮度、饱和度、对比度。
- random crop
- random scale
- 水平/垂直翻转
- shift平移
- 旋转
- noise,高斯白噪声,高斯模糊
为什么只对权重做正则惩罚,而不对偏置?
精确拟合偏执所需要的数据通常比拟合权重少得多,每个权重会指定两个变量如何相互作用,我们需要在各种条件下观察这两个变量才能良好的拟合权重,而每个偏置仅控制一个单变量。这意味着,我们不对其正则化也不会导致太大的方差。另外,正则化偏置参数可能会导致明显的欠拟合。
为什么在模型训练时对输入(隐藏单元或权重)添加方差较小的噪声?
对于某些模型而言,向输入添加方差较小的噪声等价于对权重施加范数惩罚。在一般情况下,注入噪声会比简单的收缩参数强大。特别是噪声被添加到隐藏单元时更加强大。Dropout方法是这种做法的主要发展方向。
迁移学习
迁移学习和领域自适应指的是用一个任务中已经学到的内容去改善另一个任务中的泛化情况。把训练好的模型参数迁移到新的模型来帮助新模型的训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可以理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率,不用从零开始学习。
https://blog.csdn.net/qq_29952277/article/details/89891075?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158562128519725222446910%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158562128519725222446910&biz_id=0&utm_source=distribute.pc_search_result.none-task
sigmoid、softmax
sigmoid:映射到(-1,1)区间,可以用来做二分类问题。
softmax:多分类单标签问题。
用CE而不用MSE
均方差对参数的偏导结果都乘了sigmoid的到树,而sigmoid导数在变量很大或者很小的时候都会趋近于0,所以偏导数可能等于零,这样参数就不会更新了。
交叉熵对参数的偏导就没有sigmoid函数。
MixUp
MixUp是按照一定的权重随机混合两张图像,从而生成新的图像,新图像拥有两张照片的所有真实框。MixUp主要用于泛化被遮挡的物体。
学习率调整策略
学习率的变化决定了网络的优化时间和优化方向,初期网络搜索空间较大,如果学习率过大会导致损失发散,无法收敛到好的极值点。在优化初期使用WarmUp策略,可以使初期网络训练更加稳定;在后期使用余弦衰减策略,不仅可以让学习率变化更加平滑,还能提供周期性变化的学习率,使网络跳出局部最优。
标签平滑
标签平滑其实是一种正则化策略,降低网络对标签置信度的依赖,这对有漏标、错标数据具有很好地适应性。
逐层精调,减少网络搜索空间
网络搜索空间越大,训练时间越久,优化难度越高。因此,通过预训练微调,然后再通过冻结网络层进行精调,可以减小网络的搜索空间,从而降低优化的难度。在YoloV3的优化中,主要分为了四个部分,分别是BackBone的特征提取器以及三个Yolo层分支,逐步训练并冻结这四个部分再进行精调,可以让网络得到很好地提升。
减小动量
目前深度学习的优化器大都具备动量自适应,但是在最后精调阶段,动量过大也许会让网络又跳出了最优区域,适度的减小动量参数,可以让后期网络缓慢的朝着更优的方向优化。
残差网络
残差网络的特点是容易优化,并且能够通过增加相当的深度来提高准确率。其内部的残差块使用了跳跃连接,缓解了在深度神经网络中增加深度带来的梯度消失问题。
反卷积UmSampling2d
采用反卷积UmSampling2d设计,逆卷积相对于卷积在神经网络结构的正向和反向传播中做相反的运算,其可以更多更好的提取出特征。
单阶段SSD弊端
One-Stage目标检测方法常常使用先验框提高预测性能,一张图像可能生成成千上万的候选框,但是其中只有很少一部分是包含目标的的,有目标的就是正样本,没有目标的就是负样本。这种情况造成了One-Stage目标检测方法的正负样本不平衡,也使得One-Stage目标检测方法的检测效果比不上Two-Stage目标检测方法。