損失函數理解(二)——交叉熵損失

損失函數的目的是為了定量描述不同模型(例如神經網絡模型和人腦模型)的差異。

交叉熵,顧名思義,與熵有關,先把模型換成熵這么一個數值,然后用這個數值比較不同模型之間的差異。

為什么要做這一步轉換,原因是要直接比較兩個模型,前提是兩個模型是同一種類型,比如都是高斯分布,我們可以比較均值和方差。但現實中,我們要比較的兩種模型往往不是同一種類型,甚至我們都不知道是什么類型。所以我們通過熵實現不同類型概率模型的公度


熵的前置知識

1. 信息量

衡量一個信息有沒有信息量,不是看這個消息你知不知道,關鍵是看能帶來多少確定性,也可以說能消除多少不確定性。

例如有8支隊伍參加比賽,其中一支隊伍名為“AI小隊”。理論上來說,“AI小隊”奪冠概率為1/8。但如果告訴你“AI小隊”奪冠了,奪冠概率從1/8變為百分之百;但如果告訴你“AI小隊”進入總決賽了,奪冠概率從1/8變為1/2,但直觀上感覺這個信息量不如奪冠信息的信息量高。

通過上述例子我們大概能明白不同的信息,含有的信息量是不同的。那如何定義信息量呢?


***題外話***

所謂定義,就是人為規定它的意義,給出一個表達式,至于這個表達式為什么這么寫而不那么寫,原因是最先提出的人就是這么寫的,并且邏輯得到了自洽,后人為了統一標準,便沿用了這個定義。你也可以給出自己的定義,但為了讓體系自洽,可能其他與該定義相關的表達式就要重寫。


首先,從直觀上來說,一件事發生的概率越低,其包含的信息量越大;反之一件事發生的概率越大,包含的信息量越少。例如,我告訴你太陽每天東升西落,這對你來說沒有任何信息量,因為這件事情的概率是1;但假如我告訴你下一期雙色球中獎號碼是某某某(假如是正確的話),那這個消息的信息量就很大了。因此信息量與事件發生的概率是相關的。

其次,假如一個事件可以被分解成多個事件,該事件的信息量等于多個事件信息量的和。現在我們假設f(x)是信息量的一個表達式,根據上面舉的例子,該表達式應該滿足如下要求:

f(AI小隊奪冠(進決賽且贏得決賽)) =?f(AI小隊進入決賽)+f(AI小隊進入決賽后還贏了決賽)

f(\frac{1}{8})=f(\frac{1}{4} \times \frac{1}{2})=f(\frac{1}{4})+f(\frac{1}{2})

乘法變加法,熟悉的感覺,是log!!!信息量能不能定義成log(P_{i})呢,其中P_{i}為事件i發生的概率。如此以來第二個條件滿足了,但是這樣的話信息量會隨著事件發生概率的增大而增大,那怎么辦呢?加個負號。

所以如果我們把一個事件的信息量定義為如下公式,邏輯就能自洽

H_{i}=-log(P_{i})

通常我們log以2為底,計算出的信息量的單位是比特(bit)。原因是計算機是二進制的,我們的信息量衡量了一個信息的最短編碼(不理解的同學可忽略)。

2.熵

通過上面的分析,我們給出了信息量的定義。信息量可以理解成一個事件從原來的不確定性變得確定難度有多大,信息量比較大說明難度比較高。熵的理解也類似,不過熵衡量的不是某個具體事件,而是一個系統中所有的事件,即一個系統從原來的不確定到確定,其難度有多大。

我們可以把一場比賽看作一個系統。假如兩個實力相近的隊伍比賽,兩只隊伍勝利的概率都是\frac{1}{2},那這兩只隊伍贏球的信息量都是:

I=-log_{2}\frac{1}{2}=1

但如果是兩只實力懸殊的隊伍比賽,隊伍A勝利的概率是99%,隊伍B勝利的概率為1%,那兩只隊伍贏球的信息量分別為:

I_{A}=-log_{2}\frac{99}{100}\approx 0.0145

I_{B}=-log_{2}\frac{1}{100}\approx 6.6439

那球賽的熵是兩只隊伍贏球的信息量的加和么?

