基线模型训练及调整学习笔记
背景
通过使用 --resume
参数,在之前基础上继续训练,这样大家训练的模型都是 50 + n 轮数的模型。当然,如果想从 0 开始训练,需要去掉 --resume
参数,重新定义参数进行训练。
基线代码模型参数
以下是基线代码模型的主要参数:
CUDA_ava=0,1,2,3 --n_epochs 200 \
--exp_name edm_competition \
--n_stability_samples 10000 \
--diffusion_noise_schedule polynomial_2 \
--diffusion_noise_precision 1e-5 \
--diffusion_steps 500 \
--diffusion_loss_type l2 \
--batch_size 48 \
--nf 256 \
--n_layers 12 \
--lr 1e-4 \
--normalize_factors '[1,4,10]' \
--test_epochs 1 \
--ema_decay 0.9999 \
--dataset "competition" \
--datadir "./data" \
--test_valid_epoch 1
调整基线代码的主要方向
调整网络架构
-
调整 EGNN 层数 :可以通过修改
--n_layers
参数来改变 EGNN 层数。例如,将其从默认的 6 调整为 12,即--n_layers 12
。但需要注意的是,单纯增加层数可能无法取得理想效果,还需适当增加训练的 epoch 数。 -
调整特征维度 :通过修改
--nf
参数来调整特征维度,如将其从默认的 128 调整为 256,即--nf 256
。这有助于提高模型的表达能力,更好地捕捉数据的特征。 -
启用 / 禁用注意力机制 :利用
--attention
参数启用或禁用注意力机制。若设置为--attention True
则启用,反之则禁用。注意力机制可使模型更关注输入中的重要部分,提升模型性能。
优化扩散过程
-
调整扩散步数 :修改
--diffusion_steps
参数来调整扩散步数,如将其从默认的 500 调整为 1000,即--diffusion_steps 1000
。增加扩散步数可使生成过程更细致,有助于提高生成质量。 -
更改噪声调度 :通过
--diffusion_noise_schedule
参数更改噪声调度函数,如将其从默认的polynomial_2
更改为linear
,即--diffusion_noise_schedule linear
。不同的噪声调度函数对生成质量有显著影响,需要根据任务和数据进行尝试。
优化训练过程
-
调整学习率 :修改
--lr
参数来调整学习率,如将其从默认的 2e-4 调整为 1e-4,即--lr 1e-4
。学习率影响模型的收敛速度和效果。 -
调整批量大小 :通过修改
--batch_size
参数来调整批量大小,如将其从默认的 128 调整为 64,即--batch_size 64
。批量大小的选择需要考虑显存大小和模型的训练稳定性。 -
启用 / 禁用梯度裁剪 :利用
--clip_grad
参数启用或禁用梯度裁剪。若设置为--clip_grad True
则启用,反之则禁用。梯度裁剪可以防止梯度爆炸,提高模型训练的稳定性。
条件生成调整
-
增加条件控制 :使用
--conditioning
参数来增加条件控制。例如,设置--conditioning ["energy"]
,可以为复赛任务生成具有特定能量的分子。需要根据具体任务需求调整和优化条件生成机制。