熵與交叉熵詳解

前言

本文隸屬于專欄《機器學習數學通關指南》,該專欄為筆者原創,引用請注明來源,不足和錯誤之處請在評論區幫忙指出,謝謝!

本專欄目錄結構和參考文獻請見《機器學習數學通關指南》


ima 知識庫

知識庫廣場搜索:

知識庫創建人
機器學習@Shockang
機器學習數學基礎@Shockang
深度學習@Shockang

正文

在這里插入圖片描述

📚 引言

交叉熵是機器學習和信息論中的基礎概念,它們在模型優化、信息壓縮和不確定性量化中扮演著核心角色。本文將系統地分析這兩個概念,從理論到實踐,幫助您構建完整的理解框架。

🔄 熵 (Entropy)

📝 定義

熵源于信息論,用于量化隨機變量的不確定性或信息量。對于一個隨機變量 X X X 的概率分布 P P P

H ( P ) = ? ∑ i = 1 n p i log ? 2 p i H(P) = -\sum_{i=1}^{n} p_i \log_2 p_i H(P)=?i=1n?pi?log2?pi?

其中 p i p_i pi? 是事件 i i i 發生的概率。單位通常是比特(bit)(使用以2為底的對數時)。

🔑 核心特性

  • 非負性:熵始終 ≥ 0 \geq 0 0
  • 最大熵原理:均勻分布時熵最大
  • 最小熵原理:確定事件(概率為1)時熵為0
  • 加性:獨立隨機變量的聯合熵等于各自熵之和

📊 直觀理解

熵可以理解為平均信息量平均驚訝度

  • 高熵:事件發生很"意外",需要更多信息來描述系統
  • 低熵:事件發生很"平常",需要較少信息來描述系統

🌟 應用場景

  1. 決策樹算法:通過信息增益(熵的減少)選擇最優特征
  2. 數據壓縮:信息熵決定了數據壓縮的極限(香農極限)
  3. 密碼學:評估密碼的安全強度
  4. 特征選擇:選擇包含最多信息的特征

💻 Python代碼實現

import numpy as npdef entropy(probabilities):"""計算信息熵"""# 過濾掉零概率(避免log(0))probabilities = np.array(probabilities)probabilities = probabilities[probabilities > 0]return -np.sum(probabilities * np.log2(probabilities))# 例子1: 均勻分布 [0.5, 0.5]
print(f"均勻二項分布的熵: {entropy([0.5, 0.5])}")  # 結果為1,即最大熵# 例子2: 確定事件 [1, 0]
print(f"確定事件的熵: {entropy([1, 0])}")  # 結果為0,即最小熵# 例子3: 偏斜分布 [0.9, 0.1]
print(f"偏斜分布的熵: {entropy([0.9, 0.1])}")  # 結果約為0.469,熵較低

? 交叉熵 (Cross-Entropy)

📝 定義

交叉熵用于衡量兩個概率分布的差異,特別是真實分布 P P P 和預測/估計分布 Q Q Q 之間的差異:

H ( P , Q ) = ? ∑ i = 1 n p i log ? 2 q i H(P, Q) = -\sum_{i=1}^{n} p_i \log_2 q_i H(P,Q)=?i=1n?pi?log2?qi?

🔍 與熵的關系

  • P = Q P = Q P=Q 時, H ( P , Q ) = H ( P ) H(P, Q) = H(P) H(P,Q)=H(P)
  • 一般情況下, H ( P , Q ) ≥ H ( P ) H(P, Q) \geq H(P) H(P,Q)H(P)(信息不等式)
  • 交叉熵 = 熵 + KL散度: H ( P , Q ) = H ( P ) + D K L ( P ∣ ∣ Q ) H(P, Q) = H(P) + D_{KL}(P || Q) H(P,Q)=H(P)+DKL?(P∣∣Q)

🚀 作為損失函數的優勢

  1. 梯度穩定性:相比均方誤差,避免了梯度消失問題
  2. 概率解釋性:直接對應最大似然估計
  3. 對錯誤預測的高懲罰:預測值遠離真實值時懲罰顯著增加

💻 Python代碼實現

