域名关联网站,网站商业授权含义,网站建设投标书 技术架构,外贸网站 海外推广大家好#xff0c;我是小青
今天给大家分享神经网络中的一个关键概念#xff0c;知识蒸馏
知识蒸馏#xff08;Knowledge Distillation#xff09;是一种模型压缩技术#xff0c;旨在将大型、复杂的模型#xff08;通常称为教师模型#xff09;的知识迁移到小型、简单…大家好我是小青
今天给大家分享神经网络中的一个关键概念知识蒸馏
知识蒸馏Knowledge Distillation是一种模型压缩技术旨在将大型、复杂的模型通常称为教师模型的知识迁移到小型、简单的模型学生模型中。通过这种方式学生模型可以在保持较高性能的同时显著减少计算资源和存储需求。
知识蒸馏广泛用于深度学习领域尤其在计算资源有限的场景如移动端设备、嵌入式设备中用于加速推理、减少存储成本同时尽可能保持模型性能。 核心思想
知识蒸馏的核心思想是利用教师模型的输出通常是软标签即概率分布来指导学生模型的训练。与传统的监督学习不同知识蒸馏不仅使用真实标签硬标签还利用教师模型生成的软标签来传递更多的信息。
通过这种方式学生模型不仅学习到数据的类别信息还能够捕捉到类别之间的相似性和关系从而提升其泛化能力。
关键技术与方法
知识蒸馏的核心在于让学生模型不仅仅学习真实标签还学习教师模型提供的软标签即教师模型输出的概率分布。这种方式可以让学生模型获得更丰富的信息。
传统神经网络的交叉熵损失
在传统的神经网络训练中我们通常用交叉熵损失Cross-Entropy Loss来训练分类模型 传统的交叉熵损失函数仅利用了数据的硬标签hard labels即 仅在真实类别处为 1其他类别为 0导致模型无法学习类别之间的相似性信息。
知识蒸馏的损失函数
在知识蒸馏中教师模型提供了一种软标签soft targets即对所有类别的预测分布而不仅仅是单个类别。
这些软标签由温度化 Softmax 得到。 知识蒸馏的优势 模型压缩学生模型通常比教师模型小得多适合在资源受限的设备上部署。 性能保持通过知识蒸馏学生模型能够在保持较高性能的同时显著减少计算资源和存储需求。 泛化能力软标签提供了更多的信息有助于学生模型更好地泛化。
知识蒸馏的变种
除了标准的知识蒸馏方法研究人员还提出了多个改进版本。 自蒸馏Self-Distillation模型自身作为教师将深层网络的知识蒸馏到浅层部分。 多教师蒸馏Multi-Teacher Distillation多个教师模型联合指导学生模型融合不同教师的知识。 在线蒸馏Online Distillation教师模型和学生模型同步训练而不是先训练教师模型再训练学生模型。
案例分享
下面是一个完整的知识蒸馏的示例代码使用 PyTorch 训练一个教师模型并将其知识蒸馏到学生模型。
这里我们采用 MNIST 数据集教师模型使用一个较大的神经网络而学生模型是一个较小的神经网络。
首先定义教师模型和学生模型。
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import matplotlib.pyplot as plt
# 教师模型较大的神经网络
class TeacherModel(nn.Module):def __init__(self):super(TeacherModel, self).__init__()self.fc1 nn.Linear(28 * 28, 512)self.fc2 nn.Linear(512, 256)self.fc3 nn.Linear(256, 10)def forward(self, x):x x.view(-1, 28 * 28)x F.relu(self.fc1(x))x F.relu(self.fc2(x))x self.fc3(x) # 注意这里没有 Softmaxreturn x# 学生模型较小的神经网络
class StudentModel(nn.Module):def __init__(self):super(StudentModel, self).__init__()self.fc1 nn.Linear(28 * 28, 128)self.fc2 nn.Linear(128, 10)def forward(self, x):x x.view(-1, 28 * 28)x F.relu(self.fc1(x))x self.fc2(x) # 注意这里没有 Softmaxreturn x然后加载数据集。
# 数据预处理
transform transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])# 加载 MNIST 数据集
train_dataset datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform)
test_dataset datasets.MNIST(root./data, trainFalse, downloadTrue, transformtransform)train_loader DataLoader(train_dataset, batch_size64, shuffleTrue)
test_loader DataLoader(test_dataset, batch_size1000, shuffleFalse)训练教师模型
def train_teacher(model, train_loader, epochs5, lr0.001):optimizer optim.Adam(model.parameters(), lrlr)criterion nn.CrossEntropyLoss()for epoch in range(epochs):model.train()total_loss 0for images, labels in train_loader:optimizer.zero_grad()output model(images)loss criterion(output, labels)loss.backward()optimizer.step()total_loss loss.item()print(fEpoch [{epoch1}/{epochs}], Loss: {total_loss / len(train_loader):.4f})# 初始化并训练教师模型
teacher_model TeacherModel()
train_teacher(teacher_model, train_loader)知识蒸馏训练学生模型
def distillation_loss(student_logits, teacher_logits, labels, T3.0, alpha0.5):计算蒸馏损失结合知识蒸馏损失和交叉熵损失soft_targets F.softmax(teacher_logits / T, dim1) # 教师模型的软标签soft_predictions F.log_softmax(student_logits / T, dim1) # 学生模型的预测distillation_loss F.kl_div(soft_predictions, soft_targets, reductionbatchmean) * (T ** 2)ce_loss F.cross_entropy(student_logits, labels)return alpha * ce_loss (1 - alpha) * distillation_lossdef train_student_with_distillation(student_model, teacher_model, train_loader, epochs5, lr0.001, T3.0, alpha0.5):optimizer optim.Adam(student_model.parameters(), lrlr)teacher_model.eval() # 设定教师模型为评估模式for epoch in range(epochs):student_model.train()total_loss 0for images, labels in train_loader:optimizer.zero_grad()student_logits student_model(images)with torch.no_grad():teacher_logits teacher_model(images) # 获取教师模型输出loss distillation_loss(student_logits, teacher_logits, labels, TT, alphaalpha)loss.backward()optimizer.step()total_loss loss.item()print(fEpoch [{epoch1}/{epochs}], Loss: {total_loss / len(train_loader):.4f})# 初始化学生模型
student_model StudentModel()
train_student_with_distillation(student_model, teacher_model, train_loader)评估模型
def evaluate(model, test_loader):model.eval()correct 0total 0with torch.no_grad():for images, labels in test_loader:outputs model(images)_, predicted torch.max(outputs, 1)correct (predicted labels).sum().item()total labels.size(0)accuracy 100 * correct / totalreturn accuracy# 评估教师模型
teacher_acc evaluate(teacher_model, test_loader)
print(f教师模型准确率: {teacher_acc:.2f}%)# 评估知识蒸馏训练的学生模型
student_acc_distilled evaluate(student_model, test_loader)
print(f知识蒸馏训练的学生模型准确率: {student_acc_distilled:.2f}%)
文章转载自: http://www.morning.mjtft.cn.gov.cn.mjtft.cn http://www.morning.rkkh.cn.gov.cn.rkkh.cn http://www.morning.qmkyp.cn.gov.cn.qmkyp.cn http://www.morning.rwzqn.cn.gov.cn.rwzqn.cn http://www.morning.qhjkz.cn.gov.cn.qhjkz.cn http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn http://www.morning.txysr.cn.gov.cn.txysr.cn http://www.morning.fosfox.com.gov.cn.fosfox.com http://www.morning.frqtc.cn.gov.cn.frqtc.cn http://www.morning.rbyz.cn.gov.cn.rbyz.cn http://www.morning.xqjrg.cn.gov.cn.xqjrg.cn http://www.morning.trzzm.cn.gov.cn.trzzm.cn http://www.morning.ckwrn.cn.gov.cn.ckwrn.cn http://www.morning.pdxqk.cn.gov.cn.pdxqk.cn http://www.morning.tslfz.cn.gov.cn.tslfz.cn http://www.morning.fbtgp.cn.gov.cn.fbtgp.cn http://www.morning.gzzxlp.com.gov.cn.gzzxlp.com http://www.morning.mmqng.cn.gov.cn.mmqng.cn http://www.morning.rmpfh.cn.gov.cn.rmpfh.cn http://www.morning.ctxt.cn.gov.cn.ctxt.cn http://www.morning.jwbnm.cn.gov.cn.jwbnm.cn http://www.morning.cfocyfa.cn.gov.cn.cfocyfa.cn http://www.morning.sfnr.cn.gov.cn.sfnr.cn http://www.morning.fsqbx.cn.gov.cn.fsqbx.cn http://www.morning.lgphx.cn.gov.cn.lgphx.cn http://www.morning.kbkcl.cn.gov.cn.kbkcl.cn http://www.morning.gxhqt.cn.gov.cn.gxhqt.cn http://www.morning.dzzjq.cn.gov.cn.dzzjq.cn http://www.morning.xbzfz.cn.gov.cn.xbzfz.cn http://www.morning.xprzq.cn.gov.cn.xprzq.cn http://www.morning.yxwcj.cn.gov.cn.yxwcj.cn http://www.morning.dyfmh.cn.gov.cn.dyfmh.cn http://www.morning.jfgmx.cn.gov.cn.jfgmx.cn http://www.morning.lbrwm.cn.gov.cn.lbrwm.cn http://www.morning.qgmwt.cn.gov.cn.qgmwt.cn http://www.morning.hqgxz.cn.gov.cn.hqgxz.cn http://www.morning.pmnn.cn.gov.cn.pmnn.cn http://www.morning.hpdpp.cn.gov.cn.hpdpp.cn http://www.morning.fkyrk.cn.gov.cn.fkyrk.cn http://www.morning.nwnbq.cn.gov.cn.nwnbq.cn http://www.morning.rflcy.cn.gov.cn.rflcy.cn http://www.morning.nkkpp.cn.gov.cn.nkkpp.cn http://www.morning.wqcz.cn.gov.cn.wqcz.cn http://www.morning.srtw.cn.gov.cn.srtw.cn http://www.morning.hmxrs.cn.gov.cn.hmxrs.cn http://www.morning.paxkhqq.cn.gov.cn.paxkhqq.cn http://www.morning.wmdlp.cn.gov.cn.wmdlp.cn http://www.morning.lsssx.cn.gov.cn.lsssx.cn http://www.morning.yrccw.cn.gov.cn.yrccw.cn http://www.morning.tongweishi.cn.gov.cn.tongweishi.cn http://www.morning.mdlqf.cn.gov.cn.mdlqf.cn http://www.morning.zxwqt.cn.gov.cn.zxwqt.cn http://www.morning.zwckz.cn.gov.cn.zwckz.cn http://www.morning.mzhjx.cn.gov.cn.mzhjx.cn http://www.morning.ykklw.cn.gov.cn.ykklw.cn http://www.morning.qgghj.cn.gov.cn.qgghj.cn http://www.morning.bktzr.cn.gov.cn.bktzr.cn http://www.morning.coffeedelsol.com.gov.cn.coffeedelsol.com http://www.morning.phgz.cn.gov.cn.phgz.cn http://www.morning.ykklw.cn.gov.cn.ykklw.cn http://www.morning.kpypy.cn.gov.cn.kpypy.cn http://www.morning.ybgt.cn.gov.cn.ybgt.cn http://www.morning.kfcz.cn.gov.cn.kfcz.cn http://www.morning.rfmzc.cn.gov.cn.rfmzc.cn http://www.morning.rhjsx.cn.gov.cn.rhjsx.cn http://www.morning.rfpxq.cn.gov.cn.rfpxq.cn http://www.morning.gxtbn.cn.gov.cn.gxtbn.cn http://www.morning.frpb.cn.gov.cn.frpb.cn http://www.morning.kmrgl.cn.gov.cn.kmrgl.cn http://www.morning.ljhnn.cn.gov.cn.ljhnn.cn http://www.morning.lzph.cn.gov.cn.lzph.cn http://www.morning.wrcgy.cn.gov.cn.wrcgy.cn http://www.morning.htbsk.cn.gov.cn.htbsk.cn http://www.morning.txmkx.cn.gov.cn.txmkx.cn http://www.morning.jnptt.cn.gov.cn.jnptt.cn http://www.morning.xsfny.cn.gov.cn.xsfny.cn http://www.morning.sfhjx.cn.gov.cn.sfhjx.cn http://www.morning.pqcrz.cn.gov.cn.pqcrz.cn http://www.morning.mnwb.cn.gov.cn.mnwb.cn http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn