想象你搬进了一个陌生城市的新小区——这是你在这里的第一个住所。你想找一家好吃的早餐店、一个靠谱的理发师,但你举目无亲。这时候怎么办?最自然的方法就是问邻居:“附近哪里好?”楼下大妈告诉你“拐角那家包子铺不错”,同楼小伙推荐“后街理发师手艺好”。你把这些道听途说记在心里,一个“该去哪里”的念头就在脑中慢慢成形。这就是“通过邻居了解世界”的智慧,也是图神经网络(GNN)做推荐的核心逻辑。 传统推荐系统像个孤僻的住户,只盯着你与谁打过照面;而图神经网络推荐,会把你放进一张巨大的社区关系网里,通过一层层邻居的“口耳相传”把推荐做得更聪明。它尤其擅长解决冷启动——你刚搬来谁都不认识时,邻居的推荐就是最好的向导。这篇文章会带你从“新住户的迷茫”出发,认识交互图、LightGCN、GraphSAGE 图召回架构和大规模训练,学会用图结构破解冷启动与数据稀疏难题。

岗位关联

对 AI 从业者而言,掌握图神经网络推荐等于拿到社交推荐与冷启动场景的“王牌技能”——这是当前推荐系统进阶必备的方向之一,也是技术面试中区分度极高的加分项。

目录
  1. 可视化演示
  2. 冷启动难题:新住户的迷茫
  3. GNN核心思想:邻里打听
  4. LightGCN原理:不化妆的八卦
  5. GraphSAGE采样:不用认识全小区
  6. 图召回架构:从社区到地图
  7. 大规模图训练:城市级调度
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示图神经网络推荐的核心机制,通过架构/数据/状态/性能四种模式展示关键概念与交互流程。

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

图神经网络推荐:图神经网 图神经网络在推荐系统中的核心作 图构建与表示学习 核心机制可视化 图神经网络推荐整体架构与关键组件

冷启动难题:新住户的迷茫

新搬来的你站在小区门口,口袋里有手机、有钱包,却不知道该往哪儿走。你想吃早餐,可没有一家店认识你;店老板想招揽新客人,可他也不知道你是谁、喜欢什么口味。这就是冷启动——用户和物品之间没有任何“打过照面”的历史,传统推荐系统面对这种场景几乎束手无策。你越不认识人,就越难获得推荐;越没有推荐,就越无法产生交互,一个恶性循环就此形成。

把这个场景翻译成技术语言:冷启动分为用户冷启动(新用户没有任何行为记录)和物品冷启动(新商品没有任何曝光数据)。如果统计平台上的所有用户和物品,绝大多数用户只和极少物品发生过交互,这个“几乎所有格子都是空的”的现象就叫数据稀疏。推荐算法需要的是从一片空白里挤出信号,而图神经网络恰恰擅长利用“朋友的朋友”这类间接信息。

为了量化稀疏程度,我们常看交互矩阵的覆盖率:

冷启动的本质不是算法笨,而是信息不足。图神经网络推荐给出的答案是:不要只盯着你自己那点记录,去问问你的邻居——这正是下一节要讲的“邻里打听”。

覆盖率=∣{(u,i)∣yui=1}∣∣U∣×∣I∣\displaystyle \text{覆盖率} = \frac{\left|\{(u,i) \mid y_{ui}=1\}\right|}{|U| \times |I|}
覆盖率越低,说明用户-物品交互矩阵越稀疏,冷启动问题越严重。
  1. 分子有交互的边:统计所有真实发生过的用户-物品互动记录,比如点击、购买、收藏,每一条算一次。
    ∣{(u,i)∣yui=1}∣\left|\{(u,i) \mid y_{ui}=1\}\right|
  2. 分母全部可能性:用户总数乘以物品总数,代表这张关系网里所有可能连线的数量。
    ∣U∣×∣I∣|U| \times |I|
  3. 整体含义关系网密度:覆盖率越小,说明绝大多数连线缺失,数据越稀疏,冷启动就越难办。
    覆盖率∈[0,1]\text{覆盖率} \in [0, 1]

GNN核心思想:邻里打听

