【模型性能杀器解读】如果项目的模型遇到瓶颈,用这些Tricks就对了!!!(二)

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 【模型性能杀器解读】如果项目的模型遇到瓶颈,用这些Tricks就对了!!!(二)

4、Training Refinements


4.1、Cosine Learning Rate Decay

Loshchilov等人提出了一种余弦退火策略。一种简化的方法是通过遵循余弦函数将学习率从初始值降低到0。假设批次总数为T(忽略预热阶段),那么在批次T时,学习率tm计算为:


可以看出,余弦衰减在开始时缓慢地降低了学习速率,然后在中间几乎变成线性减少,在结束时再次减缓。与step衰减相比,余弦衰减从一开始就对学习进行衰减,但一直持续到步进衰减将学习率降低了10倍,从而潜在地提高了训练进度。

import torch
optim = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)

4.2、Label Smoothing

对于输出预测的标签不可能像真是的label一样真是,因此这里进行一定的平滑策略,具体的Label Smoothing平滑规则为:

# -*- coding: utf-8 -*-
"""
qi=1-smoothing(if i=y)
qi=smoothing / (self.size - 1) (otherwise)#所以默认可以fill这个数,只在i=y的地方执行1-smoothing
另外KLDivLoss和crossentroy的不同是前者有一个常数
predict = torch.FloatTensor([[0, 0.2, 0.7, 0.1, 0],
                                 [0, 0.9, 0.2, 0.1, 0], 
                                 [1, 0.2, 0.7, 0.1, 0]])
对应的label为
tensor([[ 0.0250,  0.0250,  0.9000,  0.0250,  0.0250],
        [ 0.9000,  0.0250,  0.0250,  0.0250,  0.0250],
        [ 0.0250,  0.0250,  0.0250,  0.9000,  0.0250]])
区别于one-hot的
tensor([[ 0.,  0.,  1.,  0.,  0.],
        [ 1.,  0.,  0.,  0.,  0.],
        [ 0.,  1.,  0.,  0.,  0.]])
"""
import torch
import torch.nn as nn
from torch.autograd import Variable
import matplotlib.pyplot as plt
import numpy as np
class LabelSmoothing(nn.Module):
    "Implement label smoothing.  size表示类别总数  "
    def __init__(self, size, smoothing=0.0):
        super(LabelSmoothing, self).__init__()
        self.criterion = nn.KLDivLoss(size_average=False)
        #self.padding_idx = padding_idx
        self.confidence = 1.0 - smoothing#if i=y的公式
        self.smoothing = smoothing
        self.size = size
        self.true_dist = None
    def forward(self, x, target):
        """
        x表示输入 (N,M)N个样本,M表示总类数,每一个类的概率log P
        target表示label(M,)
        """
        assert x.size(1) == self.size
        true_dist = x.data.clone()#先深复制过来
        #print true_dist
        true_dist.fill_(self.smoothing / (self.size - 1))#otherwise的公式
        #print true_dist
        #变成one-hot编码,1表示按列填充,
        #target.data.unsqueeze(1)表示索引,confidence表示填充的数字
        true_dist.scatter_(1, target.data.unsqueeze(1), self.confidence)
        self.true_dist = true_dist
        return self.criterion(x, Variable(true_dist, requires_grad=False))
if __name__=="__main__":
# Example of label smoothing.
    crit = LabelSmoothing(size=5,smoothing= 0.1)
    #predict.shape 3 5
    predict = torch.FloatTensor([[0, 0.2, 0.7, 0.1, 0],
                                 [0, 0.9, 0.2, 0.1, 0], 
                                 [1, 0.2, 0.7, 0.1, 0]])
    v = crit(Variable(predict.log()), 
             Variable(torch.LongTensor([2, 1, 0])))
    # Show the target distributions expected by the system.
    plt.imshow(crit.true_dist)

4.3、Knowledge Distillation

在训练过程中增加了一个蒸馏损失,以惩罚Teacher模型和Student模型的softmax输出之间的差异。给定一个输入,设p为真概率分布,z和r分别为学生模型和教师模型最后全连通层的输出。损失改进为:

4.4、Mixup Training

在Mixup中,每次我们随机抽取两个例子和。然后对这2个sample进行加权线性插值,得到一个新的sample:

其中

