1. 程式人生 > >天空之城:拉馬努金式思維訓練法

天空之城:拉馬努金式思維訓練法

摘自 張俊林 https://zhuanlan.zhihu.com/p/51934140

本文較長,我知道大概率你沒有耐心讀完,但是看完可能會讓你在今後的日子裡多年受益,所以還請保持一些耐心。如果只對機器學習技術方面感興趣,可以直接跳到第四部分“空中建築師:機器學習中的拉馬努金式思維訓練法”。如果你選擇直接跳到了第四部分開始閱讀,那麼從這個行為推斷,你肯定是典型的演算法工程師,其實第五部分“出埃及記:機器學習之外 ”才是最適合你瞭解的。



易筋經與降龍十八掌:為什麼會有這篇文章


金庸先生的作品裡,武功體系往往是由內功和外功或叫招式兩個子系統構成的。招式代表外在的武功身手動作,是技巧性的,學習難度較低,學習週期相對較短,比如一套拳法,一個劍招等等,招式是武功系統的“表”。內功是指內力和一整套內在的修行系統,甚至包括價值觀和思維體系的修煉,比如易筋經其實是道釋糅合的經書,它本質是一種思想體系,“易筋”“洗髓”暗示著閱讀者價值觀的版本升級換代,把它用在武學中只是一種延伸的應用領域而已。內功修煉週期長,很難短期有大成,但也不排除有人天分高,靈光一閃,“垂死病中驚坐起,感覺自己萌萌噠”,不排除這種頓悟真理立地成佛的可能。內功是武功系統的“裡”,像易筋經,九陰真經,神照經,九陽神功就是金庸武學體系裡具備代表性的四大內功系統。

江湖裡討生活,表裡相照才能錘鍊出一代高手,比如將降龍十八掌發揮到極致的郭靖郭巨俠。儘管如此,在金庸武學體系裡,內功的重要性是要遠重於招式的,如果一位武林高手內力遠強於對手,其實外在招式根本不重要,利用渾厚的內功打一套太祖長拳估計也難遇敵手:遊坦之在修習完易筋經後不僅通過內力排除體內的冰寒劇毒,也從江湖無名小輩一躍成為數一數二的高手。金庸描述的內力系統還展示了超越時代的先進技術,比如還具備目前科技都難以實現的內力無線傳輸功能:虛竹本是一名內在忠厚外表醜陋的少林無名小僧,在誤打誤撞破了珍瓏棋局後,被動接受了逍遙派掌門無崖子通過無線傳輸的方式灌入體內的70餘年的功力,一夜間成為頂級武林高手。這功力毫無疑問屬於內功範疇。

開頭說了這麼多,中心思想就一個:內功其實比招式重要得多,這一道理不僅僅在虛構的武學江湖世界成立,在世間江湖的諸多行當裡,例如機器學習領域裡面,這同樣也是顛撲不破的真理。

我們在日常生活中,有時會看到機器學習技術刀馬嫻熟的高手偶漏崢嶸,碰到一些難題,逢山開路,遇水搭橋,總能很快給出一個可行的技術方案,並對各種方法優缺點如數家珍。但是,其實你所看到的往往只是浮於表面的外在招式,只是海平面上漏出的冰山一角。

外在招式其實好學,武林高手我們平常見不到,但是照貓畫虎生搬硬套滿嘴新名詞的專家估計你也見過不少,只不過段位不高功力不深者難以區分東郭與西施而已。其實真假也好,招式也好,這些都不重要。真正值得深究的是隱藏在外在招式背後的內功修為,學會一招半式內功有時會讓你受益終生。

但是,話又說回來了,一般情況下,你每天能見到很多讓人眼花繚亂的招式,這讓你感嘆世間繁華,繼而手足無措,但是幕後的真正有效的卻為數不多的內功修煉方法是沒有人會追著你主動告訴你的。武林江湖裡要學功夫還得講個門派師徒關係呢,是不是?更何況現實世界裡,別人沒有必要也沒有義務去這樣做,這個事實聽起來可能比較冰冷,但是世間很多真相本質上就是冰冷的,如果你被凍傷只能說明你心理承受力有問題。這現象其實再正常不過,你換個視角來想想,假如真有一天,你生活中遇到一個揪著你耳朵要傳授你內功心法的人,你的第一反應是什麼?你一定心理防線大增,緊緊得捂住自己的錢包,用看穿騙子的眼光望著他,估計在你眼裡他是這樣的:

街頭行騙現場抓拍:“今天拿出來,贈與有心人”


最近有位朋友衷心地誇獎並鼓勵我說:雖然你無法再長高了,但是你可以繼續長胖呀。我聽了這話心裡暖暖的,深為自己能結交這麼多愛講真話的錚友而自豪。我套用這位朋友的句型誇一下自己:跟很多人相比,雖然我不比別人技術或者見識更高明,但是我比大多數人臉皮厚呀。所以今天鄙人不才,來好為人師地講一講自己多年前摸索出的一項內功修煉方法:拉馬努金式思維訓練法。我可以想象你看到前面這句話的眼神是怎樣的,請收回你疑惑中摻雜著鄙視的目光,好吧,即使不收回,也請鄙視得更溫柔一些。

