模型设计
输入的特征设计,添加特征。衍生度量(特征)是将多个特征综合获得的度量(特征),如基于身高、体重的健康指数,股票的市盈率。
“不加限制地添加特征会令模型变得脆弱,还会令某些模型出现过度拟合。” 少即多。
”模型函数复杂度的提升会导致模型更容易出现过度拟合,而特征数量的增加更加重了这种影响。“
“应该在高效、无须领域知识的黑盒算法和理解所处理问题之间找寻平衡”
扩张或缩减特征。
参数初始化
-
Xaiver
-
MSRA
数值优化
损失函数
One Hot Vector
标签编码方式,一个独热向量经过任何线性变换都不能变化为另一个标签。
平方损失函数
交叉熵(Cross Entropy)损失函数
ℓ(x,y)=L={l1,…,lN}⊤,ln=−wn[yn⋅logxn+(1−yn)⋅log(1−xn)], \ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad l_n = - w_n \left[ y_n \cdot \log x_n + (1 - y_n) \cdot \log (1 - x_n) \right], ℓ(x,y)=L={l1,…,lN}⊤,ln=−wn[yn⋅logxn+(1−yn)⋅log(1−xn)],
ℓ(x,y)={mean(L),if reduction=‘mean’;sum(L),if reduction=‘sum’. \ell(x, y) = \begin{cases} \operatorname{mean}(L), & \text{if reduction} = \text{`mean';}\\ \operatorname{sum}(L), & \text{if reduction} = \text{`sum'.} \end{cases} ℓ(x,y)={mean(L),sum(L),if reduction=‘mean’;if reduction=‘sum’.
反向传播法
梯度下降
步长或学习率的设定显著影响结果,单纯的梯度下降可能导致抖动、甚至不收敛。
改进方法有动量法等等,详见优化方法。
mt=αmt−1+step∗Δxt=xt−mt
m_t = \alpha m_{t-1} + step*\Delta \\
x_t = x_t - m_t
mt=αmt−1+step∗Δxt=xt−mt
Δ\DeltaΔ为梯度,m为动量,step为步长,α\alphaα为折损率。
注意动量法对抖动问题的解决。
随机梯度下降SGD(stochastic gradient decent)
数目巨大的样本若被优化全部使用,机器可能无法有效或快速完成,如内存或显存消耗大,工程遇到障碍,随机梯度下降即一次随机取用部分样本做迭代优化,多次取完完成一轮(epoch)优化。
优点:使得训练实际可行
缺点:相比全样本下的梯度方向,具有随机性。
batch_size尽可能大更好,样本特征分布广泛更好。
梯度消失与爆炸
举例,两个全连接层+Sigmoid激励函数首尾相连的结构
偏导数链式法则公式中某因式数值接近为零,导致模型参数更新微乎其微,即梯度消失问题,解决:设置合理的初始值。
为避免梯度消失,设置初始参数而使反向传播梯度数值过大。常用ReLU函数解决。
梯度下降法的最大步长
动量法
history−grad=discount∗history−grad+lr∗gradx−=history−grad history-grad = discount * history-grad + lr * grad \\ x -= history-grad history−grad=discount∗history−grad+lr∗gradx−=history−grad
Adagrad
x−=lr∗g(∑g2)+e x -= lr * \frac{g} {\sqrt(\sum g^2)+e} x−=lr∗(∑g2)+eg
Rmsprop
Gt+1=βGt+(1−β)g2xt+1=xt−lr∗gGt+ϵ G_{t+1} = \beta G_t + (1-\beta)g^2 \\ x_{t+1} = x_t - lr * \frac{g}{\sqrt G_t+\epsilon} Gt+1=βGt+(1−β)g2xt+1=xt−lr∗Gt+ϵg
AdaDelta
Gt+1=βGt+(1−β)g2δt+1=Δt+ϵGt+1+ϵgΔt+1=βΔt+(1−β)δt+12 G_{t+1} = \beta G_t + (1-\beta)g^2 \\ \delta_{t+1} = \sqrt{\frac{\Delta_t+\epsilon}{G_{t+1}+\epsilon}}g \\ \Delta_{t+1} = \beta\Delta_t + (1-\beta)\delta_{t+1}^2 Gt+1=βGt+(1−β)g2δt+1=Gt+1+ϵΔt+ϵgΔt+1=βΔt+(1−β)δt+12
归一化
-
线性函数归一化
将数值压缩到0-1范围,
x−xminxmax−xmin \frac{x-x_{min}}{x_{max}-x_{min}} xmax−xminx−xmin -
0均值标准化
也叫正态归一化
x−μσ \frac{x-\mu}{\sigma} σx−μ
多视图投影几何对图像特征点的坐标有做类似的归一化,
x−μxσ \frac{x-\mu x}{\sigma} σx−μx -
非线性归一化
使用log、exp、tan等函数。
BN batch normalization
用于解决梯度过小、参数初始化假设崩塌等问题。
启发:MNIST数据像素从0-255映射到0-1。
将模型的每一层输出值都加以rescale。
白化操作即把数据减去均值,再除以标准差,对于小数据集测试有效,但更大规模的问题可能会失灵,其会破坏数据的原有分布。
BN的作者在BN层加入一个线性变换层,修补白化的影响。
正则化
万物归一,越抽象的越简洁;模型的泛化能力越强,(因而?)参数数值越简洁,(因而?)越小。
L1 L2正则化的优化目标公式
obj(w)=Loss(w)+λ∑i∣wi∣obj(w)=Loss(w)+12λwi2
obj(w)=Loss(w)+\lambda\sum_i|w_i|\\obj(w)=Loss(w)+\frac{1}{2}\lambda w_i^2
obj(w)=Loss(w)+λi∑∣wi∣obj(w)=Loss(w)+21λwi2
Loss()表示经验风险,即模型失效风险;惩罚项表示模型简洁的风险。
λ\lambdaλ 参数控制参数总体,但我认为模型不同位置的参数具有不同的影响力,应该使用不同权重来控制
Dropout
有降低数据过拟合风险的性质。
/mmcv/cnn/vgg.py 理解dropout的源码
主要用在全连接层。
过拟合与欠拟合
过拟合:模型将样本中的特性当做共性。训练过头,学完了共性,把样本噪声或特性当做共性来记忆。
欠拟合:模型没有充分学习到样本的共性。可能原因:模型过于简单无法容纳,训练不足等。
典型应用
分类
卷积网络+全连接层
目标检测
一般分为一或二阶段检测模型。
Faster-RCNN是二阶段。
典型网络模型
LeNet
VGG
降低感受窗尺寸即卷积核尺寸从7到3
增加卷积层数即深度
用更小的步长1
用池化层降采样
VGG16: [ (Conv+BN+ReLU) x 2 + Maxpool ] x 2 + [ (Conv+BN+ReLU) x 3 + Maxpool ] x 3 + (FC+ReLU+Dropout) x 2 + FC
ResNet及其相关模型
”小团队“指模型中的block,意为若干层。小团队对模型能力的贡献大于大团队的。
Deeply-Supervised Nets解决深层模型梯度消失的问题。
即在模型每一全连接层、卷积层都接一个全连接层,输出结果与真实结果做比较。
问题:真实结果是指什么?应该是target输入网络层后的结果。
模型的训练目标:强调层与层合作能力,层的独立能力为辅。
迁移学习
控制不同层的参数,如固定为训练好的参数、从随机参数初始化、从训好的参数初始化等,在不同的数据集上测试,或在同一数据集的不同部分测试,观察精度变化情况。
一般地,前几层的迁移能力较强;层与层之间的参数耦合明显;后面几层对数据的敏感性较弱,更依赖于前面几层的抽取特征的能力。
迁移学习,如识别小汽车的神经网络用于提升识别卡车的能力。
5490

被折叠的 条评论
为什么被折叠?