既然你谁都不认识,那就发动你的邻居。楼下大妈不仅知道“包子铺不错”,还知道“对门小王常去那家面馆”。小王的邻居又认识健身房教练,教练认识一群爱运动的人……一层层打听下去,你虽然一个人都不认识,却已经通过“邻居的邻居”掌握了整个社区的口碑地图。这种“口耳相传”的扩散机制,就是图神经网络做推荐的直觉来源。

技术上的第一步是把用户和物品画成一张图:每个用户是一个节点,每件物品也是一个节点,用户如果购买/点击过物品,就用一条边把它们连起来。这张“用户-物品交互图”描述了谁和谁打过交道。接下来,每个节点都要学一个“嵌入向量”——你可以把它想象成一份贴在门上的个人简介:记录了“这个人是做什么的”。但冷启动用户的简介是空白的,于是 GNN 让每个节点不断向邻居打听,把邻居的简介汇总后更新自己的简介。这个操作就叫做邻居聚合。

一层聚合只能听到直接邻居的声音;堆叠多层,就能让“朋友的朋友”也影响你的画像。图卷积的聚合过程可以写成:

就这样,一个冷启动用户尽管自己没有任何行为,也能通过一层层邻居的消息传递,逐渐拥有一个“道听途说”出来的画像。社区里的八卦越传越广,你的画像也越来越清晰。

hv(k+1)=σ(W(k)⋅Aggregate({hu(k):u∈N(v)}))\displaystyle h_v^{(k+1)} = \sigma\left(W^{(k)} \cdot \text{Aggregate}\left(\{h_u^{(k)} : u \in \mathcal{N}(v)\}\right)\right)
这个公式描述的是:节点 v 每一层都会把邻居 u 的旧嵌入汇总起来,经过一次线性变换和激活,得到自己的新嵌入。
  1. 目标节点 v 的新印象第 k+1 轮更新后,节点 v 的描述信息。
    hv(k+1)h_v^{(k+1)}
  2. 邻居集合图中直接与 v 相连的一阶邻居节点。
    u∈N(v)u \in \mathcal{N}(v)
  3. 聚合操作把邻居们的嵌入向量汇总成一条综合意见。
    Aggregate({hu(k)})\text{Aggregate}(\{h_u^{(k)}\})
  4. 变换与筛选乘以权重矩阵 W 再经过激活函数 σ,决定保留哪些信息。
    σ(W(k)⋅汇总结果)\sigma(W^{(k)} \cdot \text{汇总结果})

LightGCN原理:不化妆的八卦

你可能会想:邻居传话的过程中,是不是要添油加醋、修饰包装一下?传统 GCN 确实这么干——每个邻居的消息都要乘一个权重矩阵、再过一层非线性激活,就像每传一句话都要“化妆”一遍。但研究者发现,在推荐这种协作过滤任务里,这些“化妆”不仅没用,反而容易让模型变得臃肿、难以训练、甚至丢失用户交互中的原始信号。

LightGCN 的思路很朴素:既然是传话,那就原原本本地传,别加工。它把图卷积的“特征变换”和“非线性激活”全部去掉,只保留一动作——对邻居消息做加权求和。权重也不是学出来的,而是根据两端节点的度数算出来:用户如果交互了很多物品,说明他“信息来源广”,单条信息的权重就摊薄;物品同理。这个思想就像社区里传话时,认识一万个人的“社交达人”说的话,不会比只认识三户人家的老实邻居更有分量,因为他的消息被稀释了。

LightGCN 第 k+1 层的传播公式:

传了几轮话之后,每一轮听到的消息都有价值:第 0 层是自己的原始简介,第 1 层是直接邻居的印象,第 2 层是邻居的邻居……LightGCN 最后把各层的嵌入加权融合起来,就像你把大妈的话、小伙的话、以及他们转述的别人的话综合在一起,得出最终判断:

LightGCN 用最朴素的方式验证了一个道理:在推荐里,邻居本身说的话,比任何包装都值钱。社区不需要戏剧化的修辞,只需要真实的口碑扩散。