其實這個方法我若干年前就開始在自己身上試用,雖不夠徹底,但感覺療效尚可,所以今天拿出來,贈與有心人。當然,現在回頭看,發現事實上這個道理領悟地還是太晚,靠自己摸索修煉內功付出的代價往往是時間,但是好處是對領悟的道理理解地更深刻。大約三年前,當我偶然看過拉馬努金的介紹及傳記之後,思考他的經歷和學習方法,隱約感覺兩者有相通之處,遂正式命名這種方法為拉馬努金式思維訓練法。其實內功修煉是一個綜合系統,其它內功心法還有不少,不過今天我們的主題就是它。

那麼什麼是拉馬努金式思維訓練法呢?在介紹這個方法之前,我們先大致瞭解下拉馬努金這位千年一遇的數學天才的部分生平,這有助於更好地理解這個方法。


天才的誕生:拉馬努金的前半生

拉馬努金(《知無涯》版)

拉馬努金1887年出生於印度南部一個偏僻小鎮,家境窮困,一家7口全靠父親微薄薪水度日。他從小便表現出了超人的數學天賦,12歲時因為畢達哥拉斯定理,對幾何學產生了興趣,遂自行展開對級數性質的研究。

不過像很多天才一樣,拉馬努金偏科嚴重,在大學裡數學成績優秀,但是其他幾乎所有科目都不及格,學校對他忍無可忍,最終將他開除。

失學青年拉馬努金隨後生活在貧困潦倒中,在一位賞識其數學才華的官員資助下勉強度日。但是儘管這樣,他不曾有一刻放棄數學。最潦倒的時候,拉馬努金的胳膊肘上結了一層厚厚的老繭,因為他已經連最便宜的演算紙也買不起,只能用粉筆在石板上演算,黑板寫滿就趕緊用手肘擦掉繼續寫。

在陸續發表了幾篇數學文章後,他的朋友試圖將他介紹給英國數學界。哈馬努金給多位英國數學家寫信介紹自己的工作,希望能夠成為他們的學生,但屢遭拒絕,這種糟糕的狀態一直未得到改善,直到英國著名數學家哈代拆開了他的信件為止。

哈代確信,拉馬努金的研究是當世最卓越的數學工作,並對哈馬努金評價頗高。幾番周折後,1914年,哈代說服拉馬努金奔赴英國劍橋。在哈代嚴格的指導下哈馬努金如魚得水,在接下來的5年裡,他們共同發表了28篇重要論文。因為在數學上的卓越成就,拉馬努金31歲時當選為第一個英國皇家學會的亞洲會員。

上面對哈馬努金的介紹比較簡練,容易給人造成一種錯覺,好像自從他進入英國後事業一帆風順,其實事實遠非如此,如果將細節展開,你會發現其實那是另一部血淚史。


拉馬努金筆記手稿

儘管拉馬努金的學習態度刻苦真誠,數學天才卓絕,由於沒有受過專業的數學訓練,全靠自學,拉馬努金根本不明白數學證明是怎樣的過程。所以他的成果是幾千個全憑直覺和靈感產生的數學公式,卻沒有任何證明過程。儘管後來這些公式被驗證大多數都是正確的,但是由於缺乏證明,所以一直受到很多數學家的非議。


論雷峰塔的倒掉與重建:拉馬努金鍊金術

如果深入思考拉馬努金的成長曆程,你會發現有一個關鍵節點,那就是在拉馬努金15歲那年,朋友借給他的那本英國數學家卡爾編寫的《純粹數學與應用數學概要》這本書。這本書很有特點,它收集了數學多個子領域的5000個方程式,卻沒有給出詳細證明。拉馬努金給自己設立了一個目標:他將這5000個公式看成已知正確結論,而在不參考其它證明的前提下,試圖重新用自己的方法去證明每一個公式。這花費了拉馬努金5年的時間,並留下了幾百頁的數學筆記,而這個過程及數學筆記對於拉馬努金以後的思維方式產生根本而深遠的影響。

拉馬努金沒有接受過正規系統的數學訓練,這雖是給他後期數學生涯造成困擾的主要原因,但從另外一個角度看,也未嘗不是成就他的數學天才的一種手段。拉馬努金完全靠自己的天才及熱情自由探索,典型手段就是如上所述的方法,所以我們可以將這個過程看成一種特殊的自我思維訓練方法。通過這個過程,拉馬努金不僅重新發現了很多著名的數學公式,比如被譽為人類史上最美公式之一的尤拉公式,也通過更加深入的思考發現了幾千條全新的公式。


尤拉公式

也就是說,他的思維訓練是通過用自己的方法去重構或者重新證明一些已知問題或者結論產生的,這就是拉馬努金思維訓練法的基本思路。如果我們用比喻來類比這個過程的話,拉馬努金好像一位具備特殊思維方式的建築師,當他看到一座外觀巨集偉的建築的時候,他不是立即裡裡外外參觀把這座建築看個清晰明白,而是站在建築外思考如下問題:如果我是這座建築的建築師,它有這樣的外觀,在我心裡首先把它摧毀,然後自己重新再把它設計出來,那麼我會如何設計這座建築呢?就這樣,通過將城市中看到的每個建築通過自己的方式重建,拉曼努金自己在頭腦中重建了一座數學公式組成的全新的空中之城。

