2. 损失函数基础:定义、作用与分类
聊到分子生成模型的训练,我觉得第一个要搞清楚的东西,就是损失函数。
你可能会想,不就是个算误差的公式吗?有什么好讲的。其实不然。我做过几个生成项目,踩过的坑有一半都跟损失函数有关。它要是没选对,模型学出来的东西真是乱七八糟——要么生成一堆无效分子,要么有效但性质极差。
所以这一章,咱们踏踏实实地把损失函数的基础理一遍。
2.1 损失函数到底在做什么?
说白了,损失函数就是一把尺子。它衡量模型输出的分子结构和我们期望的"好分子"之间差多远。
训练模型就像教一个学生画画。你给他一张蒙娜丽莎,他画了一张火柴人。损失函数就是告诉你:嗯,差太远了,还得调。具体差在哪儿?是颜色不对,还是轮廓歪了?损失函数会把误差分解成可计算的数值。
我个人习惯把损失函数比作模型的"痛觉神经"。值大了,模型就疼,就调整;值小了,模型舒服,继续保持。这个"疼"和"调"的过程,就是优化。
在分子生成里,情况稍微复杂一点。真实值 y 是什么?有时候是真分子结构,有时候是目标性质,有时候是能量最低的构象。不同任务,损失函数的形态完全不同。
2.2 损失函数的主要作用
我把它拆成三条,你想想看是不是这么回事:
- 提供优化目标——梯度下降全靠它指引方向。没有损失函数,反向传播根本无从谈起。
- 约束生成空间——分子化学空间巨大,损失函数能告诉模型哪些区域不要靠近,避免生成违反化学规则的分子。
- 平衡多目标——分子生成常常需要同时满足多个性质。比如既要高活性,又要低毒性,还要合成容易。多个损失项一起工作,才能让模型兼顾这些。
我记得刚做分子生成那会儿,只用了重建损失,结果模型生成的都是些"四不像"——化学上全错。后来加了个化学有效性损失,效果才正常。这事儿让我明白,损失函数的作用远不止"算误差"那么单纯。
2.3 损失函数的常见分类
按我的经验,分子生成里的损失函数可以分成三大类。我用个表格给你捋清楚:
| 类别 | 核心作用 | 代表函数 | 常见应用场景 |
|---|---|---|---|
| 重建损失 | 确保生成分子与训练数据分布一致 | 交叉熵、均方误差 | 自编码器、变分自编码器(VAE) |
| 性质损失 | 引导模型生成具有特定性质的分子 | L1/L2损失、对比损失 | 属性导向生成、逆设计 |
| 结构/能量损失 | 强制分子符合化学规则和物理约束 | 键角损失、空间位阻损失 | 力场训练、3D构象生成 |
2.4 重建损失——分子生成的基本功
重建损失是最基础的。它要求模型看过真实分子后,能原样把它复现出来。听起来简单,但做起来并不容易。
拿SMILES序列生成举例,常用的是交叉熵损失:
L_recon = - Σᵢ Σⱼ yᵢⱼ log(ŷᵢⱼ)
yᵢⱼ 是真实标记,ŷᵢⱼ 是预测概率。每个字符都得对得上,位置都不能错。你想想看,一个分子SMILES串动辄几十个字符,错一个就变成不同的分子了。
我当时在做分子VAE时,用的就是交叉熵重建损失。刚开始训练,模型生成的结果经常是无效的SMILES——符号不配对、括号错误。后来我加了个语法约束,情况才好一些。
2.5 性质损失——让模型"听话"
光能重建还不够。我们做分子生成,往往是冲着某个性质去的。比如要高 LogP,或者要低毒性。
性质损失就是这么用的。它是个引导项,告诉模型:往这个方向走,别往那个方向走。
最常见的做法是多任务学习,同时训练模型预测多个性质:
L_property = λ₁ · MSE(LogP, LogP_pred) + λ₂ · MSE(Toxicity, Toxicity_pred)
λ₁ 和 λ₂ 是权重。调这俩权重够你忙活一阵子的。我的经验是,不要太相信默认值。最好先跑几组小实验,看看各个 loss 的量级,再手动调整。
2.6 结构/能量损失——化学的"铁律"
这类损失比较硬核,主要用于3D分子生成和力场相关的场景。
化学不是你想怎么连就怎么连的。键长、键角、二面角都有物理上的合理范围。能量损失就是用来惩罚那些违反化学直觉的结构。
一个简单的键角损失示例:
L_angle = Σ (θ_pred - θ_target)²
θ是键角。如果预测的键角偏离参考值太多,损失就会很大。模型自然学会不要乱掰原子。
我做过一个3D分子生成的项目,起初模型生成的分子键长乱七八糟,连苯环都变形了。引入键长和键角损失后,分子结构才变得合理。
2.7 知识体系总览
说了一大堆,我们来张图把本章的知识点串起来。这张 SVG 展示损失函数在分子生成训练中的位置和分类:
这张图把流程说得很清楚:数据进模型,模型出预测,预测和真实值送到损失函数里算误差,误差反向传播指导模型更新。下方三大损失类别的分叉,就是我们在不同任务中需要选择的路。
2.8 本章小结
损失函数是模型的指南针。指错了方向,跑得再快也没用。重建损失保证生成能力,性质损失引导目标方向,结构损失约束化学合理性。
实际项目中,很少有人只用单一损失。多损失组合是常态。但怎么组合、怎么调权重,那是后面章节要深入的内容。这一章,先把定义、作用和分类记牢,后面每一步都离不开它。