這個話題是GitChat團隊和PaddlePaddle開源團隊的首次合作,做為系列話題的第一場,在業內引起了不同凡響。深度學習系列話題會包括以下幾場分享,歡迎大家閱讀原文並在評論區留言提問。
PaddlePaddle是一個最早由百度科學家和工程師共同研發發起的並行分布式深度學習平臺,兼備易用性、高效性、靈活性和可擴展性,有超過30個產品使用此平臺。 在2016年9月1日百度世界大會上,百度首席科學家Andrew Ng(吳恩達)宣布正式對外開源。
近幾年深度學習的概念非常火,我們很幸運趕上並見證了這一波大潮的興起。記得2012年之前提及深度學習,大部分人並不熟悉,而之後一段時間裡,也有些人仍舊持懷疑的態度,覺得這一波浪潮或許與之前sparse coding類似,或許能持續火個兩三年,但終究要被某個新技術新方法所取代,再後來,無論是學術界還是工業界,總有些研究者為自己沒有在第一時間跟進這波浪潮感到後悔莫及。確實,從2012年AlexNet取得ImageNet的冠軍開始,五年過去了,深度學習的方法仍舊佔領著人工智慧這片領域。
隨著這波浪潮,有些人作為弄潮兒,興起一波波巨浪,引領各個領域從傳統方法到深度學習方法的轉變,並希望能夠通過了解其他領域的方法改進自己所從事的領域;有些人辛勤地工作,利用深度學習的方法為公司提高業績,希望實時跟進並實現最新的技術;有些校園中的研究僧,一方面需要了解最新技術及其背後原理,另一方面還有發文章和找工作的壓力;有些相關從業者,如編輯、記者,經常報導AI領域新聞,卻從沒有時間仔細研究深度學習;還有些非技術人員,總會在這些新聞後驚恐地詢問「天網是否能在有生之年建成?」或是「AI對人類的威脅到了什麼程度?」。
僅僅通過一節課程,或是一本書來解決以上所有問題明顯是不可能的。鑑於國內機器學習資料還是偏少,而且大多是理論性質,並沒有實踐模塊,我們從去年年底開始著手寫一本深度學習相關的tutorial,並希望通過一章章真實的案例來帶大家熟悉深度學習、掌握深度學習。這個tutorial中每一章內容都圍繞著一個真實問題,從背景介紹到使用PaddlePaddle平臺進行代碼實驗,完整地讓大家了解整個問題如何用深度學習來解決,從此告別紙上談兵。參加本次活動之前,沒有想到這次報名人數之多。看了下報名群中的同學不乏一些高端用戶,於是我知道本篇課程必然要要一些同學失望了,因為這一講作為第一講,只能考慮到大多數用戶,設計成難度適中的課程,為大家提供一些深度學習最基本的概念,以便更輕鬆地入門深度學習。如果您是高端用戶(能自己run起來深度學習模型或做過一些常識),建議您可以直接移步tutorial自學,當然如果感興趣,歡迎繼續關注我們系列的後續課程。
首先,對這個系列的後續深度學習課程做一個預告。在這份tutorial中,我們將覆蓋如下內容:
新手入門
識別數字
圖像分類
詞向量
情感分析
文本序列標註
機器翻譯
個性化推薦
圖像自動生成
本節課程中,我們主要帶大家了解深度學習,通過它的一些有用或有趣的應用了解深度學習的基本原理和工作方式。
一、深度學習是什麼傳統的機器學習中,我們要為每種任務定義其特定的解決方案。對於圖像,曾經人們耗費大量精力設計各種描述子進行圖像特徵描述;對於文本,單單一個機器翻譯任務就動輒多個模型的設計:如詞語對齊、分詞或符號化(tokenization)、規則抽取、句法分析等,每一步的錯誤都會積累到下一步,導致整個翻譯結果不可信,且要追查一個錯誤會非常複雜。 深度學習的優勢,就是可以彌補以上問題,一方面減少了對大量手工特徵的依賴,對於圖像文本等領域可以直接從原數據進行建模;另一方面通過端到端的網絡模型(即一個網絡直接從輸入到輸出建模,而不需要中間步驟)減少了多步驟中錯誤累積的問題。
深度學習採用多層神經網絡的方法,依賴大數據和強硬體。
大數據
在這個數據爆發的時代,普遍的認知是,大數據並不是問題。但實際上也不完全是這樣。從領域角度,圖像的通用分類和語言模型的訓練或許可以從搜尋引擎中獲取大量樣本,但對於細粒度圖像分類(如不同類型的花的分類)或是 專業領域的對話數據(如法律諮詢類)的數據就比較稀缺;從應用方法角度,圖像、文本和語音都方便獲取,但如果希望進行有監督訓練,就必須有對應的標記(label),如標明一段語音對應的人,或是一段語音對應的文本,這就是個大工程了。這就需要我們利用已有資源,最簡單的方法比如可以先利用大量無標記數據學習數據的特徵,就可以減少數據標註規模。
強硬體
由於深度學習需要強計算處理能力,因此需要GPU顯卡進行並行加速,拼硬體已經成為學界和工業界在研究深度學習網絡時的一大共識。在2016年期間,英偉達和AMD的股票價格都實現了飛漲,如下圖是GPU製造商英偉達(NVIDIA)公司今年的股價趨勢。可以說這種跳躍式增長得益於GPU晶片在遊戲、虛擬實境、自動駕駛、數據中心等各個高性能計算需求領域的應用。
GPU的每個顯卡具有多個(通常是幾十個)多處理器(Streaming Multiprocessors, SMs),每個多處理器中有上百個CUDA核。一個多線程程序的一個kernel實例在一個SM上執行,一個kernel實例上的操作會分配到不同cuda核中獨立執行。所以只要程序分配得當,GPU中的處理器越多執行越快。如Titan X(GM100)顯卡擁有24個多處理器,每個多處理器擁有128個CUDA核,整個顯卡有3072個CUDA核, 其相對16核Xeon E5 CPU處理器要加速5.3~6.7倍[1],這對於實時性要求較高的應用意義非凡。
二、深度學習的應用深度學習可以涵蓋很多應用範圍,我們這裡可以先以幾個有意思的應用,給大家一個基本概念, 工業界常用的例子會在後續課程中詳細地舉例。
極簡版無人車無人車概念近幾年很火,從傳統領域到網際網路企業都多少有這個方向的研究者。對於初步接觸神經網絡的同學,我們先引入一個小任務。如下圖所示為一個可遙控小車在車道上的運行軌跡,小車上方搭載GoPro攝像頭。圖中藍線表示垂直基準線,紅線表示每一時刻小車應駛方向。我們的目標是,基於人為操控小車的行駛方向和當前圖像數據,給出其駕駛方案。
這裡,可以用神經網絡指定網絡的輸入輸出分別是當前圖像和應走的方向,整體作為一個回歸問題來處理,其中輸入圖像用多層卷積神經網絡來解析。這裡可能有朋友會說,其實我只需要用基本圖像處理技術(比如二值化圖像後再檢測連通域)找出來左右兩條車道,再向前方車道線中點位置方向走不就行了嗎?確實是可以這麼幹的,我們這裡只是為了說明深度學習的端到端訓練,舉例個最簡版的無人車,有清晰的車道線,並且沒有紅綠燈、障礙物等幹擾。實際情況中,需要考慮跟蹤前車、車道保持、障礙物檢測、紅綠燈檢測等多種情況,因此需要多模型的設計和集成。單就最簡單情況下車道檢測的這個事情來說, 確實可以僅通過圖像處理+人工策略達成目的,也不需要什麼訓練數據,但這就要求程式設計師每遇到一個badcase都需要人工修改策略,這樣等下一位程式設計師接手這段代碼的時候,就只能嗚嗚嗚了。
拍攝照片油畫化2015年的一篇文章[5],將藝術家梵谷和深度學習聯繫在了一起,文中實現了將藝術畫style附體於日常拍攝照片,從而得到「藝術照」的效果。其做法是設計一個神經網絡,定義該網絡的損失函數為Diff(拍攝照片,生成作品) 與 Diff(藝術畫,生成作品)這兩個Diff的加權和。其中Diff表示兩幅圖片的差異。但如果通過每個像素的差異來計算這個Diff的話,顯然不合理,對於拍攝照片和生成作品而言,像素值必然已經大變,而對於藝術畫和生成作品而言,可能色調相似,但靠單個像素值去比就肯定是相差甚遠了。所以我們其實想要的只是一個抽象的概念,如下圖的例子,我們只需要生成的圖包含「貓」,且畫風和中間的藝術照相似。於是採用了神經網絡的隱層作為度量他們Diff的空間。
圖片轉載自: http://phunter.farbox.com/post/mxnet-tutorial2
機器翻譯剛才的兩個例子都是深度學習在圖像中的應用,其在文本中同樣意義重大。和圖像不同的是,文本作為一個序列化信息,深度神經網絡對這樣數據的的處理和圖像不太相同,但除此之外的基本思路就可以相互遷移了。比如已經了解了通過深度學習進行圖像分類的方法,那麼文本分類只是變化一下,將一短文本映射成特徵向量從而進行分類,這可以通過將理解圖片的卷積神經網絡改為處理序列信息的循環神經網絡完成。類似地,機器翻譯(用計算機來進行不同語言之間的翻譯)也可以通過類似的方法。以通過深度學習進行中譯英為例,首先通過一個循環神經網絡理解一句漢語(映射為文本語義信息,可以是一個向量,也可以是一個時序信息),稱此過程為「編碼」,再將這個文本語義信息通過另一個循環神經網絡,每個時刻輸出一個英語單詞,稱此過程為「解碼」,通過這樣的編碼-解碼結構即完成了機器翻譯。我這裡只是白話說出了機器翻譯的大概思想,感興趣的同學可以參考機器翻譯一章的tutorial或追蹤後續課程。
為你寫詩看完以上內容,如果想讓你根據一個詞創作一首詩,你想能怎麼做呢?恐怕已經有同學想到了:用翻譯的做法寫詩。不錯,機器翻譯其實可以用到很多地方,只需要修改數據集就ok,如果我們想根據一個詞,讓機器「創作」一首詩,只需要將翻譯模型的輸入設置為這個詞,而輸出是詩句即可。不過,通常這麼做是有問題的,因為這樣做導致輸入序列很短而輸出很長,其間的依賴並不能充分發揮出來,硬將這樣的兩個序列綁在一起可能導致機器強硬地「背」下來如輸入語料而沒有真正理解語義。因此,有的工作中用短語生成第一句詩詞,用第一句去生成第二句……;或者可以用前n-1句生成第n句詩詞。感興趣的同學可以自己試一下,也可以試用一下度秘裡面寫詩模塊。
商品推薦商品推薦是電商和新聞客戶端們的關注熱點,他們都關注用戶興趣的把控,其推薦系統的好壞往往會對用戶留存和購買情況有較大影響。這裡我們可以想見,最基本的推薦策略是爆款推薦(全民熱點),和已瀏覽或是購買/收藏了的項目。對於大量用戶沒有過瀏覽記錄的項目,傳統推薦方法一般採用協同過濾,即推薦給用戶相似用戶的興趣項,另一種方法是通過基於內容過濾推薦,即推薦給用戶瀏覽項目的相似項,這其中就涉及到用戶相似度和產品/項目相似度的獲取。一方面,我們可以利用深度學習進行其相似度的建模,另一方面,我們還可以將用戶特徵和產品/項目特徵映射到一個相同的空間進行特徵比較,也就是將下圖A(協同過濾)和B(基於內容過濾)策略改為C。
三、深度學習的缺陷說過了神經網絡的牛逼之處,我們再來看看它的一些缺陷,至少是目前難以解決的問題。
特斯拉事件關注特斯拉的同學應該都有注意到,去年一位23歲的中國男青年,在駕駛特斯拉電動汽車沿京港澳高速河北邯鄲段公路行駛時,前車躲避障礙物後,該男子躲閃不及撞上了道路清掃車,發生嚴重車禍導致死亡。
特斯拉官方並沒有公布過其內部算法,我們只知道特斯拉的自動駕駛系統Autopolit中曾有以色列Mobileye公司提供的技術。Mobileye是一家基於視覺幫助減少交通事故的公司,其研發多年的高級駕駛輔助系統(ADAS)處於業內領先,主要基於單目攝像頭傳回的圖像,通過深度神經網絡進行車輛檢測、車道識別等[3]。但Mobileye自己也表示曾經提醒過特斯拉公司,他們的這套系統只能起輔助作用, 並不完善,也不能完全保障車主。雖然特斯拉官方聲明由於車主家屬不願提供更多信息,導致具體Autopolit錯誤原因無從定位,但原因或是因為中國獨有的道路清掃車不曾出現在單目視覺的訓練數據集,或是因為光照等特殊因素導致的圖像質量問題,都說明無法僅通過視覺技術保障自動駕駛的安全性。我們不能將這起事故歸結於是深度學習的缺陷,但在實際系統中, 我們目前確實難從一個端到端的系統中完全定位並解決問題,大家還可以看下面的例子進一步理解。
可解釋性在之前的「深度學習是什麼」這一節中,我們講到深度學習可以利用端到端的學習避免一些多步驟積累錯誤導致的問題,然而這其實也是一種缺陷。我們無從定位問題出在哪裡。下面就以圖像分類的一個badcase為例進行說明。
ImageNet競賽2012年冠軍工作AlexNet的作者Krizhevsky 曾提出,雖然AlexNet效果很棒,但為了最優化該數據集上的效果,不得不建立這樣一個含有非常多參數的深度神經網絡,而這樣的網絡非常容易過擬合。在15年的CVPR會議中,Anh Nguyen提出了一種生成樣本的方法,該方法生成的樣本可以「愚弄」 用於圖像識別的深度神經網絡[4],如下圖所示的8幅圖下面標註的文字分別為ImageNet競賽數據集上效果最好的網絡對該圖的識別結果(置信度高於99.6%), 該網絡將我們認為的這些波紋分別識別成了王企鵝、海星、棒球、電吉他、火車車廂、遙控器、孔雀、非洲灰鸚鵡。這種很容易「愚弄」神經網絡的樣本,被稱為對抗樣本。
深度學習希望模擬人腦中的神經元,通過一個神經網絡進行參數擬合,但學習的過程不盡相同。事實上,當人去學習知識的時候,是「哪裡不會點哪裡」、「哪裡錯了改哪裡」,即局部調整,而深度學習通常都是通過所有樣本來決定整個網絡的全部參數,希望在所有樣本上獲得全局最優解;當人們學習什麼是「企鵝」的時候,既不會刻意地通過某幾個的特徵(如顏色、體態)去捕捉,也不需要看上千八百張圖片才了解到這樣一種模式,我們就知道如下三幅圖,都是一個物種, 而神經網絡想學到這樣一個概念並不容易,往往需要企鵝的各個品種、各種pose的圖片。
同樣,當神經網絡的結果有誤時,我們無法像人腦學習一樣局部修改部分參數,即便可以,對於端到端的神經網絡,調整哪一塊參數、如何調整也是無從下手。這就是深度學習可解釋性方面的局限。
感謝感謝大家訂閱這一期GitChat活動,開篇提到的tutorial作為我們對PaddlePaddle深度學習平臺的再一次易用性擴展,歡迎大家關注學習並提出寶貴意見。同樣感謝這份tutorial中諸多志願者同學們的共同努力,國內做開源不易,做撰寫tutorial&demo的文檔更難,希望有興趣的小夥伴加入我們,共同推動有意思的tutorial能夠在開源社區進行分享。
參考文獻:
https://www.nvidia.com/content/tegra/embedded-systems/pdf/jetson_tx1_whitepaper.pdf
https://www.quora.com/What-is-the-difference-between-Teslas-Autopilot-system-and-Googles-driver-less-car
http://wccftech.com/tesla-autopilot-story-in-depth-technology/4/
Nguyen A, Yosinski J, Clune J. Deep neural networks are easily fooled: High confidence predictions for unrecognizable images[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015: 427-436.
Gatys L A, Ecker A S, Bethge M. A neural algorithm of artistic style[J]. arXiv preprint arXiv:1508.06576, 2015.
Chat實錄分享人簡介:張睿卿,paddle官方開發組成員,畢業於浙江大學計算機學院。專注於深度學習領域,目前研究方向為對話、圖文問答。微博: Rachel____Zhang。
問:深度學習看到的案例大部分是在圖像處理上,語音識別等方面的。對普通數據類似回歸分析的預測,用DeepLearning有有優勢嗎?比如電商某款商品的銷量預測?
答: DeepLearning相對於最基礎的線性回歸的優勢在於,隨著模型go deeper,會有更多的參數,另外加入了非線性提高模型理解能力。至於是否可以做銷量預測,其實看你的數據了。
對於數據量小的產品(大多其實數據量都小),就算加了很多參數也是徒勞,因為會overfitting;
輸入特徵選的對不對,如果你考慮這是一款有周期性的產品(比如爆竹),那你用16年1月數據訓練,17年1月數據預測是ok的,但如果用16年3月的數據預測就肯定要跪了。
問:為你寫詩的第一句詩是seq to seq 用一個或者幾個詞生成的麼?
答:是的。關鍵詞(一個或幾個)生成第一句,第i句生成第i+1句(或者前i句生成第i+1句);這是一種普遍的方法。
問:做中文序列標註的時候,使用Bi_LSTM+CRF,如何加入已經驗證過比較好的人工特徵,例如"詞的後綴"?
答:關於後綴的加入,將輸入設置成word embedding; suffix embedding就可以了,另外其實不建議你直接加後綴特徵。
Learning Character-level Representations for Part-of-Speech Tagging。比如這篇文章,就證明了不需要手工加後綴。word-level embedding可以捕捉語義信息,char-level embedding可以捕捉包含後綴信息在內的形態學信息,可以直接用char-level embedding的,也方便。
問:我是做Fintech領域的,想請教兩個問題。 一是在DeepLearning這塊,如果只是把TensorFlow PaddlePaddle當做近似黑盒的去用,主要基於現有模型做細微修改,產生的作用大概能有多少的效果。 另一個是在Fintech這塊,目前看到了有人基於dl做對衝基金,那根據您的判斷,在金融領域是否可能有更多的建樹。在難以解釋性上很多時候很猶豫。
答:關於基於DeepLearning做對衝基金是否靠譜這個問題,我只能說,從時序信號的角度,這個是可以做成的,也確實有公司說(至少號稱)用了DeepLearning進行投資建模,然而他們也並不會公開其算法。
個人認為,做對衝基金最大的問題是克服數據噪聲。以自然信號(真實圖像、語音)來說,其內部噪聲是比較小的,甚至我可以精準地給噪聲建模,然而金融數據,尤其是國內的金融數據,噪聲還是佔比挺大的。
我用到過金融數據做量化投資者分類,其實已經挺難了,不過你這個如果做趨勢預測啥的更難。也就是說,如果真的想做好,就要考慮很多因素,將全局新聞(降息降準)、人為情緒(年前資金緊張)、個股新聞(兩個大股東離婚分家)還有歷史走勢全都融入模型,倒是可以一試。
問:請問可以將傳統的圖像處理方法與深度學習結合起來使用嗎?如果可以,能不能舉個例子,比如用於圖像分割?謝謝,目前深度學習還未入門,所以有此一問,請作者解答。
答:對於結合,我的理解是,比如對於圖像分類,手工求特徵之後可以把SVM替代成其他分類器。比如神經網絡分類器,FCN for segmentation(Fully Convolutional Networks for Semantic Segmentation)這篇文章比較經典,輸入為圖像,目標輸出為groundtruth segmentation,用一個全卷積網絡進行擬合。有個問題是一般圖像識別網絡輸出為各個類別權重(無空間信息)。這通過將全連接層視作一個全圖範圍的卷積得到。
問:文章著重於DeepLearning的應用及其PaddlePaddle的實現,能不能多講些PaddlePaddle這個框架的實現?
答:收到需求,等系列裡安排吧,下次專開一個課題。
問:當前很多應用都是監督學習,無監督學習當前有哪些可能的方向取得實質性進展?
答:無監督學習的一大成功應用是聚類,或者降維。之前的工作(比如PCA和K-Means)在深度學習中可以也有相應的competitive 方法,比如基於信號重建的autoencoder。另外已經有一些比較成熟的paper都是基於無監督學習的。我們這裡給的例子還都是有監督的。Unsupervised Learning of Invariant Feature Hierarchies with Applications to Object Recognition,Unsupervised feature learning for audio classification using convolutional deep belief networks,比如這兩篇,比較老了,現在大部分還是有監督學習的。
一類無監督學習是生成模型,包括最近比較火的GAN,還有VAE,可以無監督地生成圖片,並訓練模型,使其生成的圖片像訓練集中的圖片,我們也會在tutorial二期加入該內容,敬請留意。tutorial地址:https://github.com/paddlepaddle/book。
問:深度學習的基本功都有哪些?
答:不太理解說基本功能的意思,如果要下定義的話,其實就是幫助數據更好地表達,比如原本需要手工定義的很多特徵,現在輸入原始數據即可(文中舉了相應的圖像和文本的例子)。基本功其實最最基本的就是編程能力,我覺得其他的都好說。數學開始不難的。後續,具體問題具體分析,我的建議是,不用一開始把基本概率論都讀完的。
問:請教一個問題,深度學習在寫詩,圖像生成,新聞編寫等領域都有應用,是否在音樂創作領域也有相關應用?現在大約到什麼水平?能否推薦些相關論文?
答:在google直接搜索「RNN-RBM」, 第二個結果是我曾經總結這篇的博客。另外這裡有6個例子,做DeepLearning生成音樂的。
問:目前我在做文本中的熱點問題分析,用的是關聯分析算法。我們遇到的難點: 1. apriori算法出來的是詞組,如何轉換成實際的問題。我們目前都是人去看、去定位問題,人工量很大,有什麼機器學習的方法嗎? 2. 除了關聯分析算法,還是什麼算法建議? 3. 我們之後要做長文本,關聯分析算法是否合適?有什麼算法建議嗎?
答:了解了,那其實可以轉換成一個文本分類問題,你的輸入是長文本吧,無監督很難,不過還要看你要求的精度吧。直接進行文本分類,詳見GitHub,這個是有監督的,無監督的,可以試下利用相鄰短句之間的關係。
問:我有一些宏觀上的問題,諸多機器學習算法中,什麼場景深度學習適用,什麼時候不適用,這是一個;第二個什麼時候適用現在已有的框架,什麼時候自研算法;第三,你們是否基於GPU優化算法和程序?
答:是可以用文本相似度做聚類,也可以利用相鄰句語義相關的假設,如我文中所說,一般情況下深度學習只適用於大數據,如果數據量小而由於深度學習參數多會導致overfitting,所以小數據建議用規則,或者想辦法減少參數。第二個問題,現在框架太多了,建議不重複造輪子。第三個問題,是的,PaddlePaddle中神經網絡各層分別有CPU和GPU的實現。
問:PaddlePaddle和google 的TensorFlow 比優勢有哪些?
答:內部人員說了不算,這裡是caffe作者jiayangqing對PaddlePaddle的評價。總結一下:
高質量GPU代碼;
非常好的RNN設計;
設計很乾淨,沒有太多abstraction;
我再補充一些:支持CPU/GPU單機和多機分布式計算;
對新手非常友好,不同於tensorflow對使用人員對神經網絡了解要求較高;
外層封裝了多種主流模型,有一些在我們的tutorial中已經有講到。
問:我在這塊一個完全的新手,現在是前端,目前在看線性代數和python. 自己是做好花很長時間入門的準備,但是對具體的學習路線,不知道有什麼好的建議。另外是先學好python然後就嘗試基於框架來入手,還是打好基礎學好線代,統計學,然後在看看神經網絡相關知識。
答:建議邊學Python邊入手,DeepLearning需要大量實踐經驗,建議邊學邊幹,也有助於你對神經網絡的理解。
問:程式設計師學習數學從何開始?如何更快應用於人工智慧? 普通程式設計師在新一輪的人工智慧浪潮裡要如何定位?
答:程式設計師學習數學從何開始?你是要學啥?數學很泛泛……
如何更快應用於人工智慧? 今天晚上就把PaddlePaddle的代碼clone下來,然後明天run起來,然後後天開始把tutorial過一遍,用一個月。(搭建開發環境的話,docker秒搭)從原始碼編譯要慢一些可能。。反正還是看工程經驗了,總之,編譯的時候沒什麼坑,而且有問題可以提issue。
普通程式設計師在新一輪的人工智慧浪潮裡要如何定位? 做你擅長的。
問:想請教一下,在現有的網絡效果不理想的時候,除了改進特徵以外,怎麼樣可以快速找到其他改進效果的突破口?
答:個人覺得改特徵/數據是最快的。其他,還是具體問題具體分析,改網絡的話,需要具體分析是過擬合了、還是前擬合。看看要不要增加減少網絡層,要不要加trick(比如dropout)什麼的。
問:PaddlePaddle中是否有autograd功能,如果沒有的話是否會開發這個功能?目前PaddlePaddle文檔中寫著如果要增加一個新層需要把前向後向的計算都手工寫出來。而theano/TensorFlow/mxnet有autograd功能就可以只寫前向。
答:我了解到暫時沒有要開發,TensorFlow是有autograd,但是TensorFlow和theano都比較慢,有一張表示PaddlePaddle和其他幾個平臺效率的benchmark。
問:在使用DeepLearning算法的時候,訓練數據量要求是不是很大,之前在不了解的基礎上做的測試,數據量太少效果很差,這個訓練數據的量要如何把握?
答:看訓練曲線,是否過擬合。
問:訓練數據因為一些原因,不能完全保證特徵的一個較為合理的分布比例,在DL使用中人工不參與特徵前提下會不會導致效果相對其他機器學習算法更差?
答:有可能,所以前面有建議,數據量太小的話用規則。
問:第一個作為入門者,如何去使用TensorFlow等來源人工智慧軟體?第二個是在什麼場合下用監督學習?在什麼場合下用無監督學習?還是要混合用?
答:其實上官網都有詳細下載,編譯說明。監督學習——有label,且label充足。無監督——沒label。混用——有label的樣本不足,需要先用無監督訓了feature,初始化模型再用有label的做監督學習。
問:如何發現深度學習可以應用的領域?或者說:通常的研究者,是如何聊著、聊著,就發現某個領域的問題,可以用某種DL算法來試試?但是,某一種領域的問題,早早的就能斷定,別試了。
答:多看paper吧,看看conclusion裡有啥要解決的問題,還有別的paper是怎麼噴其他paper的,就會發現待解決的問題,或者別人的一些思路。其實最好不建議泛泛地講,還是先有一個目標問題。然後查查paper有沒有解決,
最好的判斷是對應該方案的數據集是否充足。
問:1)普通的java程式設計師入門深度學習的話需要預備些什麼方面的基礎知識,請推薦幾本薄的入門書籍。2)大數據(如mr spark)方面的程式設計師進入機器學習領域的話 需要補充什麼方面的知識,比較簡便的發展路徑是什麼。3)深度學習的實際應用的完整項目結構是什麼樣的,需要哪些方面人員?
答:1)基礎知識,其實感覺我們的在線教程真的就可以,很好入手。入門書籍,想了下其實還是國外博士論文最薄最好,可以參考周志華老師的《機器學習》西瓜書,對,Andrew Ng的課程也是蠻好的。2)同上。3)1. 處理數據;2. 設計網絡;3. 調參/調整網絡;4. 如果有功能PaddlePaddle等框架中沒有實現,自己開發。基本是這樣的迭代過程。
問:那對於特徵分布的問題除了改訓練數據有沒有好的建議?主要是訓練數據中對應的類別的特徵分布是存在問題的,不是理想的狀態,比如對於一些情感分類來說,屬性應該在每個類別分布均勻,影響的是情感詞。具體來說,比如對於一些情感分類來說,屬性應該在每個類別分布均勻,影響的是情感詞,但是實際的訓練數據中很多情況下,屬性分布不均勻,相似的特徵分布有很多,這樣導致了利用特徵結果會有偏差。
答:就是說特徵沒有判別性,比如「這場電影很好看」vs「這場電影不好看」,一字之差,如果不能判別,說明模型沒訓好。
這個還是電影的embedding訓得不好,比如傳統方法是會有這個問題的,但DL用時序模型,進行語義理解,理論上是不會這樣的,除非說,你的數據非常不均衡,比如你收集到的電影評價都為負……那只能造假數據,即人工造含有「電影」的正樣本。
來一場Chat,
赴一場約會!
GitChat閱讀首頁已經上線
點擊閱讀原文查看更多Chat話題和精選文章