官术网_书友最值得收藏!

2.2 代價函數

機器學習中絕大多數任務都是優化任務,也就是去尋找最優解。對應到函數中,就是尋找函數極值。但這其中就存在一個很困難的問題,局部最優解。傳統的機器學習大多是針對凸優化問題,也就是函數可以找到最大值或最小值,但很不幸,由于深度學習構造的函數非常復雜(模型容量大),因此深度學習會存在很多局部最優解(數據高維時鞍點更普遍),這也是深度學習所面臨的最困難的挑戰之一,為此我們也將在第5章中專門地介紹深度學習的優化技術。

絕大多數機器學習算法學習的過程,其實就是在調整數據特征的重要性,我們將這種刻畫重要性的量稱之為參數或權重,參數控制著機器學習系統的行為,而我們要做的其實就是找到一組最優的參數。我們可以把機器學習算法簡單地想成一個函數fω(x),ω表示函數的參數,x表示我們輸入的數據,fω(x)可以是簡單的線性回歸算法,如式(2.3)所示。

也可以是層層嵌套的深度學習算法,如式(2.4)所示。

暫不考慮其內部結構,我們的目的就是盡可能地讓我們設計的函數盡可能的“好”。而所謂的“好”就是機器學習算法的預測值與實際值之間的誤差盡可能的低,我們也將衡量這種誤差的函數稱之為代價函數(Cost Function)或者損失函數(Loss Function)。

2.2.1 均方誤差函數

假設需要完成一個房屋價格預測任務,我們需要輸入房屋面積、戶型、位置等特征,輸出為房屋價格預測。我們用集合X={x(1),x(2),x(m)}表示已有的m條房屋信息(數據),用集合Y={y(1),y(2),…y(m)}表示對應的實際售出價格。并且我們也設計好了機器學習算法f(x;w),而你需要做的是,思考一下如何設計我們的代價函數。你能想到最簡單的代價函數會是什么呢?比如式(2.5)這樣一個簡單的代價函數。

你能看出式(2.5)表示什么意思嗎?其實很簡單,就是把每一個預測的房屋價格與真實的房屋價格相減,因為我們只關心兩者的誤差于是就加了一個絕對值,然后將所得的誤差累加起來就得到上面的公式了。

假如你去預測房屋的價格,你又怎樣評價自己誤差呢?你會不會這樣想“有些預測非常準確,有些預測比較差,但平均下來還是挺不錯的。”自然而然,我們去估算一堆事物的好壞,也總是使用平均值,用統計學的術語就叫期望值,我們再稍稍修改式(2.5)中的代價函數就得到了式(2.6)。

式(2.6)已經足夠優秀了,但有一個缺點,那就是有絕對值,因為絕對值不連續也不能處處可導,那么怎樣既不破壞我們近乎完美的設計,又可以去掉絕對值呢?我猜你5秒鐘內就會想到,可以對其求平方,如式(2.7)所示。

就是如此簡單,我們輕松地設計出了第一個代價函數,但請你不要誤會,式(2.7)代價函數可是大名鼎鼎的均方誤差(Mean Squared Error)[5]。

看完以上式的推導,不知道你有何感想,其實這些式只是我們各種想法的簡化描述,看到式(2.7)會不會有一種豁然開朗的感覺,我們需要用一堆文字描述的思想,只需一行表達式就可以完成。開始時希望你不要急躁,如果對這一過程有些不懂,再折回去慢慢體會這一過程也是個不錯的選擇。請記住這些式來幫助你記憶并理解上文中的內容,不是你的負擔。這些式并不重要,重要的是其所表示的含義。

2.2.2 極大似然估計

“陽光正熱,才過午后,學徒小飛沏了一杯下午茶,準備躺在竹搖椅上享受一番。不料楊師傅一記悶拳敲在了頭上,小飛頓時頭暈眼花,抱頭嚎叫。‘劣徒,你還有沒有夢想?快和為師上山打獵。’兩人走到半山腰,發現了一只小兔子,于是兩人同時舉起了槍,小白兔就倒在了血泊中。”那么問題來了,是誰殘忍地殺害了小白兔?

