
镜像mirror是什么镜像就是别人服务器上存的一份 拷贝副本放在离你更近的地方让你下载更快。为什么要用镜像官方源在国外网络波动大、速度慢下 2 GB 的 PyTorch 这种大包经常卡住清华、阿里、中科大等国内镜像把包同步到国内服务器速度通常快十几倍甚至几十倍。补充镜像只解决下载慢的问题和软件本身、版本更新没关系镜像会定期从官方源同步最新包。torch到底是什么PyTorch 是深度学习框架它只做三件事但每件都很关键能力通俗解释张量Tensor多维数组就是能放在 GPU 上算的 numpy 数组自动求导autograd你只写前向计算它自动帮你算梯度——这是论文里 GRL 能工作的前提GPU 加速把矩阵运算丢给显卡并行算比 CPU 快几十倍注CUDA是 NVIDIA 的 GPU 计算平台。Batch冒烟测试是什么Batch批次模型一次训练里打包一起喂进去的若干个样本batch size就是这批样本的数量。冒烟测试smoke test一套最基础、跑得飞快的验证 —— 先拿一两个 batch 跑通整个训练 / 推理流程确认代码不报错、梯度正常、能出结果再去跑完整的大规模训练。打个比方你要开一家新店做大规模促销完整训练先拿 10 个熟客免费试吃几道菜冒烟测试看看厨房流程、上菜速度、收银系统有没有 bug。菜单没问题、锅灶能转再开门接大客流。为什么要做冒烟测试深度学习一次完整训练可能跑几小时到几天钱和 GPU 都烧不起。如果代码里有维度不匹配、loss 算错、梯度消失等低级 bug等跑到一半发现就全白费了。冒烟测试用极小的数据量、极少的步数先跑一遍几分钟内暴露问题。demo是什么简单大白话小样、演示版本用来展示功能的简易程序。通俗举例论文 demo写一小段简单代码跑出来给你看这个模型能干什么快速演示效果不是完整正式实验。runs_full_e1/ctrl_seed42/result.json大白话拆解先把文件名拆开每一段是什么意思runs_full_e1/ctrl_seed42/result.jsonruns_full_e1runs一般存放训练输出结果的文件夹跑实验生成的东西都放这里full 全量数据集不是少量 demo 小样e1epoch 1也就是只跑了完整 1 轮的训练就是你现在正在跑的那一轮ctrl_seed42ctrl这里代表把 CTRL 当做测试目标域训练不用 CTRL 的数据拿它当看不见的新模型做测试seed42随机种子 42深度学习训练有随机因素数据打乱、初始化设置 seed42保证实验可以复现别人跑也能得到差不多的结果。result.json.json是一种文本格式文件像字典一样存训练跑完之后的各项数字结果。这个文件里面一般会存什么内容EAGLE 场景打开之后里面是一堆键值对大概存这些训练 loss、验证 loss 变化在测试集上面的指标AUROC、TPR论文里用的评测分数使用的参数batch 大小、学习率、各个 λ 超参数、epoch 数目域设置哪些域用来训练哪个域作为目标测试域⚠️注意这个要等 1 个 epoch 完整跑完才会生成完整内容。 训练还没结束的时候这个文件可能是空的、或者只写了一半不要拿中途的内容当结果。JSON 文件读音杰‑森大白话讲解JSON 就是一种存数据的文本文件专门给程序读的人也可以打开看。后缀名字是.json就像 txt、docx 一样是文件类型。想象一个对比.txt普通记事本随便写文字没有固定格式。.json有严格规矩的记事本存的是一条条 “名字‑对应值” 的数据。✅ json 结构化的记事本专门存键值对数据。md 文件后缀.md全称 Markdown读音马克当大白话一种专门用来写笔记、写文档、写实验记录的简易文本文件。对比一下你见过的文件.txt纯记事本全部是文字不能做标题、加粗、列表。.docxWord功能很重可以调字体颜色、排版文件体积大。.md介于两者中间写简单标记符号就能实现加粗、标题、列表但是文件本身还是纯文本。batch、epoch 通俗解释1. Epoch轮次一个 epoch 把全部训练数据集完整过一遍epoch1所有训练样本模型只看 1 遍就停止训练。epoch3全部数据集从头到尾读 3 轮。举个例子你的训练集约11.3 万条文本epoch111.3 万样本全部训练一轮训练结束。epoch311.3 万样本反复学 3 遍。作用模型多看几遍数据慢慢记住数据规律但 epoch 太大也会过拟合死记训练集泛化变差。 你的问题你只跑 1 轮论文跑 3 轮对抗训练还没磨合好就停止了。2. Batch size批次大小常简称 batch每一次参数更新前扔进 GPU 同时计算的样本数量。batch4GPU 一次性读 4 条文本算损失然后更新一次模型权重。batch16一次性同时读 16 条文本算损失更新权重。和显存的关系你的痛点每条文本要存张量、梯度。样本越多占显存越高。你的 4G 笔记本 3050batch8直接OOM显存爆炸只能用 batch4。为什么 batch 大小会严重影响 EAGLE 这种对比 / 域对抗模型大 batch同时看到更多样本梯度更稳定更新方向准。小 batch4每次只有 4 个样本梯度噪音很大更新很抖很难收敛。尤其 EAGLE 带对比学习对比学习需要一批里面有足够多负样本。batch4 时一批里面负样本太少对比损失学不出有用特征。 你的实验现象Data‑Mix 基线 loss 卡死在 0.6955训练准确率不动就是典型小 batch 优化失败。3. 衍生训练步数 step你的报告1 epoch 有 28853 步\(\text{step步数}\frac{\text{全部训练样本数}}{\text{batch size}}\)你的训练集 113000 条batch4 \(113000 ÷4≈28250\)和报告 28853 基本对上。 每一个 step读一个 batch算损失。 每跑完全部 step就是 1 个 epoch。3. 衍生训练步数 step你的报告1 epoch 有 28853 步\(\text{step步数}\frac{\text{全部训练样本数}}{\text{batch size}}\)你的训练集 113000 条batch4 \(113000 ÷4≈28250\)和报告 28853 基本对上。 每一个 step读一个 batch算损失。 每跑完全部 step就是 1 个 epoch。4. 梯度累积之前提到的救小显卡的技巧显卡只能跑 batch4想要模拟论文 batch16 的效果梯度累积 连续跑 4 个 batch不更新权重把 4 批梯度累加起来最后再统一更新一次参数。实际每一步输入还是 4 条显存不会涨effective batch size等效 batch 4 × 4 16和论文一致⚠️注意对比损失、域对抗损失用梯度累积要小心代码实现不能直接无脑复制普通分类代码。模型是什么模型不是代码是一个独立的文件或者一堆文件里面存的是训练好之后的所有参数权重。代码是 “菜谱、步骤”模型文件是 “炒好的菜”。打个比方很好懂假设你要训练一个模型判断句子是不是正面情绪Python 代码.py/notebook菜谱 写好了网络结构几层 Transformer、RoBERTa、激活函数、怎么算 loss、怎么反向传播告诉电脑该怎么做。 菜谱本身没有味道没有结果你换一份食材它就能重新做一遍。数据集食材训练过程炒菜的过程模型文件.pth/.bin/.h5 /ckpt炒好的成品菜菜里面不包含菜谱只有炒好之后的状态。 你拿到这盘菜模型文件必须搭配原来那份菜谱网络结构代码才能拿它来做预测。拆开看里面装了啥打开这个文件你看不到可读文字是二进制文件。里面存的就是一堆数字每一层的权重 weight偏置 bias各种可学习参数重点区分三个东西复现论文最容易混淆网络结构代码定义模型长什么样多少层、头数、维度 → 可以反复跑文本你能看懂模型权重文件导出的模型调好的数字 → 二进制打不开、不能直接读单独拿出来啥也干不了配置文件 config.jsonHuggingFace 经常有 → 记录模型超参hidden_size、num_attention_heads 等等相当于菜谱的备注再帮你串一遍整套逻辑帮你打通之前所有疑问代码规定模型长啥样、怎么计算框架 / 模具权重框架里面填好的一整套数字参数学到的知识训练不断修改权重让预测更准保存模型把调好的这一大包权重数字存成文件推理框架不变加载这包权重直接做预测权重 模型学到的重要程度分数训练 调分数模型文件 存好的一整套分数偏置bias是什么好嘞咱们接着刚才打分的例子讲偏置 bias很好理解。刚才的例子分数 “很好” × 权重 “很差” × 权重但这里有个问题如果一句话里既没有 “很好”也没有 “很差”那总分直接等于 0。 有时候我们想让它有一个基础分这个基础分就是bias偏置。改写公式大白话版最终分数 词 1 × 权重 1 词 2 × 权重 2 bias举个例子 bias -1没有任何正负向词语的时候基础分就是 -1默认偏向差评 bias 1没有词语的时候基础分就是 1默认偏向好评。 一句话概括权重控制每个特征词带来多少加分减分bias不管输入是什么先加上一个固定的基础分。损失函数Loss还是沿用刚才好评差评打分的例子。 模型算出一个分数我们手上有真实答案。损失函数就是一把尺子专门量模型的预测和真实答案差了多少。 损失越大 错得越离谱损失越小 预测越准。举例子 真实标签这句话是好评目标分数1 情况 1模型预测输出 0.9 → 差距很小loss 很小 情况 2模型预测输出 -0.8 → 差距巨大loss 很大训练的核心目标不断降低 loss那拿到 loss 之后怎么调整权重和 bias这里就引出反向传播 梯度下降这两个是帮模型改数字的工具。简单流程把一批数据batch喂进去前向计算输入 × 权重 bias → 得到预测值用损失函数算 loss看看错多少反向传播从 loss 往回倒推算出【每个权重、每个 bias往哪个方向改、改多少loss 才能变小】 这个 “改的方向 幅度”就叫梯度gradient梯度下降按照梯度的指引轻轻挪动每一个权重和 bias再来下一个 batch重复循环一轮全部数据跑完就是一个 epoch⚠️ 重点梯度只是方向步子迈多大由学习率 lrlearning rate控制lr 太大一步跨太远来回震荡loss 降不下来甚至越训越差lr 太小走得太慢要非常多 epoch 才能收敛很耗时间串一遍完整链路你复现 RoBERTa 跑代码时程序一直在循环这个输入文本 → 分词 → 网络层× 权重 bias→激活→ 模型输出预测 → 损失函数计算 loss → 反向传播求梯度 → 优化器Adam、SGD 这类根据梯度更新所有权重、bias → 下一个 batch 继续优化器就是执行 “按梯度修改参数” 的工具Adam 是 NLP 里最常用的你复现论文大概率就是用它。帮你区分几个容易混的loss误差大小错多少梯度往哪边调参数才能减少错误学习率每次调的时候调多大一口优化器负责执行更新的工具梯度下降是什么咱们换个爬山下山的比喻不用公式纯大白话先记住一句话损失 Loss 就是高度我们的目标走到山底Loss 最小的地方。每一个权重 w、偏置 b相当于你脚下的坐标Loss 这个位置的海拔高度梯度 你站在这里脚下山坡往哪个方向往下斜梯度告诉你哪边是下坡。 梯度下降 顺着下坡方向往前迈一小步。举个场景 你站在山坡上四周高低不平。 低头一看左边往下坡走右边往上坡走梯度就会告诉你左边是下坡方向。✅ 梯度下降朝下坡走一步海拔loss降低一点。 ❌ 如果你朝上坡走loss 变大就是走反了。两个关键点梯度的正负 斜坡方向梯度是正数往这个参数变大的方向走海拔会升高上坡不能去 梯度是负数往这个参数变大的方向走海拔会降低下坡可以走学习率 lr 你这一步迈多大lr 很大一步跨很远。 容易一脚跨过头直接从山坡这一边跳到对面上坡来回横跳下不到谷底。lr 很小步子很小。 下山特别慢要走超级久才能到山脚。AUROC是什么AUROC也常叫 ROC-AUC你论文复现二分类任务经常见到先一句话AUROC 是一个指标用来衡量你的模型区分正样本和负样本的能力有多强。一般用于二分类任务比如判断句子是不是垃圾邮件、判断病变、分类正负情感。先分清 ROC 是一条曲线 AUCAUROC是这条曲线下面的面积取值范围 01。先铺垫两个简单名词不用记太死TP真阳性本来是正例模型猜对是正例FP假阳性本来是负例模型误判成正例误报TPR真正率抓到的正样本比例越高越好FPR假正率负样本被误判成正样本的比例越低越好模型输出不是直接 0/1而是概率比如 0.8 是正、0.1 是负。 我们可以人为设一个阈值 比如阈值 0.5概率 0.5 → 判定正 阈值 0.9只有非常高概率才判定正 阈值 0.1稍微有点可能性就判定正。 换不同阈值就会得到一组一组 (FPR, TPR)把这些点连起来就是ROC 曲线。AUROC ROC 曲线下的面积AUROC 1完美模型。所有正样本的预测概率全都高于负样本随便怎么调阈值都分得清清楚楚。AUROC 0.5和瞎猜一样等于抛硬币没有分辨能力。ROC 曲线就是对角线。AUROC 0.5模型预测反了把正的当成负的负的当成正的很少见超通俗比喻假设你有一堆卡片一部分红卡正样本、一部分蓝卡负样本。 模型给每张卡片打一个分数。 随机抽一张红卡、一张蓝卡。AUROC就是红卡分数 蓝卡分数 的概率举例子 AUROC0.9 → 随机拿一正一负模型有 90% 的概率给正样本打出更高分。 这个理解方式特别好用很多论文里就是这个含义。✅ 优点为什么论文爱用 AUROC不受分类阈值影响准确率 acc 会跟着阈值变AUROC 不用纠结选哪个阈值样本不均衡的时候很好用比如正样本只有 1%极端不平衡数据集准确率会骗人但 AUROC 更靠谱。这个对你很重要很多 NLP、异常检测任务数据都是不平衡的作者会放 AUROC 而不是准确率。❌ 缺点 AUROC 高 ≠ 实际用起来一定好。 它只看排序能力不看概率准不准。 比如模型输出的概率全部虚高但是排序是对的AUROC 照样很高。和你之前学的串起来训练的时候我们用 loss交叉熵去更新权重 训练完评估效果用 AUROC、accuracy、F1 这些指标看模型好不好。快速对照AUROC0.9区分能力很强AUROC0.7~0.8一般能用AUROC0.55基本和瞎猜差不多AUC和ROC是什么ROC一条曲线AUC平时说的 AUC 大多就是 AUROCROC 这条曲线下面的面积ROC 曲线你不断调分数线分数高于线就判定为坏人。纵轴真阳性率 TPR → 真正的坏人里被你抓出来的比例横轴假阳性率 FPR → 好人里被你冤枉当成坏人的比例每换一个分数线就得到一个点把所有点连起来这条线就是ROC 曲线。 简单说ROC 展示【抓坏人的能力】和【冤枉好人】之间的取舍。AUCAUROCROC 曲线下面的面积数值 0~1。 一句话随机挑 1 个好人、1 个坏人模型给坏人打的分 好人的概率AUC1完美坏人分数永远比好人高一抓一个准不会冤枉人AUC0.5和扔硬币瞎蒙没有区别分不清好坏AUC0.880% 的情况坏人分数高于好人ROC 受试者工作特征曲线 大白话 我们有模型输出的概率 / 分数不断改变判定阈值画出的曲线。两个坐标轴 ✅ 纵轴 TPR真阳性率真实正样本被模型识别出来的比例 ✅ 横轴 FPR假阳性率真实负样本被模型错判成正样本的比例一句话ROC 曲线用来展示调高 / 调低判定门槛时“抓对的” 和 “抓错冤枉的” 怎么一起变化。ROC曲线也可以简单理解为模型在不同阈值下的表现再收紧一点 ROC 就是把每一个阈值对应的两组指标TPR、FPR描点串起来的曲线记录模型在各种判定门槛下的表现。补充一句小重点 它不是看准确率专门看两件事的权衡能把多少正样本找出来TPR会冤枉多少负样本FPR对角线就是瞎猜阈值怎么调好坏都分不清。一句话笔记版ROC 曲线遍历全部分类阈值记录模型【召回正样本】和【误判负样本】的权衡表现。什么叫正样本什么叫负样本一句话记笔记正样本 我们要检测 / 寻找的目标负样本 非目标。举例子癌症检测目标找出癌症患者✅正样本真正得病的人❌负样本健康没病的人垃圾邮件识别目标找出垃圾邮件✅正样本垃圾邮件❌负样本正常邮件Kaggle是什么Kaggle 是谷歌旗下、全球最大的数据科学 / 机器学习社区平台非常适合你现在做论文复现、练模型、找数据集Kaggle。 它核心 4 大块Competitions 竞赛企业 / 实验室放出真实数据任务CV、NLP、表格预测、时序等大家提交模型排行榜比指标高分有奖金、奖牌也有入门友好的练习赛很多研究生用来攒项目、写简历。Datasets 数据集库海量公开数据集很多论文里常用的 benchmark 数据都能直接在这里下载对你复现论文特别有用不用自己到处找数据。NotebooksKaggle Kernel在线 Python/R 代码环境自带免费 GPU直接写代码跑实验、看别人开源的复现方案、baseline一键 fork 别人的代码改一改跑。Models / Discussion可以托管模型、看别人分享的方案、讨论调参思路你刚才问的 batch、epoch很多 notebook 里都有完整例子。✅ 对你研一复现论文的用处找论文配套数据集直接 fork 别人公开的复现 notebook对照跑看大佬的基线、数据预处理、trick自己跑小实验白嫖 GPU⚠️ 对比国内类似阿里天池Kaggle 是国际版英文为主开源方案更多。入门经典练手赛Titanic泰坦尼克生存预测、House Prices 房价预测。PR Pull Request中文叫拉取请求大白话 你在单独分支写完代码申请把你的代码合并进主代码库的一个申请单就是 PR。