eu(k+1)=∑v∈Nu1∣Nu∣∣Nv∣ev(k)\displaystyle e_u^{(k+1)} = \sum_{v \in \mathcal{N}_u} \frac{1}{\sqrt{|\mathcal{N}_u|}\sqrt{|\mathcal{N}_v|}} e_v^{(k)}
不同跳数的嵌入按可学习的权重 α_k 合并,既保留了直接信息,又利用了多跳邻域。
  1. 各层印象第 0 层是自身嵌入,第 1 层是直接邻居消息,第 2 层是二阶邻居消息。
    eu(0),eu(1),…,eu(K)e_u^{(0)}, e_u^{(1)}, \dots, e_u^{(K)}
  2. 加权融合每层嵌入乘以权重 α_k 后求和,各跳信息按重要性合并。
    ∑k=0Kαkeu(k)\sum_{k=0}^{K} \alpha_k e_u^{(k)}

GraphSAGE采样:不用认识全小区

现在剧情升级:你搬进的不再是几十户的小区,而是一个有几万户的大型社区。你不可能挨家挨户敲门打听,更不可能认识所有人。怎么办?聪明的做法是:随机抽几家有代表性的邻居问问就好。GraphSAGE 的思路正是如此——它不再执着于看整张图,而是对每个节点只采样固定数量的邻居,用这些“代表”来更新自己。

这种随机采样带来的额外惊喜是“归纳学习”能力。传统图模型(包括 LightGCN 的嵌入)大多属于直推式:每个节点有自己独立的嵌入参数,模型训练完,新来的节点没有现成参数,只能重新训练。而 GraphSAGE 学的是“如何根据邻居的特征生成嵌入”这个函数本身。所以当平台里突然冒出一个全新用户时,模型不需要重新训练,只要把他的邻居采样出来,跑一遍聚合函数,就能立刻得到他的嵌入。这比让新住户从头开始“混脸熟”高效得多。

GraphSAGE 每层的更新公式:

GraphSAGE 就像社区里流传的“打听秘籍”:与其把全小区跑遍,不如聪明地抽样问几户,再总结出一条靠谱的结论。新住户来了也不用慌——秘籍人人可学,现学现用。

hv(k)=σ(W(k)⋅CONCAT(hv(k−1), AGG({hu(k−1)}u∈Sv)))\displaystyle h_v^{(k)} = \sigma\left(W^{(k)} \cdot \text{CONCAT}\left(h_v^{(k-1)},\ \text{AGG}\left(\{h_u^{(k-1)}\}_{u \in \mathcal{S}_v}\right)\right)\right)
核心三步:随机采样邻居、聚合采样结果、将自己与邻居拼接后做变换。
  1. 采样邻居集合从 v 的邻居中随机抽取一组代表,而不是全部邻居。
    u∈Svu \in \mathcal{S}_v
  2. 聚合采样结果聚合函数把代表邻居的嵌入压成一条概要信息。
    AGG({hu(k−1)})\text{AGG}(\{h_u^{(k-1)}\})
  3. 拼接自己与邻居把自己的旧嵌入与邻居概要拼接成更长的向量。
    CONCAT(hv(k−1),AGG(⋅))\text{CONCAT}(h_v^{(k-1)}, \text{AGG}(\cdot))
  4. 变换与激活权重矩阵加非线性,输出本层嵌入。
    σ(W(k)⋅CONCAT(⋅))\sigma(W^{(k)} \cdot \text{CONCAT}(\cdot))

图召回架构:从社区到地图

消息问到了,画像建立了,可社区里店有几十万家,总不能让住户一家家逛。这时候需要一张“地图”:它把每个用户和每件商品都标注到同一个多维空间里,离得近的就是“你可能会喜欢”。这就是图召回架构——先用 GNN 学出用户和物品的嵌入,再通过向量检索快速找出与用户最接近的物品,作为候选送给后续排序模型。

工业界常用的结构是“双塔模型”:左侧用户塔接收用户节点及其邻居消息,输出用户向量;右侧物品塔接收物品节点及其邻居消息,输出物品向量。两个塔各自独立编码,最后用内积或余弦相似度打分。图神经网络在这里扮演的角色,是让两个塔在编码时都能“偷听”到邻居的信息——冷启动用户即便没有行为,也能靠邻居消息生成一个合理的向量。打分公式很简单:

