城市里有一间神秘的「分子作曲教室」,学生的任务不是写歌,而是写出一个个分子。分子不会说话,但它们有自己的「乐谱」——SMILES 字符串。一串看似随意的字符 CCO,记录的其实是乙醇这种分子的完整结构。教室里有三代乐手:逐字哼唱的 CharRNN、俯瞰总谱的 Transformer、只看前奏即兴接续的 GPT 风格乐手。他们都想学会「用字符写出合格分子」的本领。 写分子和写歌的难点一模一样:乐谱要符合语法(原子价、成环规则不能乱来),旋律要有新意(不能只会抄老歌),曲子要表达情感(分子要有活性)。于是这位老师教学生三件事:先认谱,再练基本功,最后上台即兴。整个过程就像一次「从抄写员到作曲家」的成长之旅,而我们要做的,就是看着这三代乐手如何用不同的思维方式,把一串字符变成改变世界的药物分子。

岗位关联

对 AI 从业者而言,SMILES 生成模型是「语言模型 × 科学发现」最鲜活的样板:你掌握的 Transformer、GPT 技能,可以直接迁移到药物设计这一高价值场景,打开 AI 生命科学的新职业通道。

目录
  1. 可视化演示
  2. SMILES 语言基础
  3. 分子生成任务
  4. CharRNN 逐字哼唱
  5. Transformer 俯瞰总谱
  6. GPT 风格即兴
  7. 评估与优化
  8. 应用与挑战
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

演示CharRNN字符级序列生成、Transformer自注意力编码与GPT自回归生成的SMILES分子生成流程,交互切换查看三种架构差异。

本节配有交互动效(进入视口后自动加载,约 3KB)。

CharRNN字符级序列生成 逐字符生成SMILES隐状态逐步传递 LSTM/GRU捕获局部化学键依赖关系 h_t = LSTM(x_t, h_{t-1}) CharRNN结构简单但长序列依赖建模能力有限

SMILES 语言基础

