学习2022-


最后更新,2022.10.28


基础

Hyperopt是一个强大的python库,用于超参数优化
https://blog.csdn.net/qq_33431368/article/details/124486865

python包tqdm可视化进度

python包gensim是NLP工具,包括很多常见模型比如LDA、TFIDF等

目标检测包商汤的mmdectetion

用lightgbm快速做机器学习建模

Python文件编译为exe或者sh文件,用pyinstaller命令

# python中*的用法,不定长参数的灵活性
def do():
    return 1,2
def add(a,b,c):
    print(a,b,c)
add(*do(),2)   # tuple的解构

def pr(*x):  # 传参任意数量
    print(x)
pr(1,2,3,[4])

a,b,*c=[1,2,3,4,5,6]  # 序列解包
print(a,b,c,type(c))  # 1 2 [3, 4, 5, 6]  <class 'list'>

C++

深度学习

Gelu

Bert Transfromer结构中使用了这个激活函数—gelu(Gaussian error linear units,高斯误差线性单元),它是一种高性能的神经网络激活函数,因为GELU的非线性变化是一种符合预期的随机正则变换方式
GELU在多项计算机视觉自然语言处理语音任务上效果优于ReLU、ELU。GELU可以看作dropout的思想和relu的结合,主要是为激活函数引入了随机性使得模型训练过程更加鲁棒。(在torch的transformer实现的代码里都是直接用relu+dropout而没有使用gelu)
在这里插入图片描述
在这里插入图片描述

和relu不同的地方在于,relu对于小于0的输出是置0的,而gelu则是有一定的概率不置0

def gelu(input_tensor):
	cdf = 0.5 * (1.0 + tf.erf(input_tensor / tf.sqrt(2.0)))
	return input_tesnsor*cdf

原论文,https://arxiv.org/pdf/1606.08415.pdf

Rdrop

为了解决 Dropout 在训练与预测时使用不一致的问题,提出了比dropout更优的Rdrop
Rdrop:每个数据样本重复经过带有Dropout的同一个模型,再使用KL散度约束两次的输出,使得尽可能一致,而由于 Dropout的随机性,可以近似把输入X走过两次的路径网络当作两个略有不同的模型
在这里插入图片描述

其中一部分的损失函数是交叉熵
在这里插入图片描述

另一部分的损失函数是KL散度,目的是让两次的输出,使得尽可能一致
(KL散度从信息损耗的角度来度量两个数据分布的差异程度,它是用来描述两个概率分布P和Q的差异的一种方法,在信息论中叫做信息散度)
在这里插入图片描述

最终loss就是两个loss的加权和
在这里插入图片描述

R-drop通过增加一个正则项来强化模型对dropout的鲁棒性,使得不同的dropout下模型的输出基本一致,促进“模型平均”与“权重平均”的相似性,从而使得简单关闭dropout的效果等价于多dropout模型融合的结果,提升模型最终性能。

原论文,https://arxiv.org/pdf/2106.14448.pdf

AdamW

AdamW是在Adam+L2正则化的基础上进行改进的算法,Adam的weight decay权重衰减版
因为使用Adam优化带L2正则的损失并不有效,所以才有AdamW
在这里插入图片描述

如果引入L2正则项,在计算梯度的时候会加上对正则项求梯度的结果。
那么如果本身比较大的一些权重对应的梯度也会比较大,由于Adam计算步骤中减去项会除以梯度平方的累积开根号,使得减去项偏小。按常理说,越大的权重应该惩罚越大,但是在Adam并不是这样,分子分母相互抵消掉了
而权重衰减对所有的权重都采用相同的系数进行更新,越大的权重显然惩罚越大
在常见的深度学习库中只提供了L2正则,并没有提供权重衰减的实现
但如果使用了weightdecay就不必再使用L2正则化了

原论文,https://openreview.net/pdf?id=rk6qdGgCZ

#triplet loss

三元损失函数,主要是用于训练差异性小的样本,比如人脸等;其次在训练目标是得到样本的embedding任务中,triplet loss 也经常使用,比如文本、图片的embedding

