MachineLearning(9)-最大似然、最小KL散度、交叉熵損失函數三者的關系

最大似然-最小KL散度-最小化交叉熵損失-三者的關系

問題緣起:給定一組數據(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm),希望找到這組數據服從的分布。此種情況下,分布規律用概率密度p(x)表征。

問題歸處:如果能夠建模/近似建模p(x),就能夠利用p(x)進行采樣/數據生成。離散化x的空間{xi}i=1n\{x_i\}_{i=1}^n{xi?}i=1n?, 計算{p(xi)}i=1n\{p(x_i)\}_{i=1}^n{p(xi?)}i=1n?,取概率最大的xkx_kxk?作為生成樣本。

最大似然:常用來解決這類問題。具體做法:參數還一個概率分布qθ(x)q_\theta(x)qθ?(x),是的觀測樣本(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm)qθ(x)q_\theta(x)qθ?(x)的似然函數最大。

似然函數:表示的是已知隨機變量的取值時,未知參數的取值可能性:L(θ|x)=P(X=x|θ)。直觀理解就是在參數θ\thetaθ情況下,出現(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm)這組數據的可能性,數學表達式為(概率密度積分記為概率):
L(θ∣x)=∏i=1mpθ(xi)(1)L(θ|x)=\prod_{i=1}^m p_\theta(x_i)\tag{1}L(θx)=i=1m?pθ?(xi?)(1)

我們需要調整參數θ\thetaθ來使這個出現這組數據的可能性最大,即最大似然。

為了簡化似然函數中的連乘計算,常常會使用對數似然函數,使得連乘轉變為連加(取對數不會改變似然的最優解–最優解是自變量的值,最優解值才是因變量的值)。

最大化對數似然問題可以統一為下式,即 最優的參數 是使 對數似然的值最大的θ\thetaθ
θ?=arg?max?θlog?∏i=1mpθ(xi)=arg?max?θ∑i=1mlog?pθ(xi)=arg?max?θ∑i=1m1mlog?pθ(xi)≈arg?max?θEx~p[log?pθ](2)\theta^* = \arg \max_{\theta} \log\prod_{i=1}^m p_\theta(x_i)\\ =\arg \max_{\theta} \sum_{i=1}^m\log p_{\theta}(x_i)\\ =\arg \max_{\theta} \sum_{i=1}^m\frac{1}{m}\log p_{\theta}(x_i)\\ \approx\arg \max_{\theta}\mathbb{E}_{x\sim p}[\log p_{\theta}]\tag{2}θ?=argθmax?logi=1m?pθ?(xi?)=argθmax?i=1m?logpθ?(xi?)=argθmax?i=1m?m1?logpθ?(xi?)argθmax?Exp?[logpθ?](2)

上式子第三行到第四行的轉換 為 均值 近似 期望 的離散化計算過程。ppp為目標函數,pθp_\thetapθ?用于近似目標函數為了避免混淆,將pθp_\thetapθ?qθq_\thetaqθ?表示。上式子可改寫成:
θ?=arg?max?θEx~p[log?qθ](3)\theta^* =\arg \max_{\theta}\mathbb{E}_{x\sim p}[\log q_{\theta}]\tag{3}θ?=argθmax?Exp?[logqθ?](3)

最小KL散度:在上式子中加上一項與優化無關的常數項:
θ?=arg?max?θ{Ex~p[log?qθ]?Ex~p[log?p]}=arg?max?θ{∫xp(x)log?qθ(x)p(x)dx}=arg?max?θ?KL(p,q)=arg?min?θKL(p,q)(4)\theta^* =\arg \max_{\theta}\{\mathbb{E}_{x\sim p}[\log q_{\theta}]-\mathbb{E}_{x\sim p}[\log p]\}\\ =\arg \max_{\theta}\{\int_xp(x)\log\frac{q_\theta(x)}{p(x)}dx\}\\ =\arg \max_{\theta} -KL(p,q)\\ =\arg \min_{\theta} KL(p,q)\tag{4}θ?=argθmax?{Exp?[logqθ?]?Exp?[logp]}=argθmax?{x?p(x)logp(x)qθ?(x)?dx}=argθmax??KL(p,q)=argθmin?KL(p,q)(4)

