Gavin老师Transformer直播课感悟 - 基于Transformer轻量级高效精确的Conversational Representation对话系统ConveRT解密(三)

        本文继续围绕ConveRT这篇论文来介绍如下内容。

三、方法论

        2.4 量化过程

        近期的一些研究表明语言大模型可以通过运用量化技术来达到结构更紧凑的目的,简单来说就是模型的尺寸更小,譬如基于Transformer的机器翻译系统量化后的版本,以及BERT的版本现在都是可用的。在这里,ConveRT针对response selection任务运用了量化相关的对话预训练,试验表明基于下图中dual encoder架构的ConveRT模型可以通过相关量化技术进行训练。

        不同于标准的32位表示的参数,在ConveRT里,所有的embedding参数只使用8位来表示,其它的网络参数只使用16位来表示,通过采用混合精度训练方案(scheme)以一种量化的方式来训练这些参数。每一个具有32位浮点精度的变量会保留一份拷贝,但是模型在训练和推理时对这些变量只使用16位浮点精度。然而在一些图表操作里,要求更稳定的32位精度,如:layer normalization, L2- normalization, and softmax in attention layers,这些正则化技术对捕获的信息是非常敏感的,所以要求32位的精度。

        ConveRT通过运用量化技术,最后的损失度被扩大128,对32位浮点变量的更新相应缩减为1/128,这就允许梯度计算能够很好地用16位浮点表示。Subword的编码使用8位参数来存储,在训练时量化的范围可以动态调整,另外,通过量化也可以允许训练批次的尺寸翻倍,从而达到在训练时增加负样本数量的效果,而负样本可以增强正样本的作用。

        量化可以被运用到模型的权重以降低它们的解析度或者分辨率(resolution),这样可以节约计算时间,内存和存储空间。很多流行的AI库,如TensorFlow,PyTorch,MXNET等,支持混合精度操作,例如,由于现代GPUs提供了更高效的方式来降低数学运算的精度,从而使16位的浮点运算更加有效率,但是结果是以32位浮点精度来累计的。混合精度能够减少训练需要的内存,增加训练批次的尺寸或者模型的尺寸。下图演示了如何在模型中使用量化技术的过程:

下图中使用的量化方法是,通过一个mapping把32位的浮点数转换为8位的整数来表示:

在有些场景如batch的操作需要浮点数时,可以采用模拟量化(simulated quantization)的方式,如下图所示,中间通过乘法运算进行了32位浮点数据的转换:

一个模型的量化或裁剪依赖于由以下两个方面构成的loss landscape:

-模型架构

-数据集

 2.5  Multi-context的ConveRT模型

        对于多轮对话的建模来说,采用单一上下文的作用是有限的,更多的对话线索可以从更早的对话历史上下文里获得。对于下面这段对话,如果仅根据student的响应”Not really”,对于teacher来说很难做出合适的回应,所以如果把下面黄色标记的这些较早之前的对话历史也作为上下文来考虑,那么teacher做出响应”And what about TensorFlow?”就是比较容易的一件事:

Student: I’m very interested in representation learning.

Teacher: Do you have any experience in PyTorch?

神经网络的特点是可以根据ground true来调整网络,也就是建模能力,理论上基于对话历史采用multi-context的方式因为混合了各种情况,所以可以获得好的效果。ConveRT构建了multi-context dual encoder的架构,使用多达10个的对话历史上下文,这10个上下文根据时间由近及远简单合并在一起。在下面的架构图中,hx和hy组成了single context的架构,而右边部分加入了multi-context的输入。

需要注意的是,针对一个候选response表示的所有context的表示是相互独立的,所以仍然能够有效地做reponse选择训练。训练目标是对以下三个子目标进行线性合并:

-基于给定的immediate上下文得到的response进行排序(相当于single-context模型)

-基于给定的除了immediate上下文之外的其它所有上下文获得的response进行排序

-基于包含immediate和其它上下文的被平均化的表示而获得的response进行排序

对于大规模的Raddit数据的训练,ConveRT采用了把多个目标简单拼接在一起的做法,试验表明,这种做法是有效的,多个目标导致了更快的学习,并且能够在训练时针对每个feature的表现进行有效的诊断。

四、试验部分

  1. 训练数据

训练使用了大规模的Raddit对话语料库,包含了727M的input-response pairs,其中654M用于训练,而剩余的用于测试。语句被裁减为最多包含60个subwords,对于所有的subword embeddings和bucket embeddings,embedding尺寸设为512,最后的编码hx,hy,hz和hx,z都是512维度,feed forward2网络的hidden layer维度为1024。

训练时的batch size为512,学习率通过cos函数从1.0逐步衰减到0.001。ConveRT模型基于Raddit数据使用了12个GPU节点训练了18个小时,然后使模型得到收敛(数据拟合)。

   2. 比较基准

使用TF-IDF query-response scoring作为基准来比较样本关键字重要程度。另外也对比了两个dual encoder架构:USE-QA和POLYAI-DUAL。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值