如果大俠沒開腦洞,正常情況下應該會選擇楊師傅吧,也許你覺得你的選擇很正常沒什么奇怪的,但其實你已經用到了極大似然的思想。那“似然”又具體指什么呢?似然(likelihood)是一種較為文言文的翻譯,我們脫去其外衣可能看得比較清楚?!八迫弧庇矛F代的中文來說就是“可能性”,所以極大似然,通俗點就是最大的可能性。我們選擇楊師傅的原因是因為楊師傅帥嗎?當然不是,那是因為楊師傅是“老炮”,他的槍法準,射中的可能性更大。

回到生活中,我們幾乎處處都在使用“極大似然”,很多時候我們沒機會,也沒能力去探究事物的真相,我們最簡單也是最高效的方法就是去估計。當你去找工作時,別人很有可能會問你,你來自哪所學校?你的文憑如何?你得過什么獎?記住,任何指標都不能確認你是一個多么優秀的人,指標只能確定你是優秀人才的可能性。

在繼續討論“極大似然”之前,我們要補充機器學習中非常重要的一個假設,那就是數據獨立同分布(independent and identically distributed,i.i.d.)條件。獨立同分布假設數據與數據是獨立的,就比如信用卡發放任務中,每一張用戶填寫的表格是相互獨立的,但該任務的所有數據又都來自于同一個概率分布函數,這就使得我們模擬出已知數據的概率分布模型,同樣也可以運用在未來的任務中。有了i.i.d.條件,就可以構造極大似然估計。

我們依然給出一個概率函數P(y|x;w),為了方便,概率函數只進行了二分類,也就是輸出“0”或“1”。那么如何去判斷P(y|x;w)的好壞呢?很簡單,那就是該概率函數在已有的數據上發生的概率最高,考慮到數據是相互獨立的,因此可以對每一條數據對應的概率函數進行求積,就得到了式(2.8)。

這個函數就稱為似然函數,而我們求出該函數取得最大值時所對應的參數,也就是極大似然估計(Maximum Likelihood Estimate)[6]。

但問題在于,求連積是很困難的,不但耗費計算資源,令人頭疼的是還非常容易造成內存下溢出。那我們能不能將乘法改成加法呢?可以使用對數函數將乘法轉換為加法。如式(2.9)就是對數運算的基本公式之一。

根據式(2.8)和(2.9),我們對似然函數取自然對數就得到了式(2.10)。

在習慣上,我們比較喜歡求最小值、平均值,因此式(2.10)就變成了式(2.11)。

假設機器學習算法f(x)就是概率函數P(y|x),需要注意的是如果真實的標記y是“0”,那么預測的f(x)也應該接近于“0”,但公式又不允許“0”出現,因此在真實值為“0”時,預測值用1-f(x)代替。最后代價函數就如式(2.12)所示。

也許一眼看上去式(2.12)會比較復雜,但其含義也很簡單,當真實值為“1”時,我們就使用f(x),將右邊式子的第二項去掉;當真實值為“0”時,我們就使用1-f(x),將右邊式子的第一項去掉。式(2.12)也被稱為交叉熵(Cross-entropy)[7]

主站蜘蛛池模板: 江都市| 镇雄县| 清镇市| 梁平县| 东源县| 华安县| 木里| 平舆县| 清河县| 六枝特区| 枞阳县| 潼关县| 土默特左旗| 塔城市| 绥芬河市| 崇明县| 大渡口区| 尖扎县| 香港 | 垫江县| 偃师市| 宾阳县| 定日县| 若羌县| 子洲县| 博湖县| 城口县| 汕头市| 岑巩县| 福泉市| 军事| 司法| 当雄县| 遂溪县| 建德市| 望奎县| 武义县| 大同市| 独山县| 鄢陵县| 阳城县|