商家在网站做淘宝客会给佣金吗,织梦的官方网站,大连网站制作公司58,深圳坪山网站建设文 | 陀飞轮圈圈年年的铲屎官源 | 知乎tips总结知乎答主#xff1a;陀飞轮谈一下自己知道的。尽量避开优化器、激活函数、数据增强等改进。。先上完整列表#xff1a;Deep Learning: Cyclic LR、FloodingImage classification: ResNet、GN、Label Smoothing、Shuff… 文 | 陀飞轮圈圈年年的铲屎官源 | 知乎tips总结知乎答主陀飞轮谈一下自己知道的。尽量避开优化器、激活函数、数据增强等改进。。先上完整列表Deep Learning: Cyclic LR、FloodingImage classification: ResNet、GN、Label Smoothing、ShuffleNetObject Detection: Soft-NMS、Focal Loss、GIOU、OHEMInstance Segmentation: PointRendDomain Adaptation: BNMGAN: Wasserstein GANDeep LearningStandard LR - Cyclic LRSNAPSHOT ENSEMBLES: TRAIN 1, GET M FOR FREE每隔一段时间重启学习率这样在单位时间内能收敛到多个局部最小值可以得到很多个模型做集成。#CYCLE8000, LR_INIT0.1, LR_MIN0.001
scheduler lambda x:
((LR_INIT-LR_MIN)/2)*(np.cos(PI*(np.mod(x-1,CYCLE)/(CYCLE)))1)LR_MIN
Without Flooding - With FloodingDo We Need Zero Training Loss After Achieving Zero Training Error?Flooding方法当training loss大于一个阈值时进行正常的梯度下降当training loss低于阈值时会反过来进行梯度上升让training loss保持在一个阈值附近让模型持续进行“random walk”并期望模型能被优化到一个平坦的损失区域这样发现test loss进行了double decentflood (loss - b).abs() b
Image classificationVGGNet - ResNetDeep Residual Learning for Image RecognitionResNet相比于VGGNet多了一个skip connect网络优化变的更加容易H(x) F(x) x
BN - GNGroup Normalization在小batch size下BN掉点严重而GN更加鲁棒性能稳定。x x.view(N, G, -1)
mean, var x.mean(-1, keepdimTrue), x.var(-1, keepdimTrue)
x (x - mean) / (var self.eps).sqrt()
x x.view(N, C, H, W)
Hard Label - Label SmoothingBag of Tricks for Image Classification with Convolutional Neural Networkslabel smoothing将hard label转变成soft label使网络优化更加平滑。targets (1 - label_smooth) * targets label_smooth / num_classes
MobileNet - ShuffleNetShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices将组卷积的输出feature map的通道顺序打乱增加不同组feature map的信息交互。channels_per_group num_channels // groups
x x.view(batch_size, groups, channels_per_group, height, width)
x torch.transpose(x, 1, 2).contiguous()
x x.view(batch_size, -1, height, width)
Object DetectionNMS - Soft-NMSImproving Object Detection With One Line of CodeSoft-NMS将重叠率大于设定阈值的框分类置信度降低而不是直接置为0可以增加召回率。#以线性降低分类置信度为例
if iou threshold:weight 1 - iou
CE Loss - Focal LossFocal Loss for Dense Object DetectionFocal loss对CE loss增加了一个调制系数来降低容易样本的权重值使得训练过程更加关注困难样本。loss -np.log(p) # 原始交叉熵损失 p是模型预测的真实类别的概率
loss (1-p)**GAMMA * loss # GAMMA是调制系数
IOU - GIOUGeneralized Interp over Union: A Metric and A Loss for Bounding Box RegressionGIOU loss避免了IOU loss中两个bbox不重合时Loss为0的情况解决了IOU loss对物体大小敏感的问题。#area_C闭包面积add_area并集面积
end_area (area_C - add_area)/area_C #闭包区域中不属于两个框的区域占闭包区域的比重
giou iou - end_area
Hard Negative Mining - OHEMTraining Region-based Object Detectors with Online Hard Example MiningOHEM通过选择损失较大的候选ROI进行梯度更新解决类别不平衡问题。#只对难样本产生的loss更新
index torch.argsort(loss.sum(1))[int(num * ohem_rate):]
loss loss[index, :]
Instance SegmentationMask R-CNN - PointRendPointRend: Image Segmentation as Rendering每次从粗粒度预测出来的mask中选择TopN个最不确定的位置进行细粒度预测以非常的少的计算代价下获得巨大的性能提升。points sampling_points(out, x.shape[-1] // 16, self.k, self.beta)
coarse point_sample(out, points, align_cornersFalse)
fine point_sample(res2, points, align_cornersFalse)
feature_representation torch.cat([coarse, fine], dim1)
Domain AdaptationEntMin - BNMTowards Discriminability and Diversity: Batch Nuclear-norm Maximization under Label Insufficient Situations类别预测的判别性与多样性同时指向矩阵的核范数可以通过最大化矩阵核范数BNM来提升预测的性能。L_BNM -torch.norm(X,nuc)
GANGAN - Wasserstein GANWasserstein GANWGAN引入了Wasserstein距离既解决了GAN训练不稳定的问题也提供了一个可靠的训练进程指标而且该指标确实与生成样本的质量高度相关。Wasserstein GAN相比GAN只改了四点
判别器最后一层去掉sigmoid
生成器和判别器的loss不取对数
每次更新把判别器参数的绝对值按阈值截断
使用RMSProp或者SGD优化器
知乎答主圈圈relu用极简的方式实现非线性激活还缓解了梯度消失x max(x, 0)normalization提高网络训练稳定性x (x - x.mean()) / x.std()gradient clipping直击靶心 避免梯度爆炸hhhgrad [grad THRESHOLD] THRESHOLD # THRESHOLD是设定的最大梯度阈值dropout随机丢弃抑制过拟合提高模型鲁棒性x torch.nn.functional.dropout(x, pp, trainingtraining) # 哈哈哈调皮了因为实际dropout还有很多其他操作不够仅丢弃这一步确实可以一行搞定x x * np.random.binomial(n1, pp, sizex.shape) # 这里p是想保留的概率上面那是丢弃的概率skip connectionresidual learning提供恒等映射的能力保证模型不会因网络变深而退化F(x) F(x) xfocal loss用预测概率对不同类别的loss进行加权缓解类别不平衡问题loss -np.log(p) # 原始交叉熵损失 p是模型预测的真实类别的概率loss (1-p)**GAMMA * loss # GAMMA是调制系数attention mechanism用query和原始特征的相似度对原始特征进行加权关注想要的信息attn torch.softmax(torch.matmul(q, k), dim) #用Transformer里KQV那套范式为例v torch.matmul(attn, v)subword embeddingchar或char ngram基本解决OOV(out of vocabulary)问题、分词问题。这个对encode应该比较有效但对decode不太友好x [char for char in sentence] # char-level知乎答主年年的铲屎官只改1行代码bleu提高2个点。用pytorch的时候计算loss使用最多的是label_smoothed_cross_encropy或者cross_encropy推荐把设置reduction为sum效果可能会比默认的reductionmean好一些(我自己的尝试是可以提高2个BLEU左右)以最常用的cross_entropy为例from torch import nn self.criterion nn.CrossEntropyLoss(ignore_indexpad_id) # reduction默认为mean改为from torch import nn self.criterion nn.CrossEntropyLoss( ignore_indexpad_id, reductionsum)发生的变化实际上就是计算一个sequence的所有token其loss是否平均字不好看请见谅~我的理解不对请轻喷这个trick之所以在一些任务中有用是因为其在多任务学习中平衡了不同的loss的权重至少在我自己做的image caption任务中看到的结果是这样的。beam search添加length_penalty这一点多亏 高一帆 的提醒解码阶段如果beam search不加任何约束那么很容易导致生成的最终序列长度偏短效果可能还不如greedy search。原因的话就是beam size大于1比较容易在不同的beam中生成较短的序列且短序列得分往往比长序列高。举个例子的话请看下图假设beam size为2那么我们需要对较短的序列进行惩罚我们只需一行代码就可以改善这个问题# 假设原始生成序列的最终累积得分为accumulate_scorelength_penalty是超参数默认为1 accumulate_score / num_tokens ** length_penalty假设encoder输出为encoder_out,是一个tensor比如一个768的embedding而非一组embedding那么我们喂给rnn的输入input除了上一步的 , 拼接上encoder_out效果会涨不少。即:我自己的实验每一个timestep给rnn的输入都拼接encoderoutbleu提高3个点数据量4万。针对多层rnn比如多层lstminput feeding也是一个能提高模型表现的trick。就是lstm的第一层其输入除了前一时刻的输出还有最高一层前一时刻的隐状态 用图来表示就是变为表现在代码上就是input torch.cat((y[t-1], hiddens[t-1]), dim1) # 原始的只有y[t-1]后台回复关键词【入群】加入卖萌屋NLP/IR/Rec与求职讨论群有顶会审稿人、大厂研究员、知乎大V和妹纸等你来撩哦~