有了打分之后,真正的“地图导航”依赖向量检索:把几百万个物品向量预先建好索引,用户请求到来时,用近似最近邻(ANN)在几毫秒内找出得分最高的数百个候选。从社区口碑到地图导航,图召回完成了从“知道方向”到“锁定目标”的关键一跃。

sim(u,i)=eu⋅ei∥eu∥×∥ei∥\displaystyle \text{sim}(u,i) = \frac{e_u \cdot e_i}{\|e_u\| \times \|e_i\|}
用户嵌入与物品嵌入的余弦相似度越高,说明用户越可能喜欢该物品。
  1. 用户向量与物品向量两者都是多维空间中的点,分别代表用户与物品的兴趣画像。
    eu,ei∈Rde_u, e_i \in \mathbb{R}^d
  2. 点积运算向量点积衡量两个方向的对齐程度,方向越一致数值越大。
    eu⋅eie_u \cdot e_i
  3. 模长归一化除以各自长度,消除向量模长差异带来的偏差。
    eu⋅ei∥eu∥×∥ei∥\frac{e_u \cdot e_i}{\|e_u\| \times \|e_i\|}
  4. 相似度区间结果落在 [-1, 1],越接近 1 表示越匹配。
    sim∈[−1,1]\mathrm{sim} \in [-1, 1]

大规模图训练:城市级调度

当社区扩展成一座千万人口的城市,问题也跟着来了:整张交互图可能有几十亿条边,任何一台机器都放不下。你不可能把全城的住户关系都装进内存再慢慢传播消息。大规模图训练要解决的核心矛盾就在这里——如何在大图上高效地完成 GNN 的消息传递。

第一个方案是小批采样。既然图太大,就每次只取一小块子图来训练,类似抽查几个街区的口碑。具体做法是:随机选一批中心节点,然后沿着边向外采样它们的邻居,形成一个小型子图;模型只在这个子图上做聚合和梯度更新。这样每步计算量可控,显存也不再爆炸。第二个方案是分布式训练:多台机器各自负责不同子图的聚合计算,定期把梯度汇总到参数服务器统一更新,就像各街区把口碑报告汇总到城市大脑。

训练目标也有讲究。推荐场景常使用 BPR 损失,它希望模型给正样本(用户喜欢过的物品)的分数明显高于负样本(随机采样未交互的物品):

训练完成后还有落盘优化:把学好的用户塔与物品塔向量导出到向量索引中,供在线服务加载。城市级的社区网络,就这样被拆解成一个个可以伸缩的子图,再汇总成一张可行的推荐地图——这就是图神经网络从论文走向工业级应用的必经之路。

LBPR=−1∣B∣∑(u,i,j)∈Bln⁡σ(y^ui−y^uj)+λ∥Θ∥2\displaystyle \mathcal{L}_{\text{BPR}} = -\frac{1}{|\mathcal{B}|} \sum_{(u,i,j) \in \mathcal{B}} \ln \sigma\left(\hat{y}_{ui} - \hat{y}_{uj}\right) + \lambda\|\Theta\|^2
这个损失函数体现的排序思想:比“预测对”更重要的是“把喜欢的排在不喜欢的前面”。
  1. 三元组样本每条训练样本由用户 u、正样本物品 i、负样本物品 j 组成。
    (u,i,j)∈B(u,i,j) \in \mathcal{B}
  2. 分数差模型给正样本的预测分要高于负样本。
    y^ui−y^uj\hat{y}_{ui} - \hat{y}_{uj}
  3. 负对数与 Sigmoid将分差用 Sigmoid 映射到概率后取负对数,分差越大损失越小。
    −ln⁡σ(y^ui−y^uj)-\ln \sigma\left(\hat{y}_{ui} - \hat{y}_{uj}\right)
  4. 正则项约束参数规模,防止模型在大图上过拟合。
    λ∥Θ∥2\lambda \|\Theta\|^2

AI 应用场景

电商新用户首屏推荐

阶段:召回与粗排