import numpy as np
import torch
def mixup_data(x, y, alpha=1.0, use_cuda=True):
    if alpha > 0.:
        lam = np.random.beta(alpha, alpha)
    else:
        lam = 1.
    batch_size = x.size()[0]
    if use_cuda:
        index = torch.randperm(batch_size).cuda()
    else:
        index = torch.randperm(batch_size)
    mixed_x = lam * x + (1 - lam) * x[index,:] # 自己和打乱的自己进行叠加
    y_a, y_b = y, y[index]
    return mixed_x, y_a, y_b, lam
def mixup_criterion(y_a, y_b, lam):
    return lambda criterion, pred: lam * criterion(pred, y_a) + (1 - lam) * criterion(pred, y_b)

4.5、Experiment Results


5、Transfer Learning


相关文章
|
8月前
|
机器学习/深度学习 计算机视觉 网络架构
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
785 0
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
|
3月前
|
机器学习/深度学习 人工智能
昂贵LLM的救星?Nature新研究提出新型忆阻器,比Haswell CPU高效460倍
【10月更文挑战第11天】《自然》杂志最新研究介绍了一种新型忆阻器——线性对称自选14位动能分子忆阻器。该技术在神经网络训练和推理中表现出线性对称的权重更新、460倍于现有CPU的高能效及多级编程能力,有望大幅提升AI硬件的能源效率。尽管前景广阔,但仍需解决制造工艺复杂和环境影响等问题。
49 1
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
还是原装Transformer好!北大清华团队同时揭示Mamba等推理短板
北京大学和清华大学的研究团队分别发表论文,探讨了高效Transformer模型如Sparse Transformer和Linear Transformer在推理能力和上下文检索上的局限性,强调了原装Transformer在处理复杂任务上的优势。研究显示,尽管高效模型提升了计算效率,但在某些任务上,如动态规划问题和算法问题,以及上下文信息的精准提取方面,仍不及原装Transformer。这突显了原装Transformer在复杂推理任务中的不可替代性及其架构的灵活性和可扩展性。同时,研究也为未来高效Transformer的优化提供了方向。
47 4
|
5月前
|
机器学习/深度学习 人工智能 前端开发
BladeDISC 深度学习编译器问题之在动态shape下优化整体性能如何解决
BladeDISC 深度学习编译器问题之在动态shape下优化整体性能如何解决
|
5月前
|
自然语言处理 iOS开发 开发者
ChatGPT 等相关大模型问题之大模型提升开发效率如何解决
ChatGPT 等相关大模型问题之大模型提升开发效率如何解决
|
7月前
|
机器学习/深度学习 自然语言处理 物联网
ICML 2024:脱离LoRA架构,训练参数大幅减少,新型傅立叶微调来了
【6月更文挑战第4天】在ICML 2024上,研究团队提出了傅立叶变换微调(FourierFT),一种减少训练参数的新方法,替代了依赖LoRA的微调。FourierFT通过学习权重变化矩阵的稀疏频谱系数,实现了LFMs的高效微调。在多项任务上,FourierFT展示出与LoRA相当或更优的性能,参数量却大幅减少,如在LLaMA2-7B模型上,仅需0.064M参数,对比LoRA的33.5M。广泛实验验证了其在NLP和CV任务上的效果,但未来还需探索其适用性和泛化能力。论文链接:[arxiv.org/abs/2405.03003](https://arxiv.org/abs/2405.03003)
139 0
|
8月前
|
人工智能 安全 测试技术
Infection-2.5登场,训练计算量仅40%、性能直逼GPT-4!
【2月更文挑战第18天】Infection-2.5登场,训练计算量仅40%、性能直逼GPT-4!
77 3
Infection-2.5登场,训练计算量仅40%、性能直逼GPT-4!
|
8月前
|
人工智能 物联网 开发者
田渊栋等人新作:突破内存瓶颈,让一块4090预训练7B大模型
【2月更文挑战第18天】田渊栋等人新作:突破内存瓶颈,让一块4090预训练7B大模型
130 2
田渊栋等人新作:突破内存瓶颈,让一块4090预训练7B大模型
|
8月前
|
机器学习/深度学习 编解码 数据可视化
南开大学提出YOLO-MS | 超越YOLOv8与RTMDet,即插即用打破性能瓶颈
南开大学提出YOLO-MS | 超越YOLOv8与RTMDet,即插即用打破性能瓶颈
127 1
|
机器学习/深度学习 数据采集 人工智能
头疼!卷积神经网络是什么?CNN结构、训练与优化一文全解
头疼!卷积神经网络是什么?CNN结构、训练与优化一文全解
112 0

热门文章

最新文章