import numpy as np
import matplotlib.pyplot as pltdef cross_entropy(y_true, y_pred):"""計算交叉熵"""# 防止數值不穩定y_pred = np.clip(y_pred, 1e-15, 1 - 1e-15)return -np.sum(y_true * np.log2(y_pred))# 二分類示例
y_true = np.array([1, 0])  # 真實標簽:第一個類為正例# 不同預測概率的交叉熵
predictions = np.linspace(0.1, 0.9, 9)
ce_values = []for pred in predictions:y_pred = np.array([pred, 1-pred])  # 預測概率ce_values.append(cross_entropy(y_true, y_pred))print(f"預測概率為[{pred:.1f}, {1-pred:.1f}]時,交叉熵為: {ce_values[-1]:.3f}")# 可視化交叉熵隨預測概率變化
plt.figure(figsize=(10, 6))
plt.plot(predictions, ce_values, 'b-o', linewidth=2)
plt.axvline(x=1.0, color='g', linestyle='--', label='理想預測')
plt.xlabel('預測正例的概率')
plt.ylabel('交叉熵')
plt.title('交叉熵隨預測概率的變化')
plt.grid(True)
plt.show()

📊 實際應用比較

熵與交叉熵的區別

特征交叉熵
對象單個概率分布的不確定性兩個分布的差異性
適用場景信息量度量、特征選擇模型訓練損失函數
最小值確定事件(某事件概率=1)時為0當預測分布=真實分布時取最小值
數學表達 ? ∑ p i log ? p i -\sum p_i \log p_i ?pi?logpi? ? ∑ p i log ? q i -\sum p_i \log q_i ?pi?logqi?
對稱性不涉及(僅一個分布)非對稱性( H ( P , Q ) ≠ H ( Q , P ) H(P, Q) \neq H(Q, P) H(P,Q)=H(Q,P)

🛠? 實踐應用

1. 決策樹中的信息增益
# 計算信息增益
def information_gain(parent_entropy, feature_values, target_values):# 計算特征各取值的條件熵child_entropies = []weights = []unique_values = np.unique(feature_values)total_samples = len(target_values)for value in unique_values:indices = np.where(feature_values == value)[0]target_subset = target_values[indices]# 計算子集中不同類別的概率分布unique_targets = np.unique(target_subset)probs = [np.sum(target_subset == t) / len(target_subset) for t in unique_targets]# 計算條件熵child_entropy = entropy(probs)child_entropies.append(child_entropy)weights.append(len(indices) / total_samples)# 計算條件熵的加權平均conditional_entropy = np.sum(np.array(weights) * np.array(child_entropies))# 信息增益 = 父節點熵 - 條件熵return parent_entropy - conditional_entropy
2. 神經網絡分類訓練
# 基于TensorFlow/Keras的交叉熵損失示例
import tensorflow as tf
from tensorflow import keras
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split# 生成模擬數據
X, y = make_classification(n_samples=1000, n_classes=3, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 將類別轉換為one-hot編碼
y_train_onehot = keras.utils.to_categorical(y_train, 3)
y_test_onehot = keras.utils.to_categorical(y_test, 3)# 構建簡單神經網絡
model = keras.Sequential([keras.layers.Dense(64, activation='relu', input_shape=(20,)),keras.layers.Dense(32, activation='relu'),keras.layers.Dense(3, activation='softmax')  # 3個輸出類別
])# 使用交叉熵作為損失函數
model.compile(optimizer='adam',loss='categorical_crossentropy',  # 多分類交叉熵metrics=['accuracy']
)# 訓練模型
history = model.fit(X_train, y_train_onehot, epochs=10, validation_split=0.2, verbose=0)# 評估模型
test_loss, test_acc = model.evaluate(X_test, y_test_onehot)
print(f"測試精度: {test_acc:.4f}")
print(f"測試交叉熵損失: {test_loss:.4f}")

🔮 高級話題

1. 最大熵原理

最大熵原理是一種推斷方法,當我們對未知分布只有部分信息時,應該選擇滿足已知條件下熵最大的分布,這樣可以避免引入額外的不必要假設。

2. 信息瓶頸理論

信息瓶頸理論(Information Bottleneck Theory)是一種解釋深度學習的理論框架,認為深度學習的目標是找到輸入數據的一種表示,該表示:

  • 盡可能多地保留與目標相關的信息
  • 盡可能壓縮輸入的原始信息

3. 可變長度編碼

熵確定了信息的最優編碼長度。哈夫曼編碼等算法利用了這一原理,為頻率高的符號分配短碼,頻率低的符號分配長碼。

🎯 小結

  • 是量化單一分布不確定性的基礎度量
  • 交叉熵衡量兩個分布的差異,是機器學習中常用的損失函數
  • 理解這兩個概念有助于理解信息論和機器學習中的許多算法和技術
  • 實際應用中,交叉熵損失函數在分類任務中表現優異,尤其是對于概率預測問題

📖 延伸閱讀

  1. 香農的信息論原始論文
  2. KL散度及其在變分推斷中的應用
  3. 最大熵模型與其在自然語言處理中的應用
  4. 互信息與特征選擇
  5. 深度學習中的信息瓶頸理論

希望這篇文章能幫助你理解熵和交叉熵這兩個重要概念。在機器學習的旅途中,掌握這些基礎數學工具將使你事半功倍!🚀

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

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

相關文章

程序化廣告行業(3/89):深度剖析行業知識與數據處理實踐

程序化廣告行業(3/89):深度剖析行業知識與數據處理實踐 大家好!一直以來,我都希望能和各位技術愛好者一起在學習的道路上共同進步,分享知識、交流經驗。今天,咱們聚焦在程序化廣告這個充滿挑戰…

探索在生成擴散模型中基于RAG增強生成的實現與未來

概述 像 Stable Diffusion、Flux 這樣的生成擴散模型,以及 Hunyuan 等視頻模型,都依賴于在單一、資源密集型的訓練過程中通過固定數據集獲取的知識。任何在訓練之后引入的概念——被稱為 知識截止——除非通過 微調 或外部適應技術(如 低秩適…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加列寬調整功能,示例Table14基礎固定表頭示例

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏關注哦 💕 目錄 Deep…

取反符號~

取反符號 ~ 用于對整數進行按位取反操作。它會將二進制表示中的每一位取反,即 0 變 1,1 變 0。 示例 a 5 # 二進制表示為 0000 0101 b ~a # 按位取反,結果為 1111 1010(補碼表示) print(b) # 輸出 -6解釋 5 的二…

論文閱讀分享——UMDF(AAAI-24)

概述 題目:A Unified Self-Distillation Framework for Multimodal Sentiment Analysis with Uncertain Missing Modalities 發表:The Thirty-Eighth AAAI Conference on Artificial Intelligence (AAAI-24) 年份:2024 Github:暫…

WBC已形成“東亞-美洲雙中心”格局·棒球1號位

世界棒球經典賽(WBC)作為全球最高水平的國家隊棒球賽事,參賽隊伍按實力、地域和歷史表現可分為多個“陣營”。以下是基于歷屆賽事(截至2023年)的陣營劃分及代表性隊伍分析: 第一陣營:傳統豪強&a…

django中路由配置規則的詳細說明

在 Django 中,路由配置是將 URL 映射到視圖函數或類視圖的關鍵步驟,它決定了用戶請求的 URL 會觸發哪個視圖進行處理。以下將詳細介紹 Django 中路由配置的規則、高級使用方法以及多個應用配置的規則。 基本路由配置規則 1. 項目級路由配置 在 Django 項目中,根路由配置文…

【報錯】微信小程序預覽報錯”60001“

1.問題描述 我在微信開發者工具寫小程序時,使用http://localhost:8080是可以請求成功的,數據全都可以無報錯,但是點擊【預覽】,用手機掃描二維碼瀏覽時,發現前端圖片無返回且報錯60001(打開開發者模式查看日…

柵格裁剪(Python)

在地理數據處理中,矢量裁剪柵格是一個非常重要的操作,它可以幫助我們提取感興趣的區域并獲得更精確的分析結果。其重要性包括: 區域限定:地球科學研究通常需要關注特定的地理區域。通過矢量裁剪柵格,我們可以將柵格數…

【無人機路徑規劃】基于麻雀搜索算法(SSA)的無人機路徑規劃(Matlab)

效果一覽 代碼獲取私信博主基于麻雀搜索算法(SSA)的無人機路徑規劃(Matlab) 一、算法背景與核心思想 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一種受麻雀群體覓食行為啟發的元啟發式算法&#xff0…

MySQL數據庫安裝及基礎用法

安裝數據庫 第一步:下載并解壓mysql-8.4.3-winx64文件夾 鏈接: https://pan.baidu.com/s/1lD6XNNSMhPF29I2_HBAvXw?pwd8888 提取碼: 8888 第二步:打開文件中的my.ini文件 [mysqld]# 設置3306端口port3306# 自定義設置mysql的安裝目錄,即解…

軟件工程:軟件開發之需求分析

物有本末,事有終始。知所先后,則近道矣。對軟件開發而言,軟件需求乃重中之重。必先之事重千鈞,不可或缺如日辰。 汽車行業由于有方法論和各種標準約束,對軟件開發有嚴苛的要求。ASPICE指導如何審核軟件開發&#xff0…

正則表達式,idea,插件anyrule

????package lx;import java.util.regex.Pattern;public class lxx {public static void main(String[] args) {//正則表達式//寫一個電話號碼的正則表達式String regex "1[3-9]\\d{9}";//第一個數字是1,第二個數字是3-9,后面跟著9個數字…

RISC-V醫療芯片工程師復合型轉型的路徑與策略

從RISC-V到醫療芯片:工程師復合型轉型的路徑與策略 一、引言 1.1 研究背景 在科技快速發展的當下,芯片技術已然成為推動各行業進步的核心驅動力之一。其中,RISC-V 架構作為芯片領域的新興力量,正以其獨特的優勢迅速崛起,對整個芯片產業的格局產生著深遠影響。RISC-V 架…

【設計模式】掌握建造者模式:如何優雅地解決復雜對象創建難題?

概述 將一個復雜對象的構建與表示分離,使得同樣的構建過程可以創建不同的表示。 分離了部件的構造(由Builder來負責)和裝配(由Director負責)。 從而可以構造出復雜的對象。這個模式適用于:某個對象的構建過程復雜的情況。 由于實現了構建和裝配的解耦。…

量子計算對區塊鏈技術的影響:革新與挑戰

量子計算對區塊鏈技術的影響:革新與挑戰 大家好,我是你們的技術伙伴Echo_Wish。今天我們來探討一個頗具前沿性的話題——量子計算對區塊鏈技術的影響。量子計算作為新一代計算技術,其強大的計算能力為各個領域帶來了革新。然而,量…

【Java代碼審計 | 第八篇】文件操作漏洞成因及防范

未經許可,不得轉載。 文章目錄 文件操作漏洞文件讀取漏洞基于 InputStream 的讀取基于 FileReader 的讀取 文件下載漏洞文件刪除漏洞防范 文件操作漏洞 分為文件讀取漏洞、文件下載漏洞與文件刪除漏洞。 文件讀取漏洞 在Java中,文件讀取通常有兩種常見…

與rkipc通信

rkipc的通信方式 在ipcweb中,程序是通過/var/tmp/rkipc和rkipc進行通信,并且網絡和客戶端的函數封裝在luckfox-pico/project/app/ipcweb/ipcweb-backend/src/socket_client文件夾中, client.cpp是客戶端命令 socket.cpp是網絡命令 編寫rkip…

NLP常見任務專題介紹(2)-多項選擇任務(MultipleChoice)訓練與推理模板

一、 使用 BigBird 進行多項選擇任務訓練與推理 本示例展示如何使用 BigBirdForMultipleChoice 訓練一個多項選擇模型,適用于考試答題、閱讀理解、常識推理等任務。 1?? 任務描述 目標:給定一個問題和多個選項,模型預測正確答案。 數據格式:輸入包含 (問題, 選項1, 選項…

【論文解讀】MODEST 透明物體 單目深度估計和分割 ICRA 2025

MODEST是一種用于透明物體的單目深度估計和分割的方法,來自ICRA 2025。 它通過單張RGB圖像作為輸入,能夠同時預測透明物體的深度圖和分割掩碼。 由深度圖生成點云數據,然后采用GraspNet生成抓取位姿,開展透明物體抓取實驗。 論文…