解决的问题:新用户没有点击和收藏记录,传统协同过滤无法推荐;平台需要把“猜测用户兴趣”变成“借助相似人群的消费图谱推测兴趣”。

具体案例:某电商 App 用户完成注册后,系统先在用户-商品交互图中定位到一批与其手机型号、地域、注册渠道相似的“邻居用户”,用 LightGCN 聚合这些邻居的消费偏好,生成冷启动用户的嵌入向量,再通过向量检索召回首屏商品。用户每产生一次点击,反馈立即写回交互图,下一轮推荐就会更精准。

内容平台新视频冷启动

阶段:多路召回

解决的问题:新视频上传后没有任何播放数据,无法判断该推荐给谁;传统模型只能靠内容标签做粗糙匹配。

具体案例:视频平台上,一个新发布的短视频被建模为新节点,通过上传者的粉丝关系与同类型热门视频建立交互边。GraphSAGE 利用归纳学习能力,采样粉丝群体和同类视频作为邻居,聚合出该视频的嵌入,从而在冷启动阶段就能被召回进相关用户的推荐流,快速积累初始播放量。

社交关系辅助本地生活推荐

阶段:排序模型特征增强

解决的问题:用户 A 与好友 B 社交关系紧密,但 A 从没去过 B 常去的餐厅;传统排序模型无法捕捉这种“好友背书”型交互链路。

具体案例:本地生活平台把好友关系引入用户-商家交互图,LightGCN 传播两层后,A 的嵌入中自然地携带了 B 对某些餐厅的偏好信号。在线排序时,A 看到“你的好友来过这家店”的推荐卡片,点击率明显高于无社交信号的候选。模型从“猜你喜欢”升级为“你朋友喜欢,你大概率也喜欢”。

Python 演示

python41 行
import numpy as np def build_adjacency(interactions, num_users, num_items):    """构建用户-物品二部图邻接矩阵:行索引用户,列索引物品"""    A = np.zeros((num_users, num_items))    for u, i in interactions:        A[u, i] = 1.0    return A def normalize_adjacency(A):    """对称归一化:模拟LightGCN传播系数"""    user_deg = A.sum(axis=1, keepdims=True) + 1e-6    item_deg = A.sum(axis=0, keepdims=True) + 1e-6    return A / np.sqrt(user_deg) / np.sqrt(item_deg) def lightgcn_propagate(A, user_emb, item_emb, layers=3):    """多层邻居传播:嵌入沿交互图流动"""    for _ in range(layers):        user_emb = A @ item_emb + user_emb        item_emb = A.T @ user_emb + item_emb    return user_emb, item_emb def recommend_cold_user(user_emb, item_emb, top_k=5):    """用聚合后的用户向量计算物品内积得分并取TopK"""    scores = user_emb @ item_emb.T    return np.argsort(scores)[::-1][:top_k] if __name__ == "__main__":    # 模拟3个新用户与10个物品,仅有5条交互记录    interactions = [(0, 2), (1, 5), (1, 7), (2, 0), (2, 3)]    A = build_adjacency(interactions, num_users=3, num_items=10)    A_norm = normalize_adjacency(A)    rng = np.random.default_rng(42)    user_emb = rng.normal(size=(3, 16))    item_emb = rng.normal(size=(10, 16))    # LightGCN传播3层,让邻居消息扩散    user_emb, item_emb = lightgcn_propagate(A_norm, user_emb, item_emb)    # 模拟一个完全无交互的新用户:用全体用户聚合向量代替    cold_user = user_emb.sum(axis=0)    rec = recommend_cold_user(cold_user, item_emb, 5)    print("冷启动推荐物品索引:", rec)
目的:用 NumPy 从零实现 LightGCN 的核心传播逻辑,展示冷启动用户如何通过邻居聚合获得推荐候选。
  1. A = np.zeros((num_users, num_items))初始化一张全零的交互矩阵,行是用户、列是物品。
  2. A[u, i] = 1.0用户 u 和物品 i 发生过交互,就在对应位置打上标记。
  3. return A / np.sqrt(user_deg) / np.sqrt(item_deg)对称归一化,降低热门节点的传播权重。
  4. user_emb = A @ item_emb + user_emb用户沿着交互边聚合物品的消息,并保留自身原始信息。
  5. item_emb = A.T @ user_emb + item_emb物品反过来聚合用户的已更新消息,形成双向传播。
  6. cold_user = user_emb.sum(axis=0)模拟无历史的新用户,用聚合邻居向量作为其嵌入。
  7. scores = user_emb @ item_emb.T用户向量与所有物品向量内积打分。

