Task 3:Transormer建模SMILES进行反应产率预测笔记
一、对Transformer的简单总结
1. Transformer 的优势
在循环神经网络中,由于受限的上下文窗口大小,导致其在建模长文本方面存在劣势,必须经过多层卷积才能完成关注长文本的工作。而Transformer可以完全通过注意力机制完成对序列的全局依赖建模,增加了计算效率。
2. Transformer 的组成
Transformer主要由嵌入层、自注意力层、前馈层、残差连接与层归一化组成,是一个景点的编码器、解码器模型。
二、提升分数的思路
飞书文档主要给予的提升分数思路包括调整epoch、调整模型大小、处理数据与采用学习率调度策略。笔者由于初探AI,对上述思路进行了一些简单探索,并总结如下。
1. 调整epoch
调整epoch,确实能让模型训练的更好,但是调整epoch需要搭配其他参数一并调整,否则train loss并不会显著降低。笔者第一次尝试训练了60代,但是注意到train loss一直处于上下浮动的状态,并没有进一步降低train loss的趋向,因此学习效果不好。
2. 调整模型大小
例如调整中间向量的维度、模型的层数以及注意力头的个数。需要注意的是,注意力头必须能被输入向量的维数整除,否则会报错。提升中间向量的维度会极大的提升训练时间,需要耐心等待,笔者尝试将原来的D_MODEL和FNN_DIM的值改大,在train loss降低的趋向上确实有所改善,但是依然下降不到0.05以下...
3. 调整学习率
def adjust_learning_rate(optimizer, epoch, start_lr):
"""Sets the learning rate to the initial LR decayed by 10 every 30 epochs"""
lr = start_lr * (0.1 ** (epoch // 0.5))
for param_group in optimizer.param_groups:
param_group['lr'] = lr
与上述Python代码有关,通过调整这个函数能够调整学习过程中学习率降低的策略,从而获得更好的训练效果。
三、总结
虽然几个方法都尝试过了,但是交上去的分数是越交越差=_=||,不愧是炼丹啊。不过在学习AI的过程中体验到了调参的快乐,确实是有点上头的。