交叉熵損失
式(2)添一個負號后可以轉換為最小化交叉熵的問題:
arg?max?θEx~p[log?pθ]=arg?min?θcrossentropy(p,qθ)(5)\arg \max_{\theta}\mathbb{E}_{x\sim p}[\log p_{\theta}]\\=\arg \min_{\theta}cross\ entropy(p,q_\theta)\tag{5}argθmax?Exp?[logpθ?]=argθmin?cross?entropy(p,qθ?)(5)

綜上
1.求解最大似然問題 等價于 最小化參數分布和目標分布的KL散度

2.常用于分類問題中的交叉熵損失函數 本質是 極大似然問題,也就是在最小化 目標分布模型輸出分布的之間的KL散度問題。在實際K分類問題中, 目標分布用one-hot編碼表示; 神經網絡模型最后全聯接層輸出的K個得分數值 可以通過softmax 歸一化成對應類別的概率分布,即模型輸出分布。

參考資料:
似然函數參見百度百科:https://baike.baidu.com/item/%E4%BC%BC%E7%84%B6%E5%87%BD%E6%95%B0/6011241?fr=aladdin

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

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

相關文章

ThinkPHP redirect 頁面重定向使用詳解與實例

ThinkPHP redirect 方法ThinkPHP redirect 方法可以實現頁面的重定向(跳轉)功能。redirect 方法語法如下:$this->redirect(string url, array params, int delay, string msg) 參數說明:url 必須,重定向的 URL 表達…

PaperNotes(9)-Learning deep energy model: contrastive divergence vs. Amortized MLE

Learning deep energy model: contrastive divergence vs. Amortized MLEabstract1 Introduction2 Background2.1 stein variational gradient descent2.2 learning energy model**contrastive Divergence**abstract 受SVGD算法的啟發,本文提出兩個算法用于從數據中學習深度能…

windows下的gvim配置

首要任務是下載安裝Gvim7.3 。 安裝完后,gvim菜單中文出現亂碼,在_vimrcset文件中增加: " 配置多語言環境,解決中文亂碼問題 if has("multi_byte") " UTF-8 編碼 set encodingutf-8 set termencodingutf…

leetcode104 二叉樹的最大深度

給定一個二叉樹,找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度…

C++的安全類型轉換的討論

關于強制類型轉換的問題,很多書都討論過,寫的最詳細的是C++ 之父的《C++的設計和演化》。最好的解決方法就是不要使用C風格的強制類型轉換,而是使用標準C++的類型轉換符:static_cast, dynamic_cast。標準C++中有四個類型轉換符:static_cast、dynamic_cast、reinterpret_ca…

PaperNotes(10)-Maximum Entropy Generators for Energy-Based Models

Maximum Entropy Generators for Energy-Based ModelsAbstract1 Introduction2 Background3 Maximum Entropy Generators for Energy-Based Models4 Experiments5 Related Work6 Conclusion7 AcknowledgementsAbstract 由于對數似然梯度的難以計算,能量模型的最大似…

leetcode105 前序中序遍歷序列構造二叉樹

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重復的元素。 例如,給出 前序遍歷 preorder [3,9,20,15,7] 中序遍歷 inorder [9,3,15,20,7] 返回如下的二叉樹: 3 / \ 9 20 / \ 15 7 思路: 1、…

c++的虛擬繼承 的一些思考吧

虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。如:類D繼承自類B1、B2,而類B1、B2都繼承自類A,因此在類D中兩次出現類A中的變量和函數。為了節省內存空間,可以將B1、B2對A的繼承定義為虛擬繼承,而A就成了虛擬基類。實現的代碼如下: class A class …

對于linux socket與epoll配合相關的一些心得記錄

對于linux socket與epoll配合相關的一些心得記錄 沒有多少高深的東西,全當記錄,雖然簡單,但是沒有做過測試還是挺容易讓人糊涂的int nRecvBuf32*1024;//設置為32Ksetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int))…

leetcode144 二叉樹的前序遍歷

