(十八)模型用到的方法总结整理 + 个人总结

2021SC@SDUSC

系列文章目录

(一)面向特定问题的开源算法管理和推荐

(二)论文阅读上

(三)sent2vec

(四)BERT for Keyphrase Extraction

(五)config.py 代码分析

(六)model.py(上)

(七)论文 - 补充理解

(八)数据处理之prepro_utils.py

(九)preprocess.py代码分析

(十)preprocess.py代码分析-下

(十一)spllit_json.py代码分析

(十二)prepro_utils.py代码分析

(十三)jsonify_multidata.py + Constant.py

(十四)loader_utils.py + word2Vec补充学习

(十五)Keyphrase Chunking - bert2chunk_dataloader.py分析

(十六)Encoder-Decoder

(十七)bert2joint_dataloader.py
(十八)最后的总结整理

模型用到的方法总结:

Adam优化算法

Adam是一种自适应学习速率优化算法,它利用动量和缩放,结合了RMSProp和SGDw/th动量的优点。优化器的设计适用于非平稳目标和具有非常嘈杂和/或稀疏梯度的问题。

权重更新的执行方式如下:
在这里插入图片描述
在这里插入图片描述

with是步长/学习率,在原始论文中约为1e-3。是一个小数字,通常为1e-8或1e-10,以防止被零除。和是遗忘参数,典型值分别为0.9和0.999。

Adam在深度学习领域内是十分流行的算法,因为它能很快地实现优良的结果。经验性结果证明Adam算法在实践中性能优异,相对于其他种类的随机优化算法具有很大的优势。

在原论文中,作者经验性地证明了Adam算法的收敛性符合理论性的分析。Adam算法可以在MNIST手写字符识别和IMDB情感分析数据集上应用优化logistic回归算法,也可以在MNIST数据集上应用于多层感知机算法和在CIFAR-10图像识别数据集上应用于卷积神经网络。他们总结道:「在使用大型模型和数据集的情况下,我们证明了Adam优化算法在解决局部深度学习问题上的高效性。」

Attention Dropout

Dropout 由于只需要简单地在训练过程中丢弃一部分神经元,而成为最为广泛使用的正则化技术。
Attention Dropout 是一种在基于注意的体系结构中使用的丢失类型,其中元素随机从注意等式中的softmax中丢失。例如,对于缩放点产品注意,我们将删除第一项中的元素:
在这里插入图片描述
效果:
在这里插入图片描述

BERT

BERT,或来自变换器的双向编码器表示,通过使用蒙面语言模型(MLM)预训练目标消除单向性约束,改进了标准变换器。

蒙面语言模型随机屏蔽输入中的一些标记,其目标是仅根据其上下文预测蒙面词的原始词汇id。与从左到右的语言模型预训练不同,传销目标使表达能够融合左和右上下文,这使我们能够预训练深度双向变换器。除了蒙面语言模型外,BERT还使用下一个句子预测任务,该任务联合预训练文本对表示。

在BERT中有两个步骤:预训练和微调。

在预训练期间,模型在不同的预训练任务中基于未标记的数据进行训练。对于微调,首先使用预先训练的参数初始化伯特模型,然后使用来自下游任务的标记数据对所有参数进行微调。每个下游任务都有单独的微调模型,即使它们是用相同的预训练参数初始化的。

具体在前面博客中:
(四)BERT for Keyphrase Extraction
在这里插入图片描述

密集连接 Dense Connections

密集连接或完全连接连接是深层神经网络中的一种类型,它使用线性操作,其中每个输入通过权重连接到每个输出。这意味着存在一些参数,对于一个规模庞大的网络,这些参数可能会导致很多参数。
参数个数:在这里插入图片描述
公式:在这里插入图片描述

在这里插入图片描述

Dropout

Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图
在这里插入图片描述

这个想法是为了防止共同适应,即神经网络变得过于依赖于特定的连接,因为这可能是过度拟合的症状。直觉上,Dropout可以被认为是创建了一个隐式的神经网络集成。

Gaussian Error Linear Units

高斯误差线性单位,或GELU,是一个激活函数。GELU激活函数为,其中标准高斯累积分布函数。GELU非线性通过其百分位数对输入进行加权,而不是通过ReLUs()中的符号对输入进行门加权。因此,可以将GELU视为更平滑的ReLU。

在这里插入图片描述
可以使用或近似GELU,但PyTorch的精确实现足够快,因此这些近似可能是不必要的。(另请参见介绍格鲁语的论文中创造的西鲁语。)
GELUs用于GPT-3、BERT和大多数其他变压器。
在这里插入图片描述

Layer Normalization

与批处理规范化不同,层规范化直接估计来自隐藏层内神经元的总输入的规范化统计信息,因此规范化不会在训练案例之间引入任何新的依赖关系。它适用于RNN,并提高了现有几种RNN模型的训练时间和泛化性能。最近,它已用于变压器模型。
我们计算同一层中所有隐藏单元的层规范化统计信息,如下所示:
在这里插入图片描述
其中表示层中隐藏单元的数量。在层规范化下,一个层中的所有隐藏单元共享相同的规范化项和,但不同的训练用例具有不同的规范化项。与批量规范化不同,层规范化不会对小批量的大小施加任何约束,并且可以在批量大小为1的纯在线模式中使用。