过拟合和欠拟合

  • 过拟合:训练集效果很好,但是验证集很差,这种现象称为过拟合,表现为高方差
    解决方法:数据增强(NLP-EDA:增删改 替换、CV-切割 裁剪 旋转、数据融合Mixup、GAN生成新数据)、对抗训练、集成学习(Bagging)、正则化、Dropout、Early Stoping、降低模型复杂度

  • 欠拟合:训练集和验证集的效果都很差,这种现象称为欠拟合,表现为高偏差
    解决方法:特征工程(FM、FFM、增加特征、交叉特征)、集成学习(Boosting)、提高模型复杂度、减少或去掉正则化(添加正则化项是为了限制模型的学习能力,减小正则化项的系数则可以放宽这个限制)

模型

Transformer

原始Transformer指的是一个基于Encoder-Decoder框架的Seq2Seq模型,用于解决机器翻译任务;
后其Encoder部分被用于BERT而广为人知,因此有时Transformer也特指其Encoder部分

Transformer Encoder 代码

import math

import torch
import torch.nn as nn
import torch.nn.functional as F
import einops


class TransformerEncoder(nn.Module):

    def __init__(self, n_head, d_model, d_ff, act=F.gelu):
        super().__init__()

        self.h = n_head
        self.d = d_model // n_head
        # Attention
        self.Q = nn.Linear(d_model, d_model)
        self.K = nn.Linear(d_model, d_model)
        self.V = nn.Linear(d_model, d_model)
        self.O = nn.Linear(d_model, d_model)
        # LN
        self.LN1 = nn.LayerNorm(d_model)
        self.LN2 = nn.LayerNorm(d_model)
        # FFN
        self.W1 = nn.Linear(d_model, d_ff)
        self.W2 = nn.Linear(d_ff, d_model)
        self.act = act
        #
        self.dropout = nn.Dropout(0.2)

    def attn(self, x, mask):
        q, k, v = self.Q(x), self.K(x), self.V(x)
        q = einops.rearrange(q, 'B L (H D) -> B H L D', H=self.h)
        k = einops.rearrange(k, 'B L (H D) -> B H D L', H=self.h)
        v = einops.rearrange(v, 'B L (H D) -> B H L D', H=self.h)
        a = torch.softmax(q @ k / math.sqrt(self.d) + mask, dim=-1)  # [B H L L]
        o = einops.rearrange(a @ v, 'B H L D -> B L (H D)')
        o = self.O(o)
        return o

    def ffn(self, x):
        x = self.dropout(self.act(self.W1(x)))
        x = self.dropout(self.W2(x))
        return x

    def forward(self, x, mask):
        x = self.LN1(x + self.dropout(self.attn(x, mask)))
        x = self.LN2(x + self.dropout(self.ffn(x)))
        return x


model = TransformerEncoder(2, 4, 8)
x = torch.randn(2, 3, 4)
mask = torch.randn(1, 1, 3, 3)
o = model(x, mask)

model.eval()
traced_model = torch.jit.trace(model, (x, mask))

x = torch.randn(2, 3, 4)
mask = torch.randn(1, 1, 3, 3)

assert torch.allclose(model(x, mask), traced_model(x, mask))

深入剖析PyTorch中的Transformer API源码-bilibili
https://www.bilibili.com/video/BV1o44y1Y7cp/?spm_id_from=333.788&vd_source=95e3882229b54d25e23e9ef1d1062633

·

Transformer 与 RNN/CNN 的比较:

  • 上下文语义特征
    在抽取上下文语义特征(方向+距离)方面:Transformer > RNN > CNN
    RNN 只能进行单向编码(Bi-RNN 是两个单向); 在长距离特征抽取上也弱于 Transformer;有论文表明:RNN 最多只能记忆 50 个词左右的距离;
    CNN 只能对短句编码(N-gram);
    Transformer 可以同时编码双向语义和抽取长距离特征;
  • 序列特征
    在抽取序列特征(顺序)方面:RNN > Transformer > CNN
    Transformer 的序列特征完全依赖于 Position Embedding,当序列长度没有超过 RNN 的处理极限时,位置编码对时序性的建模能力是不及 RNN 的;
  • 计算速度
    在计算速度方面:CNN > Transformer > RNN
    RNN 因为存在时序依赖难以并行计算;
    Transformer 和 CNN 都可以并行计算,但 Transformer 的计算复杂度更高;

