Transformer
transformer的诞生
循环神经网络:由于所有的前文信息都蕴含在一个隐向量里面,这会导致随着序列长度的增加,编码在隐藏状态中的序列早期的上下文信息被逐渐遗忘。
卷积神经网络:受限的上下文窗口在建模长文本方面天然地存在不足。如果需要关注长文本,就需要多层的卷积操作。
关于Transformer,不必赘述,参考:
[[…/…/大模型/ChatGPT原理与实践/ChatGPT基础科普#2. Transformer|ChatGPT基础科普 - Transformer]]
[[…/夏令营第二期/Task3#Transformer 介绍|夏令营第二期 Task3 Transformer 介绍]]
利用Transformer的Encoder作为编码器编码
Transformer是一个经典的编码器-解码器模型(encoder-decoder model)
我们可以把Transformer的Encoder单独拿出来并看作是一个编码器
进一步提分
接下来,我们介绍一些常用的调参或者优化模型的方式,以帮助大家进一步提高分数。相信大家在这个过程中,会进一步理解为什么我们常常把这个过程称之为“炼丹”了。
-
调整epoch
-
调整模型大小:也即中间向量的维度、模型的层数、注意力头的个数。一般而言,模型越大学习能力越强,但是同样的也有可能出现过拟合。
-
数据:对数据做清洗,调整数据分布,做数据增广。对于SMILES一个可行的增广思路是:将一个SMILES换一种写法。
-
采用学习率调度策略:在训练模型的过程中,我们发现往往越到后面,需要更小的学习率。例如下图:学习到后面,我们需要收敛的局部最小值点的两边都比较“窄”,如果现在学习率太大,那么在梯度下降的时候,就有可能翻过局部最小点了。因此需要调整学习率变小。在Pytorch中已经定义好了一些常用的学习率调度方法,需要的学习者可以自己从官网上查看如何使用。
- 集成学习:训练多个不同初始化或架构的模型,并使用集成方法(如投票或平均)来产生最终翻译。这可以减少单一模型的过拟合风险,提高翻译的稳定性。
课后思考
之前无法理解的学习率,这次又遇到了
学习率是什么
学习率(Learning Rate)是机器学习和深度学习中的一个超参数,它控制了模型在优化过程中更新权重的速度。在训练神经网络时,学习率是一个非常重要的参数,它影响着模型是否能快速且有效地收敛到最优解。
具体来说,学习率定义了在梯度下降算法中,模型参数更新的幅度。梯度下降是一种优化算法,用于寻找函数的局部最小值。在深度学习中,这个函数通常是损失函数,它衡量了模型预测值与真实值之间的差异。
以下是对学习率更详细的解释:
-
梯度:在数学中,梯度是一个向量,指向函数增长最快的方向。在损失函数中,梯度指向损失增加最快的方向。为了最小化损失函数,我们需要沿着梯度的反方向更新权重,即进行梯度下降。
-
更新权重:在每次迭代或训练步骤中,模型参数(如神经网络的权重和偏置)会根据梯度和学习率进行更新。更新公式通常如下:
weight = weight - learning_rate * gradient
其中
weight
是要更新的权重,gradient
是损失函数关于该权重的梯度,learning_rate
是学习率。 -
学习率的作用:
- 如果学习率太小,模型训练会非常缓慢,需要很多时间才能收敛。
- 如果学习率太大,模型可能会在损失函数的表面震荡,甚至发散,无法找到最小值。
-
选择合适的学习率:选择合适的学习率是艺术和科学的一部分。通常,需要通过实验来找到合适的学习率,或者使用一些策略(如学习率衰减、学习率预热、使用学习率查找器等)来动态调整学习率。
学习率是深度学习实践中需要仔细调整的关键参数之一,它对模型的训练效率和最终性能有着直接的影响。