我自己摸索的思維訓練方法和這個很接近,但是又有些不同,而熟悉機器學習訓練過程的同學可以很明顯從後面的描述看出來,這其實也很大程度上受到了機器學習訓練方法的影響。我是這麼設計這個思維訓練方法的:建築的外觀算是給我們的一種資訊提示和約束,除了像拉馬努金那樣將看到的建築在心中摧毀,再用自己的方式重建外,我們其實還可以做得更多,比如你可以把你用自己的方式重建好的建築,和看到的別人搭建起來的建築裡裡外外做個對比,之後做個判斷:雖然兩個建築外觀可能類似,但是採用的建築方法或者構建順序可能完全不同,那麼是我們重建的這個建築更好呢?還是原有的建築更好?如果我們的建築更好,那是為什麼?如果是原有的建築更好,那又是為什麼?而為何我沒有想到這個更好的建築方式呢?我如何改變設計思維才能和更優秀的那位建築師搭出一樣的房子呢?……這其實才是我心目中完整的拉馬努金式思維訓練法。

熟悉機器學習的同學從後半段的描述中一定聞到了機器學習離線訓練的味道了,嗯,不錯,你的嗅覺很靈敏。其實這是拉馬努金方法的一個加強版,可以看成是拉馬努金重建法+機器學習離線訓練法混合構成的,這和你平時看到的機器學習任務的最大區別是:其實你自己的頭腦就是你要訓練的那個模型,你思考問題的方式就是需要利用SGD演算法調節的模型引數,通過具體的案例作為訓練資料,不斷迭代,讓你有更優秀的思維方法,如果訓練足夠充分,很可能你會通過直覺直接找到最優的答案。你會發現,通過這種思維鍛鍊,看似你在做一項前人已經做過的工作,其實通過這個過程,你可以鍛鍊優化自己的思維能力,作為副產品還會產生很多完全不同的新想法。

雖然上面幾段內容看上去貌似說明白了所謂的“拉馬努金式思維訓練法”,但是因為是類比,所以看著還有些飄渺和模糊,那麼我們下面進入機器學習領域看看到底應該怎麼具體實施。



空中建築師:機器學習中的拉馬努金式思維訓練法

在機器學習領域,其實是很容易應用這種拉馬努金式思維訓練方法的。我以如何正確地讀一篇論文來梳理下這個流程,比如假設你現在拿到了一篇你感興趣的論文。首先,兄弟,住手,千萬不要急著去看論文的內容,有些東西保留些神祕感其實是好事情。你應該這麼做:

首先,看一下論文的標題,你能否從論文標題猜出作者要解決什麼樣的問題?能否從論文標題大致猜出作者用的什麼方法?如果上面兩個問題的答案是肯定的,那麼你可以試圖恢復作者方法的細節資訊,或者自己提出自己的重建方法來解決這個問題;如果答案是否定的,那麼請去看論文的摘要,那裡會給你提供更多的資訊,再次回答上述兩個問題。如果看完摘要,兩個問題的答案依然是否定的,那麼可以去看下論文裡面的方法圖示,之後再次問自己上面兩個問題。如此迭代,像慢慢拼出一副拼圖一樣,逐步釋放給自己更多資訊,爭取讓自己用最少的資訊量重建出作者的方法,或者根據已知線索提出自己的解決方法。

然後,到了這一步,你一定已經嘗試著猜測著去恢復出你認為作者使用的方法,或者提出了自己的方法。此時你可以去論文裡大致看下你猜的對不對,如果猜的不對,問自己下列問題:你的方法和作者的方法有什麼不同?各自的優點缺點是什麼?哪個更好些?…..諸如此類。

上面這個過程就是典型地在機器學習領域裡使用拉馬努金式思維訓練法的具體過程。


為了比較深入地理解這種思維方法,我們來看一個具體的例子,我們用一篇論文來分解刨析整個思維過程。這篇論文是兩年前的工作,是16年微軟的成果,Item2Vec,我之前聽說過這個工作但是沒看過論文,為了寫這篇文章專門找來按照上述描述在腦子裡走了一下流程。選擇這篇論文,是因為這篇比較容易說明白。下面記錄的是我如何應用拉馬努金式思維訓練法的整個思維過程。

第一步:

我們會先看這篇論文的名字:“Item2Vec: Neural Item Embedding for Collaborative Filtering”


首先,我們根據論文標題推想下它要解決什麼問題,以及看看是否能夠從論文標題推斷出作者大概率用的是什麼方法。

這個論文標題其實提供了不少資訊,比如,從“Collaborative Filtering”我們可以推斷論文涉及的領域是推薦系統裡的協同過濾方向,那麼這往往意味著使用的資料來源應該是使用者評分矩陣Rating Matrix的資訊,也就是每個使用者給哪些商品打過幾分的矩陣資訊;從“Item2Vec”這個單詞,我們大致可以判斷它要解決的是什麼問題:大概率是要把Item編碼成一種embedding的表達方式。另外,從“Neural Item Embedding”可以看出具體編碼方法是用神經網路方法;除此外,好像看不出更多資訊了。

我們可以整理目前獲得的資訊如下:

要解決的問題:使用神經網路方法,以Rating Matrix資訊來對每個商品Item進行某種方法的訓練,來獲得商品item的embedding資訊。

大的方法框架:神經網路

具體方法:標題沒有相關資訊,不詳


第二步,既然要解決的問題明確了,大的方法框架也找到了,雖然作者具體用什麼方法我們還不清楚,但是這沒關係,此時可以開始我們的重建工作。

