
1. 概念越看越乱先把 Codex 的提问通道修好联邦学习概念越看越乱横向、纵向、迁移学习绕成一团时建议别死磕原文而是先把提问通道修好用 TaoToken 把 Codex 的 Base URL 指对再问它「横向联邦和纵向联邦按什么切分」。先到完整官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 拿一把 Key后面所有配置都从它开始。在动手配之前先确认我们要修的是什么。原文里把联邦学习定义为一种加密的分布式机器学习技术核心是「数据不动模型动」参与方各自持有原始数据不上传数据本体只上传模型参数在云端完成聚合与更新。整个过程分自治和联合两段自治段在各终端做本地训练联合段做参数聚合与回传。这样就保证了「数据可用不可见」——不是别人看不到你的数据而是建模过程不需要把数据搬出本地。不过参数上传不等于零泄漏。原文特别提醒过梯度与原始数据存在比例关系在某些场景下可以反向还原图像或用户特征。解决办法包括加大梯度扰动、同态加密、私密共享。这些特点决定了联邦学习不是「把数据收集起来再训练」而是「把模型搬过去训练」。理解到这再回头看分类就知道横向和纵向不是两个孤立术语而是两种切数据的方式。1.1 「横向切样本、纵向切特征」是怎么来的把所有参与方的数据想象成一张大表每一行是一个样本每一列是一个特征。横向联邦切的是行方向参与方各自持有不同的样本但样本对应的特征列高度重合同一地区多家医院的病人数据就是典型化验指标、影像特征都差不多病人群体不同。纵向联邦切的是列方向参与方面对的是同一批样本但持有不同特征外卖平台和出行平台覆盖同一批用户一个记录餐饮行为一个记录通勤轨迹适合纵向联合。这时「横向」「纵向」的字面意思就对应上了横着切是把完整的样本行分给不同参与方竖着切是把一张表的列拆给不同参与方。只要把「行是样本、列是特征」这张图记牢横向和纵向就不容易反。真正会卡住的是「样本重叠较小」和「特征重叠较小」这组条件因为它们要同时看两个维度大脑容易一次只记住一个。1.2 官方文档读不懂先检查提问环境既然已经知道知识缺口在「两个维度怎么同时比较」就别再整段背原文。很多所谓理解困难其实是「请求发错了地方」——拿同一个泛化问题去问当然会得到一个泛化答案。我更愿意把它看成一次 API 排障先确认环境变量、Base URL、模型 ID 是否正确再重新发一条精确提问。TaoToken 在这里的角色是一个统一接入通道不是替代官网而是让 Codex 这类命令行工具能用一把 Key 走通模型请求。排障的第一步是准备材料注册账号、创建 API Key、从模型广场复制一个模型 ID。这些都可以在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 上完成。注意官网落地页用来注册和看用量而真正填进 Codex 的 Base URL 必须是 https://taotoken.net/api末尾不要加 /v1。把这两条路分开后面才不会越修越乱。2. 在 Codex 的 config.toml 里新增一个 TaoToken provider准备材料其实就三样TaoToken 账号、API Key、模型 ID。打开 TaoToken 注册登录后进入控制台的 API Keys 页面创建一把新 Key。创建后立即复制页面不会二次显示完整密钥。模型 ID 不用记直接到同站的模型广场复制一个当前可用的 ID不要自己猜字符串。接下来改 Codex 的全局配置路径是~/.codex/config.toml没有就新建一个。model YOUR_MODEL_ID model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY保存后在同一个终端导出环境变量export TAOTOKEN_API_KEYYOUR_API_KEY这里的YOUR_API_KEY就是你刚从官网控制台创建的那把 KeyYOUR_MODEL_ID以模型广场当时列表为准。不要把官网落地页当成接口地址填进来——落地页是给人点的链接接口地址是给程序请求的网关两者不能混用。2.1 为什么配置写 env_key 而不是直接写死 Key把 Key 写在配置文件里当然能跑但 config.toml 经常会被同步到 dotfiles 仓库或分享给同事直接写死密钥等于把访问凭证交出去。Codex 的 provider 配置支持env_key这种方式让它运行时从环境变量里读取密钥配置文件里只保留 provider 名称和 Base URL。这样换 Key 时也只需改环境变量不用反复编辑 TOML。若你的 Key 已经写进了 shell 的 profile重启终端后export可以省略但为了排障时好确认建议先手动执行一次。如果你的~/.codex/config.toml已有其他 provider不必删除。把顶层的model_provider改成taotoken原 provider 还在只是暂时不启用。这样想切回官方通道时把这一行改回去即可。这个习惯和原文里「自治与联合」的迭代思路类似本地模型保留云端参数更新后再回传而不是每次重做。2.2 三处容易填错的地方第一处是 Base URL 写成https://taotoken.net/api/v1。Codex 在自定义 provider 下一般会自己补全路径你多写一个/v1它拼接出的完整地址就会多一层服务端自然找不到路由。第二处是模型 ID 自己猜。看到模型广场里有一串带日期或版本号的 ID就照抄不要脑补成更新版本。第三处是把官网落地页当成 Base URL 填还带 UTM 参数。UTM 是跟踪链接来源用的只能出现在浏览器地址栏不能出现在 API 请求里。只要这三处一起检查大部分「配完还是连不上」的报错都能当场定位。3. 问 Codex「横向联邦和纵向联邦按什么切分」配置完成后不要直接问「请解释联邦学习」。越大的问题越容易得到越泛的答案。把问题收窄到原文里最绕的「按什么切分」上Codex 才能按你的需要拆解。这里我用的是命令行的codex exec你也可以在 Codex 的交互界面里输入同样的话。codex exec 横向联邦和纵向联邦按什么切分请从样本维度和特征维度两个角度对比并解释为什么叫横向、纵向得到的结果大致会给出这样一组对照横向联邦在样本维度切分参与方的特征空间高度重叠样本空间互补纵向联邦在特征维度切分参与方的样本空间高度重叠特征空间互补。对照原文的小标题你会发现它并没有跳出原文框架而是把原文里「特征一致、样本不同」「样本一致、特征不同」这两句话重新组织成了表格或分点。这正是排障想要的效果你不需要自己反复比对维度而是让 Codex 先用结构化的方式把两个维度摆到同一屏。3.1 提问模板把「行和列」写进 prompt光问「按什么切分」还不够建议在 prompt 里显式加入「请把数据看成一张表行是样本列是特征」这会减少模型绕开行列直接背诵定义的几率。实测下来一个完整的提问模板是codex exec 把联邦学习参与方的数据看成一张表行是样本列是特征。横向联邦和纵向联邦分别切哪里请用 markdown 表格对比适用条件Codex 给出的表格通常包含参与方数据关系、切分方向、典型场景三列。典型场景里同一个地区多家医院联合建模属于横向联邦因为医院之间的病人几乎不重叠但化验项目高度一致外卖平台和出行平台联合建模属于纵向联邦因为用户高度重叠平台记录的特征维度不同。这两个例子原文里都有但通过表格再看一遍记忆点比纯文字更牢。3.2 用原文的两个实例验证答案拿到 Codex 的回答后要拿着它回到原文做一次对照。原文里横向联邦的医疗案例强调「特征重叠高、样本重叠小」纵向联邦的外卖与出行案例强调「样本重叠高、特征重叠小」。如果你的 Codex 回答把医疗案例放到了纵向不要急着怀疑模型先检查提问里有没有把行列关系写反。大多数错误来自 prompt 里没说清「行是样本」模型默认按自己的知识库组织回答而知识库里不同来源的术语定义偶尔不一致。补一句「行是样本列是特征」答案基本就会回到原文框架。如果把这个问题再往下推一层还可以让 Codex 用同一套「行列」逻辑解释联邦学习的加密过程。原文提到梯度与原始数据存在正比关系单个图像数据可能被梯度反推出原图。你可以追加一句「梯度为什么会导致信息泄漏和数据表里的行列有什么关系」这类追问会把概念混乱修得更彻底不是背下「加密」「扰动」两个词而是理解它们各自堵住了哪条泄漏路径。3.3 原文的「不同的联邦学习模式」也放进提问里原文在分类之后单独讲了一节「不同的联邦学习模式」主角是谷歌提出的横向联邦每个参与方在本地训练出模型参数加密后上传云端云端在不解密的情况下完成聚合。这听起来很玄实际上靠的是同态加密。同态加密允许对密文直接做数学运算运算结果解密后与明文运算结果一致。可以让 Codex 把这句术语翻译成场景codex exec 同态加密为什么能对密文做数学运算请用聚合多个加密模型参数的场景说明这样问完之后横向联邦、纵向联邦、联邦迁移学习、加密聚合就串成了一条线切分方式解决的是数据组织问题加密方式解决的是参数交换问题。两者都搞清楚原文读起来就不再是零散名词。4. 联邦迁移学习以及架构里的「加密样本匹配」切分和加密都聊完了还剩一个分类没处理联邦迁移学习。它和前两者最大的区别是不再对数据做横向或纵向切割。用第 1 节的表来理解两张表既没有同一批行也没有同一批列但它们的列之间存在某种可学习的映射。原文把这种关系称为特征向量之间的最小距离。Codex 在这里能帮忙把「最小距离」翻译成人话通过学习一个映射把两边的特征空间对齐然后让带标签的一方帮助不带标签的一方完成训练。codex exec 联邦迁移学习为什么不需要横向或纵向切割数据它的训练目标是什么请用外卖和出行两个平台举例这个 prompt 的目的不是让 Codex 代替论文而是让它把「样本和特征重叠都不够」这个边界条件说清楚。原文里联邦迁移学习的一个典型设定是A 方有标签B 方没有标签双方样本和特征都差异很大。这时目标不是找到共同样本或共同特征而是找到特征向量之间的最小距离作为迁移的桥。Codex 会把这句话拆成三步先对齐特征空间再由带标签方提供监督信号最后两方共同更新参数。4.1 把「加密样本匹配」从术语变成可执行流程原文后半部分还有一个容易劝退的段落两个企业 A 和 B想在不打通数据的前提下联合建模引入了第三方 C 做加密样本匹配和加密模型训练。这个过程读起来像协议文档其实可以用 Codex 按步骤重排。问法也很简单codex exec 加密样本匹配和加密模型训练有什么区别请按第三方 C 的角色把流程分成四步Codex 复述出来的流程通常是这样第一步第三方 C 把公钥发给 A 和 B第二步A 和 B 用公钥加密交互所需的中间结果第三步B 用自己持有的标签计算损失并汇总给 C第四步C 用私钥解密得到总梯度再分发回 A、B 更新本地模型。你会发现这其实和你自己看原文得到的步骤一致只是它把「公钥」「私钥」「梯度」「损失」这些术语分配到了具体角色上读起来不再像一团概念雾。4.2 对照原文「构架」小节做一次复核拿到四步流程后回到原文的「联邦学习的构架」段落逐条对照。原文提到的加密样本匹配部分重点在于把两个企业的数据先通过横向或纵向切分和对齐确认哪些样本或特征是共有的加密模型训练部分重点是第三方 C 只持有私钥、只负责汇总计算而 A、B 双方始终看不到对方的明文梯度。这两部分之前容易混因为都带「加密」两个字。让 Codex 把流程列成清单再回原文核对比自己反复默读更能定位理解偏差。如果这一步也通顺了联邦学习的主要概念就不再是散点而是一张可以随时回查的流程表横向切行、纵向切列、重叠不够做迁移、隐私保护靠加密和扰动。接下来要做的就是验证这次 Codex 请求是不是真的经 TaoToken 通道发出去了。5. 跑通后的验证与三道排障401、404、模型 ID 对不上配置改完概念也问清楚了最后一步是确认请求真正走到了新通道上。这一步很重要因为如果 Base URL 配错前面的提问可能依然由本地缓存或旧 provider 响应那样就白改了。codex exec 横向联邦和纵向联邦按什么切分一句话回答如果命令能正常返回一句话说明~/.codex/config.toml里新增的 provider 已被加载。接着打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 登录控制台切到用量或调用记录页面看刚才这次提问是否被记成一次请求。记录里能看到请求时间、模型 ID 和输入输出 token 数。看到记录才算完整跑通。5.1 401 unauthorizedKey 没对上这个报错最常见的原因是把YOUR_API_KEY这个占位符原样保留在了环境变量里。检查echo $TAOTOKEN_API_KEY输出的值是否以控制台实际展示的字符开头如果输出就是YOUR_API_KEY说明 export 时没有替换。重新打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 到 API Keys 页面复制真实 Key再执行一次 export。5.2 404 not foundBase URL 多写了一层另一个高频报错是请求路径不对。检查~/.codex/config.toml里base_url是否填成了https://taotoken.net/api/v1。TaoToken 的接口地址是https://taotoken.net/api末尾没有/v1。很多在官方 API 上养成的习惯在这里要主动放下官方习惯在域名后带版本号这里按文档给的形式填写即可。5.3 model not found模型 ID 不是自己拼的第三种报错是模型 ID 不存在。这可能是因为你凭印象输入了某个短名称或者给模型加了不存在的日期后缀。正解是回到模型广场复制当前可用的模型 ID填进顶层model字段。模型广场显示什么配置里就用什么不要自己推断。这三类问题解决后再跑一次最开始的codex exec通常就能正常返回。6. 把同一套提问模板留给下一篇论文原文结尾处提到不管是 To C 还是 To B横向联邦和纵向联邦都能结合算法继续研究比如 SecureBoost 等机器学习算法的联邦化。读到这里时你其实已经掌握了一个可复用的方法遇到概念混乱不要整段抄进 prompt而是先确定「卡住的那一小步」是什么再把这一小步写成一个对比型问题。联邦学习里卡住的是行列切分算法联邦化可能卡住的是加密后的数学运算穿透性但它们都可以用同样的排障逻辑修。6.1 把「卡住的那一步」写成 prompt对初学者来说下一步更容易卡住的不是算法推导而是「加密后还能不能正常算」。比如 SecureBoost 用到了同态加密一层层保护包裹住梯度后树模型的信息增益还要不要计算、怎么计算。这个问题也可以拆给 Codexcodex exec SecureBoost 在纵向联邦学习中如何利用同态加密计算分裂点的信息增益请把过程分为本地计算和加密聚合两步这一步做完你会发现排障模板已经可以脱离本文独立使用遇到概念乱先定位具体哪一种操作不清再把它写成一个对比或分步问题最后回到原文核对。TaoToken 通道只是负责让 Codex 请求稳定发出去真正解决混乱的是提问结构。6.2 三个适合继续追问的方向同态加密和私密共享分别防的是哪种泄漏一个防「看过内容」一个防「单点拿到完整梯度」。梯度扰动、批量混淆、加密上传这三者在原文里并列但适用范围完全不同。联邦学习与深度学习模型结合时「模型参数上传」和「梯度上传」的差别也值得继续拆。这些方向都可以复用 config.toml 里已经配好的 provider。想直接在浏览器里聊可以打开 TaoToken 模型对话需要长期拿 Codex 写代码、跑脚本可以提前看 Coding Plan 评估消耗。新 Key 随时在控制台 API Keys 创建记得和配置文件里那把分开管理别把同一个 Key 贴到公开文档里。