知識蒸餾 - 通過引入溫度參數T調整 Softmax 的輸出

知識蒸餾 - 通過引入溫度參數T調整 Softmax 的輸出

flyfish

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
import numpy as np# 設置中文字體支持
plt.rcParams["font.family"] = ['AR PL UMing CN']  # Linux
plt.rcParams['axes.unicode_minus'] = False  # 解決負號顯示問題# 模擬模型輸出的logits
logits = torch.tensor([10.0, 4.0, 1.0])# 定義不同的溫度值
temperatures = [0.5, 1.0, 5.0, 10.0, 20.0]# 計算不同溫度下的softmax輸出
results = {}
for T in temperatures:soft_labels = F.softmax(logits / T, dim=0)results[T] = soft_labels.numpy()# 打印結果(保留四位小數)
print("原始logits:", logits.numpy())
for T, soft_labels in results.items():# 使用列表推導式和格式化字符串保留四位小數formatted_probs = [f"{p:.4f}" for p in soft_labels]print(f"溫度 T={T} 時的軟標簽: [{', '.join(formatted_probs)}]")# 可視化不同溫度下的概率分布
plt.figure(figsize=(14, 7))
x = np.arange(len(logits))
width = 0.8 / len(temperatures)for i, (T, soft_labels) in enumerate(results.items()):bars = plt.bar(x + i * width - 0.4 + width/2, soft_labels, width, label=f'T={T}')# 在每個柱子上方添加保留四位小數的概率值for bar in bars:height = bar.get_height()plt.text(bar.get_x() + bar.get_width()/2., height + 0.01,f'{height:.4f}', ha='center', va='bottom', rotation=90)plt.xticks(x, ['貓', '狗', '狐貍'])
plt.ylabel('概率')
plt.title('不同溫度T下的softmax概率分布')
plt.legend()
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.ylim(0, 1.1)  # 調整y軸范圍,使標簽顯示完整
plt.tight_layout()
plt.show()

原始logits: [10. 4. 1.]
溫度 T=0.5 時的軟標簽: [1.0000, 0.0000, 0.0000]
溫度 T=1.0 時的軟標簽: [0.9974, 0.0025, 0.0001]
溫度 T=5.0 時的軟標簽: [0.6819, 0.2054, 0.1127]
溫度 T=10.0 時的軟標簽: [0.5114, 0.2807, 0.2079]
溫度 T=20.0 時的軟標簽: [0.4204, 0.3115, 0.2681]
在這里插入圖片描述

低溫(T=0.5):分布極陡峭,幾乎只保留最大值對應的類別(貓)
標準溫度(T=1.0):接近傳統 softmax,突出最大值但保留少量其他類別概率
高溫(T=10.0):分布非常平滑,所有類別概率接近均等

對于給定的logits向量z=[z1,z2,...,zk]\mathbf{z} = [z_1, z_2, ..., z_k]z=[z1?,z2?,...,zk?](其中ziz_izi?是模型對第iii類的原始輸出分數,比如代碼中的logits = [10.0, 4.0, 1.0]),以及溫度參數TTT,第iii類的軟標簽概率pip_ipi?計算公式為:

pi=ezi/T∑j=1kezj/T p_i = \frac{e^{z_i / T}}{\sum_{j=1}^{k} e^{z_j / T}} pi?=j=1k?ezj?/Tezi?/T?

解釋:

ziz_izi?:代碼中的logits[i](如logits[0] = 10.0對應“貓”的原始分數);
TTT:代碼中的溫度參數(如T=0.5,1.0,5.0等);
ezi/Te^{z_i / T}ezi?/T:對“原始分數除以溫度”做指數運算(代碼中由F.softmax內部實現);
分母∑j=1kezj/T\sum_{j=1}^{k} e^{z_j / T}j=1k?ezj?/T:所有類別的指數結果之和,用于歸一化(確保所有概率之和為1);
pip_ipi?:最終的軟標簽概率(代碼中soft_labels[i],如“貓”在T=5.0時的概率約為0.6811)。

作用:

通過溫度TTT縮放logits的“差異幅度”:
T→0+T \to 0^+T0+時,指數部分對大的ziz_izi?更敏感,概率分布會極度陡峭(接近硬標簽);
T→+∞T \to +\inftyT+時,所有zi/Tz_i / Tzi?/T趨近于0,指數結果趨近于1,概率分布會趨近均勻(所有類別概率接近相等)。
T=0.5時“貓”的概率接近1,T=20時三類概率更均勻。

在知識蒸餾(Knowledge Distillation)中,引入溫度參數TTT 調整 Softmax 輸出的核心目的是獲取更有信息量的“軟標簽”(Soft Labels),以便讓學生模型(Student Model)更好地學習教師模型(Teacher Model)的“知識”。溫度TTT 的核心作用是通過“軟化”教師模型的輸出分布,保留更多關于類別間關系的細粒度知識,讓學生模型能更有效地學習教師的經驗。

原因

1. 原始 Softmax(T=1T=1T=1)的局限性

