最近幾天戚宦,學習理論的東西一致困擾著我忌怎,查閱一番資料仔細思考之后憔足,寫作此文,方便以后查閱酪耕。參考的鏈接主要有:1.The hard thing about deep learning , 2. Model Theory of Deep Learning:Why does it works so well?,3.Non-convex Cost Funtions of Neural network,4.Non-convex Functions
什么是學習理論导梆?
??我們可能常常聽說這樣一句話:深度學習,甚至神經網絡是個黑箱,我們并不知道里面發(fā)生了什么看尼。這句話是沒有錯的递鹉,但是有很多人并沒有完全明白這句話的含義。說它是個黑箱藏斩,很大程度上是因為梳虽,我們在深度學習上缺乏相應的學習理論。
??那么什么是學習理論灾茁?學習理論就是泛化性能的理論保證窜觉。更具體一點說,什么樣的模型才叫好模型北专?泛化性能強的模型禀挫!那么相應的,什么樣的模型才叫有用的模型拓颓?答案也很簡單:具有泛化性能的模型语婴。想象一下,我們拿到了一個訓練數據集 驶睦,然后我們把里面的數據全部都背下來了砰左,這一下訓練損失0,但是泛化性能也是0了场航,沒有用的模型缠导。
??所以哇,我們的學習理論想要保證的就是我們的模型能夠具有一定的泛化性能溉痢,那么這個問題就是轉換成了learnable problem僻造。那么怎么保證泛化性能呢?接下來將會介紹這方面的內容孩饼。
傳統(tǒng)的機器學習的學習理論
??傳統(tǒng)的機器學習在證明學習理論的時候走的是這樣一個心路歷程:我們想要的是有用的模型髓削,有用的模型轉換成機器學習的語言就是①泛化性能不能跑的太偏,即泛化誤差得有個上界镀娶。②我們的訓練過程得是提高泛化性能的過程立膛。經過研究哇,我們發(fā)現(xiàn)我們定義的模型和最終的泛化性能之間確實存在著一種關聯(lián)梯码,直觀來講就是我們的模型越復雜宝泵,泛化性能就會下降,越簡單忍些,泛化性能就會提高鲁猩。那么我們該怎么定義這個模型的復雜度呢?我們使用VC維來定義(當然還有 Rademacher complexity罢坝,在這里不介紹了廓握,我也不會)搅窿,簡單說一下VC維度:VC維就是你的模型能夠shatter的數據樣本的最大個數。那么什么叫shatter?就是說我們把每個樣本當成高維度空間中的一個點隙券,模型看做是高維空間中的一條二分類的直線男应,如果我們的通過模型能夠把樣本所有可能的標簽組合都取到,我們就認為這個模型shattered 這個數據集了娱仔,而這個數據集的維度就叫做VC維度沐飘。(思考:我們可以看出VC維度考慮到了數據的可分性和模型的復雜度兩個因素),我們就用這個維度來表示模型的復雜度牲迫,并且利用這個維度我們能夠給出前面提到的兩個要求:①泛化性能的上界②證明訓練損失減少的過程(ERM)就是泛化性能提高的過程耐朴。具體的證明過程可以參考CS229上給出的證明,這里就不寫了盹憎。下面給出vc維的一個例子筛峭。以二維線性模型為例,如下圖陪每,我們要求的是線性模型能夠shatter的數據點的個數影晓。一個數據點肯定沒問題,兩個數據點就存在四種標簽組合(0,0),(0,1),(1,0),(1,1)檩禾。同樣我們的線性模型仍然能夠很好的完成任務可以以不同的劃分方式取到所有可能的組合挂签。三個數據點的有八種組合,如圖所示盼产,也是能夠完全取到所有的組合饵婆。再增加到4個我們就發(fā)現(xiàn)不行啦,總有些組合是沒有辦法得到的辆飘。
深度學習的學習理論
??這個標題起的不好啦辐,深度學習哪里有什么學習理論。只有前幾年Yoshua Bengio提出的和validation set有關的學習理論蜈项。
??講道理,深度學習和機器學習是同根同源的续挟,但是我們發(fā)現(xiàn)深度學習的表現(xiàn)是出乎我們意料之外的紧卒,在學習理論上尤其是顛覆三觀。具體的表征如下:
??1.說好的模型越復雜诗祸,泛化性能越差呢跑芳??直颅?熟悉深度學習的童鞋都知道博个,深度學習的網絡參數可以是非常大的,那么不是會造成嚴重的過擬合問題嗎功偿?傳統(tǒng)的機器學習的學習理論在這里或許還可以再掙扎一下說盆佣,不對哇,我們的理論沒問題哇!你參數增多了共耍,但是數據量也變大啦呀虑灰,我們的VC維可是從數據和模型兩個角度上考慮的,么有足夠多的數據你還是會嚴重的過擬合痹兜!對于這種爭辯穆咐,我只想說一句:不對!現(xiàn)在深度學習的模型有些參數數量已經達到了幾百萬個甚至幾億個(比如說BERT)字旭,這什么意思对湃?參數比數據都多,這個時候顯然是沒有足夠多的數據集可以用來訓練這個的遗淳,按照VC維度的理解拍柒,這個時候泛化性能應該已經涼涼了,但是結果呢洲脂?斤儿??深度學習的泛化性能超級好哇恐锦。(猜想:模型記憶下來的數據太多啦往果,我們用的測試數據集不夠優(yōu)秀,測不出來我們沒訓練出來的數據一铅。換句話說測試集就是個假測試集實際上已經在訓練的時候見過差不多的了陕贮。)
??2.說好的Bias-Variance tradeoff 呢?潘飘?tradeoff怎么不見啦肮之?我們都知道在深度學習里的一些防止過擬合的手段,比如說dropout 和各種normalization 有些時候甚至不存在tradeoff這種此消彼長的關系存在卜录,bias和variance居然同時減少戈擒。這是為啥?艰毒?筐高??
思考和總結
1 non-convex optimization
??在查學習理論的過程中丑瞧,遇到了這么一個概念叫:non-convex 函數柑土,中文可以叫非凸函數。結論是這樣的绊汹,深度學習的損失函數都是非凸函數稽屏,而傳統(tǒng)的機器學習的損失函數大多數都是凸函數。非凸函數是什么概念呢西乖,就是說損失函數存在多個local minima(局部最優(yōu))狐榔,而凸函數只有一個全局最優(yōu)(global minima)坛增。換種說法,同樣用梯度下降的方法荒叼,非凸函數可能會掉進局部最優(yōu)的坑里爬不出來轿偎,凸函數則只要收斂一定是全局最優(yōu)。
??首先這個性質是成立的被廓,簡單證明可以這樣想坏晦,我們只要存在任何的隱藏層(hidden layer),在訓練完了之后嫁乘,我們只需要交換一些參數的位置昆婿,就可以得到同樣的結果。這看起來很白癡蜓斧,但是在空間上仓蛆,這個交換位置可以連坐標軸都發(fā)生交換了的翻天覆地的大變化。但是得到的結果是一樣的挎春,都是我們認為的最優(yōu)看疙,那么這個最優(yōu)就不是全局最優(yōu)了(至少不是唯一的),也就是只能當做局部最優(yōu)來看直奋,深度學習(包含隱藏層)的網絡的損失函數是非凸函數能庆。
??其次這個性質決定了我們在深度學習中采用的一些技術的思路和方向。比如隨機梯度下降脚线,隨機初始化(防止掉到同一個坑里出不來了)等等搁胆。
??最后說一下,非凸函數的優(yōu)化是一個很難的問題邮绿。具體點說渠旁,尋找非凸函數的全局最優(yōu)這是一個NP問題,什么叫NP問題船逮?就是多項式時間內無法完成的問題(但是在多項式時間內可以驗證一個解顾腊,這不重要)?什么叫多項式時間內無法完成挖胃?就是我們求解全局最優(yōu)的過程所需要的時間隨著數據量的增大投慈,是指數增長的。這是我們無法接受的冠骄。所以我們在解決深度學習的問題時,并不會去找全局最優(yōu)加袋,而是找到一個比較優(yōu)秀的局部最優(yōu)我們就滿足啦凛辣。
2 pretraining+fine-tuning
??有了這些理論知識,雖然說我還沒能力在這個基礎上搞什么吧职烧,倒是解答了我一個問題扁誓。就是我們pretraining+fine-tuning 的做法為什么會比直接隨機初始化的效果好防泵?答案就是我們通過pretraining 階段已經把相應的參數帶到了一個我們比較滿意的局部最優(yōu)啦,而隨機初始化呢將會有很大的可能進入到大坑里蝗敢。所以如果我們每一層都使用比較好的pretraining 有可能會取得比較好的效果以及比較快的收斂速度(有點像layer normalization的思路捷泞,就是讓某一部分的參數或者輸入相對穩(wěn)定,有利于整個模型的收斂)寿谴。此外锁右,比較復雜的網絡使用pretraining 的效果可能更好一些,簡單的網絡局部最優(yōu)這樣的小彈坑并不多讶泰,踩進去說不定也是能夠憑本事自己爬出來的咏瑟,所以沒有必要采用pretraining 的方式。