在分子作曲教室里,老师发的第一份教材叫「分子乐谱入门」。每个音符对应一个字符:C 是碳原子、N 是氮原子、O 是氧原子,= 是双键,( 表示支链的开始。就像乐谱用音符记录旋律,SMILES(Simplified Molecular-Input Line-Entry System)用一行 ASCII 字符记录分子的完整连接方式。例如 CCO 这串“旋律”,记录的就是乙醇:两个碳原子手拉手,其中一个再牵一个氧原子。

分子乐谱不是乱写的。乐谱要合乐理——和弦不能随便堆;SMILES 也要合化学语法——碳必须有四个化学键、氮要有三个,环要配对闭合。写下一串字符后,解析器就像乐谱复核员,能自动判断这串符号是否对应一个真实合法的分子。若语法错了,如 CCCC 后面突然接一个 [O-] 而价键对不上,解析器就会直接判「非法乐谱」。

从语言模型的角度看,一串 SMILES 序列 S = c₁c₂…cₙ 的生成概率,可以分解成一个个字符的接力预测:

理解了这份分解式,就理解了所有生成模型的共同骨架——逐个预测字符。无论是 CharRNN 还是 GPT 风格模型,本质都在逼近这个条件概率 P(cₜ|历史)。而 SMILES 这份「分子乐谱」,正是最适合练习这套骨架的教材。

P(S)=∏t=1nP(ct∣c1,c2,⋯ ,ct−1)P(S) = \prod_{t=1}^{n} P(c_t \mid c_{1}, c_{2}, \cdots, c_{t-1})
这句话的意思是:整首乐谱出现的概率,等于「第一个音符」(P(c₁))的概率,乘以「在看到第一个音符后写出第二个音符」的概率,再乘以「看到前两个音符后写出第三个」的概率……全部乘起来。
  1. 乘积符号 \prod把从第 1 个到第 n 个字符的所有条件概率连乘起来,得到整条序列的概率。
    ∏t=1n⋯\prod_{t=1}^{n} \cdots
  2. 条件概率 P(cₜ | 历史)竖线前的 cₜ 是“即将写下的字符”,竖线后的历史是“已经写出的所有字符”。
    P(ct∣c1,⋯ ,ct−1)P(c_t \mid c_{1}, \cdots, c_{t-1})
  3. 下标 t表示当前位置,模型每步只预测一个字符,并把它拼到历史末尾。
    t=1,2,⋯ ,nt = 1, 2, \cdots, n

分子生成任务

学会了认谱,乐手们开始尝试作曲。最初的梦想是「随机创作」:给模型一把字符,它自由发挥,写出一堆分子。这就像爵士乐手随意弹几个音符,可能弹出悦耳旋律,也可能弹出噪音。随机生成解决的是「从零到有」的问题——为科学家提供海量候选分子,哪怕 99% 是废品,剩下 1% 也足以点亮灵感。

但药物研发要的不是随缘。科学家心里有一个“金耳朵”——比如一个预测分子与靶点结合活性的评分函数。这一下任务从「随便写」升级成「朝着高分写」。模型每写一个分子,就用评分函数打个分,高分就像老师的掌声,低分就像台下的嘘声,模型由此调整自己写字的策略,让下一次出手更接近“好旋律”。

这背后的数学语言非常简洁:假设模型参数为 θ,生成分子 S 的概率是 p_θ(S),评分函数给分子打 R(S) 分,那么模型的优化目标就是让「平均得分」最高:

有了这个目标,生成模型就不再是乱写一气的「灵感型选手」,而是能持续改进的「目标型选手」。随机生成拓宽边界,评分优化收敛方向——两者结合,正是现代分子生成的核心配方。

J(θ)=ES∼pθ[ R(S) ]J(\theta) = \mathbb{E}_{S \sim p_\theta}[\, R(S) \,]
这个公式是「目标导向分子生成」的指挥棒:期望符号告诉模型——平均而言,你要做的每个分子都能拿高分,而不是偶尔蒙对一个。
  1. 期望符号 \mathbb{E}对所有可能生成分子 S 的得分求平均,权重就是模型生成该分子的概率。
    ES∼pθ[⋯ ]\mathbb{E}_{S \sim p_\theta}[\cdots]
  2. 采样记号 S ~ p_θ分子 S 是从模型定义的分布中采样得到的,采样概率由模型参数 θ 决定。
    S∼pθS \sim p_{\theta}
  3. 评分函数 R(S)外部打分器,可以是性质预测器、活性预测器或化学规则过滤器,它把分子映射成一个实数分数。
    R(S)∈RR(S) \in \mathbb{R}

CharRNN 逐字哼唱

教室里第一位成名乐手叫 CharRNN,他的表演方式很朴素:一边哼唱前一个音符,一边在「记忆小抄」上做标记,然后写下下一个音符。所谓记忆小抄,就是神经网络里的隐藏状态 h——一个装着「到目前为止这段旋律长什么样」的向量。每读入一个新字符,小抄就更新一次,旧旋律的精华被压缩保留。

CharRNN 的每个字符预测,本质是两步动作:第一步,用 LSTM 单元把小抄更新;第二步,把小抄通过一个全连接层变成所有候选字符的分数,再用 softmax 转换成概率分布。音乐教室里,这一步就像乐手看完小抄后,对七个音符各自报出一个“我想弹这个”的倾向值,然后按比例掷骰子。

把这两步写成数学就是:

CharRNN 的优点是轻巧、训练快,尤其擅长抓住短距离的字符规律——比如 C 后面常接 C、O 后面常接 (。但它有个天生的短板:记忆小抄容量有限,遇到很长的分子链,前面几十个字符的细节早已被“橡皮擦”擦模糊了。它适合写短旋律,却难驾驭结构复杂的长分子。

p(ct∣c<t)=softmax(W ht+b),ht=LSTM(ht−1,xt)p(c_t \mid c_{<t}) = \mathrm{softmax}\left( W\, h_t + b \right), \quad h_t = \mathrm{LSTM}(h_{t-1}, x_t)
核心直觉:隐藏状态 h_t 是「过去旋律的压缩记忆」,softmax 把它变成下一个字符的概率骰子。
  1. 隐藏状态更新 h_t = LSTM(h_{t-1}, x_t)新记忆 = 旧记忆 + 新字符的信息,LSTM 用三个门(输入、遗忘、输出)决定哪些旧记忆该留、哪些新信息该记。
    ht=LSTM(ht−1,xt)h_t = \mathrm{LSTM}(h_{t-1}, x_t)
  2. 线性变换 W·h_t + b把记忆向量映射成每个候选字符的得分,W 和 b 是训练中学到的参数。
    Wht+bW h_t + b
  3. softmax 归一化把一组分数压成总和为 1 的概率分布,分数越高,对应字符被抽中的概率越大。
    softmax(z)i=ezi∑jezj\mathrm{softmax}(z)_i = \frac{e^{z_i}}{\sum_j e^{z_j}}

Transformer 俯瞰总谱

第二位登场的乐手是 Transformer,他不像 CharRNN 那样逐字死记,而是出场就带着一整个总谱架——把乐谱上所有音符同时摊开,每个音符都能「看到」整页谱子里的所有其他音符,并判断谁跟自己最相关。这个“看”的动作,就是自注意力机制。

自注意力的计算像一次「全体乐手互相使眼色」:每个音符发出三个角色——查询 Q(我想找谁搭配)、键 K(我的特征标签)、值 V(我真正要提供的信息)。每个音符拿自己的 Q 去跟所有 K 比对,算出相关性权重,再用权重对所有 V 做加权求和。相关系数高的音符对,比如分子里配对成环的首尾原子,就会被模型牢牢绑定在一起。

相比 CharRNN 的记忆小抄,Transformer 的“全局视野”能轻松捕捉长距离依赖——比如苯环首尾成环的字符,可能隔着十几个位置也能互相关注。加上注意力可以并行计算(矩阵运算统一做,不用一步步走),训练速度大幅提升。不过代价是:没有自然的顺序感,必须靠位置编码告诉模型“第 3 个字符在 C 后面”,而且全局注意力的计算量随序列长度平方增长,长分子仍然昂贵。

Attention(Q,K,V)=softmax(QK⊤dk)V\mathrm{Attention}(Q, K, V) = \mathrm{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right) V
这个公式是 Transformer 的「群聊机制」:每个词都向全场提问,收集全场回答,再按相关性融合成自己的新表示。
  1. QKᵀ 相关性打分查询矩阵 Q 和键矩阵 K 做内积,算出每对字符之间的匹配程度。
    QK⊤QK^{\top}
  2. 除以 √d_k把分数缩放到合适范围,防止维度大时内积爆炸,让 softmax 的梯度不至于消失。
    ⋅dk\frac{\cdot}{\sqrt{d_k}}
  3. softmax 归一权重把每行的相关性分数变成和为 1 的注意力权重,表示“我应该多关注谁”。
    softmax(⋅)\mathrm{softmax}(\cdot)
  4. 乘 V 融合信息用权重对值向量加权求和,得到融合了全局信息的新表示。
    ⋯V\cdots V

GPT 风格即兴

教室里的新晋明星是 GPT 风格乐手,他像爵士酒吧里的即兴钢琴师:只看着已经弹过的前奏,绝不偷看后面的谱子,逐音符往后接。这种「只看过去、不看未来」的约束,在 Transformer 里靠掩码自注意力实现——把未来的位置全部蒙住,让每个字符只能关注自己左侧的字符。这就是为什么它叫自回归生成:自己生成的内容,又成为自己的输入。

在分子领域,GPT 风格的乐手有一个绝活:上下文学习。给模型几个「分子问答示例」,比如「阿司匹林 → 它的水溶性类似物」,它就能模仿这种模式去写新分子,不需要重新训练。再加上一个轻量微调,模型就能快速适配新任务——就像乐手听两小节就能入戏,换一首歌也只需要热热身。

这种自回归生成的核心依然是我们熟悉的概率分解:

GPT 风格的魅力在于「通用」:同一个预训练模型,可以通过提示词玩出各种花样——生成、修复、转化 SMILES 都能干。但它的劣势也很直观:单向视野让它无法利用「未来信息」做全局优化,生成极长的分子链时可能偏离化学合理性,需要配合评分函数或约束解码来拉回正轨。

P(x1,x2,⋯ ,xn)=∏t=1nP(xt∣x1,x2,⋯ ,xt−1)P(x_1, x_2, \cdots, x_n) = \prod_{t=1}^{n} P(x_t \mid x_1, x_2, \cdots, x_{t-1})
与 CharRNN 相同的分解式,但 GPT 风格用掩码 Transformer 实现:每一步只看左侧上下文,然后生成右侧下一个 token。
  1. 序列 x₁…xₙ把 SMILES 拆成 token 序列,每个 token 可以是单个字符或一个原子片段。
    x1,x2,⋯ ,xnx_1, x_2, \cdots, x_n
  2. 乘积分解整个分子出现的概率,等于每个 token 在自己历史条件下的概率相乘。
    ∏t=1n⋯\prod_{t=1}^{n} \cdots
  3. 条件 P(xₜ | x\<t)下标 t 之前的全部 token 构成上下文,模型只利用这些「已知乐句」预测下一个音符。
    P(xt∣x<t)P(x_t \mid x_{<t})

评估与优化

无论哪代乐手,演出完毕都逃不过老师的评审。评审有三条硬标准:有效性、新颖性、多样性。有效性 = 生成的字符串能被分子解析器正确识别(是真正合法的分子乐谱);新颖性 = 生成的分子不在训练集的老歌单里;多样性 = 去重之后还剩多少首不同的曲目。三把尺子合起来,才能量出一位乐手的真实创作水平。

训练侧的优化也围绕这三把尺子转。生成一堆分子后,用评分函数过滤低分样本,把高分样本当“标准答案”再训练一遍模型,这种「生成—打分—再训练」的循环叫迭代式微调。更进阶的做法是用强化学习,把评分函数的分数当作奖励,直接优化前面第二节里的目标函数 J(θ)。强化学习的好处是模型会主动探索新写法,而不是死记高分分子的模板。

三把尺子的数学定义干净利落。令生成总数为 N_total,其中能被解析器验证合法的分子数为 N_valid,不在训练集中出现过的新分子数为 N_novel,去重后不重复的分子数为 N_unique:

一个优秀的分子生成模型,理想状态是三个指标都接近 1。现实中三者常打架:把模型训得太「规矩」,新颖性就掉下去;让模型太「自由」,有效性又崩盘。调平衡这一步,正是工程师的用武之地——调整温度参数控制随机性、增加语法约束解码、用强化学习引导目标方向,都是常用的优化手段。

Valid=NvalidNtotal,Novel=NnovelNvalid,Unique=NuniqueNvalid\mathrm{Valid} = \frac{N_{valid}}{N_{total}}, \quad\mathrm{Novel} = \frac{N_{novel}}{N_{valid}}, \quad\mathrm{Unique} = \frac{N_{unique}}{N_{valid}}
三个比值分别回答三个问题:写出来的东西合不合规矩?是不是老掉牙?是不是千篇一律?
  1. 有效性 Valid合法分子数占采样总分子数的比例,衡量乐手的基本功是否扎实。
    Valid=Nvalid/Ntotal\mathrm{Valid} = N_{valid} / N_{total}
  2. 新颖性 Novel训练集从未出现过的合法分子,占合法分子总数的比例,衡量乐手有没有新意。
    Novel=Nnovel/Nvalid\mathrm{Novel} = N_{novel} / N_{valid}
  3. 多样性 Unique去重后分子数占合法分子数的比例,衡量乐手的曲风是否单调。
    Unique=Nunique/Nvalid\mathrm{Unique} = N_{unique} / N_{valid}

应用与挑战

有了这三代乐手,分子作曲教室终于开始接商演,舞台搬进了真实的药物发现和化学工业。第一个大舞台是从头药物设计:给定一个疾病靶点,乐手们创作成千上万个候选分子,配合活性预测器快速筛选,把原本需要数年的先导化合物发现周期压缩到数周。第二个舞台是逆合成分析——也就是文章所在的目录节点。给定一个目标产物 P,模型倒过来预测「用什么原料、什么反应条件能做出它」,把合成路线规划从查手册变成问模型。

逆合成本质是一个条件生成问题:在已知产物 P 的条件下,生成反应物集合 R。数学上可以写成条件概率:

但商演之路并不轻松。最大的挑战是数据稀疏:公开的分子反应数据库只有百万级规模,相比自然语言的万亿 token,乐手们的「排练曲目」少得可怜;而无效分子、反应不明确、标注错误又进一步污染乐谱。另一个挑战是化学约束的复杂性——乐谱的「乐理」远不止原子价,还有三维构象、手性、毒性等隐性规则,模型要学的东西远比一串文本更深。正因如此,SMILES 生成模型的前沿研究,正走向「生成 + 物理化学约束 + 专家经验」的融合路线。

P(R∣P)=P(R,P)P(P)P(R \mid P) = \frac{P(R, P)}{P(P)}
这个公式说的是:逆合成模型不是凭空生成化学式,而是在「给定目标产物」这个前提下的条件创作——就像根据歌曲的结尾反推开头的旋律。
  1. 条件概率竖线P 是已知条件(目标产物分子),模型生成的是 R(一组可能的反应物)。
    R∣PR \mid P
  2. 联合概率 P(R, P)反应物与产物同时出现的概率,训练时由「已知反应式」数据库统计而来。
    P(R,P)P(R, P)
  3. 分母 P(P)目标产物本身出现的先验概率,做归一化,保证条件概率总和为 1。
    P(P)P(P)

AI 应用场景

先导化合物从头生成

阶段:药物发现早期的候选分子创作与虚拟筛选

解决的问题:传统药物发现依赖高通量筛选数百万个化合物,成本高、周期长;CharRNN 或 GPT 风格生成模型可以按需创作出全新的、具有类药性的分子结构,再用活性预测器批量打分,把筛选空间从「碰运气」变成「定向搜索」。

具体案例:某药企针对一款激酶靶点,用 GPT 风格模型预训练在 ChEMBL 分子库上,再以活性预测器为评分函数做强化学习微调。模型生成的 5000 个分子中,约 30% 通过了类药性过滤,其中 12 个分子的预测活性远超已知抑制剂,进入后续合成验证管线。

逆合成路线设计

阶段:化学合成路线的智能规划

解决的问题:经验丰富的化学家制定合成路线往往要数周,且严重依赖个人经验;Transformer 逆合成模型可以「倒着读乐谱」——输入目标产物 SMILES,输出多个可行的反应前体组合,相当于给化学家配了一位掌握数百万反应规则的虚拟助手。

具体案例:某化学制造公司使用基于 Transformer 的逆合成模型分析一款仿制药中间体,模型在 3 秒内给出 10 条候选路线,其中一条使用廉价原料的反应路线,成本比原工艺下降 40%,被采纳进入中试。

分子属性定向优化

阶段:候选分子的多目标优化

解决的问题:药物分子往往需要同时满足活性高、毒性低、溶解性好等多个指标,传统人工改构效率极低;CharRNN 以现有活性分子为种子做「逐字符变异」,配合多目标评分函数筛选,可实现分子的定向进化。

具体案例:某研究团队以一款水溶性差的候选药物为种子,用 CharRNN 生成 1000 个类似物,根据「活性 + 溶解度」联合评分挑选高分分子,最终获得 3 个溶解度提升 5 倍以上且活性保持的先导物。

Python 演示

python72 行
import torchimport torch.nn as nnimport numpy as np # 分子乐谱库:一小批常见分子的 SMILESsmiles_lib = [    "CC(=O)Oc1ccccc1C(=O)O",   # 阿司匹林    "CCO",                       # 乙醇    "c1ccccc1",                  # 苯    "CCN(CC)CC",                 # 三乙胺    "O=C(O)c1ccccc1"             # 苯甲酸] # 1. 构建字符词典:把乐谱里的音符收集齐chars = sorted(set("".join(smiles_lib)))char2idx = {c: i for i, c in enumerate(chars)}idx2char = {i: c for i, c in enumerate(chars)}vocab_size = len(chars) # 2. 把字符串转成索引序列def encode(s):    return [char2idx[c] for c in s] X_all = [encode(s) for s in smiles_lib] # 3. 定义 CharRNN 乐手:逐字符读入并预测下一步class CharRNN(nn.Module):    def __init__(self, vocab_size, hidden_size=64):        super().__init__()        self.embed = nn.Embedding(vocab_size, hidden_size)        self.rnn = nn.LSTM(hidden_size, hidden_size, batch_first=True)        self.fc = nn.Linear(hidden_size, vocab_size)     def forward(self, x, hidden=None):        out = self.embed(x)        out, hidden = self.rnn(out, hidden)        logits = self.fc(out)        return logits, hidden # 4. 训练:让乐手熟悉分子乐谱的语法model = CharRNN(vocab_size)loss_fn = nn.CrossEntropyLoss()opt = torch.optim.Adam(model.parameters(), lr=1e-2) for epoch in range(300):    total_loss = 0    for x in X_all:        t = torch.tensor([x], dtype=torch.long)        logits, _ = model(t)        loss = loss_fn(logits.view(-1, vocab_size), t.view(-1))        opt.zero_grad()        loss.backward()        opt.step()        total_loss += loss.item()    if epoch % 100 == 0:        print(f"epoch {epoch}, loss={total_loss:.3f}") # 5. 生成:乐手从起点字符开始逐音符接龙def generate(model, start_char="C", length=25):    model.eval()    idx = char2idx[start_char]    out = [start_char]    hidden = None    for _ in range(length):        x = torch.tensor([[idx]], dtype=torch.long)        logits, hidden = model(x, hidden)        probs = torch.softmax(logits[0, 0], dim=0).detach().numpy()        idx = np.random.choice(vocab_size, p=probs)        out.append(idx2char[idx])    return "".join(out) print("生成分子:", generate(model))
目的:用 PyTorch 实现一个极简 CharRNN,在 5 个真实分子的 SMILES 上进行训练,演示「逐字符学习语法 → 概率采样生成新分子」的完整流程。
  1. chars = sorted(set("".join(smiles_lib)))收集所有出现过的字符,构成乐手的「音符表」,每个字符对应词典中的一个索引。
  2. self.rnn = nn.LSTM(hidden_size, hidden_size, batch_first=True)搭建「记忆小抄」:LSTM 把历史字符信息压缩进隐藏状态,供每一步预测使用。
  3. logits = self.fc(out)把记忆向量映射成每个候选字符的得分,得分越高代表乐手越倾向写这个音符。
  4. loss = loss_fn(logits.view(-1, vocab_size), t.view(-1))计算预测概率与真实序列之间的交叉熵损失,乐手通过降低损失来模仿真实乐谱。
  5. probs = torch.softmax(logits[0, 0], dim=0).detach().numpy()把得分转成概率分布,然后按概率随机抽样——这就是生成时「掷骰子」的瞬间。
  6. np.random.choice(vocab_size, p=probs)按概率分布抽一个字符索引,拼到已生成的序列末尾,完成一步自回归生成。

常见误区

误区SMILES 就是一行普通文本,模型只要能模仿字符串形状就够了,语法错误也没关系,反正看起来像分子。

正解SMILES 是分子的「乐谱」,有严格的化学语法——原子价必须饱和、环必须闭合、电荷要标注。一个字符错位,整个字符串就可能是非法分子。生成模型输出的字符串必须能被 SMILES 解析器(如 RDKit)成功解析成分子图,才算真正有效。评估「有效性」指标正是为了守住这条化学红线。

为何常见:从 NLP 迁移过来的开发者天然把 SMILES 当自然语言处理,忽视它底层对应着一个有物理化学实体的分子图结构,因此以为「字符串像就够了」。

误区只要生成模型输出的 SMILES 全部合法、语法完美,就说明模型已经掌握了药物设计,能直接产出候选药物。

正解语法合法只说明乐谱「读得通」,不说明「好听」。分子合法只保证结构可存在,不代表它有活性、低毒性、可合成。真实药物发现必须叠加评分函数(活性预测、类药性过滤、合成可行性评估)做目标导向优化,单纯的自回归生成只会输出一堆「合法但没用」的分子。

为何常见:初学者看到「有效性」指标常常误以为它就是终极目标,忽略了生成任务中「有效」只是入场券,「有价值」才是真正的比赛。

误区Transformer 和 GPT 模型这么强,CharRNN 作为老一代模型已经毫无用处,所有分子生成任务都应该用 Transformer。

正解在小规模分子数据集上,CharRNN 的参数量小、训练快、不易过拟合,效果常常不输大模型。分子数据不像自然语言那样海量,Transformer 的全局注意力优势在短序列上并不明显,反而可能因为数据不足而欠拟合。实践中许多工具仍然以 RNN 作为生成器,只是配合强化学习或约束解码使用。

为何常见:人们习惯用 NLP 领域的「大模型碾压小模型」直觉来套分子生成,忽略了数据规模和应用场景的根本差异。

误区GPT 风格模型能生成像样的 SMILES,说明它真正理解了化学原理、原子之间的成键规律。

正解模型学到的是字符序列的统计关联模式,它不知道碳是什么、不知道化学键的物理含义。它会写「合法分子」是因为训练数据里合法模式出现频率高,本质是概率拟合,不是化学推理。这就像乐手模仿大师的风格弹奏,却不理解音乐理论——能演奏得像,不等于懂得作曲原理。

为何常见:大语言模型的「流畅输出」让人产生智能错觉,人们容易把「输出符合语法」误认为「具备领域知识」,忽略了统计学习与符号推理之间的鸿沟。

面试题

Q1. SMILES 是一种什么样的分子表示方式?

单选题 · easy

  • A.用三维坐标描述分子的空间结构
  • B.用一行文本字符线性描述分子结构← 正确答案
  • C.用分子量推算分子的元素组成
  • D.用光谱信号还原分子的官能团

答案:B。SMILES(简化分子线性输入规范)用 ASCII 字符串记录原子的连接方式,像乐谱记录旋律一样把分子转成一行文本。A 是三维结构文件(如 PDB/SDF)的特征,C 是质谱分析思路,D 是波谱解析思路,均与 SMILES 的定义不符。

Q2. CharRNN 生成 SMILES 时,每一步输出的是什么?

单选题 · easy

  • A.下一个字符的概率分布← 正确答案
  • B.整个分子的 SMILES 字符串
  • C.分子的三维构象坐标
  • D.分子与靶点的结合能

答案:A。CharRNN 的每一步只预测「下一个字符」的概率分布,然后从中采样一个字符拼到历史末尾,循环多次才能得到完整分子。B 是循环结束后的最终产物而非单步输出,C 和 D 与字符级生成无直接关系。

Q3. Transformer 自注意力中,Q 和 K 的点积结果为什么要除以 √d_k?

单选题 · mid

  • A.减少矩阵乘法的计算量
  • B.避免点积过大导致 softmax 梯度消失← 正确答案
  • C.把特征维度压缩到更小
  • D.让模型支持更长的序列输入

答案:B。当维度 d_k 较大时,点积数值会迅速变大,使 softmax 进入饱和区、梯度趋近于零。除以 √d_k 相当于把分数拉回合理尺度,保证注意力权重分布适中。A 和 C 是对计算量和维度的误解,D 与序列长度无关。

Q4. GPT 风格的生成模型与普通 Transformer 编码器的主要差异是什么?

单选题 · mid

  • A.使用单向注意力掩码,只看历史信息← 正确答案
  • B.完全抛弃了注意力机制
  • C.只能处理数值不能处理文本序列
  • D.不需要位置编码也能建模顺序

答案:A。GPT 风格的模型使用掩码自注意力,把当前位置右侧的未来 token 全部屏蔽,保证每个位置只能看到左侧上下文,从而实现自回归生成。B 错在 GPT 依然依赖注意力,C 错在其本就是文本模型,D 错在所有 Transformer 都需要位置编码。

Q5. 目标导向分子生成中,评分函数的核心作用是什么?

单选题 · mid

  • A.判断生成的字符串语法是否正确
  • B.给生成分子打分并引导模型优化方向← 正确答案
  • C.加快模型训练时的矩阵计算
  • D.压缩训练数据的存储空间

答案:B。评分函数(如活性预测器)把生成分子映射成分数,模型通过强化学习或迭代微调逐步向高分方向更新参数。A 是有效性校验而非评分优化,C 和 D 与评分函数的功能无关。

Q6. 强化学习微调 SMILES 生成模型时,「策略」通常指什么?

单选题 · hard

  • A.分子数据库的检索规则
  • B.根据当前片段预测下一个字符的生成模型← 正确答案
  • C.评分函数内部的参数
  • D.训练时的数据增强方法

答案:B。在强化学习框架里,生成模型本身就是策略——它接收当前已生成的字符片段作为状态,输出下一个字符的概率分布作为动作选择。评分函数的分数作为奖励信号,用于优化这个策略。A 与生成无关,C 是被优化的对象而非策略本身,D 是训练技巧。

Q7. 关于 SMILES 字符串,下列说法正确的是?

单选题 · easy

  • A.任意字符组合都能构成合法分子
  • B.同一个分子只能有唯一的 SMILES 写法
  • C.SMILES 必须遵循原子价等化学语法规则← 正确答案
  • D.SMILES 中只能包含碳和氢两种元素

答案:C。SMILES 必须满足化学语法,比如碳四价、环对称闭合,非法字符串无法被解析器识别为分子。A 显然错误,B 是误解——同一分子可有多种等价写法(如芳香性与 Kekulé 式),D 错在 SMILES 支持几乎所有元素(用方括号标注,如 [Fe])。

Q8. 评估 SMILES 生成模型质量时,常用的分子指标包括哪些?

多选题 · mid

  • A.有效性:合法 SMILES 占生成总数的比例← 正确答案
  • B.新颖性:未出现在训练集中的分子占比← 正确答案
  • C.多样性:去重后分子占合法分子的比例← 正确答案
  • D.分子量:生成分子的平均质量大小

答案:ABC。有效性、新颖性、多样性是分子生成领域最经典的三元评价体系,分别考察「合不合规」「有没有新意」「是否千篇一律」。D 的分子量属于分子性质描述,不属于生成质量的评价指标。

Q9. 关于 CharRNN、Transformer、GPT 风格三种生成模型,下列说法正确的有哪些?

多选题 · hard

  • A.CharRNN 用隐藏状态压缩历史信息← 正确答案
  • B.Transformer 的自注意力可以并行计算← 正确答案
  • C.GPT 风格模型采用掩码实现自回归生成← 正确答案
  • D.三种模型都无法处理序列数据

答案:ABC。CharRNN 的 LSTM 隐藏状态就是「记忆小抄」,压缩已读序列信息;Transformer 的自注意力通过矩阵运算一次性处理整个序列,可并行;GPT 风格用掩码自注意力保证只能看历史,实现自回归。D 完全错误——三种模型都是为序列建模而生的。

Q10. SMILES 生成模型在真实药物发现流程中可能参与的环节包括哪些?

多选题 · extreme

  • A.候选分子库的虚拟筛选与扩充← 正确答案
  • B.已知活性分子的改构与优化← 正确答案
  • C.逆合成路线中的反应前体预测← 正确答案
  • D.临床试验阶段的患者入组统计

答案:ABC。生成模型可在药物发现早期创作候选分子(A),可以以已知活性分子为种子做定向改构(B),可以在逆合成分析中生成目标产物的可能前体(C)。D 属于临床运营环节,与分子生成模型无关。