顯然不是,因為如果是加和的話,實力懸殊隊伍的比賽結果相對來說是確定的,大概率是實力強的隊伍贏得比賽,所以它的不確定性是低的,但此時它的熵卻是高的,所以熵并不是信息量的簡單加和。

我們需要考慮每個事件對系統貢獻的信息量,事件只有發生了,才會貢獻信息量,所以系統的熵定義為信息量的期望:

H:= E(I)\\\\=\sum _{i=1}^{m}p_{i}I_{i}\\\\=\sum _{i=1}^{m}p_{i}(-log_{2}p_{i})\\\\=-\sum _{i=1}^{m}p_{i}\cdot log_{2}p_{i}

3.相對熵(KL散度)

我們的目的是要比較兩個模型,最簡單的方法就是把概率模型的熵計算出來然后直接比較熵的數值,但并不是所有概率模型我們都能求熵。因此引出另外一個概念——相對熵,也叫KL散度,其定義如下:

D_{KL}(P||Q)\\\\:=\sum _{i=1}^{m}p_{i}\cdot (I_{Q_{i}}-I_{P_{i}})\\\\=\sum _{i=1}^{m}p_{i}\cdot((-log_{2}q_{i})-(-log_{2}p_{i}))\\\\=\sum _{i=1}^{m}p_{i}\cdot(-log_{2}q_{i})-\sum _{i=1}^{m}p_{i}\cdot(-log_{2}p_{i})\\\\=H(P,Q)-H(P)

KL散度等于0表明兩個分布是一樣的,不等于0表示兩者有差別。其中QP分別表示兩個概率分布,D_{KL}(P||Q)表示以P為基準(P在前),用Q近似P式損失了多少信息,I_{Q_{i}}表示某個事件在系統Q中的信息量,H(P,Q)表示交叉熵,H(P)表示概率分布P的熵,我們以P為基準的話,這個值是不會變的。

由公式可知,H(P,Q)H(P)都是大于0的,但是兩者誰更大呢?這是很重要的,因為如果KL散度大于零,要使得KL越接近于0,就得讓交叉熵越小;如果KL散度小于0,要使得KL散度越接近于0,就得讓交叉熵越大。

吉布斯不等式已經證明KL散度是恒大于等于0的(感興趣的小伙伴可自行檢索證明過程),那現在我們如果想讓概率分布Q接近P,只需要最小化兩者的交叉熵即可,也就是說交叉熵可作為損失函數對模型進行優化


通過前置知識,我們引出了交叉熵,并且明白了為什么交叉熵可以衡量兩個概率分布之間的差異,也就是說可以用作損失函數。那么在神經網絡中,我們該如何利用交叉熵呢?首先我們回顧一下交叉熵的定義:

H(P,Q)=\sum _{i=1}^{m}p_{i}\cdot(-log_{2}q_{i})

我們只需要用訓練神經網絡場景中的變量替換公式中的變量即可。

m表示分類的個數,在判斷圖像是不是貓的二分類任務中,i的取值只有兩個,即i=1表示圖像是貓,i=2表示圖像不是貓;對應的,p_{i}表示每個事件發生的概率,即當前圖像是貓的概率和不是貓的概率,在模型訓練場景中,我們以人腦中的概率模型為基準,即以標簽為基準,所以p_{1}=yp_{2}=(1-y),其中y表示人類給圖像的標簽,是貓為1,不是貓為0;q則對應模型預測的當前圖像是貓的概率,即\widehat{y},而不是貓的概率就是(1-\widehat{y}),所以交叉熵用于神經網絡中的形式如下:

H=-[y\cdot log_{2}\widehat{y}+(1-y)\cdot log_{2}(1-\widehat{y})]

當然這里是二分類的情況,如果是多分類,交叉熵可進一步寫為:

H=-\sum _{i=1}^{m}y_{i}\cdot log(\widehat{y_{i}})

其中i表示類別數,y_{i}表示是類別i的概率(標簽),\widehat{y_{i}}表示模型預測的是類別i的概率。


至此,我們通過信息量和熵引出交叉熵,并介紹了交叉熵是如何用于損失計算的,希望能夠對有需要的伙伴提供幫助,如果文中有歧義或者有錯誤的地方,歡迎大家在評論區指出!

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

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

相關文章

