下面我給大家分享幾個案例,看看我們是如何從實際挑戰中激發研究問題,以及這樣的研究又是如何反過來對實際應用有所幫助的。
對偶學習Dual Learning
對偶學習解決的是實際應用中訓練數據不足的問題。 當我們沒有充足的有標籤數據的時候,想要進行有效的訓練,就需要尋找其它信號來驅動訓練過程。對偶學習利用的信號是天然存在於人工智慧任務之中的,但是很少被人利用,我們稱之為人工智慧任務的結構對偶性。所謂結構對偶性指的是一個人工智慧任務的輸出恰好是另外一個任務的輸入,反之亦然。例如,在機器翻譯中,中英翻譯和英中翻譯是一對對偶任務;在語音信號處理中,語音識別和語音合成是一對對偶任務。
那麼有了結構對偶性,對偶學習是如何進行模型訓練的呢?我們以中英機器翻譯為例。假設我們只有單語的數據,即無標註的英文文檔和無標註的中文文檔,和兩個能力很弱的初始翻譯模型。我們的任務是利用無標註的單語數據不斷地學習、提高初始模型的能力,最後得到非常強的翻譯模型。
為了實現這個目的,我們可以拿一個無標籤的英文句子,利用初始模型將其譯成中文,然後再利用反方向的初始翻譯模型把這句中文譯回英文。通過比較原始的英文句子和翻譯回來的英文句子,以及中間的翻譯結果的語法和詞法,我們可以得到一系列反饋信號,來更新初始模型,周而復始,使之不斷提高。當我們有海量的單語數據時,對偶學習可以不斷地提升翻譯模型的性能,達到很高的水準。微軟亞洲研究院2018年3月在中英新聞翻譯任務上達到了媲美人類的水準,對偶學習就是其背後的秘密武器之一。
對偶學習之所以有效,是因為兩個對偶任務背後有著非常強的概率聯繫——它們的機器學習模型分別對應於聯合概率的兩種不同的展開方式。正因為這種聯繫,兩個機器學習模型可以互相幫助,使對偶任務的學習更出色。目前,我們已經對對偶學習在有監督、無監督、推斷、遷移學習、多智能體學習等各個層面上進行了深入的研究,在學術界產生了一定的反響,很多學者開始將對偶學習的思路應用在他們的目標問題中。
博弈學習Game-Theoretic Learning
機器學習的另一大挑戰,是數據由智能體產生,其分布是動態的,並且會隨著機器學習的過程發生變化。智能體之間的互動,可以用博弈論來刻畫。然而博弈論也存在自己的局限性,它假設智能體完全理性,而且進行的是最壞情況的分析。
博弈機器學習就是要取二者所長,得到一個能夠解決實際挑戰的方法。我們仍然關心智能體的策略行為,但是這種行為是用基於數據驅動的馬爾科夫模型加以描述的。具體而言,在博弈機器學習的框架中有兩個模型,一個模型用來學習智能體的行為,用它可以預測在未來新的情況下智能體會做出什麼樣的反應,產生什麼樣的數據;第二個模型用來解決目標的機器學習問題,它所用的部分數據由第一個模型產生 ,換言之,我們不再假設所有數據是由預先給定的分布產生的。
我們以廣告拍賣機制設計為例來講解一下博弈機器學習的流程。在廣告的拍賣過程中,廣告主們會對關鍵詞或者廣告位進行競價,拍賣的勝者將得到廣告機會;在這個過程中,廣告費和廣告的相關性都會起作用。當廣告機制在這兩種因素之間權衡的時候,廣告主會有感覺,並且相應地調整自己的出價以及廣告內容,以期獲得拍賣的勝利。很顯然,廣告主的行為數據是隨著廣告機制的變化而變化的,而不是從某個固定的分布中採樣得來的。博弈機器學習包含不斷學習的迭代過程,在廣告拍賣機制更新後,廣告主的行為會發生變化,我們需要相應地調整行為模型,行為模型再產生新的廣告數據,而這些數據會被用來訓練新的廣告拍賣機制。這個過程不斷重複,直到整個過程收斂,得到一個在均衡態下最好的機制。
競合學習Coopetitive Learning
競合學習要解決的問題,是把一個複雜的優化問題轉化為局部優化,每個局部問題用一個智能體來解決,並通過局部智能體之間的約束,保證局部優化和全局優化之間有非常強的聯繫。 每一個智能體在做決策時,與其它智能體之間既是共享信息的合作關係,也存在對公共資源的競爭關係,形成合作與競爭並存的機制,最終實現全局最優化。
這一研究的背景是我們與東方海外航運公司(OOCL)的合作。在航運的應用場景中,每個港口都是局部智能體,每個港口都要對自己的物流狀況作出決策,各個港口之間是上下游關係,有很強的聯繫;同時它們之間還存在對輪船載重資源的競爭與衝突。那如何有效地建模這種競合關係呢?首先我們用一個圖神經網路來對合作關係進行建模,其次,我們用拍賣來對競爭關係進行建模,通過求解一個次模優化問題,來決定輪船給相關港口分配怎樣的資源。通過這種競合學習,最後我們得到的局部優化和整體優化的結果非常接近,且運行效率提高了多個數量級。
輕量學習Lightweight Learning
最近這幾年,學術界有一種「大力出奇蹟」的趨勢,用到的GPU、TPU越來越多。這種情況不僅會導致學術壟斷現象,還會出現一種馬太效應,一些研究的邊界要通過強大的計算資源才能獲取,而且他人沒有計算資源就無法復現。
面對這種情況,我們做了一系列輕量機器學習的研究,我們希望告訴學術界,有時候巧妙的演算法比算力更重要,不需要那麼多的計算資源也可以解決很大規模的問題。 在我們2015年發表LightLDA演算法之前,最好的LDA系統是谷歌的LDA,用10000個CPU訓練了70小時,從文本里抽取出10萬個主題。我們在演算法上做了創新,首次提出了採樣概率的乘性因子分解,在60小時內可以用8台計算機抽取100萬個主題。
我們發表在NIPS 2016和2017上的LightGBM演算法也提出了全新的優化思路,比如互斥特徵捆綁技術和基於投票的輕量級並行框架,這些新技術讓LightGBM比此前最好的XGBoost演算法快一個數量級以上,精度也有所提升。LightGBM開源後,在沒有任何宣傳的情況下迅速在GitHub上獲得了8000+星,過去兩三年里很多演算法競賽、數據挖掘競賽的冠軍都使用了LightGBM。由此可見,精巧的演算法創新可以降低學術的門檻,讓很多人不需要砸錢買上萬塊GPU或者CPU也可以做很了不起的大規模的研究。
分散式學習Distributed Learning
當然,當數據和模型大到一定程度時,分散式運算不可避免。 分散式機器學習也有很多問題值得深究,比如數據如何切分?局部節點之間如何通信?局部節點訓練出的機器學習子模型如何複合?每一步聽起來簡單,做起來都很需要技巧。
比如說通信,最簡單的是使用基於MPI的同步通信,但在成百上千台機器共同處理一個計算任務時,不能保證每台機器運算速度一致,這時同步通信就好似有短板的水桶,最後整個系統被短板拖垮。近年的熱點是非同步通信,但非同步通信會受到延遲的困擾。當一個很慢的機器把它的陳舊的模型更新同步到全局伺服器上時,可能毀掉那個被其它快機器更新了很多次的新模型。為了解決這個問題,我們在ICML 2017上發表的一篇論文,首次用數學手段對延遲進行了嚴謹的刻畫,並且提出了消除延遲的補救方法。理論和實驗均表明,新方法的收斂性能優於傳統的非同步通信,在精度方面接近單機演算法。
除此之外,在分散式機器學習方面,我們還做了很多其它工作,也對這一領域做了較為全面的總結,整合為《分散式機器學習:演算法、理論與實踐》一書,推薦對分散式機器學習感興趣的讀者閱讀。
解決現實痛點,做有用的研究
這五個研究方向看似不同,背後其實有共通之處——每一個研究都是來源於實際應用中的痛點分析,彌補了傳統機器學習演算法和模型的不足。正是因為如此,我們提出的這些新的研究方法,在現實的應用場景中取得了顛覆性的效果。
? 將對偶學習應用於中英機器翻譯任務,我們在2018年3月率先達到了媲美人類的水平。
? 將博弈學習和深度學習應用於智能投資,我們得到了比所有市面上的基金產品的超額收益率都高很多的投資策略,而且在風險控制方面也滿足了嚴苛的要求。
? 將競合學習應用於集裝箱調度,我們不僅在速度上有極大的提升,還能夠減少約10%的運營成本,這相當於每年節省幾千萬美金的支出。
? 將LightLDA演算法應用於微軟的廣告業務,我們在用戶體驗沒有任何下降的情況下促成了80%的利潤增長,收到了產品副總裁的高度讚揚。
? 將分散式學習應用於微軟CNTK平台,我們在訓練速度上與其它平台相比有了非常大的提升。
我想通過這五個實際案例向大家展示,如果我們在做人工智慧、機器學習研究時,有針對性地去解決現實中的痛點問題,從中發掘關鍵的挑戰,找到技術的難點,那麼我們的研究將有機會對現實世界產生非常巨大的影響。所以,從事機器學習的研究,不能閉門造車,要從實踐中來,到實踐中去,形成研究的閉環。
本賬號為微軟亞洲研究院的官方知乎賬號。本賬號立足於計算機領域,特別是人工智慧相關的前沿研究,旨在為人工智慧的相關研究提供範例,從專業的角度促進公眾對人工智慧的理解,並為研究人員提供討論和參與的開放平台,從而共建計算機領域的未來。
微軟亞洲研究院的每一位專家都是我們的智囊團,你在這個賬號可以閱讀到來自計算機科學領域各個不同方向的專家們的見解。請大家不要吝惜手裡的「邀請」,讓我們在分享中共同進步。
也歡迎大家關注我們的微博和微信 (ID:MSRAsia) 賬號,了解更多我們的研究。
0、工科,實驗現象性科研
1、我覺得不是「開始應該是一個不錯的idea」
不是說這樣的開始不對,而是這樣的開始其實已經比較苛刻和稀有(跟「好」的檔次也有關)了
絕大多數人科研工作者是普通人,沒有很好的前輩(導師,小老闆,師兄師姐)帶,只能自己折騰
這種情況下,你找到一個真正的好idea之前,一定會碰到很多看似好idea的idea
這時候你怎麼做?繼續找更大的麥穗?一般不會,你一般就照這個表面好的idea下去了
實驗,結果,一路走過來,發現這個idea是個偽命題,壞idea,或者最常見的,普通idea
這,就是科研,以前看起來可行的,最後都大概率不行
如果你這時候放棄,繼續做這個普通idea,也能畢業,這是科研寬容的地方
如果這時候你還要死撐下去,恭喜你,精神層面,你距離好的idea更近了
當你後來揚名立腕兒時,你可能端著茶一臉回憶,對前面坐著的新晉博一娓娓道,「科研,始於一個好的idea」
完全忘記了曾經的崩潰狀
2、所以一篇科研論文的開始不是一個好的idea,而是一堆被丟棄的當初看似是好idea的偽idea
那這個真正意義上的好idea什麼時候產生的
輪迴
好的東西,是對比來的,當初那些偽idea你覺得好,是參比的你腦子中感覺到的這塊表比那座鐘好
而真正的好idea,是你切身經歷過的,看到過鐘錶內部結構後,自己從實際結果出發判斷出來的好
3、當然,這並不容易
經驗,技術,都需要積累,積累了,自然能在一定範圍內分出上下高低那些上來就抓住高的、好的,基本都是靠直覺的概率,錦上添花,非雪中送炭
博士,以五年計,三年內能想出一個好idea,算是優秀的
如果感覺這之前的時間有點兒浪費,那就用普通idea填滿
重點在於,不要指望輕輕鬆鬆
4、積累失敗
machine learning是學習思維的一個極端方式,其核心就在於迭代,循環
人沒那麼高效,但模式是一樣的
如果你能夠在同樣的時間內嘗試比別人更多的idea,你獲得好idea的概率會高於別人
所以,快速找到一個idea(不一定能夠定義為好),實驗,結束,如此高頻執行這個循環
若此,空想和實戰,高下立判
不敢說想到過什麼不錯的 idea。不過以前寫過一篇相關小文,這裡斗膽整理、討論一下。
===== 簡單想法 =====
先談談簡單想法,屬於有套路的,用得好可以發表一些不錯的文章。但是做出大的科學貢獻相對較難。不過由淺入深,對於剛入行的同學而言,先有產生簡單想法的能力,對於以後產生更創造性的想法是有好處的。只要別滿足於用套路把自己套路了就好。
論文或報告的討論環節
一篇好的文章,一個好的報告,在結尾的地方往往有些啟發性的討論(也有些文章全篇就是提出一個問題)。如果作者/報告人沒有表示要繼續做這些方向,這些內容往往是做一些追隨性工作的開端。記得在學術規範的角度,你未來的工作中需要引用這些文章。
如果導師允許你與別的組合作,可以嘗試與作者/演講者聯繫表明你的興趣並展開討論。這可能是合作的開端。一個好的合作者可能是除了導師之外對你的學術生涯影響最大的人。
推廣以及查缺補漏
如果對領域比較了解,比如,耍猴領域,了解了有什麼猴,怎麼耍。那麼,出了一個新的猴,或者一個新的耍法,只要別人沒做過,馬上就可以應用到別的耍法,或者別的猴上面。另外,這種工作經常有一個熱點之後大家蜂擁而上,手快的話能佔個好位置,獲得不少引用甚至建立一定學術地位。以前我讀博、做博後的時候,有時為了炫耀手快,一天就能從想法到投稿搞一篇這樣的文章。不過這樣的事情炫耀一下也罷,不能當成做學術日常的打開方式。
交叉,聽報告的時候走點神
兩個領域放在一起,算是簡單想法里很有效的了。本質上還是一個領域有猴,一個領域有耍法,只要在兩個領域都受到了良好的訓練(訓練不夠合作湊),這樣的事情也很簡單。但是需要有交叉的想像力、創造力,還是不容易的。有很多的科學發現確實就是這樣做出的。
我自己的經驗,一種有效的交叉是,聽其它領域報告聽到無聊的時候,就一邊聽報告一邊隨便想些自己領域感興趣的問題。這樣一不小心一個想法就出來了。
對可預期的趨勢早做準備
有時候,一些科學突破是大概率可以預期的,比如高能物理裡面 Higgs 粒子的發現、引力物理中引力波的發現等。對於這種可預期的突破,可以早做思考,早做準備。這種思考和準備並不局限於預期有發現的小方向,因為這種突破性的發現可以很快傳導到整個大領域,例如前兩個例子中整個的高能物理和引力物理。這和網上的火前留名是一個道理。
===== 為產生創造性想法做準備 =====
產生更加創造性的想法,難度就明顯增加了。這種創造性的難度,物理裡面有點像指數壓低的量子隧穿,計算機裡面有點像 NP 問題與 P 問題的區別,文學裡面有點像「文章本天成,妙手偶得之」。不過,與其守株待兔期待偶得,亦可時時為創造性的想法做好準備。
科研品味
想法由心生。科研的價值觀要正,想法才能正。當然,科研的價值觀、品味是非常主觀的東西。我的個人看法在這個回答裡面。
一個人的科研品位會對自己的學術道路有什麼影響??
www.zhihu.com
模塊化地學習
和編程的模塊化類似,學習知識也要模塊化。按照所謂的開閉原則,學習的時候把知識分成最小模塊,並理清各個知識模塊之間的依賴關係。這裡強調依賴關係。平時讀書考試,以至教材編寫,往往不強調依賴關係。但在自己的知識體系中,盡量減少模塊間的依賴關係,並把依賴關係搞清楚,對新想法是非常重要的。
這是因為,有新想法,就好比編程有了新的需求。新想法會擴展和修改我們頭腦里的原有模型,和有了新需求改程序挺像的。如果以前的知識對新想法帶來的知識擴展是開放的,對新想法帶來的知識修改是封閉的,這樣,就能迅速在腦海中驗證一個想法是否可行。如果只學會了知識,但是不清楚知識之間是怎麼互相依賴的,則修改一部分以後往往藕斷絲連,或按住葫蘆起了瓢,最後想成一團漿糊。異想天開的想法很多,沒準哪個實現了呢?這麼多想法沒法一個一個全都具體算出來再挑,我們需要迅速挑出那一個。
深入思考
一些剛入學的同學經常遵循以下研究方式:
for project from ideas_of_supervisor:
project.learn_calculation_technique()
while project.not_completed:
while project.know_how_to_calculate:
project.calculate()
project.poke_supervisor()
project.write_paper()
以這種方式入門沒什麼不好,畢竟出文章要趁早。但是寫了點文章以後,建議轉換一下思維,跳出這個循環。問做什麼、怎麼做之前,多問幾個為什麼要做這個事情。儘可能地去深入思考,多追問出幾個為什麼。包括為什麼這樣做,以及為什麼不那樣做。
這是對一個學科有深刻見解的前提,也是無章可循的時候能做得下去的前提。
重建別人的想法
讀文章的時候,不僅專註於人家怎麼做的,更在意人家怎麼想出來的。有的時候段位差距太大,真不知道人家怎麼想出來的。但是多數情況,還是有章可循的,那一章叫做 introduction。作者講故事的方式經常是順著他們想問題的過程來展開的。
了解並嘗試領域內的大問題
每個還沒死透的研究領域裡面都有一系列大問題。Google 一下,或者看幾個著名公眾報告就知道了。這些大問題肯定是困難的。我們一生也大概率沒機會解決一個大問題。但是,我們應該嘗試。在一生的不同階段,去花一定的(可控的)時間,去嘗試一下解決這些問題。因為,只有嘗試,我們才知道一些隨隨便便的想法為什麼不行;只有嘗試,這些問題才能深深地刻在我們心裡;只有嘗試,我們才知道在什麼樣的啟發下,我們才有解決這些問題的可能。
當然,這事不能當飯吃。嘗試一下,然後迅速回來做吃飯的營生(繼續耍猴)。
了解並嘗試領域內的小問題
一個領域內,小問題一定很多。有的問題可能不值得花時間去做。可是,如果有一天你意識到,幾個小問題有一個統一而簡潔的答案,那麼這些小問題可能是一個大問題的冰山一角,而你得到了它。
從領域內在邏輯發現問題
我經常用解析函數來形容對一個領域的理解——從任何一個角度接近任何一個知識點,應該都是能想得通的。但是,一個發展中的領域,經常不是這樣的。正如溫伯格所說,這個領域中往往夾雜了了種種上古的英雄傳說,以及各種不自洽的片段,一廂情願而自以為是的猜測,等等。從各個方向思考一個領域的各個知識點,通常會發現其中有不少重要問題,其實根本沒解決。
===== 為產生創造性想法做努力 =====
把問題深深刻在心裡
當你碰到問題的答案的時候,可以馬上意識到這是這個問題的答案。如果你想要回憶起這個問題都要花費很大努力的話,你碰到的問題答案(作為一個十分模糊的想法)多半早已溜走了。
把已知未知放在一起
經常把刻在心裡的問題放到頭腦里過一遍。特別是和最近學過的已知內容放在一起。還是拿量子隧穿做個類比,隧穿概率是被勢壘寬度指數壓低的。知識之間距離近了,都放在一起(工作記憶)想,隧穿沒準就發生了。
討論
有幾個值得信賴的老師和朋友(就是不會偷你想法的),經常和他們討論各種大小問題,以及你的想法。有時候說著說著,就會有啟發。他們的評論也往往會有啟發。如果真怕別人偷你想法,淘寶個毛絨玩具猴,對著他討論應該也是好的。
給自己空閑時間
如果天天都在被生活追著走,好不容易有點空閑,又被刷朋友圈佔了,那麼沒有留給自己創造的時間,就難有創造的結果。給自己點空閑,做些容易激發自己創造的事情。這個因人而異,比如睡覺的,洗澡的,散步的,喝咖啡的,聽報告的。
===== 從想法到實施 =====
提出明確的科學問題和步驟
把模糊的想法轉化成數學問題。接著,一個受過恰當訓練的博士生應該可以解決這個問題。當然,很多想法做著做著就歪樓了。不過一個創造性的想法,就算歪樓,往往也歪到另一個有意思的樓上去。
確認想法是新的
這事其實挺煩的。但是不得不做。我們必須給前人的成果足夠的尊重。這是科學共同體能延續下去的要素之一,也是個人能在學術圈混下去的條件之一。找到你知道的,和想法最相關的幾篇文章,徹查他們引的文章,引他們的文章。看看你的想法有沒有出現過。另外,找個你信賴的專家問一問。
其實,我建議有了想法,先玩幾天,做出個雛形,然後再查文獻。反正失望的都是那一下,之前玩幾天,玩到就賺到了。另外,沒準你的想法其實不一樣呢,如果馬上查文獻,可能被文獻把一個好的想法帶歪了。
做出工作
終於寫到與本文沒啥關係的地方了。Shut up and calculate。幹活幹活。
謹慎,再謹慎
和追隨別人工作比起來,實施新的想法更容易犯錯誤。因為實施途徑要自己探索。所以一定要從多個角度把工作想通。萬一哪個角度有一點疑問,千萬不要將就,不要諱疾忌醫,因為深究下去沒準裡面藏著一個大錯誤。正因為如此,想新的想法其實很累,比追隨別人工作累很多。不過這種累與風險,和探索的樂趣與成就感沒法分開。我們只能接受這些挑戰。
推薦閱讀: