一、理解熵
1、首先看到這個詞會產疑問,熵是什麼?誰定義的?用來幹什麼的?為什麼機器學習會用到熵?
有了這些疑問後慢慢的開始探索~
複製程式碼
熵,熱力學中表徵物質狀態的參量之一,用符號S表示,其物理意義是體系混亂程度的度量。 克勞修斯(T.Clausius) 於1854年提出熵(entropie)的概念, 我國物理學家胡剛復教授於1923年根據熱溫商之意首次把entropie譯為“熵”。A.Einstein曾把熵理論在科學中的地位概述為“熵理論對於整個科學來說是第一法則”。
為了理解熵,必須講一點物理學。
19世紀,物理學家開始認識到,世界的動力是能量,並且提出"能量守恆定律",即能量的總和是不變的。但是,有一個現象讓他們很困惑。
(上圖中,單擺在兩側的最高點,勢能最大,動能為零;在中間的低點,動能最大,勢能為零,能量始終守恆。)物理學家發現,能量無法百分百地轉換。比如,蒸汽機使用的是熱能,將其轉換為推動機器的機械能。這個過程中,總是有一些熱能損耗掉,無法完全轉變為機械能。
(上圖中,能量 E 的轉換,總是會導致能量損耗 ∆E。)
一開始,物理學家以為是技術水平不高導致的,但後來發現,技術再進步,也無法將能量損耗降到零。他們就將那些在能量轉換過程中浪費掉的、無法再利用的能量稱為熵。
後來,這個概念被總結成了"熱力學第二定律":能量轉換總是會產生熵,如果是封閉系統,所有能量最終都會變成熵。
熵既然是能量,為什麼無法利用?它又是怎麼產生的?為什麼所有能量最後都會變成熵?
複製程式碼
物理學家有很多種解釋,有一種我覺得最容易懂:能量轉換的時候,大部分能量會轉換成預先設定的狀態,比如熱能變成機械能、電能變成光能。但是,就像細胞突變那樣,還有一部分能量會生成新的狀態。這部分能量就是熵,由於狀態不同,所以很難利用,除非外部注入新的能量,專門處理熵。
(上圖,能量轉換過程中,創造出許多新狀態。)
總之,能量轉換會創造出新的狀態,熵就是進入這些狀態的能量。
現在請大家思考:狀態多意味著什麼?
複製程式碼
狀態多,就是可能性多,表示比較混亂;狀態少,就是可能性少,相對來說就比較有秩序。因此,上面結論的另一種表達是:能量轉換會讓系統的混亂度增加,熵就是系統的混亂度。
(上圖中,熵低則混亂度低,熵高則混亂度高。)
轉換的能量越大,創造出來的新狀態就會越多,因此高能量系統不如低能量系統穩定,因為前者的熵較大。而且,凡是運動的系統都會有能量轉換,熱力學第二定律就是在說,所有封閉系統最終都會趨向混亂度最大的狀態,除非外部注入能量。
(上圖中,冰塊是分子的有序排列,吸收能量後,變成液體水,分子排列變得無序。)熵讓我理解了一件事,如果不施加外力影響,事物永遠向著更混亂的狀態發展。比如,房間如果沒人打掃,只會越來越亂,不可能越來越乾淨。
複製程式碼
(上圖中,如果不花費能量打掃,房間總是越來越亂。)
熵的解釋是混亂度的度量單位,一個系統的混亂度越高它的熵就越高
複製程式碼
二、理解資訊量
我們知道了熵的概念最早起源於物理學,用於度量一個熱力學系統的無序程度。在資訊理論裡面,熵是對不確定性的測量。
這裡有又產生了疑問,熵怎麼就合資訊理論產生了關係?
複製程式碼
資訊是我們一直在談論的東西,但資訊這個概念本身依然比較抽象。在百度百科中的定義:資訊,泛指人類社會傳播的一切內容,指音訊、訊息、通訊系統傳輸和處理的物件。
1、資訊量和事件發生的概率相關,事件發生的概率越低,傳遞的資訊量越大;
2、資訊量應當是非負的,必然發生的事件的資訊量為零;
3、兩個事件的資訊量可以相加,並且兩個獨立事件的聯合資訊量應該是他們各自資訊量的和;
複製程式碼
用數學表達如下:
三、理解資訊熵
但資訊可不可以被量化,怎樣量化?答案當然是有的,那就是“資訊熵”。早在1948年,夏農(Shannon)在他著名的《通訊的數學原理》論文中指出:“資訊是用來消除隨機不確定性的東西”,並提出了“資訊熵”的概念(借用了熱力學中熵的概念),來解決資訊的度量問題。
好了,這裡就產生了資訊熵!那麼怎麼解釋呢?那資訊熵如何計算呢?
複製程式碼
舉個吳軍在《數學之美》中一樣的例子,假設世界盃決賽圈32強已經產生,那麼隨機變數“2018年俄羅斯世界盃足球賽32強中,誰是世界盃冠軍?”的資訊量是多少呢?
根據夏農(Shannon)給出的資訊熵公式,對於任意一個隨機變數X,它的資訊熵定義如下,單位為位元(bit):
把最前面的負號放到最後,便成了:上面兩個熵的公式,無論用哪個都行,而且兩者等價,一個意思。
複製程式碼
那麼上述隨機變數(誰獲得冠軍)的資訊量是:
其中,p1,p2,…,p32分別是這32強球隊奪冠的概率。 吳軍的書中給出了幾個結論:一是32強球隊奪冠概率相同時,H=5;二是奪冠概率不同時,H<5;三是H不可能大於5。 對於第一個結論:結果是很顯然的,奪冠概率相同,即每個球隊奪冠概率都是1/32,所以H=-((1/32)·log(1/32)+(1/32)·log(1/32)+…+(1/32)·log(1/32))=-log(1/32)=log(32)=5(bit)
對於第二個結論和第三個結論:使用拉格朗日乘子法進行證明,詳見《求約束條件下極值的拉格朗日乘子法》。這實際上是說系統中各種隨機性的概率越均等,資訊熵越大,反之越小。
從夏農給出的數學公式上可以看出,資訊熵其實是一個隨機變數資訊量的數學期望。
複製程式碼
日常生活中,我們經常說某人說話言簡意賅,資訊量卻很大,某些人口若懸河,但是廢話連篇,沒啥資訊量;這個電視劇情節太拖沓,一集都快演完了也沒演啥內容。這裡的資訊量/內容與資訊熵有什麼關係呢?
很多人把這些東西與資訊熵混為一談,得出“說話資訊量越大,資訊熵越高”“語言越言簡意賅,資訊熵越高;語言越冗餘堆積,資訊熵越低。”等等結論。
不是說這些說法錯了,而是容易引起誤導。個人認為,這裡日常語境的資訊量與其說是資訊量,不如說是資訊質量和資訊傳遞效率問題,有沒有乾貨,有沒有觀點,有沒有思想,並且在一定的文字長度/播放時間內,能不能有效的表達出來,這個其實是人的能力問題,和資訊熵沒啥關係好不!
四、聯合熵、條件熵、交叉熵
聯合熵:兩個隨機變數X,Y的聯合分佈,可以形成聯合熵Joint Entropy,用H(X,Y)表示。
條件熵:在隨機變數X發生的前提下,隨機變數Y發生所新帶來的熵定義為Y的條件熵,用H(Y|X)表示,用來衡量在已知隨機變數X的條件下隨機變數Y的不確定性。
複製程式碼
且有此式子成立:H(Y|X) =H(X,Y) – H(X),整個式子表示(X,Y)發生所包含的熵減去X單獨發生包含的熵。至於怎麼得來的請看推導:
簡單解釋下上面的推導過程。整個式子共6行,其中第二行推到第三行的依據是邊緣分佈p(x)等於聯合分佈p(x,y)的和;
第三行推到第四行的依據是把公因子logp(x)乘進去,然後把x,y寫在一起;
第四行推到第五行的依據是:因為兩個sigma都有p(x,y),故提取公因子p(x,y)放到外邊,然後把裡邊的-(logp(x,y)-logp(x))寫成- log(p(x,y)/p(x)) ;
第五行推到第六行的依據是:條件概率的定義p(x,y) = p(x) * p(y|x),故p(x,y) / p(x) = p(y|x)。
複製程式碼
相對熵:又稱互熵,交叉熵,鑑別資訊,Kullback熵,Kullback-Leible散度等。設p(x)、q(x)是X中取值的兩個概率分佈,則p對q的相對熵是:
複製程式碼
在一定程度上,相對熵可以度量兩個隨機變數的“距離”,且有D(p||q) ≠D(q||p)。另外,值得一提的是,D(p||q)是必然大於等於0的。
#交叉熵例子
這是公式定義,x、y都是表示概率分佈(注:也有很多文章喜歡用p、q來表示),這個東西能幹嘛呢?假設x是正確的概率分佈,而y是我們預測出來的概率分佈,這個公式算出來的結果,表示y與正確答案x之間的錯誤程度(即:y錯得有多離譜),結果值越小,表示y越準確,與x越接近。
比如:
x的概率分佈為:{1/4 ,1/4,1/4,1/4},現在我們通過機器學習,預測出來二組值:
y1的概率分佈為 {1/4 , 1/2 , 1/8 , 1/8}
y2的概率分佈為 {1/4 , 1/4 , 1/8 , 3/8}
從直覺上看,y2分佈中,前2項都100%預測對了,而y1只有第1項100%對,所以y2感覺更準確,看看公式算下來,是不是符合直覺:
對比結果,H(x,y1)算出來的值為9/4,而H(x,y2)的值略小於9/4,根據剛才的解釋,交叉熵越小,表示這二個分佈越接近,所以機器學習中,經常拿交叉熵來做為損失函式(loss function)。