目前cnn、rnn等神經網路已經有了長足的發展,但它由於結構太過複雜,導致體積、對算力的要求以及能耗都大幅提高。
在開始之前,先簡單了解下硬體的基礎知識:
(關於推斷的介紹,可見:
我的理解是,推斷可以理解為應用。在訓練好神經網路後,部署到裝置上後,裝置執行的過程,稱為推斷。)
一、剪枝(pruning)
去除掉權重較小的權重,然後重新訓練。如此迴圈直到準確率接近設定的紅線。實驗表明,這能夠有效地減少計算量。
有趣的是,nature的研究表明,人類也會經歷類似的過程:嬰兒的神經元數量大概是成年人的兩倍,要多出約500億個。
二、權值共享(weight sharing)
首先對原來的權重進行聚類,然後根據結果制定乙個聚類矩陣以及各個聚類的聚類中心向量,其值為各聚類權重和。這樣做的好處是,矩陣的單元資料就從32位變成了2位,節省了約16倍的儲存空間。
然後在得到梯度矩陣後,根據權重矩陣的分類結果對其進行分類並類內加和得到梯度向量,然後將其乘以學習率,並用權重矩陣減去它,得到新的權重中心向量。
如果我們將這兩種方法結合到一起,我們會發現,在不影響準確率的要求下,單個方法可以將模型壓縮到10%,而兩個方法同時用可以壓縮到3%。
使用哈夫曼編碼來用更短的數字表示更常出現的權重,用更長的數字來表示較少出現的權重。
在不影響準確率的要求下,這三種方法聯合使用可以降低10到49倍的模型複雜度。
先前的思想都是優化現有神經網路,那為什麼不在一開始就設計乙個精簡的神經網路呢?
基於這種思想,squeezenet誕生了:
如果對其進行之前提到的壓縮的話,效果會非常好:
三、量化(quantization)
五、二/三元權重神經網路(binary/ternary net)
在訓練時使用精確的權重,在推斷時將權重更換為±1和0。
六、winograd變換(winograd transformation)
它的思路很簡單:因為乘法是昂貴運算,加法是廉價運算,它的目標就是盡可能地使用加法來代替乘法運算。具體的做法可以看這篇文章:
*eie(efficient inference engine)
簡單來說,它的思想是跳過稀疏資料的權重和啟用值,以及使用近似的值來代替精確值。根據前面的研究,這對精確度幾乎沒有影響。
一、並行化(parallelization)
②模型並行:將模型切割,分給不同的執行緒或處理器處理,但是要注意切割部分。
③超引數並行:在不同的機器上調整學習效率和權值衰減,以達到粗略的並行。
二、fp16和fp32的混合精度訓練(mixed precision with fp16 and fp32)
三、模型精餾(model distillation)
使用一些不同的大型神經網路來教會小的神經網路學習,這有點像整合學習:
四、dsd :密-疏-密訓練(dense-sparse-dense training)
dsd簡單來說,就是在做了剪枝等簡化處理後,再次新增神經元間的連線並訓練。實驗表明這能提公升1%到4%的精確度。
一、gpu
普通的gpu的優勢就不提了,17年的時候英偉達發行了一款新的gpu稱為volta gpu,對深度學習來說,其尤為突出的特點是tensor core:
二、tpu(張量處理器,tensor processing unit)
tpu是google推出的專門用於加速tensorflow運算的處理器,其選擇了8bit的定點運算。
後來google又發行了雲tpu,不僅支援推斷,還支援訓練。
Chapter15 程式例項
購物籃程式 模擬虛拷貝 1 class basket29 double total recipt ostream os const 1016 17 private 18 static bool compare shared ptr lhs,shared ptr rhs 1922 multiset,d...
Chapter 15 程序間通訊
純屬抄書。cry size large ipc interprocess communication 管道 pipe 大多是半雙工,程序族裡應用 fifo命名管道 mkfifo 不同程序,是一種檔案型別。訊息佇列 queue 訊號量 semaphore 與123不同,是乙個計數器,用於多程序共享資料...
Chapter15 抽象工廠模式
抽象工廠模式 abstract factory 提供乙個建立一些列相關或相互依賴物件的介面,而無需指定它們具體的類。優點 1.易於變換產品系列,由於具體工廠類,在乙個應用中只需要初始化一次,這就使得改變乙個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產品配置。2.它讓具體的建立例項...