極大似然估計(MLE)推導與3D視覺化
B站影片講解:
https://
b23。tv/av54346038
jupyter-notebook原始碼:
https://
github。com/aespresso/a_
journey_into_math_of_ml
極大似然估計
是神經網路和很多複雜模型得以最佳化求解的理論基礎, 我們今天來學習並試著深入理解極大似然估計的原理和推導, 最後我們對極大似然估計進行3D視覺化, 建立一種直觀的認識。
要理解
極大似然估計
是什麼, 首先要明白
機率密度(質量)函式
是什麼, 如果你不知道的話, 那就簡短解釋一下:
機率密度函
數用來描述某個隨機變數取某個值的時候,取值點所對應的的機率
的函式, 舉個例子, 我們現在有一個機率分佈, 屬於正態分佈:
其中
是均值,
是標準差。 如果你不熟悉正態分佈, 我們簡單回顧一下
指的是均值, 在下圖中, 均值是0則正態分佈的機率在均值處機率最高, 以均值為中心兩邊是對稱的,
是標準差, 標準差控制著機率分佈偏離均值的程度, 標準差越大機率分佈越扁平, 越小的話, 機率分佈越集中於均值, 大家可以下載python原始碼進行試驗。
我們另有一個
資料點
, 是一個
隨機變數
, 取
, 我們將
代入
得出下圖出中
綠色直線
所對應的
軸的長度, 也就是得到了
, 這是一個
條件機率
, 指的是給定機率分佈的的引數
的情況下,
的機率是多少。
draw_likelihood
([
2。5
],
mu
=
0
,
sigma
=
2
)
上圖的意義為
在上面定義的正態分佈中的機率, 也就是給定一個機率分佈, 隨機變數在這個機率分佈中出現的可能性, 而
就是機率密度函式。
機率質量函式是離散的, 機率密度函式是連續的, 意義相同, 為了視覺化的方便, 今天用機率密度函式來講解極大似然估計。
機率和似然的區別
:
機率
,是在已知一些機率分佈引數的情況下,預測觀測的結果;
似然
則是用於在已知某些觀測所得到的結果時,對觀測結果所屬於的的機率分佈的引數進行估計。
極大似然估計
的目的在於找到一個最符合當前觀測資料的機率分佈。
我們先理解似然函式是什麼
例如下面兩圖中:
紅色圓點
指的是觀測到的隨機變數,
藍色的線
是機率密度函式的影象,
綠色的直線的長度
指的是是觀測的資料出現在當前機率分佈中的可能性, 也就是機率, 機率是介於
之間的實數, 我們用
來表示綠色線的長度, 也就是機率。
我們假設有一組觀測到的資料, 一共有
個,
, 我們推斷這一組資料屬於一個機率分佈, 是一個正態分佈, 它的機率密度函式為
, 我們將
裡的資料點帶入到
裡, 得到每個資料點在我們假設的機率分佈中的出現的可能性, 注意我們接下來簡寫
為
:
那麼這一組資料
在假設的機率分佈中的出現的可能性就是他們機率的乘積:
上式中, 我們用
來表示似然函式, 意義為已知觀測到的資料點
, 用似然函式
來估計引數
的可能性, 由此可見,似然函式也是一種
條件機率函式
,但我們關注的變數改變了。
從上面兩圖可得, 上圖圖中所假設的機率分佈求出的似然函式取值顯然比下面的小, 因為有很接近於
的數值, 這讓似然函式乘積的結果變得非常小。 我們可以得出結論, 下圖的機率分佈引數更符合觀測到的資料點的機率分佈,而
最大似然估計
的目的就是找到一個最符合當前資料的分佈的引數。
我們做個試驗, 先從均值為
, 標準差為
正態分佈中隨機抽取
個數據點, 作為我們觀測到的資料;
之後我們定義一個估計引數的取值範圍, 均值在
之間, 標準差在
之間;
然後我們將所有的資料點和我們估計的每一組引數代入似然函式, 也就是
中, 求得每一組引數的似然值, 下圖可見, 似然函式的值約在
時取得極大值(因為資料點太少有些誤差);
我們發現似然函式的影象是凸函式, 我們就可以用很多最佳化的方法求它的極大值了。
找到似然函式極大值的過程就是極大似然估計的過程。
對數似然值
, 我們對似然函式取
, 就得到了對數似然函式, 這也是平時在神經網路最佳化中最常用的損失函式:
為什麼要對似然函式取對數?
1。 首先原本的似然函式是很多條件機率的乘積, 我們在找極大值的時候需要求似然函式的導數, 而乘積的導數不方便計算, 取對數可以吧乘除變成加減;
2。 對似然函式取對數, 原本函式的極大值的位置沒有改變;
3。 如果觀測到的資料點比較多, 原始似然函式的乘積可能非常接近於
, 甚至超出計算機的儲存位數限制, 這樣就全變成
了, 取對數可以把接近於
的數變成很大的負數, 也就是把原本似然函式的取值範圍從
到
擴充套件到了
到
, 方便了計算。
我們下面對
進行3D視覺化, 可看到原始的似然函式和對數似然函式的最高點是一樣的位置, 而且函式的影象變得更加平滑, 而且輸出的數值也不那麼接近於
了: