簡介
開源的項目
- 開源的框架及工具
-
Tensorflow#####
-
Torch
- 采用LuaJIT實現,提供了C接口
- 支持IOS和Android
- 源代碼
-
Theano
- 一個python庫,方便多維度的數學計算,在學術研究中經常使用
- Montreal大學的深度學習課程就用到了它
- 在深度學習上的應用案例
- 詳細介紹
- 源代碼
-
Deprecation
- Matlab實現
- 目前已停止維護,如果需要用Matlab做項目的話,可以參考。
- 源代碼
問題
1 深度學習大多數都是用gpu做,我看文獻說速度可能會差10倍。如果是只用cpu來實現是否可行?
- 只用CPU來實現深度學習是可以的,只是需要的時間特別的長,對CPU的要求也很高,筆記本電腦和普通的臺式機的都不太適合,一般都是推薦用大型的服務器或者云服務。
- 深度學習相比SVM來說,需要更多層的計算,運算量比較大。 一般來說,用GPU來實現深度學習,速度會比cpu高5倍,而且數據量越大,GPU的優勢越明顯,最大能達到10倍的差距,所以,大量的文獻資料是建議用GPU來進行處理的,畢竟現在GPU的性能也越來越高,而且并行計算的能力也越來越好。
- 至于在實際應用中,是否只用CPU來實現,這個還是要具體問題具體分析了,沒有一個統一的標準答案。主要根據以下幾個方面來考慮,問題域應用的硬件環境,要處理的數據量的多少,結果的準確性要求,輸入到輸出的時間限制。如果數據量大,需要快速有結果的話,不建議只用CPU來實現。(ps,學術研究的話,不建議只用CPU實現,因為算法的計算量擺在那里的,在論文中說是只用CPU實現的話,估計論文不太好發。實在是要只用CPU實現的話,可以考慮結合分布式的并行計算,云計算,云存儲之類的技術。)
2 深度學習是否也要事先定義一些特征呢?我看到有的文章是不需要定義特征的,深度學習方法可以自學習一些特征來進行。而有一些文章卻自己定義了一些特征,如果自己定義特征,深度學習方法和普通機器學習方法有差別嗎?而且如何選特征選多少特征會比較合適呢?
深度學習實質是構建具有很多隱層的機器學習模型,再通過海量的數據來進行訓練,得出更有用的特征,再根據這些特征進行分類或者預測。所以,不需要事先定義特征。但是,如果訓練的數據量小的話,其自學習到的特征便不準確,導致最后的分類結果出現很大的誤差。所以,理論上來說,深度學習算法是不需要自定義的特征的,但是在某些環境中,加入自定義的特征能更好的提高算法的精確度。
普通的機器學習方法是淺層學習,而深度學習的不同在于:1)強調了模型結構的深度,通常有5層、6層,甚至10多層的隱層節點;2)明確突出了特征學習的重要性,也就是說,通過逐層特征變換,將樣本在原空間的特征表示變換到一個新特征空間,從而使分類或預測更加容易。但是,與自己定義特征的方法相比,深度學習利用大數據來自學習特征,更能夠刻畫數據的內在信息,特征提取也更加的客觀。
深度學習的訓練過程如下:
-
1)使用自下上升非監督學習(就是從底層開始,一層一層的往頂層訓練):
采用無標定數據(有標定數據也可)分層訓練各層參數,這一步可以看作是一個無監督訓練過程,是和傳統神經網絡區別最大的部分(這個過程可以看作是feature learning過程):
具體的,先用無標定數據訓練第一層,訓練時先學習第一層的參數(這一層可以看作是得到一個使得輸出和輸入差別最小的三層神經網絡的隱層),由于模型capacity的限制以及稀疏性約束,使得得到的模型能夠學習到數據本身的結構,從而得到比輸入更具有表示能力的特征;在學習得到第n-1層后,將n-1層的輸出作為第n層的輸入,訓練第n層,由此分別得到各層的參數;
2)自頂向下的監督學習(就是通過帶標簽的數據去訓練,誤差自頂向下傳輸,對網絡進行微調):
基于第一步得到的各層參數進一步fine-tune整個多層模型的參數,這一步是一個有監督訓練過程;第一步類似神經網絡的隨機初始化初值過程,由于DL的第一步不是隨機初始化,而是通過學習輸入數據的結構得到的,因而這個初值更接近全局最優,從而能夠取得更好的效果;所以deep learning效果好很大程度上歸功于第一步的feature learning過程。
如何選特征,選多少特征這個需要具體問題具體分析。任何一種方法,特征越多,給出的參考信息就越多,準確性會得到提升。但特征多意味著計算復雜,探索的空間大,可以用來訓練的數據在每個特征上就會稀疏,都會帶來各種問題,并不一定特征越多越好。
3 對服務器和樣本量有什么要求?對訓練集的數目有要求嗎?如果像題2那樣可以自己定義特征的話,特征的數目和訓練集的數目有什么有什么要求嗎?
- 服務器的要求:
- GPU:GTX 680 或者GTX 960(這是窮人配置);GTX 980 (表現最佳,強烈推薦)
- CPU配置:Intel系列,高端的即可,做好多核
- 內存:越大越好,至少要和GPU的內存一樣大
- 訓練的數目問題,深度學習的應用主要是大數據,解決的是普通的機器學習算法處理大數據時的特征提取問題,結果準確性,結果生成速度等問題,如果數據量太少的話,深度學習算法反而在性能上還比不上普通的機器學習算法。所以,訓練的數據越多越好。至于特征的數目,這個要具體問題具體分析了,目前沒有統一的標準和理論依據,只能憑經驗或者在試驗中不斷調整測試。
4 深度學習的幾種模型如(AutoEncoder,Sparse Coding,Restricted Boltzmann Machine,Deep BeliefNetworks,Convolutional Neural Networks)在解決實際問題的時候是否有傾向性的解決某一類問題?比如說更傾向解決分類問題還是預測連續值的問題?或者說在效能上有什么差別(如時間或者空間,或者準確度上)?
- AutoEncoder自動編碼器,可用于分類問題;
- Sparse Coding稀疏編碼算法是一種無監督學習方法;主要應用于圖像處理和語音信號處理
- Restricted Boltzmann Machine (RBM)限制波爾茲曼機,受限制玻爾茲曼機在降維、分類、協同過濾、特征學習和主題建模中得到了應用。
- Deep Belief Networks深信度網絡,主要應用于圖像識別和語音處理領域
- Convolutional Neural Networks,CNNs是受早期的延時神經網絡(TDNN)的影響。延時神經網絡通過在時間維度上共享權值降低學習復雜度,適用于語音和時間序列信號的處理。
- 深度學習算法在計算上比普通機器學習算法更復雜,因而對時間和機器資源的要求更高,相應地,也取得了比普通機器學習算法更好的計算效果。
5 目前深度學習方法都用于處理圖形,或者一些生物分子的結構還有序列上面,那么這個方法是否能夠直接適用于表達譜這種數據呢,比如用表達譜作特征區分疾病和正常樣本?我認為表達譜數據的特點是含有很大部分的噪音,不一定所有基因表達都與所研究的疾病相關。如果用這種給出的訓練樣本有噪音的情況,深度學習方法能不能自動學習而去除噪音的影響?
- 能直接應用于表達譜,但是深度學習對于有大量噪聲的數據的效果不是很好。
- 用深度學習在生物學上的應用主要有兩個難點,1)分析的數據集很難獲取。2)計算量非常大,需要很好的硬件支持。
- D-GEX: 深度學習在表達譜上的應用的一個開源案例
- 其他參考
6 深度學習方法層數選擇以及每一層所用的模型有什么技巧嗎?
- 不同的算法,以及處理問題不同,不能一概而論。現在處于各自摸索階段,在選擇上沒有什么理論的依據。
其他參考文獻
Which GPU(s) to Get for Deep Learning: My Experience and Advice for Using GPUs in Deep Learning 文章建議用GPU實現深度學習,并提供了GPU選擇的參考意見
A Primer on Deep Learning 描述了深度學習與無監督學習,神經網絡之間的關系與區別