其實下這個標題只是因為這算是我的筆記而已,讓別人點進來看好像有點罪惡感Orz。最近較難抽空實作接下來的內容,所以剛好可以補上之前實作過程中所學習到的東西,今天就來記錄一下我對訓練過程中的loss
的理解XD
在機器學習中,loss可以說是最重要的東西,想像一個情境 :
假如有一隻機器人,恩...或一架、一個、一台 (隨便啦!) ,它能夠從2020總統大選候選人中預測誰當選
所以,讓我們來看看結果吧 !!
...
...
...
搭拉~ 預測結果出爐 !! 是 預計撐兩天XD
先生 !! (好像在哪裡見過這個名字?
但注意,這只是一個預測,所以當2020選後,我們知道誰當選後,可以知道這個機器人有沒有預測到。
而loss
就是一個數字專門打臉你的機器人「你預測的有多不準」
回到股票上面,我們如果訓練一個模型來預測「股價」,這個loss
就可以描述「你預測的股價跟實際差多少」。如果預測「action」,那loss
就是「你做了這個action損失了多少」,以上是我對loss
這個東西的見解~
loss
目的只有一,希望使得模型越來越好,所以會透過「梯度下降法」去更新模型。其實就像訓練狗一樣,若聽指令動作所以就有肉吃,沒有則給予逞罰,這個loss相對於逞罰,「梯度下降」相對於學習。
所以我們訓練模型很簡單,給
input
,得到output
,計算loss
,模型gradient descent
ML三寶中的「dataset」就是為了input
和output
,然而我前幾篇都沒有提到loss
,這是為什麼? 不用回答,因為他們都被包得好好的,在「監督式學習」的過程中,loss不外乎就那幾種 :
沒了?
當然不止,但這兩個是最常用的。 一般的數值預測使用mean squared error
計算,分類問題用softmax
的輸出,再用cross entropy
計算,這兩者得出來的數字都可以是loss。 你說什麼是softmax
? 就只是一個輸出機率的函式啦~只是一個activation function
而已。 等...等等,activation function
又是什麼? 嘖嘖,好奇心殺死一隻貓喔,咱慢慢來,這可以是我的「沒有實作所以只好講幹話系列(二)」(欠揍嗎?)
總之,我們現在知道loss
是做什麼的了,現在讓我們談談如何更新loss吧~
我在看梯度的文章中,有個解釋我很喜歡 :
假如你拿一顆球放再碗的任何地方,鬆手後球會往哪邊滾? 答案是往碗的中心滾,而滾的「方向」就是「梯度」
梯度是一個方向,在變數維度為1的時候(如 : f(x) = x^ 2 + x - 3
),梯度 "方向" 就如同微分,剛剛那個式子的微分是 f'(x) = 2x + 1
(哇! 我不想看數學!!) 別急,更精采的在後面,拿個簡單的式子(如 : y = Ax+b
),此時A
如果是一個矩陣,那對y
的梯度怎麼算? 喝,精彩的....我放棄Orz
沒錯,梯度下降其實就是對線性代數的矩陣取梯方向進行更新,而且你不需要擔心怎麼算,只要擔心什麼模型好用就好,tensorflow都幫你包好好的XD
在模型中,維度動輒上N維(千、萬、百萬...),都是矩陣的計算式,我們現在將其簡化為「給我一個loss
,我幫你把模型往梯度的方向更新a*loss
的量」。如果我有一堆參數(P
)要被更新,寫作公式 P = P - a * loss * Grad(P)
,a
只是怕更新過頭給的一個0-1讓loss不要這麼大的數字而已。如此不斷迭代就可以完成梯度下降囉~
a
來頭不小,優化器就是為了優化a
而造的。來看一下動圖感受一下什麼叫「梯度下降吧」!
SGD
就是固定a
的基本款在這個三維空間中有可能遇到圖上所遇到的「鞍點」,就是梯度怎麼算都是0,卻不是最低點。 SGD很難突破鞍點,所以才衍伸這麼多的優化器。其中目前最普遍的是
adam
,上次測試中的Radam
是2019/08/08
的論文(超新)
幹話結束,希望明天有空做實作XD
CS231n: Convolutional Neural Networks for Visual Recognition
你這個鞍點是指甚麼? 可以是景氣循環嗎? 這個我有點不太懂! 哈!
我在想這個鞍點應該是指loss在下降過程中遇到的瓶頸,與大環境無關,不過也有可能是大環境在資料集中的劇烈轉變造成的 !!
我做的應該是偏向回測,所以儘管鞍點出現,卻是在歷史資料中,我們只能建模型看能不能克服鞍點
以上是我的理解啦~ 不知道有沒有回答到