在这里插入图片描述

Linear Warmup With Linear Decay

线性衰减线性预热是一种学习速率计划,其中我们线性增加学习速率进行更新,然后线性衰减。

Multi-Head Attention

多头注意是注意机制的一个模块,它通过一个注意机制并行运行多次。然后将独立的注意力输出串联起来,并线性转换为期望的维度。直觉上,多个注意头允许以不同的方式关注序列的各个部分(例如,长期依赖与短期依赖)。
在这里插入图片描述

请注意,在本模块中,按比例缩放的点产品注意力是最常用的,尽管原则上它可以替换为其他类型的注意力机制。

在这里插入图片描述

Residual Connection

Residual Connection是一种跳过连接,它参考层输入学习剩余函数,而不是学习未引用的函数。
形式上,将所需的底层映射表示为H(x),我们让堆叠的非线性层适合另一个映射F(x) = H(x) - x。原始映射将被重铸到 F(X) + x 中。直觉是,优化剩余映射比优化原始的未引用映射更容易。极端地说,如果一个恒等式映射是最优的,那么将残差推到零比通过一堆非线性层拟合恒等式映射更容易。

在attention is not all you need中有讲,transformer其中的residual connection有效的降低了注意力平均化的可能性。
在这里插入图片描述

残差网络使用网络学习的是残差,能够解决网络极深度条件下性能退化问题。残差网络论文中提到残差网络不是主要解决梯度消失和梯度膨胀,但是残差网络也能解决梯度消失现象,前面层的梯度直接传递后面层,残差网络用来解决网络层数加深,在训练集上性能变差的问题。
[为什么可以解决?]
残差网络是多个浅层网络的集成,从x到最后的输出y可以有多个路径,每个路径看作一种模型。[个人理解]

Scaled Dot-Product Attention

如图所示为Scaled Dot-Product Attention。输入包含query、dk维的keys和dv维的values。我们通过计算query和所有的keys的点积,每一个再除以根号dk,最后使用softmax获取每一个value的权重。

假设两个 dk 维向量每个分量都是一个相互独立的服从标准正态分布的随机变量,那么他们的点乘结果会变得很大,并且服从均值为0,方差就是
dk,【很大的点乘会让softmax函数处在梯度很小的区域】,对每一个分量除以 sqrt(d_k) 可以让点乘的方差变成 1。

在实际中,可以通过使用矩阵相乘的方式同时计算一组query,只需将query,keys,values打包成一个矩阵Q,K, V即可。
在这里插入图片描述
有两种attention方法,一种是加法[需要调研],另一种是点积。
加法是使用含有一个隐藏层的前馈神经网络,与加法attention相比,点积在时间和空间上都很高效,因为他可以通过矩阵方式实现优化。

Softmax

Softmax输出函数将前一层的输出转换为概率向量。它通常用于多类分类。给定一个输入向量和一个加权向量,我们得到:
在这里插入图片描述

在这里插入图片描述

Weight Decay

权重衰减或正则化是一种应用于神经网络权重的正则化技术。我们最小化一个损失函数,该损失函数同时考虑了主要损失函数和权重范数的惩罚:
在这里插入图片描述
权重衰减可以直接合并到权重更新规则中,而不仅仅是通过定义目标函数隐式地进行。通常,权重衰减指的是直接在权重更新规则中指定的实现(而L2正则化通常是在目标函数中指定的实现)。
在这里插入图片描述

WordPiece

WordPiece算法可以看作是BPE的变种。不同点在于,WordPiece基于概率生成新的subword而不是下一最高频字节对。

WordPiece是一种用于自然语言处理的子词切分算法。使用语言中的单个字符初始化词汇表,然后将词汇表中最常见的符号组合迭代添加到词汇表中。这个过程是:

  • 使用文本中的所有字符初始化单词单位清单。
  • 使用1中的清单在培训数据上构建语言模型。
  • 通过将当前单词资源清册中的两个单元组合起来,将单词单元资源清册增加一个,从而生成一个新的单词单元。从所有可能的单词单元中选择一个新词单元,当添加到模型中时,它最大程度地增加了训练数据的可能性。
  • 转到2,直到达到预定义的字单位限制或可能性增加降至某个阈值以下。
    在这里插入图片描述

学习到的内容:

个人总结

感觉在整个过程中,触动更多的是心态改变。面对未接触过的任务事情,不要一下子就感觉很难自己完成不了。既然任务已经存在,无论难度如何,接受它,一步一步来,按照自己能接受的程度去逐个解决逐步理解。代码一下子看不明白,比如从一个方法开始,跳转到调用的方法,逐个往上,看多了就能更理解。论文和代码结合着看,论文看的差不多,代码才能更容易理解。
面对最开始看论文是完全不明白在说什么,即使翻译成中文理解起来也很困难。于是先找最初的模型去学习,补充基础的相关知识,比如transformer和bert,以及后来补充到的word2Vec模型。其实还是不断地静下心来多看多查多搜索,不要关注于事情困难造成的情绪,而是动手去看去思考,不断学会自己去解决问题。可能由于能力存在很大的提升空间,一些内容理解不了,但是还是要去看去实践,专注于如何提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值