赞
踩
目录
3. 使用SVD学习潜在特征和使用深度网络获取嵌入向量有什么区别?
13. 为什么transformer使用LayerNorm,而不是BatchNorm?
14. 如果你知道你的训练数据有错误,你会对你的深度学习代码做什么改变?
对自己复盘的NLP做个总结:
perplexity是一种表达模型在预测中出现的混乱程度的方法。熵越大=越混乱。使用perplexity来评估NLP中的语言模型。一个好的语言模型会给正确的预测赋予更高的概率。
SVD使用输入的线性组合,而设逆境网络使用非线性组合。
hidden存储到当前时间步的所有信息,cell存储将来的时间步中可能需要的特定信息。
4(mh+h**2 +h),其中m是输入向量的尺寸,h是输出向量的尺寸,hidden也是一样。
要注意的是mh中m>>h,因此重要的一点是需要使用小的词汇表。
序列长度*(hidden**2)
(序列长度**2)*hidden,当hidden尺寸大于序列长度时(通常是这种情况),transformer速度比LSTM快。
在计算复杂性方面,当序列长度n小于表示维数d时,self-attention层速度比recurrent层要快,实际情况也是这样,同时可以在机器翻译中使用最先进的模型来进行句子的比较,比如word-piece和byte-pair表示。
虽然使用Adam进行训练有助于快速收敛,但结果模型的泛化性能往往不如使用SGD进行动量训练时的泛化性能。另一个问题是,即使Adam有自适应学习率,当使用良好的学习率计划时,它的性能也会提高。特别是在训练的早期,使用低效的学习率来避免发散是有益的。这是因为在一开始,模型的权值是随机的,因此得到的梯度不是很可靠。如果学习率太大,可能会导致模型采取太大的步骤,而没有确定合适的权重。如果学习率太大,可能会导致模型采取太大的步骤(步长过大,容易跳过最优点),而没有确定合适的权重。
当模型克服了这些初始稳定性问题后,可以提高学习速度,加快收敛速度。这个过程被称为学习率热身。
AdamW是Adam在权重上使用了L2正则化,这样小的权重泛化性能更好。
在硬共享中,我们一次训练所有的任务,并根据所有的损失更新权重。在软共享中,我们一次只训练一个任务。
BatchNorm----为每一个batch计算每一层的均值和方差
LayerNorm----独立计算每一层每一个样本的均值和方差
从LayerNorm的优点看,它对batch大小是健壮的,并且在样本级别而不是batch级别工作得更好。
我们可以做标签平滑,其中的平滑值是基于百分误差。如果任何特定的类有已知的误差,我们还可以使用类权值来修正损失。
Dropout
ALBert v2:ALBert中参数共享的正则化效果非常强,不需要dropout(ALBert v1中有dropout)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。