一文理解什么是交叉熵損失函數以及它的作用

今天看一個在深度學習中很枯燥但很重要的概念——交叉熵損失函數。

作為一種損失函數,它的重要作用便是可以將“預測值”和“真實值(標簽)”進行對比,從而輸出 loss 值,直到? loss 值收斂,可以認為神經網絡模型訓練完成。

那么這個所謂的“交叉熵”到底是什么,為什么它可以用來作為損失函數呢?

1、熵與交叉熵

“交叉熵”包含了“交叉”和“熵”這兩部分。

關于“熵”的描述在理解熵的本質一文中有更詳細的說明。總的來說,熵可以用來衡量一個隨機變量的不確定性,數學上可表示為:

H(i)?= -?∑?P(i) * log(P(i))

對于上面的公式,我們稍微變一下形,將負號和 log(P(i)) 看做一個變量,得到:

PP(i)?= -log(p(i))

那么熵的公式就可以寫作:H(i) =?∑?P(i) * PP(i)

此時熵的公式中,P(i) 和 PP(i) 是服從相同的概率分布。因此,熵H(i)就變成了事件?PP(i) 發生的數學期望,通俗理解為均值。

熵越大,表示事件發生的不確定性越大。而交叉熵是用于比較兩個概率分布之間的差異,對于兩個概率分布 P 和 Q?而言,

交叉熵定義為:

H(i)?=?∑?P(i) * Q(i)

此時,P(i) 和 Q(i) 服從兩種不同的概率分布,交叉熵的“交叉”就體現在這。

其中 P(i) 為真實分布,也就是訓練過程中標簽的分布;Q(i) 為預測分布,也就是模型每輪迭代輸出的預測結果的分布。

交叉熵越小,表示兩個概率分布越接近。

從而模型預測結果就越接近真實標簽結果,說明模型訓練收斂了。

關于更細節的數學原理,可以查看熵的本質,不過我們也可以不用深究,理解上述結論就可以。

2、交叉熵作為損失函數

假設有一個動物圖像數據集,其中有五種不同的動物,每張圖像中只有一只動物。

來源:https:?//www.freeimages.com/

我們將每張圖像都使用 one-hot 編碼來標記動物。對one-hot編碼不清楚的可以移步這里有個你肯定能理解的one-hot。

上圖是對動物分類進行編碼后的表格,我們可以將一個one-hot 編碼視為每個圖像的概率分布,那么:

第一個圖像是狗的概率分布是 1.0 (100%)。

對于第二張圖是狐貍的概率分布是1.0(100%)。

以此類推,此時,每個圖像的熵都為零。

換句話說,one-hot 編碼標簽 100% 確定地告訴我們每張圖像有哪些動物:第一張圖片不可能 90% 是狗,10% 是貓,因為它100%是狗。

因為這是訓練的標簽,是固定下來的確定分布。

現在,假設有一個神經網絡模型來對這些圖像進行預測,在神經網絡執行完一輪訓練迭代后,它可能會對第一張圖像(狗)進行如下分類:

該分類表明,第一張圖像越 40%的概率是狗,30%的概率是狐貍,5%的概率是馬,5%的概率是老鷹,20%的概率是松鼠。

但是,單從圖像標簽上看,它100%是一只狗,標簽為我們提供了這張圖片的準確的概率分布。

那么,此時如何評價模型預測的效果呢?

我們可以計算利用標簽的one-hot編碼作為真實概率分布 P,模型預測的結果作為 Q 來計算交叉熵:

結果明顯高于標簽的零熵,說明預測結果并不是很好。

繼續看另一個例子。

假設模型經過了改良,在完成一次推理或者一輪訓練后,對第一張圖得到了如下的預測,也就是說這張圖有98%的概率是狗,這個標簽的100%已經差的很少了。

我們依然計算交叉熵:

可以看到交叉熵變得很低,隨著預測變得越來越準確,交叉熵會下降,如果預測是完美的,它就會變為零。

