一、问题背景:传统的良率预测为什么不够用
去年我们团队在做一个28nm产品的新工艺爬坡,遇到的第一个拦路虎就是良率预测。传统的做法是用SPC管的统计模型:采集每个制程步骤的CpK、SPAN等参数,用多元线性回归或者随机森林来预测最终良率。听起来挺合理对吧?我也这么以为,直到我看到预测结果和实际良率的差值图——误差在8%到15%之间来回摆动。
最让我困惑的是一个具体案例:某批次晶圆的所有SPC参数都在管控限内,CpK全部大于1.33,按照传统模型的预测良率应该是87%以上,但实际测试良率只有62%。事后查了很久才发现问题——光刻机的对准偏移在前面的die上累积到了临界值,虽然每个die的单独偏移量都在规格内,但在晶圆上的"空间累积效应"导致了边缘die集体失效。这种"工艺参数之间的空间关联"是传统模型完全无法捕获的,因为它们把每个die当成独立样本处理。
这就是我转向图神经网络(GNN)的原因——晶圆上数百颗die之间有天然的空间邻接关系,fab工艺步骤之间有上下游的流程关系,这些都不是独立同分布的数据,而是天然的图结构。
二、技术原理:为什么GNN适合良率预测
GNN的核心思想是把数据表示为"图"——节点(Node)和边(Edge)。在良率预测场景下,每个die是一个节点,相邻die之间有一条边(因为工艺参数在空间上是连续变化的)。节点的特征向量包含这个die的所有相关参数:光刻对准偏移量、CMP厚度偏差、刻蚀深度等。然后GNN用消息传递机制(Message Passing)让每个节点的信息沿着边向相邻节点传播,多次迭代后每个节点不仅知道自己本身的特征,还知道周围邻居的状态。
我选择了Graph Convolutional Network(GCN)作为基础模型,并混合了Graph Attention Network(GAT)的注意力机制。GCN擅长捕获局部拓扑结构——相邻die的参数往往有强相关性。GAT的注意力权重能自动学习哪些邻居的贡献更大(比如,同一行上的die的关联性比对角线上的更大)。
对比其他方案:CNN可以用滑动窗口处理晶圆图,但CNN的感受野是固定的,无法灵活建模不规则距离的die之间的关联。传统ML方法(RF、XGBoost)更是完全忽略空间结构。但GNN也有局限:对图结构的构建方式很敏感——边的定义、连接半径的选择都会影响效果。另外GNN的训练比CNN慢2-3倍,因为消息传递机制需要更多的前向计算。
三、实战案例:用GNN预测晶圆良率分布
数据集来自我们Fab的6个批次、每批25片晶圆、每片600颗die,总计9万颗die的数据。特征维度42个:包括每个die对应的光刻对准偏移量(X/Y方向)、CMP厚度(5个测点外推值)、刻蚀深度(3个关键区域)、膜厚均匀性、温度曲线参数等。
图结构设计:每颗die与上下左右四邻接die建立边(4-邻接图),边权重设置为欧氏距离的倒数。同时引入"工艺步骤链接"——同一批次的die共享一条连接到工艺步骤节点(作为高阶特征)。总节点数约90200(含200个批次工艺节点),边数约36万条。
模型架构:GCN编码器(3层,隐藏维度128)+ GAT注意力层(8个head) + MLP解码器。训练30个epoch,验证集上的R2达到0.89,MAE为2.1%(相比传统CNN模型的MAE 4.8%)。最让我惊讶的是,GNN在边缘die的预测上特别准——传统模型边缘die的误差通常是中心die的2-3倍,而GNN把边缘误差降到了中心误差的1.3倍以内。
图1:GNN vs CNN 在良率预测任务上的收敛曲线对比
四、完整代码:GNN良率预测核心实现
基于PyTorch Geometric实现,已对业务路径脱敏。
import torch, torch.nn.functional as F
from torch_geometric.nn import GCNConv, GATConv, global_mean_pool
from torch_geometric.data import Data
class YieldGNN(torch.nn.Module):
"""GCN+GAT混合模型用于晶圆良率预测"""
def __init__(self, in_dim, hidden_dim=128, out_dim=1):
super().__init__()
self.conv1 = GCNConv(in_dim, hidden_dim)
self.conv2 = GCNConv(hidden_dim, hidden_dim)
self.gat = GATConv(hidden_dim, hidden_dim//8, heads=8, concat=True)
self.fc = torch.nn.Linear(hidden_dim, out_dim)
def forward(self, data):
x, edge_index, batch = data.x, data.edge_index, data.batch
x = F.relu(self.conv1(x, edge_index))
x = F.dropout(x, p=0.2, training=self.training)
x = F.relu(self.conv2(x, edge_index))
x = F.elu(self.gat(x, edge_index))
x = global_mean_pool(x, batch) # 图级别输出 -> 单die良率
return self.fc(x).squeeze()
# 构建晶圆图数据: 每个die是一个节点
def build_wafer_graph(die_features, adjacency, die_yields):
"""die_features: (N, 42), adjacency: list of (i,j), die_yields: (N,)"""
edge_index = torch.tensor(adjacency, dtype=torch.long).t().contiguous()
x = torch.tensor(die_features, dtype=torch.float)
y = torch.tensor(die_yields, dtype=torch.float)
return Data(x=x, edge_index=edge_index, y=y)
为什么这样写?(1) 两层GCN+一层GAT的组合是为了兼顾"全局拓扑"和"局部注意力"。GCN做第1-2层时学习die之间的基础关联模式,GAT在第3层用注意力机制精调邻居权重——这比纯GCN或纯GAT的效果都好。(2) global_mean_pool用于图级预测,但实际项目中我还会拼接一个die级的位置编码,因为边缘die和中心die的工艺分布本身就有系统性差异。(3) 边构建方式我测试了4-邻接、8-邻接和全连接,4-邻接的表现最好——太密的图会让消息传递过平滑。
五、效果对比:GNN vs 传统方法全方位对比
在6个批次的测试集上,我用GNN与XGBoost、CNN、MLP三种方法做了全面对比。
模型 | MAE (%) | R2 | 边缘die MAE (%) | 训练时间(min) | 推理速度(ms/die) |
XGBoost | 5.3 | 0.72 | 8.7 | 8 | 0.02 |
MLP (3层) | 5.1 | 0.75 | 8.2 | 5 | 0.01 |
CNN (2D, 3x3 kernel) | 4.8 | 0.81 | 6.5 | 15 | 0.15 |
GCN (3层) | 2.8 | 0.86 | 3.9 | 32 | 0.45 |
GCN+GAT (Ours) | 2.1 | 0.89 | 2.7 | 38 | 0.60 |
关键洞察:传统的XGBoost在中心die上的预测误差其实也能做到3-4%,但在边缘die上直接倍增。GNN的图结构天然地让边缘die能"看到"周边邻居的信息,从而弥补了边缘区域参数稀疏的缺陷。另外值得注意的是,GAT注意力权重的可视化结果显示,模型自动学到了"同行的die相关性大于同列的"这一物理规律——与Fab工程师的经验完全一致。
图2:GNN模型识别出的良率关键工艺特征及对应Attention权重
六、实施建议:GNN良率预测落地全流程
第一阶段:数据准备与图构建(2-3周)。不要低估这一步的工作量。需要把FDC数据和良率数据按die坐标对齐,每个die对应一行特征向量。图结构的边定义直接影响模型效果——我推荐从4-邻接开始试,然后根据domain knowledge加入"同一曝光场"链接(因为光刻机一个曝光场覆盖的die之间有强相关性)。
第二阶段:模型选型与训练(2周)。建议从GCN开始,因为它最稳定、最好调参。如果GCN的效果已经够用(MAE < 3%),就不必上GAT。GAT对超参数比较敏感(head数、dropout率),需要更多调试。训练时注意用"晶圆级"的留出验证而非"die级"的随机抽样——同一片晶圆上的die高度相关,随机分割会造成数据泄漏。
第三阶段:模型解释与落地(1-2周)。GNN的可解释性是个大问题。至少需要做两件事:一是GAT的注意力权重可视化,让工程师看到模型关注了哪些邻居;二是用GNNExplainer或Grad-CAM对每个预测的die给出关键特征解释。
风险提示:(1)GNN对图结构的质量要求很高——如果die坐标信息不准确或者图的构建逻辑有bug,模型表现会急剧下降。(2)注意不同批次/产品型号之间的良率分布差异,不要把GNN模型跨产品直接迁移。(3)GNN的推理速度比MLP慢一个数量级,在实时FDC场景下可能需要用蒸馏方法缩小模型。
七、进阶方向:图结构在半导体领域还有哪些可能
GNN在良率预测上的成功让我开始思考更广泛的应用。当前方案的最大局限是只在"die-空间"维度上建图,没有考虑"时间-批次"和"流程-步骤"两个维度的图结构。真正应该建的是"时空-工艺异构图":die节点之间有空间边、同一批次的不同晶圆之间有批次边、不同制程步骤之间有因果边。这种异构图可以用R-GCN(Relational Graph Convolutional Networks)来处理,应该在良率预测效果上能有新的提升。
另一个方向是图生成模型(Graph Generation)。如果用GNN学到的die良率分布作为条件,可以用扩散模型或VAE来"生成"可能的失效模式图谱。这听起来有点科幻,但Google DeepMind已经在芯片设计领域做了类似的工作——用图生成模型自动发现设计中可能的热点区域。在一个FDC数据越来越丰富、工艺节点越来越复杂的时代,图结构的表达能力正在成为半导体AI的关键武器。
★ 如果这篇文章对你有启发,转发给需要的同事吧!技术传承需要我们每一个人的参与 ★
更多半导体AI实战经验,关注我不迷路。我是一个在一线Fab写代码的算法工程师,每周分享真正落地的技术方案。
订阅+点赞,我们下篇见!