Kubernetes的Replica Set和ReplicaController有什么區別

ReplicaSet 和 ReplicationController 是 Kubernetes 中用于管理應用程序副本的兩種資源,它們有類似的功能,但 ReplicaSet 是 ReplicationController 的增強版本。 以下是它們的主要區別: 1. 功能的演進 ReplicationController 是 Kubernete…

信息系統運行管理員教程3--信息系統設施運維

第3章 信息系統設施運維 信息系統設施是支撐信息系統業務活動的信息系統軟硬件資產及環境。 第1節 信息系統設施運維的管理體系 信息系統設施運維的范圍包含信息系統涉及的所有設備及環境,主要包括基礎環境、硬件設備、網絡設備、基礎軟件等。 信息系統設施運維…

如何通過Python實現自動化任務:從入門到實踐

在當今快節奏的數字化時代,自動化技術正逐漸成為提高工作效率的利器。無論是處理重復性任務,還是管理復雜的工作流程,自動化都能為我們節省大量時間和精力。本文將以Python為例,帶你從零開始學習如何實現自動化任務,并通過一個實際案例展示其強大功能。 一、為什么選擇Pyt…

Spring Boot 與 MyBatis Plus 整合 KWDB 實現 JDBC 數據訪問

? 引言 本文主要介紹如何在 IDEA 中搭建一個使用 Maven 管理的 Spring Boot 應用項目工程,并結合在本地搭建的 KWDB 數據庫(版本為:2.0.3)來演示 Spring Boot 與 MyBatis Plus 的集成,以及對 KWDB 數據庫的數據操作…

Java鎖等待喚醒機制

在 Java 并發編程中,鎖的等待和喚醒機制至關重要,通常使用 wait()、notify() 和 notifyAll() 來實現線程間的協調。本文將詳細介紹這些方法的用法,并通過示例代碼加以說明。 1. wait()、notify() 與 notifyAll() 在 Java 中,Obj…

? UNIX網絡編程筆記:TCP客戶/服務器程序示例

服務器實例 有個著名的項目&#xff0c;tiny web&#xff0c;本項目將其改到windows下&#xff0c;并使用RAII重構&#xff0c;編寫過程中對于內存泄漏確實很頭疼&#xff0c;還沒寫完&#xff0c;后面會繼續更&#xff1a; #include <iostream> #include <vector&g…

AI Agent開發大全第四課-提示語工程:從簡單命令到AI對話的“魔法”公式

什么是提示語工程&#xff1f;一個讓AI“聽話”的秘密 如果你曾經嘗試過用ChatGPT或者其他大語言模型完成任務&#xff0c;那么你一定遇到過這樣的情況&#xff1a;明明你的問題是清晰的&#xff0c;但答案卻離題萬里&#xff1b;或者你認為自己提供的信息足夠詳盡&#xff0c…

系統架構設計知識體系總結

1.技術選型 1.什么是技術選型&#xff1f; 技術選型是指評估和選擇在項目或系統開發中使用的最合適的技術和工具的過程。這涉及考慮基于其能力、特性、與項目需求的兼容性、可擴展性、性能、維護和其他因素的各種可用選項。技術選型的目標是確定與項目目標相符合、能夠有效解…

基于3DMax與Vray引擎的輕量級室內場景渲染實踐

歡迎踏入3DMAX室內渲染的沉浸式學習之旅!在這個精心設計的實戰教程中,我們將攜手揭開3DMAX與Vray這對黃金搭檔在打造現實室內場景時的核心奧秘。無論您是渴望入門的3D新手,還是追求極致效果的專業設計師,這里都將為您呈現從場景藍圖構建到光影魔法施加的完整技術圖譜。我們…

邏輯卷,vdo,(阿里加速器)

一、邏輯卷 10 20 30 1.邏輯卷的2個特點 &#xff08;1&#xff09;邏輯卷可以將多個分區或者磁盤整合成一個更大的邏輯磁盤&#xff0c;然后可以從邏輯磁盤上劃分出分區&#xff08;邏輯磁盤的大小等于整合的物理磁盤大小之和。&#xff09; &#xff08;2&#xff09;能…

檢索增強生成(2)本地PDF 本地嵌入模型