基于此理論,很多分類模型都會利用交叉熵作為模型的損失函數。

在機器學習中,由于多種原因(比如更容易計算導數),對數 log 的計算大部分情況下是使用基數 e 而不是基數 2 ,對數底的改變不會引起任何問題,因為它只改變幅度。

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

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

相關文章

【Java用法】Hutool樹結構工具-TreeUtil快速構建樹形結構的兩種方式 + 數據排序

Hutool樹結構工具-TreeUtil快速構建樹形結構的兩種方式 數據排序 一、業務場景二、Hutool官網樹結構工具2.1 介紹2.2 使用2.2.1 定義結構2.2.2 構建Tree2.2.3 自定義字段名 2.3 說明 三、具體的使用場景3.1 實現的效果3.2 業務代碼3.3 實現自定義字段的排序 四、踩過的坑4.1 坑…

策略產品經理常用的ChatGPT通用提示詞模板

產品策略:請幫助我制定一個策略產品的產品策略。 市場調研:如何進行策略產品的市場調研? 競爭分析:如何進行策略產品的競爭分析? 用戶畫像:如何構建策略產品的用戶畫像? 產品定位&#xff1…

交換排序(冒泡排序)(快速排序(1))

目錄 1.交換排序 (1)冒泡排序 (2)快速排序 1.交換排序 基本思想:所謂交換,就是根據序列中兩個記錄鍵值的比較結果來對換這兩個記錄在序列中的位置,交換排序的特點是:將鍵值較大的…

ambari hive on Tez引擎一直卡住

hive on tez使用./bin/hive啟動后一直卡住,無法進入命令行 使用TEZ作為Hive默認執行引擎時,需要在調用Hive CLI的時候啟動YARN應用,預分配資源,這需要花一些時間,而使用MapReduce作為執行引擎時是在執行語句的時候才會…

iPaaS架構深入探討

在數字化時代全面來臨之際,企業正面臨著前所未有的挑戰與機遇。技術的迅猛發展與數字化轉型正在徹底顛覆各行各業的格局,不斷推動著企業邁向新的前程。然而,這一數字化時代亦衍生出一系列復雜而深奧的難題:各異系統之間數據孤島、…

基于SuperMap iObjects Java生成地圖瓦片

作者:dongyx 前言 在GIS領域,地圖瓦片技術作為GIS領域的關鍵技術,是提高地圖服務性能的關鍵手段之一。通過預先生成地圖的瓦片數據,可以顯著提升用戶訪問地圖時的響應速度和體驗。SuperMap iObjects for Java作為一款強大的GIS開…

Docker, Docker-compose部署Sonarqube

參考文檔 鏡像地址: https://hub.docker.com/_/sonarqube/tags Docker部署文檔地址 Installing from Docker | SonarQube Docs Docker-compose文檔部署地址: Installing from Docker | SonarQube Docs 部署鏡像 2.1 docker部署 # 宿主機執行 $. vi /etc/sysctl.conf…

Java注解詳解

概述 注解是對程序代碼進行標注和解釋的一種方式。在Java中,注解提供了一種元數據形式,能夠在程序中嵌入有關程序的信息,以便進行進一步的處理。注解通過使用符號來聲明,如Override、Deprecated等。 注解和注釋的區別 注釋&…

Unity中Batching優化的GPU實例化(4)

文章目錄 前言一、構建需要實例化的額外數據二、在頂點著色器,將實例化 ID 從 appdata 存入 v2f 傳給片元著色器三、在片斷著色器中訪問具體的實例化變量三、使用代碼修改Shader材質屬性,實現GPU實例化后不同對象顏色不同的效果1、在C#測試腳本生成小板凳…

ReactJs筆記摘錄

前言 以前2018年搞過一段時間react antd開發&#xff0c;兜兜轉轉又回到react世界。 TODO中 Hook函數 JSX語法 根元素與斜杠 注意局部的jsx片段也要加根元素: return (<div>{items.map((item) > (// 此處只能有一個根元素!!!<>...<div className&quo…