假設我是論文的作者,我列舉了我可能會提出的幾個技術方案(首先強調一下,既然這個論文看樣子目的是隻需要把item轉換成embedding,不需要把user轉換成embedding,所以我們的技術方案都忽略掉那些顯示地將user作為輸入的技術方案,主要傾向於無監督的方法。這是給自己思考問題主動增加約束條件,否則太天馬行空訓練效果未必很好。我們要鍛鍊自己在鐐銬下跳舞的能力。):


方案一:最簡單的無監督方法

類Word2vec方案


1.1收集使用者對商品的打分資訊,忽略掉具體的分數,將分數改為二值資料,就是說把某個使用者打過分的商品按照互動時間序列,組成一個商品序列,i1,i2….ik,….in。

1.2所有使用者都有這個商品序列資訊,這樣就類似自然語言處理的問題了,無非把單詞資訊換成了商品ID資訊,一句自然語言的句子換成了商品ID組成的使用者行為序列。於是此時我們可以使用目前任意一種NLP中使用的embedding技術來做,比如類似word2vec的CBOW或者Skip-gram方法,或者類似Glove的方法。如果採用Skip-Gram方法,那麼就是利用某個被扣掉的商品,去預測同一個使用者打過分的其它上下文商品;如果是CBOW方法,則是使用當前商品所屬的行為序列上下文去預測這個商品;

這樣,我們就可以利用無監督的方式學會每個商品的embedding資訊;這樣學會的embedding含義是:如果某兩個商品經常和相似的其它商品一起被購買,那麼這兩個商品的embedding是類似的。這確實體現的是一種協同過濾的思路。

這個方法的好處:簡單直接,因為我們只要學習獲得商品的embedding就行了,除此外不做其它無關的工作;

缺點:過於簡單,約束太少,效果如何存疑;


方案二:加強版的無監督方案


第一個方案有點太簡單,我試圖增加一些約束條件來優化一個版本,上面的方法只考慮了某個item的一定視窗大小上下文的item,要求上下文相互接近的item在embedding空間裡相互靠近。通俗地講,意思就是說:我有什麼樣的朋友們,那麼我就是什麼樣子的人。我們完全可以引入更強的約束如下:我和大街上隨便拉來的一個人,大概率是不太合得來的,他不太可能成為我的朋友,所以我肯定跟他不太像。基本思想有了,我們可以引入triplet loss來實現這個思想。

2.1 這個和第一個方法類似:收集使用者對商品的打分資訊,把某個使用者打過分的商品按照互動時間序列,組成一個商品序列,i1,i2….ik,….in。

2.2 在形成的商品item序列資料下,我們利用triplet loss來訓練一個將item進行embedding的模型,模型要求被同一個使用者打過分的兩個item:Item1+和Item2+,它們在embedding空間內比較接近,而與隨便選擇的其它item比如Item-,在embedding空間上比較遠,於是我們可以構造如圖的網路結構:

Triplet Loss網路結構


訓練資料由三元組構成:<item1+,item2+,item- >。其中item1+和item2+是來自同一個使用者的同一個序列裡的商品,item-是隨機選擇的一個item作為負例商品,這樣,我們就可以套用上圖的網路使用triplet loss來訓練。從Onehot到item embedding層是一個編碼過程,上面套接一個cosine相似性計算函式,通過這個函式,我們要求item1+和item2+的相似性得分要高於item1+和item-的相似性得分。通過這種方式,就可以學會每個item的embedding。

這個方法是第一個方法的增強版本,本質思想是類似的,但是因為引入了triplet loss,類似增加了負例,從道理上講效果應該好於第一個方法,不過這是從道理推斷,很多時候直覺是不靠譜的,是否真的好還需要通過實驗來證明。

如上給出了兩個重建的方案,其實還可以有更多,比如很容易想到的方法是可以利用RNN來預測next item的方式來訓練item 的embedding等,這裡不展開說了,因為具體技術方案不是我們的重點。


上面是我給出的自己面對這個問題時,可能會採用的重構方法,但是作者到底是怎麼做的呢?從標題裡我們看不出來,於是下一步,我們可以看看摘要,通過摘要看看是否能大致猜出作者是如何解決這個問題的。下面的圖片是這篇論文的摘要資訊:


嗯,謎底揭曉了,從摘要中的方法描述我們可以知道,其實作者用的就是我們猜想的第一種方法,是完全借鑑word2vec的思路來做的。

到了這一步,就是說如果你能夠通過論文標題,或者是摘要,基本猜對作者使用的具體方法。其實你可以預料到,如果再仔細看這篇論文,對於你來說幫助不算太大。這種情況下,只需要快速過一下論文主體即可,重點看實驗結果,如果效果比較好,那麼可以考慮在自己遇到類似的場景時採用類似的方法。當然,也可以再深入思考下自己提出的其它方法的可行性,如果評估確實可行,可以動手去試試,如果實驗證明確實有效,那麼很可能會提出一種全新的解決方法。

對這個工作,我們可以做個評價:本工作創新程度一般,屬於直接遷移其它領域方法到新領域的模式,這種做法很常見,也比較容易被想到;這個工作屬於典型的應用型的創新;它的好處是簡單,比較實用化。我們這些在公司裡做事的同志們其實還是比較喜歡這種簡單實用的論文的,比較煩那些耍了半天花槍,一看實驗其實沒啥作用的虛頭巴腦的灌水文章。