MobileNet
siamRPN算法
swin transformer 移动窗口,图像分割
Doc2vec
BERT
VQA视觉问答多模态
对抗训练FGM、PGD
知识图谱
表示学习
不平衡学习
对比学习
轻量化

遗传算法、模拟退火算法
广告CVR模型ESMM
时间序列ARMA模型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: nlp2022-text-classification-master 是一个 NLP(自然语言处理)的项目,用于文本分类。 该项目的目的是利用自然语言处理技术,对文本进行分类。文本分类是指根据文本的内容和特征将其归类到不同的类别中。例如,可以通过分析一段电影评论的内容,将其分类为积极或消极评价。 nlp2022-text-classification-master 项目使用了一些常见的文本分类算法和技术,如词袋模型、TF-IDF 特征提取、多层感知机等。这些技术可以帮助我们将文本转化为可用于分类的数值特征,并通过机器学习算法进行分类。 该项目提供了一些示例数据集,可以用于训练和测试文本分类模型。通过对这些数据集进行训练,可以得到一个文本分类器,能够对新的文本数据进行分类。 除了提供示例数据集和算法实现,nlp2022-text-classification-master 还提供了一些辅助工具和函数,用于数据预处理、特征选择、模型评估等。这些工具和函数可以帮助我们更方便地进行文本分类任务。 总之,nlp2022-text-classification-master 是一个用于文本分类的 NLP 项目,通过利用自然语言处理技术和机器学习算法,能够对文本进行分类,并提供了一些辅助工具和函数,方便进行文本分类任务的开发和研究。 ### 回答2: nlp2022-text-classification-master 是一个 NLP(自然语言处理)项目的命名,其主要功能是文本分类。文本分类是NLP中的一个重要任务,它旨在根据给定的语料库或文本集合,将不同的文本分成不同的类别或标签。 nlp2022-text-classification-master 项目很有可能是一个用于研究或学习文本分类的项目。项目的名称中的 "nlp2022" 可能表示该项目与2022年相关,意味着它是最新的或者与当年的研究/学习计划有关。"master" 可能表示它是一个主要版本或主分支。 在该项目中,我们可以期待看到一些典型的文本分类相关内容。这可能包括数据预处理,特征提取,模型构建和训练,以及评估模型性能的指标。另外,该项目可能还包括一些实例数据集和示例代码,以便用户可以快速开始自己的文本分类任务。 对于文本分类的具体实现,可能会使用一些常见的机器学习算法或深度学习模型,如朴素贝叶斯分类器、支持向量机、卷积神经网络(CNN)或循环神经网络(RNN)。这些算法和模型都在文本分类中具有一定的应用价值,并且可以根据具体的任务和数据集进行选择。 总之,nlp2022-text-classification-master 是一个用于进行文本分类的 NLP 项目,通过处理文本数据,提取特征,并利用机器学习深度学习方法将文本分为不同的类别。该项目可能提供一些帮助用户进行文本分类任务的示例代码和数据集。 ### 回答3: nlp2022-text-classification-master是一个用于自然语言处理(NLP)的文本分类项目。该项目的主要目标是使用机器学习深度学习技术,对文本数据进行分类。在NLP的研究领域中,文本分类是一个重要且有挑战性的任务,其目的是将文本数据分配到预定义的类别中。 该项目提供了一个完整的解决方案和代码库,供研究人员和开发者使用。它包含了多个文本分类算法和模型的实现,例如朴素贝叶斯分类器、支持向量机(SVM)、卷积神经网络(CNN)和循环神经网络(RNN)等。这些算法和模型可用于处理不同类型的文本数据,如电影评论、新闻文章、社交媒体帖子等。 此外,该项目还提供了一个预处理流程,用于将原始文本数据转换为机器学习算法可以处理的数值特征。这个预处理流程包括文本分词、词向量化、特征选择和数据划分等步骤,以确保输入数据的质量和可用性。 通过使用nlp2022-text-classification-master,用户可以根据自己的需要轻松构建和训练文本分类模型。他们可以通过添加自定义的特征工程方法或改进现有的分类算法,来提高模型的性能。此外,该项目还提供了评估指标和可视化工具,用于评估模型的性能和分析结果的可解释性。 总之,nlp2022-text-classification-master是一个功能强大且易于使用的文本分类项目,可帮助用户在NLP领域中进行文本分类任务的研究和实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值