常见误区

误区我只要把社交关系、相似人关系当成几个额外特征拼进 FM 或 DNN 里,效果应该和图神经网络差不多。

正解特征拼接是“画了一张关系清单”,而 GNN 是“让消息沿着关系网流动”。前者只是让模型知道“你们认识”,后者让邻居的信息在每一层都参与嵌入的构建。就像你只看通讯录不会知道朋友的口味,但挨个打电话问一遍就会知道。GNN 的多层传播是结构化归纳,不是简单的特征堆叠。

为何常见:因为很多推荐模型都在做特征工程,大家习惯性地认为“关系也是一种特征”,忽略了图结构的信息传递本质。

误区LightGCN 把邻居消息传得越多层,用户画像就越丰富,效果应该一直提升。

正解层数过深会导致“过平滑”——所有节点互相传话传太多遍,嵌入逐渐趋同,就像社区里同一句话传了几百遍后,每个人说的都一样了,推荐结果失去个性化差异。实践中 LightGCN 通常 2-3 层效果最佳。

为何常见:直觉上“多打听几层没错”,但忽略了消息过度稀释带来的同质化风险。

误区LightGCN 是直推式的,GraphSAGE 是归纳式的,想用哪个只能二选一。

正解二者解决的是不同环节的问题。LightGCN 提供简洁有效的邻居加权聚合范式,GraphSAGE 提供“采样 + 聚合 + 归纳”的工程框架。工业界完全可以在双塔召回里用 GraphSAGE 的采样方式训练 LightGCN 风格的聚合器,取两者之长。

为何常见:因为资料常把这两种模型分开介绍,读者容易把它们当成对立的路线,没有意识到它们可以在架构上组合。

误区部署了图神经网络推荐,冷启动问题就彻底消失了。

正解GNN 只是把冷启动从“完全无信号”变成“弱信号可用”——它依赖图中邻居信息的充分性。如果一个全新用户连邻居都没有(比如早期平台、极短会话),交互图本身也是一片空白,GNN 同样无法变出信息。冷启动的根治还需要结合内容特征、试探性探索等策略。

为何常见:对 GNN 寄予过高的期望,忽略了它作为“消息传递机制”的数据依赖。

面试题

Q1. 冷启动问题的本质是什么?

单选题 · easy

  • A.交互数据稀疏导致画像缺失← 正确答案
  • B.用户主观不喜欢新物品
  • C.算法训练迭代速度过慢
  • D.服务器并发处理能力不足

答案:A。冷启动的本质是缺少用户或物品的历史交互数据,无法建立个性化画像,就像新住户谁也不认识。B 是主观态度问题,C 是工程性能问题,D 是系统容量问题,都不是冷启动的核心矛盾。

Q2. 图神经网络做推荐最核心的假设是什么?

单选题 · easy

  • A.相似用户必然喜欢相似物品
  • B.邻居消息传递影响节点表征← 正确答案
  • C.物品特征必须由人工标注
  • D.交互记录必须按时间排序

答案:B。GNN 的核心是“邻居聚合”——节点通过聚合邻居的消息更新自己的嵌入,就像向邻居打听信息。A 是协同过滤的假设而非 GNN 特有;C 和 D 分别涉及特征工程和时间建模,不是图神经网络的核心机制。

Q3. LightGCN 相比传统 GCN 最大的不同是什么?

单选题 · mid

  • A.引入多头注意力加权机制
  • B.去除特征变换与非线性激活← 正确答案
  • C.增加更多的图卷积层级
  • D.使用文本特征替代交互图

