想象一间顶级后厨的“深夜研发”:主厨小岳必须在明早前做出一道新菜。他的货架上堆满各种食材——这就像药物分子的“化学空间”;锅里炖着一份半成品——对应 AI 正在构建中的分子;每加一勺盐、翻一次锅,就是一次“动作”;端给试吃员打分,就是多目标奖励:味道、营养、安全性,一个都不能少。小岳不靠背菜谱,而是在一次次试菜、看反馈、改做法中摸索出长期最优策略。这套“试错—反馈—改进”的循环,正是强化学习(RL)用于分子多目标优化的核心逻辑。本文会用这个故事展开:状态怎么设计、动作怎么选、奖励怎么打分、多个目标怎么权衡,以及如何平衡“守成”与“开新”。
理解强化学习在分子生成中的完整决策闭环,是 AI 药物研发算法工程师设计高效分子优化系统的核心技能,也是从“能跑通模型”进阶到“能设计策略”的关键一跃。
可视化演示
展示强化学习分子多目标优化三大核心:RL框架与状态动作(agent-env循环+SMILES/图/指纹三状态+添加/删除/修改/延伸/终止五动作)、奖励函数与多目标(活性/选择性/毒性/可合成性四目标w1-w4加权组合R)、探索利用平衡(epsilon 0.9→0.01衰减+奖励上升至帕累托最优),三模式切换理解RL分子优化全貌。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+C1+'
RL核心要素
深夜后厨里,小岳站在一口冒泡的锅前,这就是他的“状态”:锅里是切好的鱼块、刚下的姜片、咕嘟咕嘟的酱汁。他抬手加了一勺糖——这是一个“动作”。试吃员夹起一块,给出一个分数——这是“奖励”。小岳随身带着一本软皮菜谱,上面写满“咸了减酱油、淡了加盐”的经验——这就是“策略”。强化学习的四个核心要素,就在这个小场景里全部登场。
把场景搬到 AI 药物研发里:状态是当前正在构建的部分分子;动作是往分子上添加一个原子、改一根键或拼接一个片段;奖励是多目标评分——药效活性高不高、毒性大不大、像不像可成药分子;策略则是生成器内部的一套概率决策规则,决定当前状态下选哪个动作最合适。传统监督学习靠“标准答案”训练,RL 没有标准答案,全靠反馈试错。
但只盯着眼前一口菜远远不够。RL 真正追求的是长期回报最大化:今天少加盐,是为了明天整桌菜的口碑。于是有了折扣累计回报的概念,把未来的奖励折算到今天来决策。
回到小岳的故事:他给顾客留下的记忆分成短时印象和长期口碑,折扣回报正是帮他权衡“今天少赚”与“未来更旺”之间关系的记账本。RL 智能体学到的策略,就是让这道菜在整桌宴席(整个生成序列)上拿到的总评分最高。
- 即时奖励从第 t 步开始,先拿当下这步的奖励 r_t 作为起点。
- 折扣因子γ 是介于 0 和 1 之间的折扣系数,让未来奖励按指数衰减。
- 无穷求和把从 t 到无穷远的每一步奖励衰减后全部累加起来,就得到长期总回报。
分子状态设计
同一道半成品,后厨可以用三种方式记录:写成一行文字、拍一张照片、或画一张食材关系网。分子智能体也需要一个“看得懂”的记法,这就是状态设计。如果记法选错,AI 就像拿着模糊照片找调味料——怎么做都是错的。
最常见的分子表征是 SMILES:把分子结构压成一行 ASCII 字符串,比如乙醇写成“CCO”。它像菜谱的“文字速记”,原子是字符,键是符号,生成器逐 token 生成。另一种是分子图:原子是节点,化学键是边,像后厨的食材关系网——哪种食材和哪种食材搭、是否在同一锅,一目了然。还有分子指纹、二维坐标等变体。
状态空间则描述“所有可能的半成品集合”。分子生成是一个逐步构造过程,每一步的中间产物都是一个状态,因此状态是一个不断增长的前缀序列。
对小岳来说,SMILES 就像他在便签上记的“生抽 1 勺、黄酒 2 勺”,分子图则像一张菜品的食材网络图。选对状态表征,AI 才能准确“看见”自己做到哪一步、还能往哪里走。
- 前缀序列生成进行到第 t 步时,状态就是前 t 个已放置的构建块按顺序排成的序列。
- 构建块集合每个元素 v_i 都来自化学上合法的构建块词表。
- 状态转移每步添加一个新 token,状态长度递增,形成一条从空分子到完整分子的“状态轨迹”。
动作空间构建
动作空间是智能体被允许的“厨房操作手册”。小岳的每一步操作都来自这本手册:加一粒盐是“原子添加”,把大火改成小火是“键合调整”,把一份剩菜拼进主锅是“片段拼接”。动作空间的设计决定了 AI 的想象边界——手册里没有的操作,它再聪明也做不出来。
分子生成中的原子添加,是指向当前分子的某个连接位点放一个新原子,比如补一个碳或氮;键合调整是修改单键、双键、芳香键或键的断裂;片段拼接则是直接把一个预制的官能团或环结构整体接到分子骨架上。现实中,动作空间还必须满足化学价与立体化学约束,避免生成在真实合成中不可能存在的分子。
一次动作既包含“添加什么结构”,也包含“用哪种键连接”。状态转移可以写成:
动作空间就像厨房里的“刀具架”:不能太小,否则 AI 只会做单调的菜;也不能乱放危险工具,否则动不动就“炸厨房”。因此,业界常用预定义片段库、价键规则过滤器来约束动作,让生成过程既自由又安全。
- 拼接操作状态转移不是数值加减,而是分子结构的“拼装”。
- 片段选择动作前半部分决定添加哪个原子或功能片段。
- 键类型动作后半部分决定用单键、双键还是芳香键连接,这直接影响分子的电子结构。
奖励函数设计
评审团坐定,小岳端上试做菜。第一组评委只关心口感——对应靶点结合活性;第二组翻看食材 allergen 清单——对应毒性筛查;第三组看摆盘、热量、食材稀缺度——对应类药性综合指标。奖励函数,就是这张充满打分规则与一票否决项的“评审表”。
在分子优化的 RL 训练中,奖励不是天然存在的,而是需要工程师“手工设计”的代理信号。最常见的方式是组合多个预测模型的分数:药效活性常用分子对接打分或活性预测模型输出;毒性约束则对预测有毒的分子施加严厉惩罚;类药性用 QED 等成药性评分,综合衡量分子量、脂水分配系数、可合成性等。
设计好的奖励函数会直接决定 AI 的“口味偏好”。若只轰活性分,AI 可能生成高活性但也高毒性的分子;加上毒性惩罚后,它才会学会绕开危险结构。
一张好的评审表,不会让一个“味道绝佳但含强过敏原”的菜过关。奖励函数设计,就是在告诉 AI:什么是对的、什么是危险的、什么算得上“好药”。
- 活性得分评价新分子与靶点结合好坏的正向奖励。
- 安全得分来自毒性预测模型,分数越高代表越安全。
- 类药性得分综合分子量、亲脂性等指标,衡量“像不像能口服吸收的药”。
- 毒性惩罚项若预测模型判断该分子有毒,则减去一个较大数值 \(\alpha\),形成一票否决。
多目标加权策略
不同餐厅的评审各有侧重:快餐店把“成本”权重拉满,米其林把“创意”权重调高。权重设定,是利益取向的数字化表达。在药物研发中,某个团队可能更看重安全性,另一个团队更看重活性;同样一个分子,在不同权重下的排名可能截然不同。
多目标优化最朴素的做法是把各目标得分加权求和。权重向量体现了研发团队的主观偏好,同时需要满足归一化条件。但固定权重有一个隐患:会让 AI 过度追求总分而悄悄“牺牲”某个关键指标。比如活性权重设为 0.8 时,AI 可能为了活性疯狂引入毒性基因,导致安全分崩盘。
于是研究者引入帕累托最优的概念:一个分子如果提升某个目标必然会损害另一个目标,那它就是一个值得保留的均衡解。
小岳最终端出的菜,未必是单科状元:它不是最便宜、最美味或最营养的单项目冠军,却是一个“没法再改好”的均衡解。多目标加权策略的本质,就是在偏好与物理极限之间找平衡点。
- 加权求和对 k 个目标各自打分后,乘上对应权重再加总。
- 权重归一化所有权重之和必须等于 1,确保不同组权重可相互比较。
- 帕累托条件不存在另一个分子 M' 让所有目标都“不更差”且至少一个目标“更优”。
探索利用平衡
小岳面临一个永恒难题:今晚是稳做一道拿手红烧肉确保不翻车,还是冒险尝试“紫苏青梅鱼”冲击好评?每天守旧,餐厅会失去新鲜感;每天乱创,后厨会一片狼藉。这个权衡,在 RL 里叫“探索”(尝试新动作)与“利用”(用已知最好的动作)。
ε-greedy 是解决这个矛盾的最经典策略:以概率 ε 随机探索,以概率 1−ε 贪心选择当前最优动作。训练早期 ε 较大,AI 满世界乱逛;后期 ε 逐渐衰减,AI 开始精雕细琢。探索率若调得太高,模型像永远在试菜的实习生,浪费算力;调得太低,则容易陷在局部最优里,像只会做同一道菜的旧派主厨。
另一类结构化探索手段是熵正则化:给策略分布的“混乱度”加分,鼓励策略不要过早变成确定性的一招鲜。经验回放则是把历史“试菜记录”混在一起反复学习,提高采样效率。
研发新菜也一样:前期多尝奇异香料,找到几款好配搭之后,后期把精力集中在最被好评的组合上。好的 RL 分子优化器,正是一个懂得“什么时候该野、什么时候该稳”的聪明主厨。
- 利用分支以 1−ε 的概率选择当前 Q 值最高的动作,保证收益稳定。
- 探索分支以 ε 的概率随机挑一个动作,哪怕它当前看起来不是最佳。
- 策略效果ε 从大到小退火,使智能体从“广撒网”逐步过渡到“精捕捞”。
训练与逆合成
小岳研发出一道成品菜后,还要做一件关键的事:把成品倒推成可操作的步骤清单——先腌后炸、先炖再收汁。这个过程,在化学里叫逆合成分析:从目标分子出发,反向推导需要哪些反应路线和原料片段。
分子生成的训练目标是让策略越来越好。策略梯度的核心思想很朴素:多采样一些完整生成轨迹,把好轨迹里出现过的动作概率提高,把差轨迹里的动作概率降低。就像一个主厨翻看过去一百次试菜的点评,找出“哪些操作常拿高分”,然后照着调整菜谱。
直接策略梯度容易“步子太大扯着淡”,PPO 应运而生:它通过裁剪新旧策略的比值,限制单次更新步幅,让训练稳定得像小岳做菜时“每次只调整一味调料,而不是推翻整个方子”。至此,从状态设计、动作构建、奖励构造到多目标权衡与稳定训练,一条完整的分子优化流水线就在“后厨”里运转起来了。
---
- 采样轨迹从策略 πθ 中采样一整条“从空分子到完整分子”的生成轨迹。
- 对数概率梯度对每一步的动作概率求对数梯度,衡量“如果把这一步调得更可能,策略变化的方向”。
- 轨迹总回报把整条轨迹的奖励累加得到 R(τ),作为这条轨迹好坏的“总评”。
- 期望更新对许多轨迹求平均,最终把“高分轨迹里的动作”调得更可能发生。
AI 应用场景
先导化合物活性与毒性联合优化
阶段:模型训练与候选分子生成
解决的问题:传统药物筛选依赖高通量实验,库存化合物有限、成本高昂;且往往先看活性、后验毒性,导致大量候选分子在后期被淘汰。RL 可以把活性、毒性和可合成性同时放进奖励函数,在虚拟化学空间里批量“预试菜”。
具体案例:某团队使用 REINVENT 类强化学习框架优化 JAK2 抑制剂先导物,奖励函数设置成“对接打分 0.5 + 类药性 0.3 − 毒性惩罚 0.2”,训练数千轮后获得多个活性保持、毒性预测显著下降的新骨架分子,直接进入湿实验验证。
全新骨架从头分子生成
阶段:探索与候选生成
解决的问题:专利壁垒和化学空间浩瀚让“人工设计新骨架”越来越难。RL 智能体通过片段拼接和原子添加,在已学动作空间中不断探索,生成化学上可行且性质达标的全新结构。
具体案例:在生成多巴胺 D3 受体配体的任务中,研究者将配体效率、脂溶性、合成难度三项指标加权作为奖励,RL 生成的命中分子里约 70% 通过了合成可行性过滤器,其中多个候选在后续活性实验中表现优于已有先导物。
逆合成路线规划
阶段:决策与规划
解决的问题:目标分子确定后,人工逆合成搜索会指数爆炸。RL 将“当前底物状态”映射到“推荐的反应模板动作”,并以步骤数、产率、苛刻反应数作为多目标奖励,规划最短且最稳的合成路径。
具体案例:某制药公司把 RL 逆合成模型接入内部合成规划平台,对一款临床候选药物进行路线重排,合成步骤由 12 步压缩到 8 步,总产率提升近一倍。
Python 演示
import random # 分子优化演示: 用 Q-learning 给 3 个结合位点选择原子# 目标: 最大化 药效 + 类药性 + 安全性 的多目标得分ATOMS = ['C', 'N', 'O', 'S'] class Molecule: def __init__(self): self.slots = [None, None, None] # 3 个结合位点 def full(self): return all(s is not None for s in self.slots) def place(self, pos, atom): self.slots[pos] = atom def score(self): # 药效: 位点0喜欢N, 位点1喜欢S act = 1.0 * (self.slots[0] == 'N') + 0.5 * (self.slots[1] == 'S') # 毒性: 位点2若放O则安全性下降 safe = 0.2 if self.slots[2] == 'O' else 1.0 # 类药性: 分子里最好有个C dru = 1.0 if 'C' in self.slots else 0.6 return 0.5 * act + 0.3 * dru + 0.2 * safe def choose(eps, qtab, key): if random.random() < eps or key not in qtab: return random.randrange(len(ATOMS)) return max(range(len(ATOMS)), key=lambda a: qtab[key][a]) def main(): qtab = {} eps = 0.6 for episode in range(1200): mol = Molecule() steps = [] for pos in range(3): key = (pos, tuple(mol.slots)) act = choose(eps, qtab, key) mol.place(pos, ATOMS[act]) steps.append((key, act)) r = mol.score() for key, act in reversed(steps): old = qtab.get(key, [0.0] * 4) old[act] += 0.1 * (r - old[act]) qtab[key] = old r *= 0.95 eps = max(0.05, eps * 0.997) # 贪心策略生成最优分子 mol = Molecule() for pos in range(3): key = (pos, tuple(mol.slots)) act = choose(0.0, qtab, key) mol.place(pos, ATOMS[act]) print('最优分子:', ''.join(mol.slots)) print('多目标得分: %.2f' % mol.score()) if __name__ == '__main__': main()
class Molecule:定义一个“分子”,用 3 个槽位存放选好的原子,对应 RL 中的状态容器。mol.place(pos, ATOMS[act])在指定位置放一个原子,这就是一次“动作”施加到当前状态上。key = (pos, tuple(mol.slots))把当前位点和已有原子组合成状态键,让 Q 表能区分不同上下文。act = choose(eps, qtab, key)依据 ε-greedy 决定是随机探索还是选择当前 Q 值最高的原子。old[act] += 0.1 * (r - old[act])用增量更新 Q 值,把终端奖励不断回传给前面的决策。eps = max(0.05, eps * 0.997)探索率随训练轮次指数衰减,让智能体从“乱试”过渡到“精用”。act = choose(0.0, qtab, key)训练结束后用纯贪心策略,输出最终的最优分子。
常见误区
误区我觉得奖励函数的数值范围越大,模型学得越快越猛。比如给活性满分 10000,肯定比给 1 分更有激励性。
正解奖励的数值语义比绝对大小更重要。过大的奖励会导致策略梯度更新步长夸张,训练剧烈震荡。正确做法是让各目标分数归一化到 0~1,再乘权重合并,就像评审表用 1~10 分制而不是用“十万分赞美”。奖励是为了传递“好坏方向”,而不是用幅度来恐吓模型。
为何常见:人容易把“奖大”当“动力足”,却忽略了 RL 梯度更新对奖励幅度的线性敏感——这和数据标准化之前的“量纲灾难”很像。
误区把所有目标加权汇总成一个数,训练一次就完事,权重从头到尾不用动。
正解加权求和只是起点。实际研发中权重会随项目阶段变化:先导发现期活性权重大,优化后期毒性权重急剧增大。而且固定权重容易掩盖帕累托前沿上的极端分子——总分很高但某一个目标崩盘。成熟做法是训练中动态调权、或直接生成帕累托前沿供专家挑选。
为何常见:加权求和公式简单直观,容易让人误以为“总分数高 = 分子好”,忽略了不同目标之间的不可比性。
误区ε-greedy 里反正有 ε 概率随机选动作,那探索就等于纯随机碰运气。
正解有效探索是有方向、有结构的:熵正则化鼓励策略保持认知不确定性,片段库约束引导探索到化学可及区域,经验回放让历史试错被反复利用。纯随机探索在大型分子空间里几乎不可能碰到好分子,就像无头苍蝇在后厨乱撞,撞不出米其林。
为何常见:ε-greedy 是教材中最常见的探索策略,许多人学到它就以为这是探索的全部手段。
误区RL 分子优化模型跑完训练,输出几个高得分的分子,就等于找到了候选新药。
正解RL 输出的只是基于代理评分的虚拟候选。后续还要合成验证、真实活性测试、体内毒理实验和临床阶段;而且奖励中的预测模型本身有误差,AI 眼里的“高分菜”真人评审未必认可。它真正的作用是缩小搜索范围、提供灵感,而不是替代湿实验。
为何常见:媒体标题常写“AI 发现新药”,让人误以为模型输出即产品,忽略了从虚拟分子到上市药物之间漫长且昂贵的验证链。
面试题
Q1. 在 RL 分子生成中,“状态”通常指什么?
- A.当前的部分分子结构← 正确答案
- B.目标配方的物质浓度
- C.评审给出的综合评分
- D.数据库中分子总数
答案:A。状态是智能体当前“看到”的东西,在分子生成中就是正在构建的部分分子。浓度、评分和库容量都是额外信息而非状态本体,正如主厨看的是“锅里”,而不是“墙上贴的评分表”。
Q2. 多目标加权的权重向量一般需要满足什么条件?
- A.权重总和等于 1← 正确答案
- B.权重都大于 10
- C.权重没有任何限制
- D.权重只能取整数
答案:A。权重归一化到和为 1,是让不同目标可以公平比较的约定。权重都大于 10 或只取整数值没有意义,没有限制则结果会随量纲漂移,像菜谱各调料没有统一勺子标准。
Q3. 关于 ε-greedy 策略,正确的描述是?
- A.训练后期 ε 应逐渐减小← 正确答案
- B.ε 始终等于 1 最好
- C.ε 与动作空间无关
- D.ε 越大越利于利用
答案:A。ε-greedy 用 ε 控制随机探索,训练后期通常退火减小 ε,让模型从广撒网转向精细利用。ε=1 则永远随机,ε 与动作空间当然有关,ε 越大探索越多而非利用越多。
Q4. 在双目标优化中,若一个分子达到帕累托最优,意味着什么?
- A.药效和毒性两项都最高
- B.任一目标再改进会伤及另一← 正确答案
- C.权重向量必须设为对半
- D.生成过程可以完全停止
答案:B。帕累托最优指不存在“所有目标不降且至少一个目标更优”的改进空间。此时想提升药效,往往要付出毒性升高的代价。双项同时最高通常不存在;权重对半与帕累托最优没有必然关系。
Q5. 策略梯度方法的核心做法是什么?
- A.提高高回报动作的概率← 正确答案
- B.降低所有动作的概率
- C.固定策略不更新
- D.只增加随机乱试的频率
答案:A。策略梯度的本质是让好轨迹里的动作在学习后更容易被选中,通过“增加高回报动作概率”来逼近最优策略。降低概率、固定策略或只随机乱试都与策略梯度的目标相悖。
Q6. 在奖励函数中加入毒性约束的典型运算形式是?
- A.在活性奖励上减去毒性惩罚← 正确答案
- B.活性与毒性直接相乘
- C.毒性取倒数后与活性相加
- D.完全不考虑毒性指标
答案:A。常见做法是综合奖励 = 活性项 − α×毒性惩罚项,通过大系数 α 形成“一票否决”。直接相乘会令非毒性项的梯度耦合,取倒数则改变目标区间语义,忽略毒性则失去多目标约束的意义。
Q7. PPO 中新旧策略比值裁剪的主要好处是?
- A.训练过程更稳定← 正确答案
- B.分子生成速度更快
- C.不需要奖励函数
- D.完全避免探索过程
答案:A。PPO 通过限制新旧策略比值范围,防止单次更新幅度过大,从而稳定训练。它并不直接提速生成,也不能省掉奖励函数,更不会消除探索需求。
Q8. 下列属于 RL 核心要素的有?
- A.状态与动作← 正确答案
- B.奖励信号← 正确答案
- C.智能体策略← 正确答案
- D.列表排序
答案:ABC。状态、动作、奖励、策略是强化学习的四要素。列表排序是算法术语,不属于 RL 核心要素,就像厨师证上的印章和菜本身没什么关系。
Q9. 以下哪些可用于分子状态的表示?
- A.SMILES 序列字符串← 正确答案
- B.分子图拓扑结构← 正确答案
- C.分子指纹特征向量← 正确答案
- D.化学实验室批次号
答案:ABC。SMILES、分子图、分子指纹都是可用来表征分子结构的常见方式。实验室批次号只标识样品来源,不含任何结构信息,无法作为分子状态输入。
Q10. 在多目标分子优化中,奖励函数通常包含哪些成分?
- A.靶点结合亲和力← 正确答案
- B.毒性预测评分← 正确答案
- C.合成可及性分数← 正确答案
- D.渲染引擎光照强度
答案:ABC。活性、安全性、可合成性是分子优化奖励的三大典型目标。渲染光照是图形学概念,与药物分子多目标优化无关。