原始 Softmax 函數的公式為:
pi=ezi∑jezj p_i = \frac{e^{z_i}}{\sum_{j} e^{z_j}} pi?=j?ezj?ezi??
其中ziz_izi? 是模型輸出的 logits(未歸一化的分數)。

當模型對正確類別有較高置信度時(比如教師模型很“確信”某個樣本是“貓”),原始 Softmax 的輸出會極度集中在最大 logits 對應的類別上,其他類別的概率幾乎為 0(例如:p貓≈0.999p_{\text{貓}} \approx 0.999p?0.999p狗≈0.001p_{\text{狗}} \approx 0.001p?0.001p狐貍≈0p_{\text{狐貍}} \approx 0p狐貍?0)。

這種“陡峭”的概率分布(接近硬標簽)丟失了很多有價值的信息:教師模型可能認為“狗”比“狐貍”更接近“貓”(即p狗>p狐貍p_{\text{狗}} > p_{\text{狐貍}}p?>p狐貍?),但原始 Softmax 會將這種差異壓縮到幾乎不可見。

2. 溫度TTT 的作用:“軟化”概率分布,保留更多知識

當引入溫度TTT 后,Softmax 公式變為:
pi=ezi/T∑jezj/T p_i = \frac{e^{z_i / T}}{\sum_{j} e^{z_j / T}} pi?=j?ezj?/Tezi?/T?

T>1T > 1T>1:logits 被“縮放”(除以TTT),導致指數函數的“敏感度”降低,不同類別的概率差異被拉平(分布更平緩)。
例如,教師模型對“貓”“狗”“狐貍”的 logits 為 [10, 4, 1]:
T=1T=1T=1 時,輸出可能是 [0.997, 0.002, 0.001](幾乎只有“貓”有概率);
T=10T=10T=10 時,輸出可能是 [0.607, 0.242, 0.151](保留了“狗比狐貍更接近貓”的信息)。

這種“軟化”的軟標簽包含了教師模型對類別間相似性的判斷(哪些類別容易混淆、哪些類別差異大),這些信息比單純的硬標簽(如“貓”)更豐富,能幫助學生模型學習到更魯棒的特征。

3. 知識蒸餾中的配合使用

在知識蒸餾中,教師模型用高溫TTT 生成軟標簽,學生模型在訓練時既學習軟標簽(用相同的TTT),也學習原始硬標簽(可選)。推理時,學生模型再用T=1T=1T=1 輸出最終的硬預測。

通過這種方式,學生模型不僅學到了“正確答案”,還學到了教師模型的“推理過程”(如何權衡不同類別的可能性),從而在參數更少的情況下達到接近教師模型的性能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90991.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java研學-RabbitMQ(三)

