大道至简:算法工程师炼丹Trick手册
共 2734字,需浏览 6分钟
· 2021-02-28
![](https://filescdn.proginn.com/20a282d53b89deb0dcfbf05212756a4c/7c992b306dcf9c7509f1caea180d241a.webp)
极市导读
如何提高炼丹速度?本文总结了算法工程师须知的十个炼丹trick,附有相关代码,可直接上手。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
Focal Loss
![](https://filescdn.proginn.com/54fa31a8a24840d4dbf37f7d4ceb311c/68a3c29dd171e51c59dfa23b0703a2e6.webp)
针对类别不平衡问题,用预测概率对不同类别的loss进行加权。Focal loss对CE loss增加了一个调制系数来降低容易样本的权重值,使得训练过程更加关注困难样本。
loss = -np.log(p)
loss = (1-p)^G * loss
Dropout
![](https://filescdn.proginn.com/d2699ab7ac3ea4fc235e8d0b730f62d0/b2a878db501423aba930cb28b8f53cf6.webp)
随机丢弃,抑制过拟合,提高模型鲁棒性。
Normalization
Batch Normalization 于2015年由 Google 提出,开 Normalization 之先河。其规范化针对单个神经元进行,利用网络训练时一个 mini-batch 的数据来计算该神经元的均值和方差,因而称为 Batch Normalization。
x = (x - x.mean()) / x.std()
relu
![](https://filescdn.proginn.com/e747ac1a218b70459ee6eb0d8bc3bd3e/57efd0df5656d121b7115a4a730e5c0f.webp)
用极简的方式实现非线性激活,缓解梯度消失。
x = max(x, 0)
Cyclic LR
![](https://filescdn.proginn.com/dd1b722e465569b7cac61e16ed2eeb3c/661e5a742dfcf5bc37566a3c50c807b5.webp)
每隔一段时间重启学习率,这样在单位时间内能收敛到多个局部最小值,可以得到很多个模型做集成。
scheduler = lambda x: ((LR_INIT-LR_MIN)/2)*(np.cos(PI*(np.mod(x-1,CYCLE)/(CYCLE)))+1)+LR_MIN
With Flooding
![](https://filescdn.proginn.com/24b3ab3fb144b505dea9691cddadfb9f/6cb2e3104d9290b9c0031494fc90a2c5.webp)
当training loss大于一个阈值时,进行正常的梯度下降;当training loss低于阈值时,会反过来进行梯度上升,让training loss保持在一个阈值附近,让模型持续进行“random walk”,并期望模型能被优化到一个平坦的损失区域,这样发现test loss进行了double decent。
flood = (loss - b).abs() + b
Group Normalization
![](https://filescdn.proginn.com/061bf43934f9c6f8b01d6fdc8c20ae1b/4abaef52699675f71eae0c68aadd9f7e.webp)
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
Label Smoothing
![](https://filescdn.proginn.com/c9d1916b0633a3606c8da8fbf4381f71/b74fe9abfa9cceb4ca6ae3260d9c92ab.webp)
![](https://filescdn.proginn.com/6ba14ebe37e3aa1fc6db4c009d5e6e5d/0b3c7fdb01807afea7855aed2ee1bc71.webp)
abel smoothing将hard label转变成soft label,使网络优化更加平滑。标签平滑是用于深度神经网络(DNN)的有效正则化工具,该工具通过在均匀分布和hard标签之间应用加权平均值来生成soft标签。它通常用于减少训练DNN的过拟合问题并进一步提高分类性能。
targets = (1 - label_smooth) * targets + label_smooth / num_classes
![](https://filescdn.proginn.com/c8a75600587c2260a9beee7835500933/d97860629f7b08f93ffb352452a84e2f.webp)
Wasserstein GAN
![](https://filescdn.proginn.com/7f4bb63d685db809c7e9ec0438b8ef72/4708b6a0edd08fd70d252412458cdfe2.webp)
彻底解决GAN训练不稳定的问题,不再需要小心平衡生成器和判别器的训练程度 基本解决了Collapse mode的问题,确保了生成样本的多样性 训练过程中终于有一个像交叉熵、准确率这样的数值来指示训练的进程,数值越小代表GAN训练得越好,代表生成器产生的图像质量越高 不需要精心设计的网络架构,最简单的多层全连接网络就可以做到以上3点。
Skip Connection
一种网络结构,提供恒等映射的能力,保证模型不会因网络变深而退化。
F(x) = F(x) + x
参考文献:
https://www.zhihu.com/question/427088601 https://arxiv.org/pdf/1701.07875.pdf https://zhuanlan.zhihu.com/p/25071913 https://www.zhihu.com/people/yuconan/posts
推荐阅读
2021-01-15
![](https://filescdn.proginn.com/a237959aaf77baa14df92918857ab013/0d178f44cdde6762308fa39a8c112b2b.webp)
2020-10-16
![](https://filescdn.proginn.com/86e3be2fae3de6fa428fddb1890738f7/f39dd8956d9b3a639210e22756395f88.webp)
2020-09-24
![](https://filescdn.proginn.com/f271b990dae6bbadbde8d42a29b3390f/10496c2058cfb0f00b9b9d4350e0d996.webp)
![](https://filescdn.proginn.com/9ab2053fc36e594b192dbfa7b669b24e/47b371cb1fb6fa3473d57a57238c3987.webp)
# CV技术社群邀请函 #
备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳)
即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群
每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~
![](https://filescdn.proginn.com/db09bb6c4deb6f03874a8b12a63419b1/931713e2d38439faeeec4d5efde6ca39.webp)