蒸馏知识点笔记

蒸馏(Distillation)

模型蒸馏是一种通过将大模型(教师模型)的知识传递给小模型(学生模型)来优化小模型性能的方法。蒸馏通常包括以下几种形式:

1. 软标签蒸馏(Soft Label Distillation)

通过教师模型的软标签(soft labels)来训练学生模型,使学生模型学习教师模型的输出分布。

import torch
import torch.nn as nn

# 定义教师模型和学生模型
teacher_model = ...
student_model = ...

# 定义损失函数
criterion = nn.KLDivLoss(reduction='batchmean')

# 教师模型生成软标签
teacher_model.eval()
with torch.no_grad():
    teacher_outputs = teacher_model(inputs)
soft_labels = torch.softmax(teacher_outputs / temperature, dim=1)

# 学生模型预测
student_outputs = student_model(inputs)
loss = criterion(torch.log_softmax(student_outputs / temperature, dim=1), soft_labels)

# 反向传播和优化
loss.backward()
optimizer.step()

2. 特征蒸馏(Feature Distillation)

通过让学生模型学习教师模型中间层的特征表示来优化学生模型性能。

class FeatureExtractor(nn.Module):
    def __init__(self, model):
        super(FeatureExtractor, self).__init__()
        self.features = nn.Sequential(*list(model.children())[:-1])
    
    def forward(self, x):
        return self.features(x)

teacher_feature_extractor = FeatureExtractor(teacher_model)
student_feature_extractor = FeatureExtractor(student_model)

# 获取特征表示
teacher_features = teacher_feature_extractor(inputs)
student_features = student_feature_extractor(inputs)

# 定义特征蒸馏损失
feature_distillation_loss = nn.MSELoss()(student_features, teacher_features)

# 反向传播和优化
feature_distillation_loss.backward()
optimizer.step()

3. 组合蒸馏(Combined Distillation)

结合软标签蒸馏和特征蒸馏,利用教师模型的输出分布和特征表示来训练学生模型。

# 定义损失函数
criterion = nn.KLDivLoss(reduction='batchmean')
mse_loss = nn.MSELoss()

# 教师模型生成软标签
teacher_model.eval()
with torch.no_grad():
    teacher_outputs = teacher_model(inputs)
soft_labels = torch.softmax(teacher_outputs / temperature, dim=1)

# 学生模型预测
student_outputs = student_model(inputs)
soft_label_loss = criterion(torch.log_softmax(student_outputs / temperature, dim=1), soft_labels)

# 获取特征表示
teacher_features = teacher_feature_extractor(inputs)
student_features = student_feature_extractor(inputs)
feature_loss = mse_loss(student_features, teacher_features)

# 组合损失
total_loss = soft_label_loss + alpha * feature_loss

# 反向传播和优化
total_loss.backward()
optimizer.step()

通过上述蒸馏技术,可以有效地优化模型结构,减少计算开销,并在保持模型性能的前提下,提高模型的推理速度和部署效率。

相关推荐

  1. 蒸馏知识笔记

    2024-07-12 12:44:01       22 阅读
  2. yolov5知识蒸馏

    2024-07-12 12:44:01       43 阅读
  3. 简单的知识蒸馏

    2024-07-12 12:44:01       33 阅读
  4. 知识蒸馏——讨论区

    2024-07-12 12:44:01       28 阅读
  5. D4:知识蒸馏

    2024-07-12 12:44:01       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 12:44:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 12:44:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 12:44:01       57 阅读
  4. Python语言-面向对象

    2024-07-12 12:44:01       68 阅读

热门阅读

  1. Linux 基础常用基础命令(CentOS7)-CSDN

    2024-07-12 12:44:01       23 阅读
  2. Backend - C# 基础知识

    2024-07-12 12:44:01       17 阅读
  3. 网络编程:数据包的封装----libnet库

    2024-07-12 12:44:01       26 阅读
  4. 使用定时器消除抖动

    2024-07-12 12:44:01       21 阅读
  5. Spring框架(三)——AOP--实现方式

    2024-07-12 12:44:01       18 阅读
  6. vue-grid-layout详解

    2024-07-12 12:44:01       23 阅读
  7. linux,docker,k8s常见命令

    2024-07-12 12:44:01       21 阅读
  8. TensorFlow 和 PyTorch 显示模型参数方法详解

    2024-07-12 12:44:01       20 阅读
  9. 【go学习合集】进阶数据类型2 -------->切片

    2024-07-12 12:44:01       20 阅读
  10. 扩展欧几里得c++

    2024-07-12 12:44:01       24 阅读