关于深度学习移动化的思考
一、???深度學習現狀的瓶頸:
1、 計算量巨大,消耗大量的計算資源
2、 模型內存占用大,消耗大量內存資源
3、 模型存儲空間大,消耗大量存儲空間
4、 只能在云端利用其大量的資源進行模型訓練
5、 需要移動設備連接云端,不連接即無法使用其效果。
6、 移動端資源(CPU、GPU、內存)和云端的差距過大,無法進行類似云端的大規模分布式訓練。
?
總結:大模型耗費大量的資源(計算、內存、存儲、電)
?
?
?
二、???移動端優勢:
1、 便攜,輕量
2、 實時性強
3、 無需連接云,本地使用。
4、 移動端產品眾多,貼近生活。
?
總結:移動+輕量化 = 未來AI
?
?
向移動端發展的手段。
?
對大而復雜的模型進行壓縮。
?
三、???模型壓縮:
1、?Prunes the network:修枝剪葉,只保留一些重要的連接;
用于稀疏連接的重量級修剪,剪去權值低的,也就是去掉大部分幾乎不可能發生的。
迭代地修剪和重新訓練
?
用L1正則化的通道級修剪
?
案例:
network pruning?技術已經被廣泛應用到CNN模型的壓縮中,通過剪枝達到了state-of-the-art 的結果,而且沒有減少模型的準確率;
左邊的pruning階段可以看出,其過程是:
1)、正常的訓練一個網絡;
2)、把一些權值很小的連接進行剪枝:通過一個閾值來剪枝;
3)、retrain?這個剪完枝的稀疏連接的網絡;
?
???????進一步壓縮,對于weight的index,不再存儲絕對位置的index,而是存儲跟上一個有效weight的相對位置,這樣index的字節數就可以被壓縮了。
???????卷積層用 8bits?來保存這個相對位置的index,在全連接層中用 5bits 來保存;
???????用3bits保存相對位置為例子,當相對位置超過8(3bits)的時候,需要在相對位置為8的地方填充一個0,防止溢出;
??????
?
?
??????
?
2、?Quantize the weights:訓練量化,通過權值量化來共享一些weights;
?
假設有一個層,它有4個輸入神經元,4個輸出神經元,那么它的權值就是4*4的矩陣; 圖中左上是weight矩陣,左下是gradient矩陣。可以看到,圖中作者把 weight矩陣 聚類成了4個cluster(由4種顏色表示)。屬于同一類的weight共享同一個權值大小(看中間的白色矩形部分,每種顏色權值對應一個clusterindex);由于同一cluster的weight共享一個權值大小,所以我們只需要存儲權值的index 例子中是4個cluster,所以原來每個weight需要32bits,現在只需要2bits,非常簡單的壓縮了16倍。而在 權值更新 的時候,所有的gradients按照weight矩陣的顏色來分組,同一組的gradient做一個相加的操作,得到是sum乘上learning rate再減去共享的centroids,得到一個fine-tuned centroids,這個過程看上圖,畫的非常清晰了。
對于AlexNet,卷積層quantization到8bits(256個共享權值),而全連接層quantization到5bits(32個共享權值),并且這樣壓縮之后的網絡沒有降低準確率
?
用非常簡單的 K-means,對每一層都做一個weight的聚類,屬于同一個 cluster 的就共享同一個權值大小。 注意的一點:跨層的weight不進行共享權值;
?
?
?
3、?Huffman coding:通過霍夫曼編碼進一步壓縮;
Huffman Coding?是一種非常常用的無損編碼技術,它按照符號出現的概率來進行變長編碼。
上圖的權重以及權值索引分布來自于AlexNet的最后一個全連接層。
可以看出,其分布是非均勻的、雙峰形狀,因此我們可以利用Huffman編碼來對其進行處理,最終可以進一步使的網絡的存儲減少20%~30%。
?
?
?
四、???壓縮總結:
1、Pruning:把連接數減少到原來的 1/13~1/9;?
2、?Quantization:每一個連接從原來的 32bits?減少到 5bits;
3、Huffman coding:網絡的存儲減少20%~30%
?
?
五、???設計較小的CNN架構設計
1、 SqueezeNet
SqueezeNet設計目標不是為了得到最佳的CNN識別精度,而是希望簡化網絡復雜度,同時達到public網絡的識別精度。
三種原則:
替換3x3的卷積kernel為1x1的卷積kernel
減少輸入3x3卷積的inputfeature map數量?
減少pooling?
壓縮器:具有50x較少參數的AlexNet-level精度和< 0.5MB模型大小
?
?
?
2、 MobileNet
高效的卷積神經網絡用于移動視覺應用
速度、模型大小上做了優化,并保持精度基本不變。
采用了depthwise separable convolutions(L. Sifre. Rigid-motionscattering for image classification, 2014. 1, 3) 的思想,在用3x3(或更大尺寸)卷積的時候并不對通道進行融合,而是采用depthwise(或叫channelwise)和1x1 pointwise的方法進行分解卷積。
mobilenet引入WidthMultiplier和Resolution Multiplier分別對網絡進行瘦身和降低分辨率。
?
?
3、 ShuffleNet
一種非常高效的移動設備卷積神經網絡
??????
圖a是一般的group convolution的實現效果。其造成的問題是,輸出通道只和輸入的某些通道有關,導致全局信息流通不暢,網絡表達能力不足。
圖b就是本文的方法啦。 即通過均勻排列,把groupconvolution后的feature map按通道進行均勻混合, 這樣就可以更好的獲取全局信息了。
圖c是操作后的等價效果圖。
?
ShuffleNet同樣采用了類似于ResNet一樣的模塊化設計
圖a是之前的一種ResNet網絡結構模塊,其參考了“MobileNet”的實現。其中的DWConv指的是 depthwise convolution。
圖b是本文給出的一種模塊(輸出前后feature的size不變),相比于圖a,只是將第一個1x1卷積改成了group convolution,同時后續增加通道 shuffle。
圖c是本文給出的另一種模塊(輸出前后feature的size變小,但通道數增加),主要是為了應對下采樣問題。 注意,最后的合并操作由原來的 “Add” 變成了 “Concat”, 目的是為了增加通道數。
?
原始版本的ShuffleNet的結構如下:
?
不同配置下的網絡性能對比圖:
?
ShuffleNet?同之前一些網絡的對比效果:
相比Xception和Mobilenet,ShuffleNet都獲得了性能上的提升,至于速度帶來的提升則不是很明顯。
ShufflleNet的主要改進就只是增強了全局信息的流通。
?
?
六、???深度學習 框架:
Caffe Caffe2 MXNet Tensorflow Torch
NCNN、MDL
Tensorflow Lite
CoreML
?????? 從訓練到推理
??????
優化卷積計算:
?????? 利用im2col-based進行選擇性的卷積
?????? 用于深度神經網絡的內存高效卷積
??????
?
?????? 浮點運算定點化:
??????
?
?
七、???Android端深度學習框架
NCNN vs MDL:
?
| FrameWork | 單線程 | 四線程 | 內存 |
| NCNN | 370ms | 200ms | 25M |
| MDL | 360ms | 190ms | 30M |
?
?????? TensorflowLite:
?
| Quantize MobileNet | Float Mobilenet |
| 85ms | 400ms |
?
?
?
八、???iOS 上的深度學習
Core ML:
擴展性弱,僅支持IOS11及以上
??????
?????? MPSCNN:
?????? 充分利用GPU資源,不用搶占CPU
利用Metal開發新的層很方便
?
MPSCNN:
MPSImage
CNN圖像的布局,寬度為3,高度為2。
?
在iPhone6s上MPSCNN VS NCNN :
?
| FrameWork | Time |
| NCNN | 110ms |
| MPSCNN | 45ms |
?
?
九、???移動深度學習與云上的深度學習結合
1、 大規模的訓練需要放在云上,壓縮優化后轉移到移動端。
2、 部分小模型的計算即可在移動端進行計算,無需上云。
3、 實時性強的需要放在移動端
4、 網絡要求嚴格的模型,放在移動端,防止斷網造成的不必要損失。
?
?
十、???邊緣計算推進移動深度學習
1、 推進邊緣計算的設備主要是移動CPU,以高通、聯發科、inter Y/M系列移動CPU為代表。
2、 移動CPU更新換代快,每年一次大的更新。
3、 移動CPU處理器性能直追PC的CPU
4、 移動CPU有低功耗的特點,節能。
5、 現移動GPU已經逐漸走向成熟,從Apple的A11性能可以看出。
這是2017年旗艦移動CPU對比,驍龍VS Apple A11
?
十一、????參考資料:
http://blog.csdn.net/shuzfan/article/details/77141425
https://arxiv.org/pdf/1704.04861.pdf
https://arxiv.org/pdf/1510.00149.pdf
參考來自網絡博客和以上論文。
總結
以上是生活随笔為你收集整理的关于深度学习移动化的思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dashboard的yaml配置文件
- 下一篇: PC端的阿里云盘搜索工具