簡介
- 一頁紙介紹深度學(xué)習(xí)
- 深度學(xué)習(xí)的前世今生
- 所有參考資料集錦
開源的項(xiàng)目
- 開源的框架及工具
-
Tensorflow#####
- 計(jì)算的過程抽象成了圖形化的數(shù)據(jù)流蛹屿,方便在不同的設(shè)備上進(jìn)行部署
- 來源于google實(shí)驗(yàn)室屁奏,在實(shí)際項(xiàng)目中驗(yàn)證過。
- 源代碼
- 應(yīng)用實(shí)例1
- 應(yīng)用實(shí)例2
-
Torch
- 采用LuaJIT實(shí)現(xiàn)错负,提供了C接口
- 支持IOS和Android
- 源代碼
-
Theano
- 一個(gè)python庫坟瓢,方便多維度的數(shù)學(xué)計(jì)算,在學(xué)術(shù)研究中經(jīng)常使用
- Montreal大學(xué)的深度學(xué)習(xí)課程就用到了它
- 在深度學(xué)習(xí)上的應(yīng)用案例
- 詳細(xì)介紹
- 源代碼
-
Deprecation
- Matlab實(shí)現(xiàn)
- 目前已停止維護(hù)犹撒,如果需要用Matlab做項(xiàng)目的話折联,可以參考。
- 源代碼
- 其他應(yīng)用
- 深度神經(jīng)網(wǎng)絡(luò)在計(jì)算機(jī)視覺上的應(yīng)用
- python實(shí)現(xiàn)
- 算法中使用的樣本數(shù)據(jù)
- Kaggle
問題
1 深度學(xué)習(xí)大多數(shù)都是用gpu做识颊,我看文獻(xiàn)說速度可能會差10倍诚镰。如果是只用cpu來實(shí)現(xiàn)是否可行?
- 只用CPU來實(shí)現(xiàn)深度學(xué)習(xí)是可以的,只是需要的時(shí)間特別的長清笨,對CPU的要求也很高月杉,筆記本電腦和普通的臺式機(jī)的都不太適合,一般都是推薦用大型的服務(wù)器或者云服務(wù)抠艾。
- 深度學(xué)習(xí)相比SVM來說苛萎,需要更多層的計(jì)算,運(yùn)算量比較大检号。 一般來說腌歉,用GPU來實(shí)現(xiàn)深度學(xué)習(xí),速度會比cpu高5倍谨敛,而且數(shù)據(jù)量越大究履,GPU的優(yōu)勢越明顯滤否,最大能達(dá)到10倍的差距脸狸,所以,大量的文獻(xiàn)資料是建議用GPU來進(jìn)行處理的藐俺,畢竟現(xiàn)在GPU的性能也越來越高炊甲,而且并行計(jì)算的能力也越來越好。
- 至于在實(shí)際應(yīng)用中欲芹,是否只用CPU來實(shí)現(xiàn)卿啡,這個(gè)還是要具體問題具體分析了,沒有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)答案菱父。主要根據(jù)以下幾個(gè)方面來考慮颈娜,問題域應(yīng)用的硬件環(huán)境,要處理的數(shù)據(jù)量的多少浙宜,結(jié)果的準(zhǔn)確性要求官辽,輸入到輸出的時(shí)間限制。如果數(shù)據(jù)量大粟瞬,需要快速有結(jié)果的話同仆,不建議只用CPU來實(shí)現(xiàn)。(ps,學(xué)術(shù)研究的話萍摊,不建議只用CPU實(shí)現(xiàn)寞奸,因?yàn)樗惴ǖ挠?jì)算量擺在那里的溜徙,在論文中說是只用CPU實(shí)現(xiàn)的話,估計(jì)論文不太好發(fā)岁忘。實(shí)在是要只用CPU實(shí)現(xiàn)的話,可以考慮結(jié)合分布式的并行計(jì)算区匠,云計(jì)算干像,云存儲之類的技術(shù)。)
2 深度學(xué)習(xí)是否也要事先定義一些特征呢?我看到有的文章是不需要定義特征的蝠筑,深度學(xué)習(xí)方法可以自學(xué)習(xí)一些特征來進(jìn)行狞膘。而有一些文章卻自己定義了一些特征,如果自己定義特征什乙,深度學(xué)習(xí)方法和普通機(jī)器學(xué)習(xí)方法有差別嗎挽封?而且如何選特征選多少特征會比較合適呢?
深度學(xué)習(xí)實(shí)質(zhì)是構(gòu)建具有很多隱層的機(jī)器學(xué)習(xí)模型臣镣,再通過海量的數(shù)據(jù)來進(jìn)行訓(xùn)練辅愿,得出更有用的特征,再根據(jù)這些特征進(jìn)行分類或者預(yù)測忆某。所以点待,不需要事先定義特征。但是弃舒,如果訓(xùn)練的數(shù)據(jù)量小的話癞埠,其自學(xué)習(xí)到的特征便不準(zhǔn)確,導(dǎo)致最后的分類結(jié)果出現(xiàn)很大的誤差聋呢。所以苗踪,理論上來說,深度學(xué)習(xí)算法是不需要自定義的特征的削锰,但是在某些環(huán)境中通铲,加入自定義的特征能更好的提高算法的精確度。
普通的機(jī)器學(xué)習(xí)方法是淺層學(xué)習(xí)器贩,而深度學(xué)習(xí)的不同在于:1)強(qiáng)調(diào)了模型結(jié)構(gòu)的深度颅夺,通常有5層、6層蛹稍,甚至10多層的隱層節(jié)點(diǎn)吧黄;2)明確突出了特征學(xué)習(xí)的重要性,也就是說稳摄,通過逐層特征變換稚字,將樣本在原空間的特征表示變換到一個(gè)新特征空間,從而使分類或預(yù)測更加容易厦酬。但是胆描,與自己定義特征的方法相比,深度學(xué)習(xí)利用大數(shù)據(jù)來自學(xué)習(xí)特征仗阅,更能夠刻畫數(shù)據(jù)的內(nèi)在信息昌讲,特征提取也更加的客觀。
深度學(xué)習(xí)的訓(xùn)練過程如下:
-
1)使用自下上升非監(jiān)督學(xué)習(xí)(就是從底層開始减噪,一層一層的往頂層訓(xùn)練):
采用無標(biāo)定數(shù)據(jù)(有標(biāo)定數(shù)據(jù)也可)分層訓(xùn)練各層參數(shù)短绸,這一步可以看作是一個(gè)無監(jiān)督訓(xùn)練過程车吹,是和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)區(qū)別最大的部分(這個(gè)過程可以看作是feature learning過程):
具體的,先用無標(biāo)定數(shù)據(jù)訓(xùn)練第一層醋闭,訓(xùn)練時(shí)先學(xué)習(xí)第一層的參數(shù)(這一層可以看作是得到一個(gè)使得輸出和輸入差別最小的三層神經(jīng)網(wǎng)絡(luò)的隱層)窄驹,由于模型capacity的限制以及稀疏性約束,使得得到的模型能夠?qū)W習(xí)到數(shù)據(jù)本身的結(jié)構(gòu)证逻,從而得到比輸入更具有表示能力的特征乐埠;在學(xué)習(xí)得到第n-1層后,將n-1層的輸出作為第n層的輸入囚企,訓(xùn)練第n層丈咐,由此分別得到各層的參數(shù);
2)自頂向下的監(jiān)督學(xué)習(xí)(就是通過帶標(biāo)簽的數(shù)據(jù)去訓(xùn)練龙宏,誤差自頂向下傳輸棵逊,對網(wǎng)絡(luò)進(jìn)行微調(diào)):
基于第一步得到的各層參數(shù)進(jìn)一步fine-tune整個(gè)多層模型的參數(shù),這一步是一個(gè)有監(jiān)督訓(xùn)練過程银酗;第一步類似神經(jīng)網(wǎng)絡(luò)的隨機(jī)初始化初值過程辆影,由于DL的第一步不是隨機(jī)初始化,而是通過學(xué)習(xí)輸入數(shù)據(jù)的結(jié)構(gòu)得到的花吟,因而這個(gè)初值更接近全局最優(yōu)秸歧,從而能夠取得更好的效果厨姚;所以deep learning效果好很大程度上歸功于第一步的feature learning過程衅澈。
如何選特征,選多少特征這個(gè)需要具體問題具體分析谬墙。任何一種方法今布,特征越多,給出的參考信息就越多拭抬,準(zhǔn)確性會得到提升部默。但特征多意味著計(jì)算復(fù)雜,探索的空間大造虎,可以用來訓(xùn)練的數(shù)據(jù)在每個(gè)特征上就會稀疏傅蹂,都會帶來各種問題,并不一定特征越多越好算凿。
3 對服務(wù)器和樣本量有什么要求份蝴?對訓(xùn)練集的數(shù)目有要求嗎?如果像題2那樣可以自己定義特征的話氓轰,特征的數(shù)目和訓(xùn)練集的數(shù)目有什么有什么要求嗎婚夫?
- 服務(wù)器的要求:
- GPU:GTX 680 或者GTX 960(這是窮人配置);GTX 980 (表現(xiàn)最佳署鸡,強(qiáng)烈推薦)
- CPU配置:Intel系列案糙,高端的即可限嫌,做好多核
- 內(nèi)存:越大越好,至少要和GPU的內(nèi)存一樣大
- 訓(xùn)練的數(shù)目問題时捌,深度學(xué)習(xí)的應(yīng)用主要是大數(shù)據(jù)怒医,解決的是普通的機(jī)器學(xué)習(xí)算法處理大數(shù)據(jù)時(shí)的特征提取問題,結(jié)果準(zhǔn)確性奢讨,結(jié)果生成速度等問題裆熙,如果數(shù)據(jù)量太少的話,深度學(xué)習(xí)算法反而在性能上還比不上普通的機(jī)器學(xué)習(xí)算法禽笑。所以入录,訓(xùn)練的數(shù)據(jù)越多越好。至于特征的數(shù)目佳镜,這個(gè)要具體問題具體分析了僚稿,目前沒有統(tǒng)一的標(biāo)準(zhǔn)和理論依據(jù),只能憑經(jīng)驗(yàn)或者在試驗(yàn)中不斷調(diào)整測試蟀伸。
4 深度學(xué)習(xí)的幾種模型如(AutoEncoder蚀同,Sparse Coding,Restricted Boltzmann Machine啊掏,Deep BeliefNetworks蠢络,Convolutional Neural Networks)在解決實(shí)際問題的時(shí)候是否有傾向性的解決某一類問題?比如說更傾向解決分類問題還是預(yù)測連續(xù)值的問題迟蜜?或者說在效能上有什么差別(如時(shí)間或者空間刹孔,或者準(zhǔn)確度上)?
- AutoEncoder自動編碼器娜睛,可用于分類問題髓霞;
- Sparse Coding稀疏編碼算法是一種無監(jiān)督學(xué)習(xí)方法;主要應(yīng)用于圖像處理和語音信號處理
- Restricted Boltzmann Machine (RBM)限制波爾茲曼機(jī)畦戒,受限制玻爾茲曼機(jī)在降維方库、分類、協(xié)同過濾障斋、特征學(xué)習(xí)和主題建模中得到了應(yīng)用纵潦。
- Deep Belief Networks深信度網(wǎng)絡(luò),主要應(yīng)用于圖像識別和語音處理領(lǐng)域
- Convolutional Neural Networks垃环,CNNs是受早期的延時(shí)神經(jīng)網(wǎng)絡(luò)(TDNN)的影響邀层。延時(shí)神經(jīng)網(wǎng)絡(luò)通過在時(shí)間維度上共享權(quán)值降低學(xué)習(xí)復(fù)雜度,適用于語音和時(shí)間序列信號的處理晴裹。
- 深度學(xué)習(xí)算法在計(jì)算上比普通機(jī)器學(xué)習(xí)算法更復(fù)雜被济,因而對時(shí)間和機(jī)器資源的要求更高,相應(yīng)地涧团,也取得了比普通機(jī)器學(xué)習(xí)算法更好的計(jì)算效果只磷。
5 目前深度學(xué)習(xí)方法都用于處理圖形经磅,或者一些生物分子的結(jié)構(gòu)還有序列上面,那么這個(gè)方法是否能夠直接適用于表達(dá)譜這種數(shù)據(jù)呢钮追,比如用表達(dá)譜作特征區(qū)分疾病和正常樣本预厌?我認(rèn)為表達(dá)譜數(shù)據(jù)的特點(diǎn)是含有很大部分的噪音,不一定所有基因表達(dá)都與所研究的疾病相關(guān)元媚。如果用這種給出的訓(xùn)練樣本有噪音的情況轧叽,深度學(xué)習(xí)方法能不能自動學(xué)習(xí)而去除噪音的影響?
- 能直接應(yīng)用于表達(dá)譜刊棕,但是深度學(xué)習(xí)對于有大量噪聲的數(shù)據(jù)的效果不是很好炭晒。
- 用深度學(xué)習(xí)在生物學(xué)上的應(yīng)用主要有兩個(gè)難點(diǎn),1)分析的數(shù)據(jù)集很難獲取甥角。2)計(jì)算量非常大网严,需要很好的硬件支持。
- D-GEX: 深度學(xué)習(xí)在表達(dá)譜上的應(yīng)用的一個(gè)開源案例
- 其他參考
6 深度學(xué)習(xí)方法層數(shù)選擇以及每一層所用的模型有什么技巧嗎嗤无?
- 不同的算法震束,以及處理問題不同,不能一概而論〉狈福現(xiàn)在處于各自摸索階段垢村,在選擇上沒有什么理論的依據(jù)。
其他參考文獻(xiàn)
Which GPU(s) to Get for Deep Learning: My Experience and Advice for Using GPUs in Deep Learning 文章建議用GPU實(shí)現(xiàn)深度學(xué)習(xí)嚎卫,并提供了GPU選擇的參考意見
A Primer on Deep Learning 描述了深度學(xué)習(xí)與無監(jiān)督學(xué)習(xí)嘉栓,神經(jīng)網(wǎng)絡(luò)之間的關(guān)系與區(qū)別