現在的深度學習的模型越來越大,有個結論是說,大腦的激活是非常稀疏的,對模型參數有什麼好的辦法壓縮嗎?
深度學習,模型壓縮
http://www.cs.toronto.edu/~ranzato/publications/denil_nips2013.pdf
這是個非常好的問題.不過這個問題有兩點需要分開討論:第一點是大腦激活稀疏性的問題,第二點是CNN模型壓縮的問題.我這裡重點講下大腦和CNN稀疏性的問題,粗略過一下CNN模型壓縮的相關文獻.
大腦激活稀疏性(sparsity in neuron activation)和稀疏性編碼(sparse coding). 在Deep learning這把火之前(2012年之前),sparse coding可以說是ML裡面的最熱門的研究課題之一.基於sparse coding的理論和應用當時是鋪天蓋地,沒比現在deep learning差多少(不過唯一差別是sparse coding確實不怎麼work,笑).另外一方面,大腦激活稀疏性一直是神經科學裡面的一個重要研究課題.在大腦初級視覺皮層(V1),Bruno Olshausen, David Fleet, Eero Simoncelli等計算神經科學的大佬一直在用sparse coding來解釋V1神經元的行為,大家看看那篇經典的Nature論文Emergence of simple-cell receptive field properties by learning a sparse code for natural images(http://www.cns.nyu.edu/~tony/vns/readings/olshausen-field-1996.pdf). 這篇論文idea其實非常簡單,就是利用sparsity的假設,讓convolutional filter從大量自然圖片的patch裡面自動學出了類似於edge detector的東西,如下圖.
這些filter其實跟pretrained CNN裡面第一層的filter的樣子非常像,下圖是AlexNet pretrained on ImageNet的Conv1 filter. 這兩者肯定有很多聯繫,感興趣的童鞋不妨探索下,說不定又是篇nature:)
這裡稍微擴展一下,Bruno(Bruno"s home page)和Eero(Eero Simoncelli, home page)是我挺喜歡的researcher, 他們的研究路子是從natural image statistics的角度出發,從大量觀測中去總結數據的規律,然後提出統計模型.這裡有篇非常經典的review:natural image statistics and neural representation(http://cns.bu.edu/Profiles/Mingolla.html/cnsftp/cn730-2006-pdf/simoncelli.pdf).上個月Eero還來MIT BCS的一個lab給了talk, 終於膜拜見到了真人,Eero還在很積極得探索高層視覺皮層的模型.
之前只是在初級視覺皮層的建模,在高級視覺皮層裡面神經元的行為,grandmother cell hypothesis是個流行的假設,大家可以看看這篇review (http://www.cs.utexas.edu/~dana/Gross.pdf). 大致想法是在高層視覺皮層裡面的神經元會變得越來越有選擇性(selectivity) 和稀疏性(sparsity),它們只會對特定的有高級語義信息的pattern產生激活,比如說'祖母'.我自己不是神經科學背景,就此打住,也許 @Filestorm 可以幫忙擴展下:)
說到神經元的選擇性問題,我自己的一部分研究工作就是在分析CNN裡面不同層每個unit的激活特性,大家有興趣的話可以看看我ICLR"15這篇論文Object detectors emerge from deep scene CNNs (https://arxiv.org/pdf/1412.6856.pdf).在這篇工作中,我們發現其實CNN裡面神經元(這裡assume每個convolutional filter是個神經元)也有自己receptive field和最喜歡的激活圖片pattern, 而且隨著層次的增高,神經元的選擇性(selectivity)和語義特性(semantics) 越來越明顯.比如下圖是從pool1 到pool5, 我們從Places-CNN和ImageNet-CNN裡面分別選了兩個神經元的激活圖片,pool1和pool2的神經元對edge, color, texture等低級語義visual pattern有響應,而conv4, pool5裡面的神經元的對樓梯,建築,皮划艇等高級語義的visual pattern有很強響應.
在pool5,有更多的神經元在做物體檢測.下面圖片里每一行是AlexNet pool5 layer裡面的某個神經元的最大激活的5張圖片,比如說unit 56是building detector, unit 182是food detector.
這裡值得一提的是這些object detectors都是在CNN內部自發emerge出來的,在CNN訓練過程中本身沒有任何object-level supervision. 我們訓練這個CNN在Places(MIT Places Database for Scene Recognition)上面做場景分類(scene classification),因為CNN要識別場景,所以內部的神經元才被迫學出了檢測某些場景中重要的物體(比如說bed對於bedroom, pitch對應於baseball stadium).
這些場景識別的CNN模型在我們project page上面都可以下載得到(MIT Places Database for Scene Recognition, A Large-Scale Database for Scene Understanding). 我今年CVPR還投了一個工作,我們開發了一個自動化的方法來identify the semantics of units: 給任意一個訓練好的CNN, 我們可以自動找到CNN內部具有semantics的神經元(object or other high level visual concept detectors).以後有機會再跟大家討論這個方法.
另外一方面, CNN模型壓縮也是個非常重要的問題.一個500MB的VGG或者200MB的AlexNet, 能壓縮到幾MB,這個過程所帶來的應用是非常廣泛的.這個研究方向跟軍備競賽一樣一下出來了好多paper.我自己不做這個方向,所以只是大致列一下我所知道的幾篇比較重要的文獻(漏掉了的我再補充):
- 第一篇是ICLR"16的best paper: Deep Compression (https://arxiv.org/pdf/1510.00149v5.pdf).韓總也是春風得意啊,這裡video lecture Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding
- 這幾篇跟軍備競賽一樣出來的paper:BinaryNet(Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1), XORnet (https://arxiv.org/pdf/1603.05279.pdf), YodaNet(https://arxiv.org/pdf/1606.05487.pdf)
- 基於Prunning的一些壓縮方法.Pruning Filters for Efficient ConvNets(https://arxiv.org/pdf/1608.08710.pdf),Sparsifying Neural Network Connections for Face Recognition(http://www.ee.cuhk.edu.hk/~xgwang/papers/sunWTcvpr16.pdf)
總得來說compressing CNN和intepretating CNN還是兩幫不同的人在做.壓縮CNN大致是在砍掉冗餘的神經元和鏈接,保留下來的這些神經元往往有很強的interetability.遺憾的是,做深度學習模型壓縮的人多數是工程背景,往往追求更好的壓縮效率,而不關心interpretability.做神經科學,以及偏science背景的人,更關心深度學習模型內部的運行機制和可解釋性,我自己也是在這方面努力.我相信以後這兩個方向會有結合更緊密的工作出現.
[1707.06168] Channel Pruning for Accelerating Very Deep Neural Networks
By Yihui He, Xiangyu Zhang, Jian Sun, ICCV 2017
基於CNN每一層都是稀疏地假設,我們考慮是否能找到neuron之間的關係,僅留下最具有代表性地neuron?
分為兩步解決問題:
- 找出每一層具有代表性地neuron,我們利用lasso regression來進行類似model selection的過程。將剩餘的neuron去掉(pruning)。
- 利用剩下的代表性neuron來重構(reconstruction)這一層原本的輸出。
效果可以達到:
- VGG-16, 4倍加速, Top-5 accuracy 下降 0.0
- Xception-50, 2倍加速, Top-5 accuracy 下降 1.0
- Faster RCNN, 2倍加速, mmAP 下降 0.0
在GitHub上公布了Code : yihui-he/channel-pruning
直面問題
典型深度神經網路百萬、千萬或上億數量級的參數數量使其對計算和存儲設備有較高要求,因此部署網路模型時需要面對多個問題,如模型存儲困難以及計算時模型參數傳輸困難等。因此,深度神經網路的海量參數和所需的計算量均限制了其實際應用-&>特別是移動設備上的應用。
值得注意,DNNs(Deep Neural Networks)的冗餘性決定了合理地減少參數個數不會對網路的精度造成影響。此外,SGD(Stochastic Gradient Descent)所需的精度僅為6至8比特,因此合理地量化網路也可在保證精度的情況下減小模型的存儲體積。
重要的影響
目前,對DNNs壓縮的有重要影響的文獻可主要參考Stanford大學的Han Song博士發表的幾篇論文,它們分別為:
- Learning both Weights and Connections for Efficient Neural Networks
- Regularizing Deep Neural Networks with Dense-Sparse-Dense Training
- Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding
相關演算法的主要實現思路是發現對網路貢獻較小的參數並精簡,然後重新訓練精簡後的稀疏網路以達到減少非零網路參數的個數並保留或提高網路精度的目的,此類方法屬於改變網路密度類方法。除上述文獻對網路參數精簡外,也有大量其它論文湧現,並對網路層的通道或網路層等的精簡方法進行了較多的討論。
圖 1 Deep Compression的深度神經網路剪枝、量化和編碼的示意框圖
量化技術
深度神經網路的量化技術可主要分為兩類:完整訓練後量化和訓練時量化。與改變密度類方法不同,量化類的方法屬於改變網路多樣性的方法,容易造成精度損失。
完整訓練深度神經網路後,再執行量化類的技術主要針對已完整訓練的網路,可參考Vector Quantization、Deep Compression等技術:
- Compressing Deep Convolutional Networks using Vector Quantization
- Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding
與訓練後量化類的技術相比,訓練時進行量化類的技術可量化權重、激活值和梯度,以獲得體積相對更小且計算更簡潔的網路,但也需要完整的數據樣本以訓練和量化深度神經網路。權重、激活值和梯度對量化的敏感度依次遞增,其中梯度可以量化至4bits而不明顯影響網路的精度,全網路的所有參數都被量化為8bits時網路幾乎不會有明顯的精度損失。
具有代表性的幾個訓練時量化的網路包括(按時間順序排列):Binary Connect(BC)、Binary Neural Networks(BNN)、Binary Weight Network(BWN)、XNOR-Network(XNOR-Net)、Dorefa-Net和Quantized Neural Network(QNN):
- Training Deep Neural Networks with Binary Weights During Propagations
- Training Neural Networks with Weights and Activations Constrained to +1 or -1
- Training Low Bitwidth Convolutional Neural Networks with Low Bitwidth Gradients
- ImageNet Classification Using Binary Convolutional Neural Netoworks
- Training Neural Networks with Low Precision Weights and Activations
圖 2 Dorefa-Net中權值-激活值-梯度的量化對網路精度的影響
與非二進位網路相比,雖然擁有二進位權重和激活值的網路容易有較大的精度損失,但相對更易計算。各二進位網路相比較,BNN僅使用了二進位的權重和激活值,而BWN和XNOR-Net通過引入縮放因子補償了二值化造成的損失,因此精度優於BNN。
詳細地講:
- BC二值化權重;
- BNN二值化權重和激活值,使其能夠利用XNOR提高運算效率並降低能耗;
- BWN僅二值化權重,但使用縮放因子補償二值化造成的損失;
- XNOR-Net二值化權重、激活值以及第一層的輸入;
- Dorefa-Net和QNN分別將網路量化為任意位寬的權重、激活值和梯度組合的網路,並衡量不同組合的量化效果。
小結
上文中,我沒有對編碼和網路模型共享的技術進行討論。值得提醒的是網路模型共享是現在的重要研究方向,通過共用基礎網路,也是壓縮模型的另類實現方式。總之,為壓縮DNNs,可考慮的優化方法包括但不限於:網路剪枝;參數量化;參數編碼;網路模型共享。
深度學習模型太大?這家公司直接跑在了樹莓派上
深度學習當前面臨的一大熱點問題是很多深度學習的模型太大而不方便在移動設備和嵌入式設備上使用。
現在常見的模型比如圖像分類模型基本都在500兆以上,自然語言處理的一些模型例如語言模型很多都在1G以上,機器翻譯的模型也都是500兆以上。
而一個手機或者潛入式設備要載入一個500兆以上的模型基本不太現實,因此當前深度學習面臨的一大挑戰就是如何把大模型變成小模型。因為移動設備不僅僅是內存或者存儲空間的限制,更多是因為能耗的限制,不允許我們用太大的模型。
2017年2月2日,位於美國西雅圖的 AI 創業公司 XNOR.AI 宣布獲得來自Madrona Venture Group和艾倫人工智慧研究所(Allen Institute for Artificial Intelligence)等機構的260萬美元的種子融資。XNOR.AI 利用二值化神經網路等技術對深度學習網路進行壓縮,致力於開發有效地在移動端或嵌入式設備上運行的深度學習演算法。
值得注意的是,微軟聯合創始人Paul Allen個人也參與了XNOR.AI的種子輪投資。
跑的比香港記者還快的探長對XNOR.AI聯合創始人兼CTO Mohammad Rastegari 進行了專訪,與他探討了深度學習的前沿問題。
二值化神經網路,就是所有的權值不用浮點數表達了,就是一個二進位的數,要麼是+1要麼是-1,用二進位的方式來表達,這樣原來一個32 bit權值現在只需要一個bit來表達,從而大大降低這個模型的尺寸。
2016 年 3 月,Mohammad Rastegari 等人在ECCV論文(XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks)中首次提出了 XNOR-Net 的概念。
這篇論文旨在利用二值化操作尋找到最優的簡化網路,並分別介紹了兩種有效的網路:Binary-Weight-Networks 和 XNOR-Networks。Binary-Weight-Networks 是對 CNN 中所有的權重做近似二值化,可以節省 32 倍的存儲空間。而且,由於權重被二值化,卷積過程只剩加減演算法,不再包括乘法運算,可以提高約兩倍的運算速度,這促使 CNN 可以在不犧牲準確率的情況下在小存儲設備上使用,包括攜帶型設備。
XNOR-Networks 演算法則是對 CNN 中所有的權重和輸入同時做近似二值化,如果卷積運算中的所有操作數都是二進位的,那麼兩個二進位向量的點乘就可以等同於同或運算和位運算。而這些操作天然就被CPU等通用計算設備支持,所以二值化神經網路能夠跑在普通的CPU和更便宜的ARM晶元甚至是樹莓派等設備上。
此外,如上圖所示,在節省了幾十倍空間和幾十倍速度提升的情況下,Binary-Weight-Network和XNOR-Network的準確率精度下降並不顯著。
強悍的團隊
XNOR.AI團隊CEO Ali Farhadi是華盛頓大學計算機系教授,同時也是艾倫人工智慧研究所的計算機視覺方向的負責人,他在計算機視覺領域積累深厚,同時是非常驚艷的實時物體檢測框架YONO的主要貢獻者,「YOLO」系統在2016年CVPR會議上的現場展示一度驚艷全場。
(YOLO的在CVPR 2016的現場演示 )
XNOR.AI的CTO Mohammad Rastegari是艾倫人工智慧研究所研究科學家,也在計算機視覺領域有接近十年的研究經歷。
(xnor.ai CTO Mohammad Rastegari)
XNOR.AI團隊首次讓二值神經網路在ImageNet上面完了實驗,在自主搭建的輕型神經網路框架 DarkNet 中實現了在 CPU 上 58 倍速度的提升,這意味著很多深度學習演算法可以在嵌入式設備上實時的運行。
XNOR.AI團隊還把 「YOLO」系統 的二值化版本在 iPhone 上面做到了實時探測,也成為實時檢測的一大亮點。
事實上,團隊還曾將 XNOR-Net 部署在價值 5 美元的 Raspberry Pi Zero 上,通過連接一個攝像頭實現了實時視頻分析,他們官方視頻里展示出的實時檢測分析效果十分引人注意,強烈的震撼了小探的小心臟。
如果在類似於 Raspberry Pi Zero 這樣的移動設備上都能做到實時物體檢測,這項技術在其他領域中也潛藏著巨大的商業價值。
XNOR.AI的願景是普適人工智慧
由於他們的二值化神經網路,除了帶來的數十倍的內存減少和計算提升,二值化操作天然就被CPU等通用計算設備支持,所以二值化神經網路能夠在普通的CPU和更便宜的ARM晶元甚至是樹莓派等設備,Mohammad還表示他們也在微軟的Hololens上實現了他們的演算法。
在採訪中,Mohammad說道,他們的深度學習技術能夠用在計算能力和內存都有限的設備上,XNOR.AI針對的市場是普適計算的場景,他們希望未來所有的智能設備都可以運行他們的深度學習演算法。
而CEO Ali Farhadi曾說:「可以設想,未來每個街道拐角,價值5美元的攝像頭,都能識別看到的景象,了解正在發生的事情;而我的手錶也能真正聽懂和處理指令。」
(在手機上實時物體檢測)
Mohammad表示物體的實時檢測是一個非常難的問題,他們用視頻演示了他們的強悍能力,目前不少實時檢測都通過將視頻流傳到雲端來做檢測,但這一方面帶來了延遲問題,另一方面則是帶來了隱私問題,但利用他們的演算法,實時的物體檢測在本地就能完成。
Mohammad也表示這不代表他們只會局限在計算機視覺領域,目前他們能夠對主流的深度學習網路比如RNN和CNN進行二值化操作。除了視覺領域,還有自然語言處理都有望實時化操作。
作為成立才一個月的公司,Mohammad還在探索自己的商業模式,但已經有大量廠商和他們聯繫了,XNOR.AI的願景是普適人工智慧,「AI on every device everywhere」。
有相關資源並且對XNOR.AI感興趣的投資人,歡迎聯繫矽谷密探: contact@svinsight.com
關注 @矽谷密探
緊盯全球創新趨勢
在 DNN 方面已經有了很多模型壓縮的方法,但就如最高票答案所說,這些壓縮的方法並不關係模型的解釋性,而是單純的從模型的角度出發,試圖減少模型的參數量而不降低模型的性能。這些方法主要涉及到兩個方面:edge pruning 和 node pruning.
首先是Dong Yu等人的工作,他們發現在實際的 ASR(Automatic Speech Recognition) 系統中,DNN 的 weight 分布如下:
這張圖說明了,在一個具有7個隱層的 DNN 中,基本上每層都有差不多50%的 weight 的絕對值是小於0.1的,那麼很容想到,這些 weight 對最後結果的影響相對來說是比較小的。Dong Yu等人的想法也非常簡單,首先訓練一個完整的模型,然後刪去那些權重小的 weight ,最後再把壓縮過的模型再次進行 fine-tune,結果如下:
最後發現,即使壓縮模型的參數量只有原始模型的22%,依舊能有不錯的性能。
同時Jian Xue等人還採用了 SVD 的想法來進行 edge pruning。在DNN中,實際上每層都有一個 weight matrix,而對 matrix 進行處理的一個常用方法就是SVD,即:
也就是說對於 weight matrix,我們對其進行奇異值分解,然後只保留k個最大的奇異值。這種方法得到了不錯的結果:
除了 edge pruning 之外,Tianxing He 等人從 node 的角度出發,對 DNN 進行壓縮,其基本想法是這樣的:對於 DNN 隱層中的每個節點,我們採用如下的公式來衡量其重要性:
其中表示層數,表示節點的下標。這個公式的意義非常簡單,即對於某個隱層節點,我們計算其 output weight 絕對值之和,作為衡量其重要性的指標。然後刪去那些相對來說不重要的節點,最後再進行 fine-tune。這個想法與 Dong Yu 非常類似,即如果一個節點 output weight 都很小的話,那麼其對最終結果的影響也是很小的。作者得到的結果也很不錯:
值得注意的是,這種 node pruning 的方法還可以與之前提到過的 edge pruning 的方法結合使用,可以進一步對模型進行壓縮,結果如下:
實際上,現在模型參數怎麼設置,以及多少參數量才能達到我們需要的 capacity,都是我們所不知道的,因此在一般實驗中大家都是把模型參數往大了設置,這勢必會造成模型的冗餘。用這些prunning 的方法則能很好的幫助我們壓縮模型的大小,減少模型的冗餘。參考文獻:
[1] Dong Yu, Frank Seide, Gang Li, and Li Deng, 「Exploiting
sparseness in deep neural networks for large vocabulary
speech recognition,」 in Proc. ICASSP, 2012.
[2] Jian Xue, Jinyu Li, and Yifan Gong, 「Restructuring of
deep neural network acoustic models with singular value
decomposition,」 in Proc. InterSpeech, 2013.
[3] Tianxing He, Yuchen Fan, Yanmin Qian, Tian Tan, Kai Yu, "Reshaping deep neural network for fast decoding by node-pruning," in Proc. ICASSP, 2014.
確實有不少文章在討論稀疏結構的優勢。今年Nips的一篇文章《Learning Structured Sparsity in Deep Neural Network》目的就是映入結構稀疏性到DNN裡面,實現更加緊湊的DNN。
方法我感覺就是一些傳統最優化的裡面罰優化的一些東西。
好問題,簡單回答,我從神經科學的角度來簡單回答下,大腦的「稀疏編碼」這個概念是來源於神經科學的,關於這個概念的得出和底層理論現在已經沒什麼搞計算機和機器學習的關注了,都是直接作為演算法廣泛應用了,語音/圖像尤其多。
在這個大家不是在忙著調參數就是在想辦法獲取更多數據增大模型來實現效果提升的浮躁年代,追根溯源的人少了可能是這個概念沒什麼結合性研究的原因之一。但更多的是,在目前階段這個概念對於機器學習的啟發不大了。因為能運用的部分基本都正在使用了,不能用的是因為受限於目前神經科學對於大腦稀疏編碼具體運行機制的了解。
回顧歷史,大腦稀疏編碼的發現是通過發現視覺細胞的感受野具有幾種性質——空域局部性、方向性和帶通性(在不同尺度下,對不同結構具有選擇性)得出的。這些性質有什麼好處呢?
簡單說,就是這種稀疏編碼方案存儲能力大,具有聯想記憶能力,並且計算簡便。因為有了這些細胞性質的支撐,實現了自然信號的結構的清晰表達,讓模式識別的效率大大提升。
關於壓縮參數的方法多種多樣,比如增加先驗知識,綜合用就好。至於涉及到演算法底層的顯著改進還需要等神經科學打開集群神經元的運行機制的能力上升才有更多機會。個人看來,當前模型壓縮存在幾種思路:
1.通過網路結構上的優化,涉及某種比較緊湊的網路module,例如fire module、(Inception裡面的module也有這個意思)。
2. 通過矩陣運算的角度進行優化,例如quantilized(量化) CNN、Kronecker內積的方式優化等,這種在模型的加速上效果比較好。
3. prune的方式:通過一步步找出作用不太的neuron然後刪掉,prune-&>retrain等方式。
4. distilling的方式:類似teacher-student的網路結構,通過大模型來train小模型等。
這個叫Model
Compression,還是很有用的。
1. 通過對模型壓縮,去除冗餘成份,有可能提高模型的表現結果。
2. 移動端等地方,機器性能和存儲空間受限,需要更小的模型。
這裡列幾篇論文,可以參考一下。
Compression and Machine Learning: A New Perspective on Feature Space Vectors
Deep Compression: Compressing Deep Neural Networks with Pruning,Trained Quantization and Huffman Coding
Do Deep Nets Really Need to be Deep?
Compression of Neural Machine Translation Models via Pruning
Sequence-Level Knowledge Distillation
最新的進展,有一個比較有意思的方法,是用比較大的老師網路,來訓練比較小的學生網路,從而達到模型壓縮的目的。
可以看下 &<&
提出relu的論文就有提到網路稀疏性,relu屏蔽了負方向的輸出從而為網路強制引入了稀疏性。
還有dropout系列,強制關閉一些計算單元的輸出, 也從某種程度上引入了稀疏性。
對抗樣本的存在有一個線性假設的存在,就是說在高維輸入下網路對輸入的對抗樣本更加脆弱,網路引入稀疏性可能會有一些效果。
總的來說,除了壓縮模型,稀疏性對提高模型表現能力也有一定作用。
結論從哪來的
微軟亞研今年的論文:《LightRNN: Memory and Computation-Efficient Recurrent Neural Networks》,論文的關鍵思想是使用二維的(2-Component(2C))共享的詞向量表示之前的一維詞向量(標準的RNN模型之所以大,是因為每個詞都有一個單獨的詞向量表達),簡單的示意圖如圖1所示。這樣我們就能夠通過共享的兩個詞向量來表示一個詞,這個方法可以達到模型壓縮的效果。
圖1:lightrnn 2-Component 簡單示意圖
論文的結果見圖2所示:不僅能壓縮模型(高達百倍),加快模型訓練,還能取得更好的PPL。
圖2. lightrnn 在不同數據集上的實驗效果
論文地址:https://arxiv.org/pdf/1610.09893v1.pdf
其實這裡面有兩個問題,一個是效果問題,一個是效率問題。
所謂模型「大」,也有兩方面,一個是模型複雜度,一個是計算開銷。
目前神經網路計算上的主要部分是線性運算,已經是非常高效了,在保證模型複雜度的前提下,計算效率難再提升。
像題主引用的文章,其實是利用先驗知識(在不傷害performance的前提下)減小了模型複雜度,從而減小了計算開銷。類似的方法並不少,比如fine tuning(利用底層特徵的先驗知識),比如max pooling(利用稀疏性)。
模型複雜度是低了,那麼多數據沒用上怎麼辦?堆參數啊!最後計算開銷沒減少,performance倒是上去了。你看人家過擬合了不是減參數,而是加regularization term,加雜訊。大力出奇蹟,可是DL的基本哲學哦。
大腦的激活非常稀疏那是針對大腦哪個級別的神經元數量的,現在的深度學習模型還遠達不到大腦那個規模,追求稀疏只是為了抵抗過擬合罷了,因為沒有一個隱藏曾神經元數量選取的指導意見,設多了容易過擬合,設少了不收斂,只好先多設下再去norm或dropout。不要迷信稀疏。
wang naiyan 15還是16有篇arxiv對比了relu/prelu等一眾激活函數,然後發現prelu等非稀疏的激活函數效果比relu好一點,所以認為稀疏性對cnn效果貢獻相對較小(雖然好的不多,大家現在還是喜歡用relu)。再加上sparse coding效果其實不是很好,我都開始懷疑sparse大法是否只是個intuitive的事情。。。
模型壓縮方面,@Saika 的回答已經提到12年就有了prune和svd等方法,不過這些方法還是主要針對fc層的,nin/inception/resnet都把fc去掉後,其實prune/svd方法的效果已經不是特別明顯了。
個人感覺許多模型壓縮方法的一個大問題就是只壓參數不壓計算量,例如sequeezenet看著很小,其實計算量跟alexnet差不多,跑起來還是一樣費時間。不過模型壓縮還是有用的,例如lstm這種以fc為主的網路很有用,或者app對模型的大小有要求(你總不希望一個app好幾百兆吧),或者做fpga等硬體加速的人希望模型盡量小,好把參數都放到片上(暫且不論featuremap等中間計算量夠不夠放。。)
最後,個人比較看好直接從模型結構下手的方案,直接砍計算量。例如最近group大法再次復興(回答中提到的structure sparse其實可以看成一種group),計算量直接幾倍幾倍砍(雖然gpu跑起來沒快太多),用上shortcut/nin/group,訓一個alexnet精度的網路,可能只要十幾分之一的計算量。不過直接砍結構的壞處是精度漲不上去,想做到resnet-101的精度就要付出必要的計算量代價。另外binarynet我很期待,但是它的效果及穩定性感覺目前還不能讓人滿意,最近半年binarynet的研究感覺少了很多,希望不是做不動了。。。說是模型就有可能沒有意義,大部分時候人連自己在想的究竟是什麼都無法說清楚
我看不懂 就是來看個熱鬧
相當多的信號都存在某個變換空間使其在其中是稀疏的(稱為可稀疏信號)
人(和貓)只對可稀疏信號感興趣?:):)
人(和貓)對於可稀疏信號的處理方式也是可稀疏的
model compression 目前考慮能夠在現有框架上運行且不需要額外工程優化的方法我覺得有以下幾種
1.channel-wise pruning.
2.knowledge distilling.
3.group convolution.
模型越來越大了?為什麼我看到的都是越來越小了...2012年alexnet橫空出世60M參數,現在的模型都比60M少啊。雖然變深了或變寬了,但參數總體上並沒有變大啊。
模型壓縮的論文也有很多,自己找找就好。搭建模型主要是兩大塊,第一部分是人工智慧功能模型,第二部分是人工智慧的信息反饋系統。
第一部分處理的內容主要是演算法結構,cpu處理速度,存儲容量,主要的這3部分。
第二部分處理的內容,要求的功能的信息反饋,說白了就是搭建一個人工智慧的生存環境,把信息反饋給第一部分。
像博弈類棋類,第二部分就是棋的規則,非常簡單,基本可以忽略掉,只是處理第一部分演算法,提高運輸速度和存儲量,第二部分實時提供給勝負優勢劣狀態給第一部分。像經濟類以及網上的大數據分析也是第二部分提供了現成的反饋數據,可以保障把正確的信息反饋給第一部分。像人臉識別,背後有大量數據五官的差別可以提供數據驗證,而貓臉識別這些背後的數據怎麼提供這要難度增大很多。
一般說的模型大基本都是涉及到第二部分模型,缺乏第二部分信息反饋,你要搭建一個世界一個環境給第一部分做信息反饋,一般資料都是在介紹第一部分的演算法結果的,在你搭建一個第二部分的結構的信息反饋系統時很多都遇到瓶頸,造成模型結構越來越大,搶奪運算速度,佔用大量的數據,這些都是你要實現的功能決定的,這部分簡化要從你實現人工智慧的功能開始簡化,把最主要的功能挑出來,把功能細化到找出最主要最基本的,如果需要幾個功能盡量分開單獨的建立幾個小系統獨立開第二部分。
現在很多人碰到第二部分問題進入人工智慧的瓶頸區,尋求突破基本上應該採取簡化功能,把功能一個個的獨立開解決,這樣才能大幅壓縮你第二部分要提供的大量數據反饋信息,你不用創造一個世界讓魚生存涉及各種情況,只需要創造一個水缸就夠了,把主要的功能挑出來其它的簡化掉。現在的基本都是第一部分的演算法結構資料,第二部分基本只能提供思路。
第二種思路,由於模型架構是建立在現在的單線程cpu結構上,速度瓶頸明顯,像有一萬的節點單一互相運算一次就需要一億次的運算,無法承受經過幾次運算的時間,需要把這種結構運算製造成硬體簡化節點的功能屬性變成同時運算,也可以改變節點關係和數量,這可不止提高几十上百數量級的運算速度,把模型的第一第二部分做成硬體是發展的必然趨勢,現在的cpu結構無法滿足了,新的結構是要滿足同時可以多節點的簡單數據運算和信息處理而且由軟體和硬體都可以改變這種結構,新的語言使人工智慧的軟體從業者更高效的開發,二就是人工智慧軟體開發者對於單功能的模型直接轉換成硬體結構實現人工智慧的高效運算能力。推薦閱讀:
※CNN(卷積神經網路)、RNN(循環神經網路)、DNN(深度神經網路)的內部網路結構有什麼區別?
※ICLR 2018 有什麼值得關注的亮點?
※如何看待谷歌公開 tensorflow 專用處理器 TPU?
※學好深度學習,python得達到什麼程度?
※人工智慧的冬天是否將要到來?