要求CHATGPT高質量回答的藝術:提示工程技術的完整指南—第 23 章:命名實體識別提示

要求CHATGPT高質量回答的藝術&#xff1a;提示工程技術的完整指南—第 23 章&#xff1a;命名實體識別提示 命名實體識別&#xff08;NER&#xff09;是一種允許模型對文本中的命名實體&#xff08;如人物、組織、地點和日期&#xff09;進行識別和分類的技術。 要在 ChatGPT…

微前端介紹

目錄 微前端概念 微前端特性 場景演示 微前端方案 iframe 方案 qiankun 方案 micro-app 方案 EMP 方案 無界微前端 方案 無界方案 成本低 速度快 原生隔離 功能強大 總結 前言&#xff1a;微前端已經是一個非常成熟的領域了&#xff0c;但開發者不管采用哪個現…

Leetcode—290.單詞規律【簡單】

2023每日刷題&#xff08;五十一&#xff09; Leetcode—290.單詞規律 實現代碼 class Solution { public:bool wordPattern(string pattern, string s) {unordered_map<char, string> m1;unordered_map<string, char> m2;stringstream stro(s);string tmp;for(a…

(env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序

應公司需求&#xff0c;在特定情況下需要修改ip 在開發過程中出現的小插曲 1、第一種情況&#xff1a;重復聲明 2、第二種情況&#xff1a; 應官方要求&#xff0c;需要跳轉的 tabBar 頁面的路徑&#xff08;需在 pages.json 的 tabBar 字段定義的頁面&#xff09;&#xff0…

React中使用TypeScript代替prop-types

原文鏈接 公眾號-React中使用TypeScript代替prop-types 個人公眾號&#xff0c;嗚嗚嗚&#xff0c;求各位大佬們關注下&#xff0c;本人的公眾號主要寫React 跟NodeJs的 ?關于prop-types 對于部分的同學&#xff0c;不大了解為什么我們的代碼里面要用到prop-types這個庫&a…

ArkTS快速入門

一、概述 ArkTS是鴻蒙生態的應用開發語言。它在保持TypeScript&#xff08;簡稱TS&#xff09;基本語法風格的基礎上&#xff0c;對TS的動態類型特性施加更嚴格的約束&#xff0c;引入靜態類型。同時&#xff0c;提供了聲明式UI、狀態管理等相應的能力&#xff0c;讓開發者可以…

深度學習基礎回顧

深度學習基礎 淺層網絡 VS 深層網絡深度學習常用的激活函數Sigmoid 函數ReLU 函數Softplus 函數tanh函數 歸納偏置CNN適用數據歸納偏置 RNN適用數據歸納偏置 淺層網絡 VS 深層網絡 淺層神經網絡參數過多&#xff0c;導致模型的復雜度和計算量很高&#xff0c;難以訓練。而深層…

Redisson的基礎使用(2)

布隆過濾器&#xff08;Bloom Filter&#xff09; 布隆過濾器一般用于解決緩存穿透的問題。主要原理是使用一組哈希函數&#xff0c;將元素映射成一組位數組中的索引位置。如果要檢查某個元素是否在集合中時&#xff0c;將此元素通過所有的哈希函數&#xff0c;查看哈希值對應的…

硬件開發筆記(十五):RK3568底板電路VGA顯示接口原理圖分析

若該文為原創文章&#xff0c;轉載請注明原文出處 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134849296 紅胖子網絡科技博文大全&#xff1a;開發技術集合&#xff08;包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬…

多態和繼承復習

與其明天開始&#xff0c;不如現在行動&#xff01; 文章目錄 多態多態成立的條件細節 繼承&#x1f48e;總結 多態 多態成立的條件 存在繼承關系或者實現關系子類重寫父類的方法父類引用指向子類對象 細節 通過父類的引用調用子類的對象 Animal animal new Dog();animal…