[轉] 周誌華:關於機器學習的一點思考
各位同學,大家下午好,首先跟大家說抱歉,因為今天我講的時間不會太長。今天來參加復旦大學智能信息處理重點實驗室的學術委員會,感謝實驗室的主任周水庚教授給我布置了一個任務,讓我在走之前給大家做一個報告。今天主要跟大家分享一下我們關於機器學習的一些非常粗淺的一些看法。只是代表我們自己的認識,談一下現在機器學習取得的成功背後可能有一些什麽樣的問題,以及未來可能我們在關註一些什麽樣的事情。
前段時間我們經常說大數據。實際上現在大家都知道,大數據本身不等於大的價值。數據好像就是一個資源,你要得到資源的價值,還需要做有效的數據分析。而今天我們主要靠機器學習來做這麽一件事。
一個典型的機器學習過程,在座的很多同學都從我的書上看到過,就是我們拿到很多現實生活中的數據,把它組成表格的形式,每一行對應了一個對象或者事件,每一列對應了刻畫這個對象的的某種重要的屬性。還有一個我們要預測的東西,我們把它叫做「類別標記」。 通過學習的過程得到模型。今後,得到一個新的數據,我們把它提供給模型,這個模型就可以給我們結果。機器學習做的是從這個數據到模型中間的訓練過程涉及到的學習算法。有一個說法,計算機科學是關於算法的學問。如果從這個意義上來說,機器學習就是關於學習算法的設計、分析和應用的一個學問。現實生活中各種各樣的預測、分類、預報的任務,抽象地來看,在計算機裏面,我們以數據驅動的方式去解決它,這背後就在做機器學習。
今天,可以說機器學習已經無處不在了。科學界很關註,政府也很重視,工業界也花了很多努力在做這件事。「人工智能」是今天特別熱的一個詞,這幾年大家都在談人工智能,前幾年熱的是大數據。那麽人工智能為什麽熱?可能主要因為中間機器學習技術,特別是其中的深度學習技術,取得了很大的成功。所以不管是大數據也好,人工智能也好,背後的重要的支撐技術都是機器學習。所以這也是為什麽機器學習今天這麽的重要。
機器學習雖然這麽成功,但是我們研究機器學習的人必須要去做一個反思:這個成功背後到底是什麽?如果我們看一看現在所謂所有成功的智能應用,或者說所有成功的機器學習的應用背後,我們認為都有這麽三件事情:
- 第一,這件事情背後一定有一個有效的深度模型。
- 第二,這個任務上我們存在很強的監督信息。
- 第三,我們的任務環境比較穩定。
基本上現在我們所有成功的應用,這三者缺一不可。還一些其他的因素,但是這三點非常突出。 其中任何一點,如果在某個應用任務中還不存在或者不成熟,那麽這個應用所取得的效果可能就和其他很多任務不太一樣。所以我們今天就特別要來談一談這幾件事。
第一,我們談談一談深度模型
最近幾年深度學習技術在很多方面都取得非常大的成功,特別是圖像視頻語音,自然語言處理,信息檢索等等。如果我們今天要問深度學習是什麽?他們其實很多人給我們的答案會是說「深度學習就是深度神經網絡」。這麽一個觀念,可以說是今天做深度學習的絕大多數人都持有的一個觀點——深度學習其實一定程度上說就是深度神經網絡的一個同義詞或者近義詞。我們看一個例子,這個報紙是美國一個很著名的學會,工業與應用數學學會 CM,的旗艦的報紙,CM News。去年 6、7 月份有一個頭板上的文章,裏面一開始就說了這麽一句話,說「深度學習是什麽呢?它是機器學習中使用深度神經網絡的這麽一個字領域」。所以我們可以看到,要談深度學習,必然要從深度神經網絡談起。
談深度神經網絡,我們先從神經網絡談起。神經網絡並不是一個新生事物,在學術界我們已經研究了超過半個世紀了。以往在我們計算機科學界,或者在人工智能界,我們用的神經網絡主要是中間有一個隱層或者有兩個隱層的神經網絡,我們把它叫做「淺層神經網絡」。這樣的神經網絡中間每一個計算單元就是這裏面畫的一個圈,即所謂的一個「神經元」。這個東西從名字上聽起來好像很懸,好像和生物神經產生了聯系。 實際上本質上它是很簡單的一個現象。在神經生理學裏面,在上個世紀 40 年代,大家發現一個現象:一個細胞接收到來自其他細胞的電信息,如果電位的總和超過細胞本身的一個閾值,那麽這個細胞就被激活了。這個現象抽象出來就是這麽一個簡單的公式:我們拿到的輸入是 X,經過連接 W 乘起來放大,如果 Sigma 完之後之和大於某一個電位 Theta,那麽我們就用一個函數去處理它。這就是所謂的 MP Model。
這個模型其實到今天為止仍然在使用。我們可以看到,所謂的神經網絡,其實就是這樣的簡單數學函數通過叠代嵌套形成的這麽一個數學系統。其背後雖然受到了生物神經機理有一點點啟發,但是真正支撐它的還是數學、還是工程學,所以我們完全可以從數學上去分析這個系統它所做的事。今天我們所謂的深度神經網絡,無外乎就是我們現在用了很多層。我給大家看幾個數據:2012 年,深度神經網絡第一次在 ImageNet 的比賽上獲勝,引起了大家對深度神經網絡的關註。當時的神經網絡只用了八層。到 2016 年已經用了 1200 多層,到現在幾千層的神經網絡也經常能聽說。大家可以看到,這是一個非常龐大的一個計算系統,裏面有大量的東西是要算的:對每一個神經元來說,W 和 theta 都需要通過計算來確定。前段時間,無論是媒體上也好,還是學術界也好,很多人都有一個誤解:「現在人工智能深度學習的成功,其實並不是模型和算法有多麽大的變化,主要是計算能力提高了」。這個話有一定的道理。如果完全沒有計算能力的提高,我們今天是做不到的。但另外一方面,計算能力提高,哪怕提高得再多,如果沒有模型算法上的巨大進步,我們今天不會有這些東西。
這裏面有一個誤解,以為「我們拿幾十年前的深度神經網絡算法,放到現在的強力計算設備裏面,就能得出現在的深度神經網絡」。這個看法絕對是錯誤。事實上在 2006 年之前,我們根本都不知道怎麽能夠訓練出五層以上的神經網絡,我們能做的最成功的,只能做到五層,再往上就不知道該怎麽做。哪怕有再強大的計算設備,我也做不出來。這是為什麽呢?一般來說,神經網絡的訓練過程中,我們都是在依靠一個最簡單的計算方式——求它的梯度,然後用梯度搜索的辦法,用 BP 算法或者它的變體——來求解。但是當我們的層數很多之後,梯度在整個計算過程中就很容易消失、發散、不收斂。這時候怎麽辦?我們就用一些很巧妙的計算方法。2006 年 Geoffrey Hinton 提出了逐層訓練的方法,是一個非常大的飛躍。
我們再看這幾年深度神經網絡領域的很重要的發展。比如從激活函數來說,雖然現在還用的是這個 Model,但以往我們通常是用 Sigmoid。而在深度神經網絡年代,我們通常使用 relu 函數,或者把它左邊斜一點,變成 P-ReLu 和它的變體等等。這個主要是讓它梯度下降得不要太快,一定程度上緩解了梯度消失的作用。再比如,這幾年非常流行的網絡,像 Resnet 等等,其實都是在想一些辦法在更深的層次裏面梯度不要被消失了。可以看到,縱觀整個深度神經網絡發展的過程,有一個很基本的原理,就是我們是基於梯度計算的。我們一切做的都是在防止梯度在計算過程中過早的消失、彌散、不能收斂,而我們能做梯度計算的根本原因是這裏面的 F——它本身有很好的數學性質,通常它是連續可微的。如果它並不是連續可微的,那麽梯度就很難算出來,後面也很難去用 BP 這樣的算法去訓練。最近有一些研究,考慮用一些本身是不可微的函數,先把它放進去,通常再用另外一個連續可微的函數去逼近它,最後通過梯度搜索去求解——所以本質上還是需要有梯度計算這麽一件事。
那麽為什麽我們現在要用很深的神經網絡?這件事情其實在機器學習界一直沒有得到一個統一的理解,或者說沒有個一致的解釋。大家一直在探討這件事,到大概兩三年以前,我們組給出了一個解釋。這個解釋當時有很多人認為還是蠻有道理的,所以我今天再把這個再給大家簡單分享一下。我們解釋這件事是從一個模型的復雜度的角度來解釋為什麽我們要用更深的神經網絡。大家知道,從機器學習理論的角度,如果我們一個模型的復雜度比較大,那麽通常會導致模型的容量 Capacity 會比較大,這個容量又和他的泛化能力是有關的。所以簡單地可以理解為,如果一個模型復雜度比較大,那麽他的學習能力相對會比較強。那麽如果從增加學習能力這個角度來看,如果我們要增加神經網絡這種模型的復雜度,可以看到明顯有兩種走法,一種把它變寬,一種把它變深。但是如果從增加復雜度的角度變深會更有效。因為當變寬的時候,只是增加了基函數的個數;當變深的時候,不光增加基函數個數,還增加了函數嵌套叠代的深度和層數。所以從泛函的表達上,後者是更有效的。
那麽下面大家就會應該有這麽一個問題:既然機器學習理論界早就知道這件事兒,變深了就能夠更有效地增加模型的復雜度,也能增加模型的學習能力,那麽為什麽早不這樣做?這裏面根本的原因,如果我們把模型變深了,把它的學習能力變強了,這未必是一件好事。如果大家對機器學習有一點了解,你就會發現,其實機器學習整個鬥爭的一個對象就是過擬合,就是 Overfitting。如果沒有過擬合這件事兒,那麽機器學習整個學科都可以不用存在了——它就會很簡單,做一個經驗風險最小化就好。過擬合是一件什麽事呢?我們拿到一個數據,要把它的一般規律學出來。但是有時候我可能只把數據中的特性學出來,把它錯誤地當成一般規律,那麽以後再用這個模型就會犯錯誤,這就是過擬合。所以機器學習界設計了很多的機制,比如說支持向量機中的正則化,決策樹中的剪枝,訓練神經網絡時要提前停止等等,這都是為了防範過擬合。但是從本質上來說,防範過擬合最有效的最簡單的辦法是使用更多的數據。我們想一想,給你 3000 個數據,把它中間的特性提出來,當成一般規律——這很容易過擬合和犯錯誤,但如果給你 3000 萬甚至 3000 萬萬的數據,把它的特性學出來,這個特性很可能本身已經是一般規律了。
我們現在有了大量的數據,所以我們現在不用擔心過擬合風險那麽嚴重,所以我們可以用更復雜的模型。我們現在有強力計算設備,可以(將結果)算出來。更重要的是,我們還有很多算法上的技巧,能夠防止梯度彌散等問題,所以我們現在能把它做出來。我們給出來這一整套解釋,其實就是在說,第一,我們有了大的訓練數據;第二,我們有了強力的計算設備,有 gpu,有 cpu 的 cluster 等等;第三,我們有了很多訓練的技巧,這導致我們能夠用復雜的模型。
而深度神經網絡恰恰是高復雜度的模型中很好用的一種,因為它直接基於簡單的梯度計算——這種計算非常容易利用新的計算設備,很容易並行化。但凡有新的計算設備出來,馬上就可以用上它。比如我在《機器學習》書裏面曾經寫道,為什麽在上個世紀 80 年代的時候神經網絡出現了第二輪熱潮?其實這和當時 80X86 系統出來,特別是內存條出來,關系非常大。因為神經網絡這個模型非常容易用這些新的計算設備,因為我只要算一個梯度就好了。
這個解釋當時聽起來還是蠻有道理的,也啟發我們能夠做一些事兒。比如說我們可以從復雜度的角度去研究深度神經網絡裏面一些機制到底在做什麽。比如我們組裏面就做過一個工作,要去探討 Dropout 在做什麽——現在很多人在說 Drpout 就在做正則化,這個說法當然是對的,但這個說法和沒有說一樣,因為這一切的做法你都可以說是在做正則化,只不過說不清楚正則化到底在解決什麽樣的問題。如果我們從 Rademacher 復雜度的角度去分析,我們就會發現,在神經網絡中,Dropout 能夠以指數級去降低網絡的 Rademacher 復雜度,但是淺層的時候只能做到多項式級別的降低。但是如果用傳統的復雜度度量指標,比如說 VC 維,就做不出這樣的結果。但是從另外一個角度看,這個解釋有一個很大的問題——所以我們自己一直不太滿意這件事兒。這個問題是什麽呢?剛才我們說的這幾個理由,其實完全對淺層神經網絡也適用。事實上,當我們說復雜度很重要的時候,其實我們可以想一想,雖然淺層的神經網絡提高復雜度,不是那麽高效,但是他仍然也可以做到。比如說,哪怕只有一個隱含層的神經網絡,如果不斷地增加隱層神經元,增加到近似無限多,那麽這個網絡的復雜度也可以做到足夠高。但是實際上在應用中,我們用淺層神經網絡總是做不出那麽好的結果來。我不知道在座各位同學有沒有試著去調一調。用深度神經網有時候能做出來的結果,用一個隱層或者兩個隱層卻怎麽調就是做不好。所以這個背後肯定是有一些原因的。但是如果從剛才的解釋上來說,淺層網絡也可以用大量的訓練數據,也可以用強力計算設備,也可以用很多訓練技巧——當我的隱層神經元無限多的時候,也需要技巧——一切深度網絡用到的東西,淺層網絡都可以用,但是為什麽性能就做不好? 事實上我們在 89 年的時候就已經有過一個理論證明:只要有一個隱藏層,就可以任意精度,用只有一個隱層的神經網絡就可以任意精度逼近定義在一個緊集上的任意復雜度的連續函數。也就是說對任何復雜的計算問題,其實它的解在淺層神網絡裏面已經有了。但是我們「怎麽把它找到」,可能比深度神經網絡裏面要難的多。這個原因到底是什麽?可能就不是剛才所謂的三個原因能解釋的。所以我們要繼續去考慮這件事。
要繼續考慮這件事,我們問一個更深一點的問題:深度神經網絡裏面最重要的到底是什麽?這個問題,現在機器學習有一個比較一致的答案,或者絕大多數人都同意。但剛才說 “為什麽深”,這裏給出的解釋中,沒有哪個解釋是大家都同意的。但是現在關於深度神經網絡裏面最重要的事情,大家都同意,就是表示學習。以前我們用機器學習解決一個問題的時候,我們拿到一個現實的對象,比如說一個圖像,我們需要用很多特征把它描述出來,比如顏色、紋理、形狀等等。這些特征從哪來? 都是人設計的,這叫特征工程。然後機器學習主要關註的是特征抽取出來之後給我 XY,我怎麽用去 XY 去建分類器。而現在有了深度學習之後,你左邊把數據出給進去,右邊我把結果拿出來,這就是所謂端到端的學習。其實端到端的學習本身並不重要,我今天不展開說,真正重要的是我們不再需要人來設計特征這個過程,這個特征就完全通過學習自動地選出來。所以 Feature Learning 以後,Representation Learning 就被大家認為這個確實是最重要的。其實端到端的學習不是那麽重要。
有很多工業界的人會說端到端學習很好,因為 “好” 其實大家直觀上很容易理解。我特征提取和分類這兩件事情原來是分開做的,但當我端到端聯合起來做的時候,它就是在做一個聯合優化,那麽這可能會好一點。但是從另一個角度來說,當你把這兩塊這種黑箱的方式端到端學習的時候,它裏面到底在做什麽?你不知道,可能這個再往左走,這個再往右走,最後你發現他在往左走,但實際上這中間已經有一部分在起副作用。所以端到端本身不一定說一定是好的。
再比如說大家看以前的機器學習技術,在特征選擇的時候,有好幾類技術,有一類技術,基於 wrapper 的技術,就是端到端的學習。但這一類技術不見得比別的特征選擇技術好。所以真正核心的還是表示學習。如果我們再問一個問題,這個表示學習他這麽重要的話,對他來說到底什麽是最重要的?以前沒有人問過這個問題,我們來問這個問題,同時我們自己試圖去回答它。我們的回答就是:可能逐層加工這件事情很重要。這裏引用的圖是來自於現在很著名的《深度學習》這本書裏面。但這本書裏面用這個圖的目的和我現在講它的目的不太一樣,他也沒有直接去分析這件事。這個圖是在說當你拿到圖像的時候,比如說底層,你先看到的是像像素這樣的東西。再往上走,你會看到像 Edge 這樣的概念,在網上可能有一個輪廓,再往上是對象的部件,再往上有對象等等。但真正當我們訓練一個深度神經網絡,就是說它這個概念的分層不會這麽清楚。沒有這麽明確。但是大體上自己往上有一個概念逐級抽象,逐級升高的過程,這個趨勢是存在的。
這個文章是用這個東西來說這個趨勢,但是我們現在想說逐層加工的能力,可能是深度學習最重要的一個問題。因為這件事情是不管淺層神經網絡你多麽復雜,用多大的數據,用多強力的設備都做不到一點。如果我們去想一想淺層神經網絡和深層來比,到底有什麽只有深層能做,淺層都不能做,好像也就是這件事,逐層加工。我們猜測說逐層加工這件事可能是深度學習裏面表示學習背後最重要的一個因素。
但是如果這樣猜測之後,大家就會問了,如果對於機器學習比較熟悉,你說機器學習以往也有很多這種逐層加工的模型,比如決策樹,一層一層的往下走,就是逐層加工。但是為什麽它的性能比不上深度神經網絡?我們是這樣回答的。第一決策樹這個模型,他沒有足夠的復雜度。第二,他沒有做任何的模型內部的特征變化。比如一開始我們在根節點拿到一個一百維度的屬性,用一百個屬性做,哪怕在最後一層,我其實還在用這一百個屬性,中間沒有任何的特征變化,還有它的復雜度也是不夠的。因為決策樹的深度它是有上限的,不是說你想多深就多深。比如說如果我們都在用離散屬性,那麽這個決策樹的最深的深度不會超過數據集裏面離散屬性的個數,所以它是有上限的。就這兩個問題。它不具備。那麽如果大家再熟悉一些,你會說你要比如說 Boosting 也有初級加工的過程,比如 XG Boost 等都是這樣。他為什麽在很多問題上也沒有深度神經網絡做得好,我們的回答也是這樣。第一他復雜度不夠,比如說我們做 Boosting 的時候,通常說以訓練一百輪為止,那就是到一百輪結束。基本上沒有看到,誰說用過上千層的 Boosting,其實他也學不下去了。第二,更重要的可能它始終是在原始空間中做事,沒有任何的特征的內部變化。
所以我們現在的觀點就是說深度神經網絡裏面到底什麽重要?可能這兩件事一個逐層的加工,一個特征內部變化很重要。那麽如果我們真的要實現這兩件事,大家會想用一個什麽模型?可能深度模型是你最自然的選擇。而有了這個模型之後,我們會碰到很多問題,比如說很容易 over face,所以我們要用大的訓練數據,所以它很難訓練。我們要有很多訓練的技巧,它計算起來很難貴,所以我們要有很強大的計算設備。那麽特別是現在我們有很多任務,這個任務上本來已經有很多的訓練數據了,我們怎麽樣把訓練吃進去,這就使得我們必須要有一個高復雜度的模型。
如果復雜度不夠,你更多的數據根本用不起來。比如說如果我們用一個線性的模型,那麽你到底是有一千個樣本還是 1000 萬個樣本,可能對他已經沒太多區別。他已經學不進去了。如果我們要有更高的復雜度,很自然的可能,又會為使用深度模型加上一分。所以我們前面說的解釋,其實是認為我們看到了這些東西,我們認為因為我們擁有它,所以我們希望用深度模型。但是現在看來,這恰恰是把因果關系搞反了。因為如果我們認為有了這些,我們就可以用深度模型,反過來,我們也可以說用了他們,我們都可以用到淺層模型上去啊,淺層模型為為什麽做不好,其實可能是因為我們因為有 PPT 上面那些紅色的因素,導致我們希望用深度模式,用深度模型的時候,學習的時候會有很多障礙,所以我們必須克服這些障礙。
所以我們看到了這麽一個現象。那麽如果從這個角度來解釋的話,我們就會有這麽一個猜想。這個猜想是說我們為什麽要用深的神經網絡才能做到淺的神經網絡做不到的事兒。猜想有這三個因素,第一逐層加工。第二要有特征的內部變化。第三要有足夠的模型復雜度。這個猜測,是對「模型為什麽要做深」這個問題的一個回答。因為我們沒有辦法從理論上去證明它,所以我說只能是一個猜測。那麽有了猜測有什麽好處?可能可以指導我們做一些別的模型。
其實從這個解釋大家都可以看到,我們只要做到這三件事,我們認為可能就能得到好處。但是這三件事是不是一定要通過神經網絡來做,這可能不一定。所以我們就要談一談,我們為什麽要考慮不從神經網絡去做這件事。首先當然是神經網絡模型本身有它的很多問題。很多同學可能已經用過深度神經網絡的都會有感覺,有很多參數要去調,要花大量的時間在這件事情上,那麽這個會帶來很多其他的副作用。比如說如果只告訴你數據模型算法,但是我不告訴你參數怎麽設,你就很難重復別人的結果。這個會帶來一個非常大的問題。那麽還有一個很重要的問題,就是模型一旦選定了,我們的模型復雜度就是確定的。這就有一個問題了,當我們沒有解決一個問題之前,我們怎麽知道這個問題用什麽樣的復雜度是合適的?所以通常來說,當我們用深度神經網絡的時候,我們會先用一個高復雜度的東西,過於復雜了。所以我們可以看到最近幾年的一些深度學習的研究裏面,比如說 Resnet,通過增加一些 short cut,其實是在降低了模型的一個復雜。
再比如說這幾年流行的模型壓縮和權重二值化,這些做法其實都是在簡化模型的復雜度。那麽我們可以想到我有沒有可能一開始我先用一個簡單的模型,然後隨著學習的過程,我發現你這個任務很難,數據很大,我的模型復雜度自適應地調整,這樣不是更好嗎?其實我們現在深度神經網絡為什麽要用那麽強力的計算設備,很重要的一個原因,可能也是因為我們一開始都用過於復雜的模型,但是如果不用它,用太簡單的網絡,可能你又沒法收斂了。但是能不能反過來從簡單到復雜,很遺憾,神經網絡不能這樣做。因為這一點和我們用 bp 算法,它是有根本的沖突的。所以大家知道我們用 bp 算法,你要對一個對象求梯度,如果你的結構都不確定,那你對誰去求梯度?整個就沒法算下去。所以這是神經網絡所不能克服的一個毛病。但是神經網絡模型不能這樣做,不代表別的機器學習模型不能做。別的模型可能是能做到自適應復雜度的。其他還有一些問題我們就不往下說了。
有的同學可能不是研究機器學習的,你可能會說你看周老師你們說的這些我承認都是問題,但這都是學術上的問題。我做應用,你只要給我一個模型性能好就行了。至於你這個模型理論上學術上有什麽缺陷,我不關心。那麽即使從這個角度來看,我們也有必要要去探討深度神經網絡之外的東西,這是為什麽呢?其實大家看一看,今天我們深度學習這麽成功,到底在什麽樣的任務上成功?其實無外乎就是典型的數據,圖像、視頻、聲音,他們都是典型的數值建模問題,都是連續值,都是數據建模。有的同學可能參加過像 Kaggle 這樣的數據競賽,你可以看這個競賽裏面很多各種各樣的競賽。到了今天為止,很多比賽的獲勝者仍然不是深度神經網,還是像隨機森林、xg boost 之類,為什麽?是因為那些參加的人不知道深度神經網絡很好嗎?不是的,都用了。但是就比不過那些傳統的技術,這是為什麽?其實我們真的去總結一下,看一看有什麽規律。大家其實可以看到真正深度神經網絡還沒有做的那麽好的一些問題,通常都是涉及到符號數據,離散數據,混合建模問題,它不是那種純數建模的問題,基本上純數據建模問題,現在深度神經網絡都能做到最好,或者說最好的之一。
事實上有那麽多的問題,我們現在神經網絡還做得不夠好,我們當然有必要探討別的模型。其實機器學習界早就知道我們有一個 no free launch 定理?沒有任何一個模型能夠包打天下。一定有一些任務,每一種模型是做不好的,可能要別的模式才行。所以我們就可以看今天的話,深度神經網絡就是深度模型。那麽如果從更技術地說,它是一種多層的可參數化的可微的非線性模塊構建的模型,而這個模型可以用 bp 算法去訓練。那麽這裏面的一個根本原因就是我們要用可微的構件,哪怕是用一開始用不可微的代價函數,你都要通過一些松弛變化,變成一個可微函數,然後再用 bp 算法求梯度去計算。
但是我們現實世界中不是所有規律都是可微的,比如符號建模,離散建模問題,沒有辦法把它變成可微。你用可微對它建模的話,可能已經不是最佳的路徑了。但另一方面,其實機器學習為我們本身提供了這個機會。因為機器學習發展這麽多年,它有很多的構件本身是不可微的,所以我們現在就有這麽一個問題,說能不能基於不可微的構建去做深度學習?這個問題如果解決它一個方面是對我們剛才說的猜想「為什麽做深很好」的一個驗證,另一方面也可以回答一些問題,比如深度模型是不是必須用深度神經網絡來做?第二對不可為構件,有沒有辦法做出深度模型?
這個時候你不能求梯度了,不能用 bp。算好了,還怎麽做呢?好,第三,圖像語音視頻之外的任務,有沒有可能通過做一些新型的深度模型,使得他們現在的應用性能變得更好。為了回答這個問題,我們組裏面最近做了一個工作,就是做了一個基於樹模型的一種深度模型,這個叫深度森林的模型。大家知道決策樹模型它本質上是一個不可為的構件,所以它不能夠用 bp 算法去訓練它,我們必須要用別的方法。那麽把這樣的東西把它變深,裏面需要很多的技巧。 因為當你用個兩三層之後,它就很容易 Overfit。那麽怎麽樣來減緩 Overfit 能夠讓這個模型能夠不斷地深入下去,那麽這裏面用到了很多從集成學習上裏面受到的啟發這個情況來說,而且它的模型復雜度是可以跟著數據自適應地變化,他可以自己去找。那麽我們從測試來看,除了大規模的圖像分類的任務上它還做不過神經網絡,其他的很多任務上和神經網絡深度使用已經比較接近了。這裏面最重要的其實這是第一個非神經網絡,而且不用 BP 算法,不去求梯度,不用梯度調整來求解的一個深度學習的模型。
所以這個是從它從理論上學術上的一個意義。我們也可以看看國際上的一些相關的討論。比如說 keras 的作者,他曾經就說「現在的深度模型裏面可微層是它的一個根本缺陷」。我們現在這個模型根本就不用可微層。然後這個 hinton 也說他「希望放棄 BP,從頭開始」。我們現在做這個就不需要用 PP 的算法,我們把這個模型做出來,比他們說這些論斷都要早了半年左右的時間。所以可能探討這種基於不可微構建的非神經網絡深度模型,可能倒是一個值得探討的方向。大家知道深度神經網絡其實現在已經經過了 40 多年的探索,剩下的可能都是往下的一些小的改進。那麽如果深度神經網絡之外的深度模型,可能這是一個全新的一個空間,可能有很多可以做的事。但是另外一方面有的做應用的同學可能說這個是學術上的意義,我不關心應用上到底能不能做些什麽事兒呢?我們最近做了一個應用,是和我們國家一個很大的一個互聯網公司,互聯網金融公司合作做一件事,這個是互聯網交易裏面的非法套現。這個是 16 年雙 11 的那一天,一天就有 1 億多筆交易在上面做。 從好的方面來說是解決了一個技術問題,不好的方面是讓大家擔心說這個公司好像有很多損失。這件事損失很大。所以他們的公司的工程師很厲害,在他們自己的大規模學習系統裏面做了實現。我們現在做深度森林模型,受制於現在的計算能力的問題,因為這個模型它和深度神經網絡不一樣,它不是直接基於矩陣計算的,所以它不能夠用 gpu 加速。如果你在單機上基本上沒有把這個模型大的可能性很快,你的內存就溢出,沒法往下算。所以怎麽樣能把它做大呢,可能就兩條路,一條就是用更新的硬件設備適合他們去支撐它。還有一條就是做分布式實現。這個公司就是做大規模分布式實現,這裏面就有很多實現的技巧。他們工程師做了這件事,我們來看一看上線實測的結果。訓練數據是用了 1 億 3000 萬,真實的數據測試的數據是用了 5000 萬真實的交易,這個是世界上最大的非法套現的一個數據了。每一個交易是用了 5000 個特征,這個特征大家就能想到,因為他刻畫的是用戶,這個裏面就有很多的非數值的、離散的、符號的東西。所以我們就在這樣的任務上,可能是這一類模型特別會有用的地方。我們看這個結果確實是這樣。看這個就是深度神經網絡做出來的結果。第 DNN 的結果,這個公司自己有一個模型,其實比深度神經網絡跑的還要好。而現在用的深度森林的分布式的版本,現在是達到最好的一個結果。所以這個確實就是給我們一個驗證,在這樣的一種任務上,涉及混合建模這種任務上,可能這樣的非神經網絡深度模型是有它的用武之地的。但是另一方面我也提醒大家不要期望太多,千萬不要指望說這個模型拿到你的任務上去,你 run 一下就能做的多好多好,不是這麽回事。這只是一個開始。因為大家知道你看深度神經網絡發展到今天,從 1982 年卷積這個概念引進到神經網絡裏面,到 94 年的時候,BP 神經網絡就已經有了。到今天經過 30 多年,多少萬人在上面探索,才有今天的結果。卷積神經網絡第一次發揮作用是在 1998 年,在美國把它用來做信封上的手寫體字符識別取得成功,但是到今天取得這麽多勝利,還是在幾十年後之後的事情。所以這個模式才剛剛開始。如果大家從學術研究的角度,應該可探索的空間非常多,可能有些應用馬上能用上,但是大多數應用我估計還要經過很長時間。
但另外一個方面,它還本質上有它另外一個意義。前段時間大家經常討論,我們國家缺芯少魂這樣的事件,就中興事件引發的,但是我經常說缺芯少魂是我們在信息化時代出的問題。英特爾公司 1968 年成立,1968 年我們還正在文化大革命,所以是那時候積下的問題,現在我們開始進入智能化時代。智能化時代以後有沒有這樣的問題?我想這個問題也會有。你像今天大家做智能應用都要用英偉達的 gpu,很多公司直接架在 TensorFlow 上,把它智能應用。TensorFlow 現在是開源的,但是有一天也會被卡脖子的,比如說安卓系統以前也是開源,但是現在情況就已經不一樣。所以怎麽解決這件事,可能一方面我們從中國自己來說,一邊可能在硬件上、系統上支持研發自己的信息系統硬件。但是另一方面,如果從我們做理論做算法的人,對這方面能不能有點貢獻,我覺得也可以有很多貢獻。因為實際上所有的不管 GPU 也好,還是 Tensorflow 也好,它都是以深度神經網絡為解決方案的。如果我們能夠給出一些非神經網絡的替代方案,所謂的這種壟斷自然就消失了,也就不會存在這樣的問題。
這件事情其實也不是一個簡單的一個構想。其實像英特爾他對這樣的事情的感覺比我們可能還更明顯。前段時間大家都知道,在上個月的時候,英特爾來南京大學,我們成立了一個英特爾南京大學人工智能聯合研究中心,這個是英特爾在世界上成立的第三個人工智能方面的聯合研究中心。第一個是在 CMU,第二個是原來 YanLecun 在紐約大學的時候,在紐約大學成立的。那麽第三個就是這個中心。那麽這個中心就是希望研究說英特爾的芯片架構怎麽樣來對這樣一套非神經網絡的深度模型可以加速,並且反過來這樣非神經網絡的模型,對 Intel 的芯片設計,在指令集優化上能給一些什麽樣的啟發? 但總的我想說第一件事情,以前我們認為深度學習裏面,黑屋子裏面就是一個神經網絡模型在裏面。今天我們把這個門打開一點,我們知道裏面可以還有別的東西。深度森林只是其中一種可能的探索,還完全可能有別的不可微的別的構件搭建出來的一些模塊。
第二,我想簡單地談一談監督信息
我們都知道做一個好的模型需要大量的數據,但事實上光有大量的數據是不夠的,我們還要知道這個數據的期望的結果,這就是監督信息。
監督信息對我們今天機器學習的成功太重要。比如說深度學習就需要大量的樣本。在 2012 年的時候,ImageNet 就用到了 1500 多萬的樣本,而今天其實要用的樣本量更大。所以大家在想一些技術,比如像重用一些原來預訓練模塊等等。但是這樣的一種程度只能是在你的新的應用和原來的應用是同種性質的任務上,這才行。比如說你的新任務還是圖像,那麽你從原來圖像重訓練的東西有用,但是我現在要做一個新的應用,說我現在從非法套現看,不做了,我另外做一個用戶關系管理,你能不能重用用別的東西呢?做不到,還要重新設計數據。所以這件事情在今天還是個很大的問題。因為我們這個樣本是需要標記的,所以大量的人力物力都花在這件事情。前段時間大家會問說人工智能出現之後會不會影響一些職業消失?我們還不知道,但是已經有新的職業出來了。這個應該數據標註業。這個比建築工地上的民工師傅掙得多,就整天就在那標數據。不管這個好不好,反正存在就有它的合理性。這個就顯示出我們對強監督信息是高度依賴的。談到這件事,大家有時候經常會說另外一件事,因為谷歌前面一段時間做 AlphaGo 之後做 AlphaZero,他說他不需要人類的數據就能進行學習,這個給很多人一個幻想,認為現在我們機器學習那麽是不是只要把這套技術用進來,我們就可以不用那麽多標註的數據了。
我想說這個想法其實是一個幻覺,最早的 AlphaGo 了使用了 16 萬元人類的棋譜,但是後來 AlphaGo zero 確實是沒有用棋譜了,他就是用兩個棋自己下。我這個棋自己幾下,第 0 天什麽知識都沒有。到第三天已經夠戰勝當時打敗李世石的 AlphaGo,到第 21 天已經打敗了 AlphaGo master,到第 40 天就停止了,這個就已經達到了現在我們所見過的最強大的圍棋的能力,再往下走沒有意義了。這個事情會給大家一個錯覺,因為他確實沒有用任何的人類棋譜。但是沒有用人類棋譜,是不是意味著這是一種無監督學習?這個絕對不是的。這只是一個示意圖,是在說他自己對棋盤進行探索,自己不斷探索棋盤,但實際上這並不是無監督,這是個非常強大的監督,甚至比數據監督還要強大。這是為什麽呢?因為我們拿到了關於遊戲本身的勝負規則,這個規則本身可以說是一個上帝判斷,就是我們知道到底什麽叫贏了,什麽叫輸了。這種上帝判斷在現實應用是完全不存在的。比如說我們現在要修一個橋,我說希望修出一個能抗 20 級臺風的橋,沒有任何教科書告訴我們該怎麽修,也沒有任何數據說怎麽修,那我現在假定雖然沒有人教我,但是我修一個東西出來,就有個上帝告訴我,這個能抗過去,再修一個,他告訴我抗不過去,那麽我不斷摸索,能把橋修出來。
但是世界裏哪兒來的這個上帝呢?沒有上帝判斷,所以我們不可能做這樣的事情。而且更不用說下棋還可以做無成本的探索,我們現實世界也做不到。所以我們真正能做的是什麽?可能根本的完全的無監督學習,這個永遠只會是一個幻想。當然它有一定的炒作宣傳的價值。但是從技術上來說,可能真正更現實的是弱監督學習。可能我希望不用那麽強的監督信息,你現在要有 10 萬個有標註的樣本,才能做一個模型出來。那麽沒有 10 萬個,我只有 1 萬個,甚至我只有一千個,我能不能做出接近你原來的性能,這個可能是我們可以追求的目目標。完全的無監督,至少我是不信。弱監督有很多典型的情況,比如醫學的圖像診斷,我們要診斷乳腺照片裏面有沒有這樣的鈣化點。原來我們要做這樣的診斷,我們可能要有上萬張圖像,10 萬張圖像才能做。但是現在假設我們拿到了 100 萬幅圖像,其中只有 1 萬幅有標記,99 萬幅沒有標記。我們現在用他能不能做出來,相當於原來你用 10 萬幅有標記做出來,我可能永遠達不到 100 萬幅都有標記的性能,但是我能不能達到 10 萬幅有標記這個性能,這可能是可以努力的。 我們把這個叫監督信息的不完全。那麽再進一步,可能醫生只標出來了,這個裏面有問題,但是沒有標出來問題到底在哪?把它叫做監督信息不具體。再進一步,人在標的過程中可能有些標錯,我們把它叫做監督信息不精確或者不準確。
其實所有這種問題在現實應用裏面是廣泛出現的。比如說我們要做這種自動的代碼的缺陷檢測,真正的程序員標出來代碼,什麽地方有缺陷是什麽缺陷——這種代碼很少。但是網上開源的代碼想要有多少就有多少。 那麽我們能不能用它來做更好的模型呢?等等,像這種任務很多。在這個方面,其實機器學習界已經有很多的探索,這個方面都是非常值得研究的。像監督信息不完全有半監督學習,主動學習等等,這個我就不展開說了。我寫到一篇今年年初的一個短的一個 Survey 裏面有一個比較多的介紹。但是真正想做的,其實這件事情離我們所期望的還差得遠得很。如果說整個這一大朵雲是我們可能碰到的監督信息的情況,中間是強監督,我們剛才所說的有研究的其實都是這些部分,而中間的這些部分,甚至現在學術研究都還看不到,學術研究的報道都還看不到,所以這個方面有很多值得探索的內容。 如果大家都認為監督信息會是機器學習的一個瓶頸,那麽這方面可能都是很值得探索的一件事。
第三,我簡單說一下任務環境
以前機器學習得到的成功絕大多數,我們用一個詞來說都是封閉、靜態環境下的任務。所謂的封閉靜態環境是指它的重要因素大多是定的。比如說我們通常要講假定預測用到的數據和訓練的數據來自於獨立同分布。我們其實就假定這個數據分布是恒定的,現實生活中其實這個數據分布不一定是恒定的,是可能變的,我們就要突破這個數據分布恒定的假設,一旦突破,你就會發現這裏面碰到巨大的挑戰。
因為當數據你都不能認為它是獨立同分布的時候,你就不能夠再用經典的概率統計技術去對這個問題刻畫了,因為我們就不能假定這些這個出現是一個獨立隨機事件。那麽你的概率的定義就已經發生變化。所以這裏面有很巨大的理論的挑戰在後面。那麽我們還假定比如說原來是多少類,你未來預測只能做多少類,屬性也必須是一樣的。原來一百個,以後就做這一百個,你這一百個少了多了可能我都做不好,甚至我們會要求你的評價目標必須是一致的。我認為這個模型好就是好,不管誰來都好。但實際上這件事情在現實中通常也不存在。所以我們的現實任務通常是一個叫開放動態環境,現在越來越多的碰到這種應用。這種環境裏面一切都會變。比如舉個例子,這個是我們給破冰船,科學南北極科學考察,給他做導航,那麽就有這樣的問題。破冰船開出去,我們只能收集到往年出去海上冰分布的數據,但今年和往年顯然就不一樣,那這個數據都在變。以前從來沒有見過的險情,它一定會出現,一定會存在的,也不能說所有險情以前都遇到過,那就類別會變。而且到了南北極地區之後,我們網絡接入電磁幹擾等等很多屬性拿不到,你這時候性能是不是要大幅度下降?還有我們同時可能要兼顧很多目標,你不光是要走的快,還要破冰,要盡量破得少,還要我的科學實驗還要及時完成等等,這個目標都是不一樣的。如果你一個模型要解決所有這些問題,它都有問題。所以更關鍵的是不管什麽變化出現,好的時候要好壞的時候也不能太壞,所以這時候魯棒性就是它的關註。
大家如果對機器學習有一點了解的話,可能特別是 AlphaGo 把強化學習炒熱了之後,可能有的同學會問,說機器學習裏面強化學習不就是在強調跟環境交互,那麽強化培訓是不是本身它就能克服環境變化的問題了?
這也是一種誤解。實際上強化學習做的是什麽?他考慮的是狀態可以在環境中變化,但是環境本身必須是不變的。比如說下棋,你的規則就是不變,不能說我訓練的時候,你還是在 19x19,比賽的時候變成 21x21 了。AlphaGo 肯定下不贏。所以就是說它這個環境不能變,這就是一個很大的問題。這個方面其實特別的重要。前段時間大家看美國國防部剛剛開始一句話說 9 月 8 號宣布他們要做下一代的人工智能技術,我們有很多互聯網和媒體做了翻譯,其實這裏面有一句話,就是說「希望開發能夠進行學習,並適應不斷變化環境的機器」。其實這個做的就是把開放動態環境下的機器學習技術用到軍事應用上面去。它所謂的機器就是軍事應用。前面說的這句話其實就是開放動態環境下的機器學習。這個方面其實機器學習界也有一些相關的探索,這裏面只列了一些我們組裏面做的一些工作,別的地方還有很多人做了一些工作,各種各樣的這些變化,都有一些初步的研究。但是說有沒有一個很成熟的技術,這些方面已經成熟得足夠在工業界裏面得到好的結果了,可以說還沒有。更何況說如果這些變化同時出現的,我們去怎麽去做,更困難。所以這個方面可能也是我們現在碰到的很大的挑戰,對機器學習界來說,有很多值得研究的問題在裏面。
那麽對強化學習來說,我也提一點,前段時間有一個 open AI 的強化學習競賽。OpenAI 是馬斯克和矽谷的一些大佬一起聯合起來做的一個組織,希望研究投資下一代的人工智能技術。他們今年 4 到 6 月組織到一個人工智能程序去打遊戲的一個比賽。大家可能會說,你看最近人工智能程序打遊戲這件事情很多,經常見到報道。這件事情和那些打遊戲有什麽區別呢?現在別的打遊戲的程序比賽是這樣設置的,我告訴你玩什麽遊戲,自己在家可以訓練程序,這個程序可以把遊戲全部打完。打完了之後,你到那兒去比賽,和別的對手或者和人去比賽,就是說整個遊戲比賽的所有的內容,你事先都是知道的。而這個比賽不太一樣的是,他事先在訓練的時候給你 58 個關卡,測試的關卡和訓練的完全不一樣。所以他重點考查的就是環境適應能力。比如說我們現在哪怕打星際爭霸這樣的比賽,他其實說星際爭霸大家都知道,這個遊戲你在家就訓練這個程序,整體玩一遍,你再去比。而他這個等於說前面有很多你能玩告訴你了,後面他不告訴你,比的時候就比那個沒見過。所以這個就是要環境適應。我們組裏面的年輕老師和於洋老師和合作者一起合作參加比賽,也打敗了 200 多個隊,得到比賽的冠軍。這個其實就是對環境適應能力做了一個新的技術上的一個嘗試。那麽為什麽可能值得說一下,這裏面其實用到兩個技術。第一個技術是我們很多年以前提出來一個叫二次學習技術,就我先做了一個模型,然後再學一遍,學到一個更簡單的模型。
其實後來被 Hinton 等他們重新發明了一次,他就把這個叫做知識蒸餾技術,他這個名詞取得比我們好聽,所以這個名字很多人會知道,但是我們其實早十多年技術就已經有了。這次我們用了另外一個技術,這個是另外一個多樣性激勵。如果我們進入傳統的強化學習技術,他走到這裏得到很優的結果之後,它就會停在這不會再往下走。我們現在給他一個多樣性激勵之後,他走到這走好的時候,它會再嘗試別的走法。多樣性激勵其實也是受基層學習裏面 Diversity 的重要性,我們把它引進去。這件事情,後來 DeepMind 團隊也做了一個類似的事,他們也取了一個更好的名字,他們叫做好奇心驅動的強化學習。確實起名字比我們水平高,我們還是太技術化了,說 Diversity 就是說你要多去探索別的東西,他把這個叫好奇心,確實更吸引眼球。但總的來說就是這方面的探索也已經開始已經有了。
最後做一個簡單的小結,就是當前的機器學習我們覺得成功背後主要有這三件事兒,有效的深度模型、存在墻監督信息,環境比較穩定。而現在我們很多進一步要解決的問題,可能有的問題上沒有很好的深度模型,有的問題上沒有很強的監督信息,有的任務環境是變化的。所以從機器學習的研究來說,我們就要去解決這些問題。從應用的角度來說,如果你發現有這種情況的應用,那就說明現在其實我們成熟的好的性能還有距離,從機器學習研究的角度,我們覺得這幾方面可能特別值得關註。
Q:張老師您好,19 世紀最後一天,所有物理學家在一起開會,開爾文說物理學的大廈已經落成,只有兩朵烏雲還飄在上空。最後發現一個是量子力學,一個是相對論,類比一下機器學習領域,可能大廈已經落成,那兩朵烏雲是什麽?
A:機器學習的大廈還遠遠沒有落成。如果要類比的話,我認為今天 21 世紀 10 到 20 年代的機器學習可以類比於上個世紀 10 到 20 年代的量子力學的發展。這個裏面有大量的問題,我們甚至連嘗試探索都還沒有做,這裏面很多的問題要做。所以遠遠沒有到大廈,我們還只有一間瓦房而已。
Q:想問一下您覺得 BP 存在的最大的問題
A:這不應該說是 BP 的問題,應該說 BP 是個非常好的技術,因為理論上也很清楚,實際上也很有用。只能是說這一種求解模式可能對別的一些特定的任務不一定特別有用。因為 bp 它所要求的就是說你要,第一要是通過梯度下降來求解,那麽一方面你要能夠求梯度,那麽要求能梯度就第一你的基本計算單元必須要可微的。第二要求梯度的對象必須是清楚的,否則我們通過鏈式推導來推 BP 算法的時候,對象都不知道。這就造成當我們考慮機器學習模型的時候,如果你的構件不可微,也不能用它;如果你希望模型是自適應變化的,也不能用它。但這不是 BP 的缺陷,而是說我們有一些別的需求,沒有任何一個需求是一個算法能夠全部滿足的。
Q:強監督信息在表征中學習中起到的作用是什麽?在 cnn 裏邊,他的隨機初始化使得不同的 Filter 會收斂的不同的 representation 的結果。假如強監督信息對 Filter 的 Representation 有特殊性作用,它們收斂到的結果應該是相似的,但實際上不是這樣的。那麽他這個隨機性他會收斂向不同的結果,那麽更多或者更少,它會捕捉出更不一樣的一些特征,那麽強監督信息在這裏扮演的是什麽? 而這個得到的一個特征又是怎樣的一個信息的一個?
A:有很多人就有誤解,就是說我拿了很多的圖片,然後好像我並沒有告訴他一個明確的目標,說到底這次學的是蘋果還是梨,但是最後他能學出一些特征來,而且甚至我訓練的時候考慮的目標類,和我任務最重要解決的目標類還不太一樣。比如說我現在做的是獅子老虎,我後面預測的時候,我做成要做狗,我可能可以拿預訓練的,預抽取的特征拿過去也能有幫助,那這個時候它的監督信息到底有什麽作用呢? 其實這個作用的本質上,如果你從學習理論的角度去理解的話,我們可以認為整個學習的過程就是在一個假設空間中搜索的一個過程。而當我們的任務復雜的時候,我們面臨的過程、這個空間是巨大的。那麽所謂的表示學習,實際上是在對原始的非常龐大的假設空間的一個變化,變化成一個結構更加明晰的一個新的假設空間,在假設空間中你找到結果的解更容易。而這個搜索的過程你可以想原來是個很大的一個東西。那麽把它變小之後就有很多的選擇。而在這個時候監督信息起到的就是對原來的假設空間的一個 Gap、約束、消減的一個作用。如果完全沒有監督信息的作用,當你做的一切的學習過程就是完全漫無目的的,那就完全不可能保證說學出來的特征對後面的學習過程是有用的。這部分保證不了,那你就會越越學越壞。所以他一開始的交互信息是非常有幫助,這個是非常重要的。
Q:機器學習和人工智能現在非常的火。我們計算機系也有很多實驗室,以前不是做人工智能,然後也在往這方面靠。 這種現象的話,我覺得肯定是有水分在的,不知道您是怎麽理解的。
A:這個水分它有幾個方面,第一個方面可能在媒體上,在投資界,這裏有很多的水分,在企業上他們的炒作也有很多的水分,但是說這麽多人學機器學習技術這個東西是不是一個水分,我倒不這樣看。我現在倒是認為機器學習可能逐漸會變成計算機科學中間的核心課程。比如說我們所有的計算機系的學生都要去學數據結構,你覺得這個裏面有沒有水分呢?我想這個其實是一樣的。就像別人說的,「計算機科學不是光關於計算機的」,所以它是更多的來說,其實我們更多的就像天文學,不是關於望遠鏡的。最早的時候天文學把望遠鏡做出來,當時大家都在研究怎麽做望遠鏡,怎麽磨鏡片,怎麽算焦距,到今天來說,更多的人是在用望遠鏡來探索。計算機科學一樣的,早期我們就在做,怎麽把機器跑起來,怎麽樣做大機器,怎麽樣做操作系統,等等。但是現在機器已經跑起來了,我們就要用機器去解決問題了,去探索了。讓計算機最重要的探索是什麽?我覺得關於數據的計算分析,所以這件事情可能最本源的一件事,不光計算機科學,我相信所有理工科的學生肯定以後都會把機器學作為它的一個核心課去學習。 所以這就是從這個角來說它不存在水分。
轉自 https://haoyu.love/blog663.html/comment-page-1#comment-671
[轉] 周誌華:關於機器學習的一點思考