答案:B。LightGCN 把 GCN 里的特征变换矩阵和非线性激活全部去掉,只保留邻居加权求和,就像传话时不添油加醋。A 是 GAT 的做法,C 只是层数差异,D 是换输入而不是模型结构变化。

Q4. 下列哪些属于缓解冷启动的有效方法?

多选题 · hard

  • A.借助交互图高阶邻居传播← 正确答案
  • B.跨域迁移用户其他平台行为← 正确答案
  • C.对候选物品做暴力双层枚举
  • D.使用 GraphSAGE 采样聚合← 正确答案

答案:ABD。高阶邻居传播让冷启动用户借助“朋友的朋友”获得信号,跨域迁移引入外部平台行为补充数据,GraphSAGE 通过采样聚合让新节点快速获得嵌入。暴力枚举只是扩大候选集,并没有解决“不知道用户喜欢什么”的信息缺失问题。

Q5. GraphSAGE 的“归纳学习”能力具体指什么?

单选题 · mid

  • A.推理时直接处理未见新节点← 正确答案
  • B.训练中记住所有历史样本
  • C.为每个节点学习独立嵌入
  • D.仅能在训练集上进行预测

答案:A。归纳学习让模型学习“如何从邻居生成嵌入”的函数,因此未见过的新节点也能通过采样邻居得到嵌入。B 是记忆而非泛化,C 是直推式模型的做法,D 与归纳能力完全相反。

Q6. 图召回架构中双塔模型的两个塔分别编码什么?

多选题 · mid

  • A.用户的兴趣偏好特征← 正确答案
  • B.物品的属性内容特征← 正确答案
  • C.图卷积的传播轮数
  • D.向量检索的候选数量

答案:AB。双塔模型左侧用户塔编码用户侧特征及邻居消息,右侧物品塔编码物品侧特征及邻居消息,两塔输出向量后做内积打分。C 的传播轮数是超参数,D 的候选数量是检索配置,都不是塔的编码对象。

Q7. 邻居聚合中对称归一化系数的作用是什么?

单选题 · hard

  • A.防止高度数节点主导信息传播← 正确答案
  • B.加速模型收敛减少训练步数
  • C.让损失函数曲面更加平滑
  • D.增加隐藏层特征向量维度

答案:A。系数是两端度数开根号的乘积,热门节点连接多、单条消息权重被摊薄。就像认识一万个人的社交达人的每条消息,影响力不会盖过普通邻居的整体意见。B/C/D 分别涉及训练速度、损失曲面和网络宽度,与归一化无关。

Q8. 大规模图训练采用“小批采样”的核心动机是什么?

单选题 · mid

  • A.整图无法装载进 GPU 显存← 正确答案
  • B.单参数精度需要大幅提升
  • C.减少邻居聚合传播的深度
  • D.保证在线推理延迟稳定

答案:A。工业级交互图包含几十亿条边,整图加载进显存不现实,因此按中心节点采样子图作为小批。B 是数值精度问题,C 是模型深度问题,D 是在线服务问题,它们都不是小批采样要解决的主要矛盾。

Q9. 关于 GNN 推荐中的“过平滑”现象,正确的说法有哪些?

多选题 · hard

  • A.过深网络导致节点嵌入同质← 正确答案
  • B.推荐结果多样性因此受损← 正确答案
  • C.增加非线性激活可彻底根治
  • D.LightGCN 控制层数可缓解过平滑← 正确答案

答案:ABD。层数过深时消息过度稀释,所有节点嵌入趋于一致即过平滑,推荐变得千篇一律,因此 LightGCN 通常控制在 2-3 层。C 错误:非线性激活不能彻底解决问题,深度才是过平滑的根源。

Q10. 下列最能代表“物品冷启动”的场景是哪个?

单选题 · easy

  • A.新上架商品缺乏用户交互记录← 正确答案
  • B.老用户经常更换登录设备
  • C.数据库连接出现超时错误
  • D.推荐系统整体点击率下滑

答案:A。物品冷启动指新物品没有任何曝光和交互数据,系统不知道它该推荐给谁。新上架商品正是这种情况。B 是用户环境问题,C 是系统稳定性问题,D 是效果指标问题,均与物品冷启动无关。