ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

KD_Lib + Optuna 超参数调优教程:5 步让知识蒸馏效果翻倍

KD_Lib + Optuna 超参数调优教程:5 步让知识蒸馏效果翻倍 KD_Lib Optuna 超参数调优教程5 步让知识蒸馏效果翻倍【免费下载链接】KD_LibA Pytorch Knowledge Distillation library for benchmarking and extending works in the domains of Knowledge Distillation, Pruning, and Quantization.项目地址: https://gitcode.com/gh_mirrors/kd/KD_Lib训练过深度学习模型的朋友都知道知识蒸馏Knowledge Distillation的效果好不好很大程度上取决于超参数——温度Temperature、蒸馏权重Distil Weight、学习率、优化器……手动一个个试既费时间又靠运气。KD_Lib 是一个基于 PyTorch 的开源模型压缩库内置了知识蒸馏、剪枝和量化三大方向的经典算法而Optuna 超参数调优能自动帮你在参数空间里寻找最优组合把玄学调参变成科学调参。本教程将手把手教你用 KD_Lib Optuna 搭建自动调参流程让蒸馏模型精度轻松上一个台阶。为什么知识蒸馏需要自动超参数调优知识蒸馏的核心思想是让一个小模型学生模仿大模型教师的输出。这个过程涉及多个互相影响的超参数超参数作用常见范围temperature温度控制软标签的平滑程度5.0 ~ 20.0distil_weight蒸馏权重平衡蒸馏损失与真实标签损失0.0 ~ 1.0learning rate决定模型收敛速度1e-4 ~ 1e-1优化器影响训练稳定性SGD / Adam这些参数之间往往存在交互效应——例如高温度配合高蒸馏权重可能比单独调某一个参数更有效。手动穷举根本不可能而 Optuna 采用基于 TPE 的贝叶斯优化算法能用更少的试验次数找到更优的参数组合。认识 KD_Lib 的核心模块结构KD_Lib 的代码组织非常清晰先了解一下模块路径方便后续对照KD_Lib/KD/vision/vanilla/vanilla_kd.py —— 最经典的 VanillaKD 蒸馏实现本文调参的主角KD_Lib/KD/common/base_class.py —— 所有蒸馏方法的基类包含 train_teacher / train_student / evaluate 等通用接口KD_Lib/models/resnet.py —— 内置 ResNet18 / ResNet50 等模型开箱即用docs/usage/tutorials/optuna_with_KD_Lib.rst —— 官方 Optuna 调参教程有了这个地图接下来的步骤会轻松很多。第一步安装 KD_Lib 与 Optuna首先安装依赖库。Optuna 可以通过 pip 一键安装pip install optunaKD_Lib 同样支持 pip 安装或从源码构建推荐能用到最新特性git clone https://gitcode.com/gh_mirrors/kd/KD_Lib cd KD_Lib python setup.py install安装完成后在 Python 中执行from KD_Lib.KD import VanillaKD验证是否成功。第二步准备数据集与模型为了让教程简单我们使用 MNIST 手写数字数据集教师模型选参数量更大的 ResNet50学生模型选轻量的 ResNet18——这也正是 KD_Lib 内置模型库的典型用法from KD_Lib.models import ResNet18, ResNet50 from KD_Lib.KD import VanillaKD加载数据集时只需定义好 train_loader 和 test_loaderKD_Lib 的蒸馏类会统一处理训练流程无需自己写训练循环。第三步编写 Optuna 目标函数Optuna 的核心是目标函数objective function每次试验中函数内部用trial.suggest_*方法从参数空间采样一组超参数训练完模型后返回精度作为评估指标。对应 VanillaKD需要调的参数正好可以在vanilla_kd.py 的构造函数中找到def tune_VanillaKD(trial): # 采样超参数 lr trial.suggest_float(lr, 1e-4, 1e-1) momentum trial.suggest_float(momentum, 0.9, 0.99) temperature trial.suggest_float(temperature, 5.0, 20.0) distil_weight trial.suggest_float(distil_weight, 0.0, 1.0) # 创建蒸馏器并训练 distiller VanillaKD(teacher, student, train_loader, test_loader, teacher_optimizer, student_optimizer, temptemperature, distil_weightdistil_weight) distiller.train_teacher(epochs10) distiller.train_student(epochs10) return distiller.evaluate() # 返回学生模型精度 提示trial.suggest_categorical还可以用来在 SGD / Adam 之间自动选择优化器在 KLDivLoss / MSELoss 之间选择损失函数让调参范围更广。第四步创建 Study 并开始自动调优定义好目标函数后只需三行代码即可启动完整的自动化搜索import optuna study optuna.create_study(study_nameKD Hyperparameter Tuning, directionmaximize) study.optimize(tune_VanillaKD, n_trials10)directionmaximize表示我们要最大化学生模型的测试精度n_trials10是试验次数可根据算力调整建议 20~50 次效果更佳Optuna 会自动跳过效果差的参数组合优先尝试有潜力的区域第五步查看最优参数并保存结果训练结束后查看最优超参数组合print(study.best_params) # 最优参数 print(study.best_value) # 最优精度还可以用study.trials_dataframe()查看全部试验记录并用 joblib 保存/加载整个 study方便日后继续调优import joblib joblib.dump(study, kd_study.pkl) # 保存 study joblib.load(kd_study.pkl) # 复用理解温度参数对蒸馏效果的影响调参过程中温度temperature是知识蒸馏最特殊的超参数。温度越高教师输出的软标签分布越平滑学生能学到更多类别间的相似关系。上图展示了教师网络输出的软目标分布——即使教师对某个样本判断有偏差真实类别依然保留较高概率这正是知识蒸馏能传递暗知识的关键。如果蒸馏效果不理想优先检查温度与蒸馏权重的组合是否合理。进阶将调优扩展到更多 KD_Lib 算法KD_Lib 的价值在于统一接口——所有蒸馏算法都继承自 BaseClass因此本文的 Optuna 流程可以无缝迁移到其他算法TAKD 教师助理蒸馏多一个中间模型大小参数DML 深度互学习多个学生同时训练无需预训练教师RKD 关系知识蒸馏关注样本间关系额外权重参数每种算法的核心超参数不同只需在目标函数中替换对应的suggest_*调用即可。像上图展示的 RCO路径约束优化这类迭代式蒸馏策略尤其适合用 Optuna 搜索分几步优化、每步用什么锚点等结构型超参数往往能带来远超手动调参的提升。调优实操建议3 个让效果翻倍的小技巧先粗后细先用n_trials10跑一轮观察哪些参数对精度影响大再缩小范围精细搜索固定教师、只调学生教师模型训练昂贵调参时复用预训练好的教师权重只优化学生的训练超参数能大幅缩短单次试验时间日志可视化用optuna-dashboard或study.trials_dataframe()分析参数与精度的关系让调参方向有据可依总结KD_Lib 把知识蒸馏、剪枝、量化等模型压缩方法封装成了开箱即用的接口而 Optuna 则负责在超参数空间中自动寻优。两者结合你不需要手工试错上百次也能找到让蒸馏精度显著提升的参数组合——这正是自动超参数调优让蒸馏效果翻倍的底层逻辑。现在就动手把这份 KD_Lib Optuna 调参流程跑起来吧【免费下载链接】KD_LibA Pytorch Knowledge Distillation library for benchmarking and extending works in the domains of Knowledge Distillation, Pruning, and Quantization.项目地址: https://gitcode.com/gh_mirrors/kd/KD_Lib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表