上面這篇Item2Vec算是比較簡單的方法,所以相對容易猜到作者的思路。如果是另外一種情形,你採用這種思維訓練方法,發現看完標題和摘要,甚至文中的結構圖,此時仍然沒有辦法猜到作者使用的方法,抑或你發現你提出的重建方法遠不如作者的方法精妙的時刻,這是你最好地快速提升自己的機會。這樣的工作對於你來說也是參考與學習價值比較大的工作。

建議大家可以採用類似的方法去深入思考下AirBnb在KDD2018獲得最佳論文的工作:


本來我是打算把我的關於這篇論文的,類似上面的整個思考過程寫下來的,但是發現太意識流了,估計寫出來你也看不明白,所以就放棄這種努力了。這是我比較欣賞的工作,方法其實比較簡單,但是你要能想到跟作者提出的方法特別類似的方案其實並不容易,很考驗功力。這個方法裡面類似word2vec的Skip-Gram的那個基礎思路其實容易想到,實際上很多公司包括微博在內,在這篇論文發出來之前很早都已經用類似的做法在做user embedding或者item embedding了,所以那個基礎方法是比較常規的。但是改進模型的點子,比如在損失函式裡面加入booking資料約束,這個想法還是很讚的,體現了作者對手頭業務非常瞭解。包括後面在booking資料稀疏的時候本質上是做了個聚類,那個聚類方法以及後續應用的特徵實時模型,其實也並不是太容易就能想到的,而且非常簡潔。我自己重建的時候想了兩個方案,不過不得不承認確實不如作者的方法簡潔。不論怎樣說,我個人從這篇文章學習了不少新知識和新技巧。所以也特別推薦下大家可以拿這篇論文練手。這個工作確實很贊,當然也許是我水平太菜,而這兩者也很可能是同時成立的。

如果你能持續用這種思維方式去鍛鍊自己,我可以給你拍胸脯:堅持一年技術水平必有大精進,如果這個方法沒用的話你可以回頭來找我,我對此負責。比如一年後你來找我說:“大哥,你操縱商品市場價格,這是犯罪!最近牛肉這麼貴,這跟你有關啊,你數數你把多少頭牛吹得灰飛煙滅吧。你這方法我試了,好像沒什麼用啊,我還是那麼菜”。到那時,我一定會比較負責任地對你說:“兄弟,這隻能再次證明你確實不適合從事前沿高科技的工作,來,送你幅扁擔,你還是踏踏實實地去搬磚好了”。嗯,我一向就是這麼有擔當這麼負責任。

既然上面用如何讀論文來舉例子,那麼就順手多講幾句我對論文相關事情的一些個人看法。寫東西的時候,講著講著碰見叉路口就溜達進去,因此不斷迷路,這是我的個人寫作特色。下面談看法,首先,現在AI相關的論文實在太多了,比如是AAAI還是IJCAI來著,記不清了,一個大會就提交七千多篇論文,這還只是一個會議,還是質量說過得去的會議,如果再算上很多一流二流三流不入流的會議,你可以推算下現在一年出來多少AI論文。任何一個人都沒有足夠的精力看完哪怕是具體一個領域的所有論文,如果這個領域比較寬泛的話。當然其實也沒有這個必要,事實上,市面上的論文,98%甚至99%都沒有看的必要,原因不解釋。真正值得看的有價值的好論文其實是非常有限的。

如果上述假設成立,那麼會引出第二個比較重要的問題:“如何判斷一篇論文是否有價值?如果有價值,有多大價值?”糟糕的論文怎麼判斷這裡就不提了,其實你隨手選一篇,大概率屬於這一類,所謂“論文的負例各有各的糟糕,但是正例卻有一些共同的判斷標準”。我在這裡以最近比較火的兩篇文章為例子,它們代表了兩種型別的好,但是又有不同(我知道我說下面的話可能會引起爭議,但是純屬個人主觀意見,謝絕討論)。

一種是有趣有用但是影響可能不會太大的,比如Rethinking Imagenet Pre-training 這篇論文,這是大神寫的,問題本身是很有意義的,指出了和人們常規的認識不太一致的一種現象。那就是:之前大家習慣於在做影象任務的時候,先用Image-net做預訓練,然後再去自己的任務上做Fine-Tuning,因為一般這樣做有些好處:如果自己手頭任務資料比較小,那麼預訓練會直接提升模型效果;即使手頭任務資料量足夠,上了預訓練也會加快手頭任務的收斂速度。這是人們一般的印象,而上面這篇論文得出的結論重新整理了一個觀點:那就是如果手頭任務資料量夠大,即使不用Image-net預訓練,直接在自己任務上做訓練效果能做得一樣好,只是訓練時間可能要長一些。

但是如果從將來的影響力來說,我的估計是它對領域的影響力不會太大。為什麼?因為這個研究基本不會改變人們目前做研究或者做應用的方式。很簡單,雖然結論是:如果訓練資料足夠大,那麼不做預先訓練也可以達到好的效果。但是,以後人們做影象任務,肯定還是會用預訓練的,因為即使資料量足夠,那麼起碼訓練收斂速度快些,有這個額外的好處,付出又不大,那我幹嘛不加上這一步呢?另外一種情況,如果手頭任務訓練資料不夠,那我肯定會用Image-net預先訓練,否則效果無法保證。所以說不論其它人面臨什麼樣的任務,大家以後仍然會採用過去的這種預訓練+Fine Tuning的兩階段方式去做。意思是這個工作並不會改變之後人們的研究和應用方式。它的價值在於:會引發人們更深入的思考,就是這種現象背後是什麼原因在起作用?有什麼更深層次的原因?這是它的價值所在。

