深度學習思考
機器學習的套路
大部分機器學習算法(包括深度學習),其實是在一個理想空間里(接下來我們會以三維空間為例子)尋找一個最大/最小值。三維空間是無限大的,在某個實際場景,假設(shè)我們有了解決某個問題的數(shù)據(jù)的全集(或者說是無限的數(shù)據(jù)),基于這些數(shù)據(jù)我們得到的優(yōu)化函數(shù)的所有解構(gòu)成了一座山。我們并不知道這座山的最低點是哪里,所以為了找到它,我們隨機定位在一個點,試圖沿著比較陡峭的方向下移動,并且希望能夠因此而找到最低點。現(xiàn)實情況是我們并不能看到這座山,因為它籠罩在一陣迷霧里,我們只能根據(jù)已有的訓練數(shù)據(jù)撥開一小片云霧,看到一小片地方,然后沿著比較陡峭的地方向下移動一點點,然后新進來的數(shù)據(jù)重復這個動作。大部分機器學習算法都需要轉(zhuǎn)化成我描述的這個步驟來進行。
有了上面的解釋,很多專有名詞就很好解釋了。比如迭代,所謂迭代就是不斷移動的過程。比如收斂,為什么一般而言算法最終都會收斂,因為終究我們能夠走到山里的某一個比較低的點的,之后就會在那徘徊,算法就算收斂了。
同樣,我們也會遇到很多問題,比如局部最優(yōu)解問題(你跑到一個小坑里,但是步長比較小,出不來了,已經(jīng)收斂了),搜索空間太大(山的面積太大),不收斂(因為地形比較復雜)。
深度學習的容量足夠大,因為它可以有幾百萬上千萬的參數(shù),這使得它理論上能夠擬合任何形式的數(shù)據(jù)。根據(jù)我的實際經(jīng)驗是,它確實能很好的擬合訓練數(shù)據(jù),并且不是簡單的記住他們。
端到端
NLP之前的文本分類工作,需要搞各種特征工程,有用沒用各種神奇組合,搞個幾億維 然后喂給算法,有了深度學習,我們只要把文本丟進去就行了。雖然如此,我們只是把特征工程融合進了網(wǎng)絡(luò)里。比如卷積會捕捉詞與詞的關(guān)系,還能加強或者忽略某些詞的權(quán)重,這和我們手動把各種詞的組合搞成新特征是一樣的。
再比如Attention機制就是人們不斷的通過觀察和學習,在網(wǎng)絡(luò)中加入我們認為重要的特征:
Attention無非是強調(diào)輸入的每個詞匯對輸出的每個詞匯影響力不一樣的一個改進模型
深度學習將特征工作變得更加套路,并且具有更一般的適用性,然而,這不是全部,他的最大意義在于:
深度學習完成了原來由人工將特征準備好喂給算法到我們把抽取特征的方法告訴算法,算法自己完成特征的實際抽取過程的轉(zhuǎn)變。
再回過頭來看比如CNN, RNN等深度網(wǎng)絡(luò)的變體,利用這種結(jié)構(gòu),我們可以捕獲一些特殊的信息,比如平移 旋轉(zhuǎn),序列概率等 ,這本質(zhì)上是人類總結(jié)出了幾種很不錯的特征種類,深度學習利用特定的網(wǎng)絡(luò)結(jié)構(gòu)在訓練的時候自動抽取出這些特征。
可解釋性
正如Peter Norvig說的,根據(jù)認知心理學,人類解釋為什么做某個決策的理由,往往是事后編撰出來的,為了試圖說服自己和其他人,當時做決策的時候并不一定真的是那么想的。這也解釋了為什么成功不可復制(因為我解釋我為什么做的時候其實不一定是真的,只是我們以為是真的)。 雖然我們在【機器學習的套路】的段落里說了一個數(shù)學上的大框架 但是很多東西確實解釋不清楚。我們只能從產(chǎn)出的結(jié)果再回去猜機器學習這么做的原理或者原因。比如卷積你放在不同場景 可以有無數(shù)新的發(fā)現(xiàn)和解釋。數(shù)據(jù)即規(guī)律,機器學習數(shù)據(jù)其實就是學習規(guī)律,這種規(guī)律人不一定能想明白,解釋清楚。
一個比較好的例子是,word embedding, 效果很好,人們從實驗認知到每一個數(shù)字都應該是有語義特征的,如果這種性質(zhì)強烈的話,意味著CNN是可以使用寬度短于word embedding dimension 長度的 ,而不是像很多論文那樣,filter的寬度等于embedding的長度。
和統(tǒng)計學的關(guān)系
統(tǒng)計是我們清楚要啥,然后我們做分析。 但是深度學習確實能學出我們不知道的一些東西。這就是他們的區(qū)別。
模擬人們的思維
我發(fā)現(xiàn),人的很多東西也是可以反向通過機器學習的理論來解釋的。
人的大腦做training的時候(比如去掌握某個新技能),也是一件很蛋疼的事,需要不斷tuning(調(diào)整學習的方式,學習的來源,比如換本更好的教材)。
同樣的大腦,有的人學的好,有的學的不好,是因為“很多人已經(jīng)有了相關(guān)知識,這次學習只是fine-tune”。
對于為啥有的人智商就是高,有的人不高,只不過初始化參數(shù)有的人選擇的好罷了,這個看運氣。
大部分人掌握技能掌握的都不會太好,因為欠擬合是普遍情況??粗孟駥W會了,但只會紙上談兵,大體就是過擬合了,還需要更多經(jīng)驗和數(shù)據(jù)。
很多人比較理性,有的人則感性,其實是正則化起的作用。
人腦是一個非常通用的模型,而機器現(xiàn)階段比人更專注,更單一(但是也有人證明了一個算法可以同時完成多個任務)。機器可以在幾小時幾天學會新技能,而人則可能需要好多年。人類其實在能夠工作前,需要訓練很多年(從0歲到3歲?),之后都是fine-tuning了。
人學這么久的原因,說實在的,還是因為數(shù)據(jù)來的太慢,處理的太慢。人也是mini-batch輸入問題,然后執(zhí)行預測,根據(jù)這次的結(jié)果調(diào)整下一次行為的,以期下次能做到更好(損失函數(shù))
機器學習什么時候可以真的“智能和進化”
機器學習學習的過程不是一個持久持續(xù)的過程,訓練完成后凍結(jié)模型,然后給預測模型使用,然后接著收集更多數(shù)據(jù),通常我們會重新從0開始訓練。人腦顯然不是這樣的,訓練應該是online的,預測反倒是可以離線的,走snapshot就好。這個是目前機器學習算法和人比較大的差異。
第二個就是網(wǎng)絡(luò)的復雜度,人是一個通用的模型,可以處理很多不同類型的任務,機器通常智能做一類問題,這原因是網(wǎng)絡(luò)結(jié)構(gòu)還不夠復雜,并且在一個大網(wǎng)絡(luò)里,進化出不同的網(wǎng)絡(luò)子區(qū)域。
第三個是目前還沒有很好的否定模型,當一個模型穩(wěn)定后,之后再進行新數(shù)據(jù)進來訓練時,模型應該懂得堅持自我。當我對一個事物預測的概率是99%的時候,而外部的數(shù)據(jù)告訴模型,模型是錯的,模型應該簡單忽略掉這條數(shù)據(jù),或者留下疑問,暫存下這個問題,以期獲得更多反例,而不是一個樣本就能需要模型進行反省。
哪天真的能夠做到如上三點,我覺得就真有可能會進化了。





