from langchain_community.document_loaders import PyPDFLoader from pathlib import Pathdef load_local_pdf(file_path):if not Path(file_path).exists():raise FileNotFoundError(f"文件 {file_path} 不存在&#xff01;")loader PyPDFLoader(file_path)try:do…

安全守護:反光衣檢測技術的革新之路

視覺分析助力船上工人反光衣檢測 在現代工業生產與作業環境中&#xff0c;安全始終是首要考慮的因素。對于水上作業&#xff0c;如船舶維護、海上施工等場景&#xff0c;工人穿戴反光衣是預防事故、提高可見性的重要措施。然而&#xff0c;傳統的人工檢查方式不僅效率低下&…

【Scrapy】Scrapy教程8——處理子鏈接

通過前面幾篇文章,已經了解了如何去爬取網頁內容并存儲到數據庫,但是目前只是存儲了一個頁面的內容,現在想要獲取每篇文章鏈接內的文章內容,我們來看看怎么獲取。 生成新請求 首先我們肯定要先拿到鏈接,所以第一步都獲取文章標題和鏈接肯定少不了,然后再爬取獲取到到子…

Centos6配置yum源

Centos6配置yum源 為Centos6配置CentOS Vault源—防止yum源過期為Centos6配置epel源為Centos6配置ELRepo源---已ELRepo被官方清空Centos6安裝dockerdocker配置國內鏡像加速 為Centos6配置CentOS Vault源—防止yum源過期 參考&#xff1a;https://mirrors.ustc.edu.cn/help/cen…

“智改數轉”新風口,物聯網如何重構制造業競爭力?

一、政策背景 為深化制造業智能化改造、數字化轉型、網絡化聯接&#xff0c;江蘇省制定了《江蘇省深化制造業智能化改造數字化轉型網絡化聯接三年行動計劃&#xff08;2025&#xff0d;2027年&#xff09;》&#xff0c;提出到2027年&#xff0c;全省制造業企業設備更新、工藝…

制作Oracle11g Docker 鏡像

基于Linux系統&#xff0c;宿主主機要設置如下環境變量&#xff0c;oracle為64位版本 dockerfile中需要的數據庫安裝包可從csdn下載內找到 #!/bin/bash # 在宿主機上運行以設置Oracle所需的內核參數 # 這些命令需要root權限cat > /etc/sysctl.d/99-oracle.conf << EO…

從GTC2025首次量子日看英偉達量子AI融合算力網絡前景與趨勢

GTC2025 Quantum Day 最新內容全部匯總: 技術名稱描述合作伙伴/開發者應用場景/目標量子模擬器優化方案NVIDIA與IonQ、D-Wave合作,針對量子模擬器進行性能優化,提升量子計算任務效率。IonQ、D-Wave量子算法開發、復雜系統模擬混合量子-經典計算架構結合量子計算與經典GPU加速…

UE4學習筆記 FPS游戲制作12 添加第二把槍,制作槍的父類,動態生成物體,切換武器

我們添加一個發射器類型的槍 我們目前有了一個Rifle的槍械藍圖&#xff0c;我們在添加Launcher時&#xff0c;需要為他們添加一個父類&#xff0c;將公共方法放到父類里&#xff0c;方法體由子類實現 添加父類 方法1 新建一個Gun的藍圖&#xff0c;Gun繼承Actor&#xff0c;…

【原創首發】開源基于AT32 SIP/VOIP電話

前言 本次為了反饋各位粉絲的關注&#xff0c;特此分享 AT32_VOIP 工程&#xff0c;此功能其實跟我之前發過的《STM32F429的VOIP功能》是一樣的&#xff0c;只是用了AT32F437。 其實那個工程是一個比較Demo中的Demo&#xff0c;很多功能和硬件依賴性太大了。后面項目中發現AT…

通俗易懂搞懂@RequestParam 和 @RequestBody

&#x1f4cc; 博主簡介: &#x1f4bb; 努力學習的 23 級科班生一枚 &#x1f680;&#x1f3e0; 博主主頁 &#xff1a; &#x1f4ce; 灰陽陽&#x1f4da; 往期回顧 &#xff1a;Session和Cookie我不允許你不懂&#x1f4ac; 每日一言&#xff1a; 「流水不爭先&#xff0c…