算法工程师炼丹Tricks手册(附1090页PDF下载)

共 3462字,需浏览 7分钟

 ·

2021-08-29 16:03

↑ 点击蓝字 关注极市平台

本文作为总结机器学习、深度学习领域实践过程中各种“大道至简”的炼丹笔记小技巧,并在文末附《全球机器学习技术大会》来自各互联网大厂嘉宾分享的1090页实战经验干货PDF

01


Cyclic LR


    

每隔一段时间重启学习率,这样在单位时间内能收敛到多个局部最小值,可以得到很多个模型做集成。

scheduler = lambda x: ((LR_INIT-LR_MIN)/2)*(np.cos(PI*(np.mod(x-1,CYCLE)/(CYCLE)))+1)+LR_MIN


02


With Flooding


    

当training loss大于一个阈值时,进行正常的梯度下降;当training loss低于阈值时,会反过来进行梯度上升,让training loss保持在一个阈值附近,让模型持续进行“random walk”,并期望模型能被优化到一个平坦的损失区域,这样发现test loss进行了double decent。

flood = (loss - b).abs() + b    


03


Warmup

    

Warmup有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳,同时有助于保持模型深层的稳定性。

warmup_steps = int(batches_per_epoch * 5)warmup_lr = (initial_learning_rate * tf.cast(global_step, tf.float32) / tf.cast(warmup_steps, tf.float32))return tf.cond(global_step < warmup_steps, lambda: warmup_lr, lambda: lr)

04


RAdam

    

RAdam 的核心在于用指数滑动平均去估计梯度每个分量的一阶矩(动量)和二阶矩(自适应学习率),并用二阶矩去 normalize 一阶矩,得到每一步的更新量。

from radam import *


05


Adversarial Training



    

对抗训练(Adversarial Training),顾名思义,就是在训练过程中产生一些攻击样本,早期是FGSM和I-FGSM攻击,目前当前最优的攻击手段是PGD。对抗训练,相当于是加了一层正则化,给神经网络的随机梯度优化限制了一个李普希茨的约束。


传统上认为,这个训练方式会牺牲掉一定的测试精度,因为卷积模型关注局部特性,会学到一些敏感于扰动的特征,对抗训练是一种去伪存真的过程,这是目前像素识别的视觉算法的局限性。这里苏建林在kexue.fm里实现是很简单的,详情参看引用链接。

# 写好函数后,启用对抗训练只需要一行代码
adversarial_training(model, 'Embedding-Token', 0.5)


06


Focal Loss


    


针对类别不平衡问题用预测概率对不同类别的loss进行加权Focal loss对CE loss增加了一个调制系数来降低容易样本的权重值,使得训练过程更加关注困难样本。

loss = -np.log(p) 
loss = (1-p)^G * loss


07


Dropout


    随机丢弃,抑制过拟合,提高模型鲁棒性。

    

08


Normalization

   

Batch Normalization 于2015年由 Google 提出,开 Normalization 之先河。其规范化针对单个神经元进行,利用网络训练时一个 mini-batch 的数据来计算该神经元  的均值和方差,因而称为 Batch Normalization。

x = (x - x.mean()) / x.std()


09


        relu         


用极简的方式实现非线性激活,缓解梯度消失。

x = max(x, 0)


10


Group Normalization



    

Face book AI research(FAIR)吴育昕-恺明联合推出重磅新作Group Normalization(GN),提出使用Group Normalization 替代深度学习里程碑式的工作Batch normalization。一句话概括,Group Normbalization(GN)是一种新的深度学习归一化方式,可以替代BN。

def GroupNorm(x, gamma, beta, G, eps=1e-5):
# x: input features with shape [N,C,H,W]
# gamma, beta: scale and offset, with shape [1,C,1,1]
# G: number of groups for GN
N, C, H, W = x.shape
x = tf.reshape(x, [N, G, C // G, H, W])
mean, var = tf.nn.moments(x, [2, 3, 4], keep dims=True)
x = (x - mean) / tf.sqrt(var + eps)
x = tf.reshape(x, [N, C, H, W])
return x * gamma + beta


11


Label Smoothing



   

label smoothing将hard label转变成soft label,使网络优化更加平滑。标签平滑是用于深度神经网络(DNN)的有效正则化工具,该工具通过在均匀分布和hard标签之间应用加权平均值来生成soft标签。它通常用于减少训练DNN的过拟合问题并进一步提高分类性能。

targets = (1 - label_smooth) * targets + label_smooth / num_classes


0112


Wasserstein GAN

  • 彻底解决GAN训练不稳定的问题,不再需要小心平衡生成器和判别器的训练程度

  • 基本解决了Collapse mode的问题,确保了生成样本的多样性

  • 训练过程中终于有一个像交叉熵、准确率这样的数值来指示训练的进程,数值越小代表GAN训练得越好,代表生成器产生的图像质量越高

  • 不需要精心设计的网络架构,最简单的多层全连接网络就可以做到以上3点。


13


Skip Connection

    

一种网络结构,供恒等映射的能力,保证模型不会因网络变深而退化。

F(x) = F(x) + x


14


Weight Initialization

    

权重初始化对模型收敛速度和模型质量有着重要的影响。参数在刚开始不能全都初始化为0,因为如果所有的参数都是0,那么所有神经元的输出都将是相同的,在反向传播时同一层内所有的神经元的行为也都一致。

Embedding(embeddings_initializer=word2vec_emb,input_dim=2009,output_dim=DOTA)

点击下方👇跳转 炼丹笔记 公众号

发送“ML2021”即可领取1090页干货PDF。

目录内容


点击下方👇跳转 炼丹笔记 公众号

发送“ML2021”即可领取1090页干货PDF。

浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报