給定一個二叉樹,返回它的 前序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,2,3] 進階: 遞歸算法很簡單,你可以通過迭代算法完成嗎? 思路:模仿遞歸的思路壓棧即可。 /*** Definition for a bi…

AJAX大總結

1、AJAX概述 1.1 什么是AJAX AJAX(Asynchronous Javascript And XML)翻譯成中文就是“異步Javascript和XML”。即使用Javascript語言與服務器進行異步交互,傳輸的數據為XML(當然,傳輸的數據不只是XML)。 …

我對STL的一些看法(一)初步認識STL

后面一段時間我將會給大家分享我自己學到STL以及應用的時候遇到的問題還有他的一些精髓,可能開始的邏輯會有些亂吧,不過后面還會不斷的整理和優化,讓自己看明白也讓更多的讀者看的清楚。 最近剛閑下來,先說說什么是STL: 不知道你是否有過這樣的經歷。在大學,你準備著手完…

PaperNotes(12)-Autoregressive Quantile networks for generative modeling

Autoregressive Quantile networks for generative modeling3 autoregressive implicit quantiles3 autoregressive implicit quantiles autoregressive:自身做回歸變量,用之前若干時刻的隨機變量 來建模 之后某些時刻 隨機變量的模型。 N維隨機變量的…

我對STL的一些看法(二)認識vector容器

先說vector吧。 C++ Vector(向量容器) 是一個線性順序結構。相當于數組,但其大小可以不預先指定,并且自動擴展。它可以像數組一樣被操作,由于它的特性我們完全可以將vector 看作動態數組。 vector 的數據安排以及操作方式,與 array 非常像似。兩者的唯一差別在于空間的…

git大總結

git init 在本地新建一個repo,進入一個項目目錄,執行git init,會初始化一個repo,并在當前文件夾下創建一個.git文件夾. git clone 獲取一個url對應的遠程Git repo, 創建一個local copy. 一般的格式是git clone [url]. clone下來的repo會以url最后一個斜線后面的名稱命名,創…

我對STL的一些看法(三)認識list容器

C++ List(雙向鏈表) 是一個線性鏈表結構,它的數據由若干個節點構成,每一個節點都包括一個信息塊(即實際存儲的數據)、一個前驅指針和一個后驅指針。它無需分配指定的內存大小且可以任意伸縮,這是因為它存儲在非連續的內存空間中,并且由指針將有序的元素鏈接起來。由于…

C++(4)--初識變量、數據類型

C變量1.C 命名規則2.C 命名規范3.C 數據類型sizeof ()4.聲明和使用變量4.1使用整型變量4.2使用單精度浮點型變量4.3使用雙精度浮點型變量5.附送-cout 設置寬度,對齊方式6.算術運算符和表達式6.1除法、取余6.2自加、自減7.強制類型轉換《老九學堂C課程》《C primer》…

我對STL的一些看法(四)認識deque容器

Deque(雙向隊列) 是一種優化了的、對序列兩端元素進行添加和刪除操作的基本序列容器。它允許較為快速地隨機訪問,但它不像vector 把所有的對象保存在一塊連續的內存塊,而是采用多個連續的存儲塊,并且在一個映射結構中保存對這些塊及其順序的跟蹤。向deque 兩端添加或刪除元…

我對STL的一些看法(五)初識關聯容器

3關聯容器 pair類型 這個是一個簡單的標準庫類型,該類型在utility頭文件中定義,我們來看看他主要的操作: pair<T1 ,T2> p1; 創建一個空的pair對象 pair<T1,T2> p1(v1,v2);創建一個pair對象,他的兩個元素分別為T1類型的v1,T2類型的v2 make_pair(v1,v2…

關系數據庫——mysql數據類型大總結

整數類型&#xff1a; 實數類型&#xff1a; 定點數&#xff1a;DECIMAL和NUMERIC類型在MySQL中視為相同的類型。它們用于保存必須為確切精度的值。 DECIMAL(M,D)&#xff0c;其中M表示十進制數字總的個數&#xff0c;D表示小數點后面數字的位數。 如果存儲時&#xff0c;整…