赞
踩
最近在做一些NLP可解释性的研究,也算是正经的NLP入门项目了,有很多新的知识点在本文中记录一下。
损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大
对于bias或者LayerNorm.weight一般不需要使用weight decay,可以使用如下代码进行调整:
optimizer_grouped_parameters = [
{
"params": [p for n, p in model.named_parameters() if not any(nd in n for nd in no_decay)],
"weight_decay": 0.0,
},
{"params": [p for n, p in model.named_parameters() if any(nd in n for nd in no_decay)], "weight_decay": 0.2},
]
optimizer = AdamW(optimizer_grouped_parameters, lr=lr, eps=1e-8)
使用Warmup预热学习率的方式,即先用最初的小学习率训练,然后每个step增大一点点,直到达到最初设置的比较大的学习率时,可以解决因为随机初始化导致模型在初期训练不稳定的问题。
题外话:Soft-max相对于argmax是可导的,所以是软的
Gumbel-Softmax 用于实现对分布进行可导采样,因为
g
i
g_{i}
gi 是变化的
thank!
[CLS]就是classification的意思,可以理解为用于下游的分类任务。
主要用于以下两种任务:
· 单文本分类任务: 对于文本分类任务,BERT模型在文本前插入一个[CLS]符号,并将该符号对应的输出向量作为整篇文本的语义表示,用于文本分类,如下图所示。可以理解为:与文本中已有的其它字/词相比,这个无明显语义信息的符号会更“公平”地融合文本中各个字/词的语义信息。
· 语句对分类任务: 该任务的实际应用场景包括:问答(判断一个问题与一个答案是否匹配)、语句匹配(两句话是否表达同一个意思)等。对于该任务,BERT模型除了添加[CLS]符号并将对应的输出作为文本的语义表示,还对输入的两句话用一个[SEP]符号作分割,并分别对两句话附加两个不同的文本向量以作区分,如下图所示。
发现一篇博客通俗的介绍了CRF
thank!
CRF的功能大体就是在模型输出种类的基础上,找到一条满足最大概率的路径。
对模型自身的每个元素进行操作
>>> def init_weights(m):
>>> print(m)
>>> if type(m) == nn.Linear:
>>> m.weight.fill_(1.0)
>>> print(m.weight)
>>> net = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2))
>>> net.apply(init_weights)
普通方式直接放进去一个batch数据会报错的,调用batch_encode_plus就可以解决,并且注意需要将padding=True
input_ids = tokenizer.batch_encode_plus(lines, add_special_tokens=True, max_length=None, return_tensors='pt',padding=True)["input_ids"]
最近用各种预训练模型,总体上分为MLM(Bert)与CLM(GPT)两类,这篇文章很好的介绍了一下这两类模型的区别,这里mark一下
MLM+CLM
除了PCA降维方法外,还有JL引理,从 N(0,1/n) 中采样出一个(n,m)的矩阵A 使用u × \times × A即可得将n维向量降到m维
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。