一 消息通信協議 1 AMQP AMQP 是一個開放的、跨語言、跨平臺的消息協議標準,用于在分布式系統中傳遞業務消息。它定義了消息隊列的二進制協議格式和交互模型(如交換機、隊列、綁定等),確保不同語言(Java、Python、C#等…

http.client 教程-如何使用 Python 標準庫發送 HTTP 請求

http.client 教程-如何使用 Python 標準庫發送 HTTP 請求以下是 http.client 模塊的詳細使用教程,幫助你理解如何使用 Python 標準庫發送 HTTP 請求:1. http.client 概述http.client 是 Python 內置的 HTTP 客戶端庫,提供了底層的 HTTP 協議實…

Android-三種持久化方式詳解

持久化技術分為3種,文件,sharedPreferences存儲,數據庫來存儲; 目錄 文件存儲: 利用SharedPreferences中讀取數據 SQLite創建數據庫 更新 添加 刪除 查找: 文件存儲: 文件存儲是 Andr…

并發安全之鎖機制一

鎖機制一 鎖機制是計算機系統中解決并發沖突的核心工具,其存在和應用場景源于一個根本問題:當多個執行單元(線程、進程、分布式節點)同時訪問或修改同一份共享資源時,如何保證數據的正確性、一致性和系統可靠性&#x…

結合項目闡述 設計模式:單例、工廠、觀察者、代理

原文鏈接:https://download.csdn.net/blog/column/12433305/133862792#_1613 1、工廠模式應用 C17及之后可編譯 /*日志落地模塊的實現1.抽象落地基類2.派生子類(根據不同落地方向進行派生)3.使用工廠模式進行創建與表示的分離 */#ifndef _…

uniapp 更新apk有緩存點不動,卸載安裝apk沒有問題。android

方式一。pages.json:"globalStyle" : {"navigationBarTextStyle" : "black","navigationBarTitleText" : "uni-app","navigationBarBackgroundColor" : "#F8F8F8","backgroundColor&qu…

HTML響應式SEO公司網站源碼

核心優勢 100%純HTML/CSS開發自動適配手機/平板/PC內置SEO優化結構0.5秒極速加載 包含頁面 ? 首頁(關鍵詞布局優化版) ? 服務項目展示頁 ? 客戶案例庫 ? 新聞資訊系統 ? 聯系方式(帶地圖API) 技術參數 兼容Chrome/Firefo…

Error: llama runner process has terminated: exit status 2

我是i7 12700h ,3080顯卡,在 Windows 11 上運行 ollama run deepseek-r1:1.5b 出現 Error: llama runner process has terminated: exit status 2 之前是好用的,后來不知為什么就不好用了。 原因: 檢查 Microsoft Visual C Redistributab…

Linux中ssh遠程登錄原理與配置

SSH連接的五個階段 1. 版本協商階段(Protocol Version Negotiation)目的:協商使用SSH-1或SSH-2協議(現代系統默認SSH-2)。流程:關鍵點:若版本不兼容(如客戶端只支持SSH-1&#xff0c…

Kubernetes --存儲入門

一、Volume 的概念對于大多數的項目而言,數據文件的存儲是非常常見的需求,比如存儲用戶上傳的頭像、文件以及數據庫的數據。在 Kubernetes 中,由于應用的部署具有高度的可擴展性和編排能力(不像傳統架構部署在固定的位置&#xff…

螞蟻 KAG 框架開源:知識圖譜 + RAG 雙引擎

引言:從RAG到KAG,專業領域知識服務的技術突破 在大語言模型(LLM)應用落地過程中,檢索增強生成(RAG) 技術通過引入外部知識庫有效緩解了模型幻覺問題,但在專業領域仍面臨三大核心挑戰…

V-Ray 7.00.08 for 3ds Max 2021-2026 安裝與配置教程(含語言補丁)

本文介紹 V-Ray 7.00.08 渲染器在 3ds Max 2021-2026 各版本中的安裝與使用配置步驟,適合需要進行可視化渲染工作的設計師、建筑師及相關從業者。附帶語言補丁配置方式,幫助用戶獲得更順暢的使用體驗。 📁 一、安裝文件準備 軟件名稱&#xf…

Go-Elasticsearch Typed Client查詢請求的兩種寫法強類型 Request 與 Raw JSON

1 為什么需要兩種寫法? 在 Golang 項目中訪問 Elasticsearch,一般會遇到兩類需求:需求場景特點最佳寫法后臺服務 / 業務邏輯查詢固定、字段清晰,需要編譯期保障Request 結構體儀表盤 / 高級搜索 / 模板 DSL查詢片段由前端或腳本動…

Leaflet 綜合案例-聚類圖層控制

看過的知識不等于學會。唯有用心總結、系統記錄,并通過溫故知新反復實踐,才能真正掌握一二 作為一名摸爬滾打三年的前端開發,開源社區給了我飯碗,我也將所學的知識體系回饋給大家,助你少走彎路! OpenLayers…

React組件中的this指向問題

在 React 組件中,函數定義方式影響this指向的核心原因是箭頭函數與普通函數的作用域綁定規則不同,具體差異如下:? 1. 普通函數(function定義)需要手動bind(this)的原因? 當用function在組件內定義方法時&#xff1…

Vue 項目中的組件引用如何實現,依賴組件間的數據功能交互及示例演示

在 Vue 項目中,組件間的引用與數據交互是核心功能之一。以下是組件引用和數據交互的詳細實現方式及示例:一、組件引用方式 1. 基本組件引用 局部注冊:在父組件中按需引入子組件并注冊。 // ParentComponent.vue import ChildComponent from .…

? 使用 Flask 實現頭像文件上傳與加載功能

文章目錄&#x1f9f1; 技術棧&#x1f5c2;? 項目結構與配置&#x1f510; 用戶身份校驗邏輯&#x1f4e4; 頭像上傳接口&#xff1a;/file/avatar/upload&#x1f4e5; 加載頭像接口&#xff1a;/file/avatar/load/<filename>&#x1f9ea; 示例請求&#xff08;使用 …

去除視頻字幕 5: 使用 ProPainter, 記錄探索過程

使用 ProPainter 去除視頻上的字幕&#xff0c;效果演示&#xff08;比之前好多了。&#xff09;。 1. 項目目標 去除視頻 (bear.webm) 中的硬字幕。 2. 初始嘗試與關鍵失敗&#xff1a;IOPaint 方法: 使用 IOPaint&#xff08;一個圖像修復工具&#xff09;配合 PaddleOCR 逐…

JavaScript HTTP 請求:從老古董到新潮流

前端開發離不開跟后端打交道&#xff0c;HTTP 請求就是這座橋梁。JavaScript 提供了好幾種方式來發請求&#xff0c;從老牌的 XMLHttpRequest (XHR) 到現代的 Fetch API&#xff0c;再到各種好用的第三方庫&#xff08;像 Axios、Ky、Superagent&#xff09;。咱們一個一個聊清…

Windows10系統使用Cmake4.1.0構建工具+Visual Studio2022編譯Opencv4.11教程

安裝提示 后續安裝本Cmake和Opencv版本及以上都可以。Microsoft Visual Studio2022已默認安裝&#xff0c;沒有安裝給出教程鏈接。 一、Cmake4.1.0下載 1.官網下載&#xff1a;https://cmake.org/download/&#xff0c;找到cmake-4.1.0-rc3-windows-x86_64.zip版本 2.壓縮包…