另外一篇論文就是最近也特別火的Bert模型。這個和上面的工作就不太一樣,Bert明顯屬於那種模型創新不大,但是未來的影響力會極大的工作。因為之後可能絕大多數NLP任務都會採取Bert這種兩階段模式,無論是研究領域還是應用領域,它帶來了整個領域模式的更新換代,所以影響力毫無疑問是會非常大的。所以這是一種模型創新不大,但是因為效果太好,直接影響後續大多數工作的工作模式。(廣告插入:如果希望更詳細地瞭解Bert模型,請參考解讀文章:從Word Embedding到 Bert模型:自然語言處理中的預訓練技術發展史

上面舉了兩個例子解釋怎麼判斷一個工作的價值和影響力,當然,除了這兩種型別,還有其他型別的重要工作,這裡不展開說了。如果你實在是沒有能力判斷哪個工作有價值,哪篇論文值得看,那麼我送你個簡單粗暴的判斷標準:首先,先看實驗部分,如果效果有特別明顯的提升,那麼這篇論文絕對是值得看的,無論它的方法是簡單還是複雜;而如果效果有提升但是幅度不是很大,我覺得這種工作可看可不看,可以加上一個輔助判斷。輔助判斷是:如果方法比較複雜(除非整個思路框架非常新),建議直接扔了不看,有這時間不如去聽會歌放鬆放鬆,我估計這不會給你的知識更新帶來任何損失;而如果方法比較簡潔,那麼看你心情,心情好就看,心情不好就不看。怎麼樣,這個標準還是很隨性很好執行的吧?不用謝。

再叨叨幾句,有關大的技術革新的殘酷性,這點如果沒有比較長的科研經歷,是不太能意識到這個問題的,就像從來沒有經歷戰爭的年輕人總以為每日的和平是天經地義一樣,事實上哪有那麼多天經地義?這只是經驗少造成的錯覺而已。關於技術革新的殘酷性,年紀大點的研究者我估計都能感受到。


Encoder-Decoder+Transformer

我來舉個例子,我們以機器翻譯來談,在深度學習深入入侵NLP前,各種機器翻譯方法百花齊放,五花八門,看上去場面相當繁花似錦,烈火烹油。作為資深研究者,可能你會為過去自己提出的某兩個idea欣喜,覺得是你憑一己之力有力地推動了這個領域的快速發展,其實這都是鏡中花。你再看看目前機器翻譯的標準模型:Encoder-Decoder+Transformer,跟傳統方法比效果已經遙遙領先,而且整個模式也比較簡單。我估計很快Bert也會被加入到這個禮包裡,進一步提升翻譯效果。你看看現在誰在論文裡還大量引用傳統方法嗎?如果說得直白一點,傳統MT方法基本已經被淘汰了,而這不過是短短5年間發生的技術模式遷移。


那些花兒-朴樹

這就是大的技術變革帶來的殘酷性,當然這個殘酷指的物件是一些領域資深人士或者舊的點子,也許當年讓人意氣風發的創新此後再也無人提起,就像這些點子這些人從來不曾出現過一樣。想想也有點令人唏噓。朴樹的《那些花兒》曾經風靡一時,其中有句歌詞尤其打動人心:“……她們都老了吧?她們在哪裡呀?……”歌詞本身所指是男性生命中曾經歷的那些女性,這是一種歲月的哀傷。如果把這句歌詞放在上面提到的技術變遷上也很符合場景,不過這裡那些花兒指的是上面提到的被人忘卻的曾經鮮活的點子…..其實吧,還有個這句歌詞更應景的場合:每當我和人一起吃火鍋,撈不到肉的時候,腦海裡也會想起這兩句,這想起來真是讓人傷感,以及飢寒交迫。

上面幾段寫得太隨性,見岔路口就繞進去,我的問題是我們現在浪到哪兒啦?我本來是想講什麼來著?好像又迷路了。我往回數數,好像進了好幾重岔路口了,我們來幾個return語句,把那幾個岔路口彈出棧頂,回到我們的主程式上來:拉馬努金式思維訓練法。

Return;

Return;

我相信講到這裡,什麼是拉馬努金式思維訓練,以及如何在機器學習中應用這種科學思維訓練方法,你已經明白是怎麼回事了。


If 本文作者這樣講你還不明白 then:

請記得給自己的IQ卡充值;

Goto “論雷峰塔的倒掉與重建:拉馬努金鍊金術”

Else:

Goto “出埃及記:機器學習之外”


出埃及記:機器學習之外

出埃及記源於聖經故事,記載了摩西帶領兩百萬飽受迫害之苦的猶太人擺脫法老追兵,逃離苦地埃及,借神力劈開紅海,跨海而過,最終艱難抵達目的地迦南之歷程。

我們人數眾多----且日益越來越多-----的演算法工程師兄弟,或者姐妹們,雖然整日睡眼惺忪蓬頭垢面,但當披上格子戰袍那一刻,日漸退後的髮際線沐浴在擁堵不堪的西二旗和後廠村路的朝陽中,心中的戰鬥號角即會吹起,立刻精神百倍雞血滿滿地投入到調參掉包等令人激動的煉丹偉大事業第一線:GPU即是我們的三昧真火,Tensorflow就是我們的煉丹爐,LSTM、ResNet就是我們的靈芝草,BN、Attention就是我們的萬能調料…… 雖無古煉丹房之仙霧繚繞,卻胸懷“十步殺一人,千里不留行”之小小驕傲…….只有當我們意識到,我們以及人數更為眾多的工程師們的夢想和軀體的保鮮期只能勉強支撐35年的時候,也許我們才能夠真正擺正自己在這個殘酷社會中的位置:我們其實與蒸汽機時代的投煤工,嗡嗡作響紡織機旁的紡織工,大航海時代的划槳手並無什麼本質的不同。我們其實才是需要逃離埃及苦地的新時代猶太人,但是也許,到最終會發現,世上並不存在能借力神靈之手的摩西引路。

嗯,好了,製造焦慮結束。

其實吧,我們可愛的工程師們之所以一輩子(也就是說35年)只能做工程師,是因為他們覺得自己只能一輩子做工程師。看上去好像有點繞,如果看不懂請返回去再看一遍上句,直到看懂為止。讓我們最後假裝更深刻地問一句:誰是我們的摩西?難道我們真的找不到自己的摩西嗎?其實答案簡單到甚至有些平庸:只有我們自己才是自己的摩西。

來,讓我們來用拉馬努金思維訓練法來撥開迷霧,逐步發現屬於自己的那個摩西。也許這個找尋摩西的過程會很漫長,但是我相信你如果能夠以正確的方式思考問題,終有一天一定能夠找到他,並在他的指引下安然到達你心中的平靜之所迦南。

你應該意識到,拉馬努金思維訓練法其實是一個具備普適性的方法,並不僅僅限於機器學習領域,甚至不侷限於科學領域,幾乎在任何領域都可以採用這種思維訓練方法來思考問題。比如如果你有志於成為新時代的馬雲,你可以思考下面的問題:

馬雲在建立並不斷髮展壯大阿里的過程中,有哪些關鍵的選擇節點?在每個關鍵選擇節點他的選擇是什麼?如果是你,在不作弊,沒有未來之眼,儘量回到當年情景的情況下,你會做怎樣的選擇?你的選擇和馬雲的選擇相比哪個更好?如果你覺得馬雲的選擇更正確,那麼為什麼馬雲的更好?為什麼馬雲能夠做出這種選擇,而你做不出這些選擇?你缺乏馬雲當年哪些特質或者判斷力?……..這個問題列表可以不斷延續下去,但我相信每個人都能在這種拉馬努金式思考過程中獲益良多。

再比如,閱讀歷史使人明智,這個道理深刻易懂,但是真正能沉下心來讀歷史的能有幾個?真正懂得怎麼讀歷史的又有幾個?如果你是一位歷史或者戰爭史愛好者,可以做如下思維訓練。明朝大家都比較熟悉,所以我們以朱元璋作為例子。假設我們來做角色扮演遊戲,你很幸運,抽中的角色是朱元璋,遊戲開始,你看看面臨下列場景時你自己會如何決策:

在亳州城裡,你的義父郭子興平時待你不錯,不過最近看你不太順眼,此時你是走是留?(你選擇留下來?恭喜你,死一次);為了讓遊戲繼續下去,假設你選擇了走,去哪裡?帶誰走?(你說不知道?恭喜你,又死一次);假設你又選擇對了,而且成功地佔領了應天府,此時群雄割據,你的西邊是志大而驕的陳友諒,東邊是小富即安的張士誠,他們都不斷騷擾你,這個時候你選擇先打誰?(你選擇先打張士誠?恭喜你,又死一次);北邊抵擋元軍的韓林兒小明王快頂不住了,你是救還是不救?(你說不知道,好漢饒命?恭喜你,又死一次)…..

你可以回顧下在很多關鍵節點,你是怎麼做的決策,朱元璋是怎麼做的決策,如果把你或者我放在當年朱元璋的位置,你可以算算我們已經死去活來過幾十回了?在遊戲中我們還可以重新來過,如果是在生活中,請聰明的你告訴我:如何才能重新來過?對了,另外一個重要的問題是:為什麼每次面臨重大抉擇的時候,你都能精準地選到那個錯誤的選項?這種驚人的特殊才能你是怎麼獲得的?…….這些問題你可以在想靜靜的同時好好思考一下…….

其實,你,我,他,她…..棲居人世間,我們都是居住在心靈苦地不斷掙扎的新時代猶太人,但終究有一天會意識到,成為一位具備好奇心的積極求知者,成為一位去掉浮躁浮誇的求真者,努力使自己成為事實真相背後的重構者,並在這種思維訓練中獲得超凡的判斷力,這才是拉馬努金式思維方法背後的精髓。


天才的隕落:向每一位求知者致敬

一刻不停的演算,劍橋冬天寒冷的天氣,以及出於虔誠宗教信仰堅持吃素導致的營養不良,最終一點點消耗摧毀掉了拉馬努金這位天才的軀體。待在英國後期的日子裡,拉馬努金不停咳嗽,後來進一步轉化成了肺結核,以當時的醫療水平,這可能與今天的癌症醫療難度類似。1919年,拉馬努金拖著病體回到了日思夜想闊別多年的家鄉。一年後,病逝於馬德拉斯,終年32歲。而他留給我們的是寫在幾個筆記本上的3900多個未給出證明的數學公式。

拉馬努金病逝的訊息讓他的良師益友哈代悲慟不已,在劍橋舉辦的拉馬努金的追悼會上痛哭失聲。

哈代是發掘並不斷提攜拉馬努金的伯樂,如果沒有哈代慧眼識才,拉馬努金很可能在貧苦中籍籍無名地死在印度,至今也不為人所知;從這點講,拉馬努金與事實上很多默默逝去,到今天仍然不為我們所知的那些永遠沉默的天才比起來是幸運的。同時,哈代也是一位嚴師,一直培訓並要求哈馬努金去證明自己那些從直覺而來的神祕公式,而拉馬努金並不善於此道,為此兩人曾引發嚴重衝突。


拉馬努金與哈代

在電影《知無涯者》中,有個片段讓人印象深刻:拉馬努金在英國處境不佳,一直急於發表自己的兩部公式筆記,以期待因此能得到人們的肯定。哈代把拉瑪努金拉到萊恩圖書館,指著一排排陳列整齊的書籍對他說:“人這一生獲得榮譽的方式有很多種,對我們來說,被選為院士就是一種。但在我看來,如果在我們離世之後,能在萊恩圖書館裡,留下一筆遺產,才是最偉大的。這裡有《保羅書信》,米爾頓的詩文,有《摩根聖經》,它們都很偉大,但在我這個搞數學的人看來,最重要的一部還是牛頓的《數學原理》。牛頓的著作是這個物理世界的代表,而你的筆記是數學抽象世界的代表,牛頓也花了很長時間來證明自己,因此我們才有義務要把這些證明出來。一旦我們成功了,我相信總有一天,這些筆記在這裡會有一席之地。”

哈代這番話是典型的人類知識開拓者的追求,而這讓我想到某期辯題是關於人類知識的某辯論綜藝節目中,蔡康永講的一則小故事,而聽完這個故事的我曾為之深深感動,他講的關於知識的故事是這樣的:

“宗教為什麼要迫害科學,宗教為什麼要迫害知識,因為宗教在和科學爭奪解釋世界的權力。我們現在看到巴格達這個城市滿目瘡痍,被戰火蹂躪,你們知道在八世紀的時候巴格達是全世界知識的中心嗎?巴格達作為世界的知識中心長達五百年之久,最優秀的知識分子在巴格達向外部傳播知識,你現在擡頭看到的星空,超過三分之二的星座用阿拉伯文命名。巴格達的精彩文明沒有被人類忘記,可是你們知道,在過了五百年的文明繁華後發生什麼事情?有一個宗教狂熱分子說數學是魔鬼的哲學,然後他得到了執政者的認同,從此巴格達再無知識。你知道建立知識要多久,而消滅知識有多快嗎?

我為你們影印了《華氏451度》這篇科幻小說,這篇小說講的是,在未來作者設想,有一天,人類不允許有書籍,所有的書籍只要在你家被發現,就會被焚燬。我們要眼睜睜地看著家裡的藏書被衝進來的消防員用火柱給銷燬,然後我們要被逮捕。這部小說的結尾是什麼?是每一個不願意認同這個政策的人,他負責用他的腦子來記下一本書,他負責為人類保留住一本書的內容,他就是一本行走的《莊子》,他就是一本行走的《紅樓夢》,她就是一本行走的《傲慢與偏見》。這才是最動人的。”

說實話,我當時的感動來得有點猝不及防,我曾經被愛情故事的聚散離合打動過,被親情的無常無奈打動過,被余光中的《鄉愁》和顧城的《墓床》這些詩歌打動過,也曾被像《往後餘生》和《一生所愛》這種憂傷的歌曲打動過,卻從沒想過有一天會被“知識”這種抽象的概念打動過。

吾輩之生也有涯,而知無涯。對未知世界的新鮮好奇,對已知知識邊疆的開疆拓土,或者將先輩的偉大理念代代傳承,這是我們生而為人的宿命與驕傲,而這也會永遠照亮溫暖我們各自生來孤獨的心靈。

我要向每一位求知者致敬,包括你,閱讀到這裡的朋友,此時此刻之前,也許你剛剛加完班,從明亮的辦公區拖著身影孤身走進冬日北京的寒夜,還在出租車裡為明天上漲的房租發愁;或身處上海鬧市嘈雜咖啡店,悵望著玻璃窗外,熙攘人群中遠去戀人一去永不回的背影低聲嘆息;抑或在三亞或杭州的家裡,剛剛哄睡膝下承歡小兒女,疲憊地打開臺燈開始寫工作週報……但是我相信,不僅是你,也包括我,在不如意和小麻煩360度3D立體不斷纏繞我們的平凡生活中,總會有那麼一瞬間,作為求知者,會看到閃閃發光的自己,哪怕這一刻短暫飄忽剎那如光影不可捉摸,可在我們內心裡,平日小小卑微的自己,此刻就是自己心中的拉馬努金,請為此刻的我們喝彩,哪怕我們知道永遠也等不到那位正在遠方等待自己的哈代。