人工智慧進階-TensorFlow核心之剪枝優化
https://www.toutiao.com/a6709573954236842509/
一直以來,AI模型的壓縮演算法都是門高深的學問,之前國內深鑑科技也憑藉著高效率的壓縮演算法,讓更多輕量的計算終端也能享受AI的好處。
目前主流AI所使用的人工神經網路顧名思義,就是個非常複雜,互相牽連的網路結構,由於影象、語言、文字等不同型別的樣本,會以不同的方式進行切割、儲存,形成最基礎的神經元,而機器學習或深度學習,就是要想辦法在這些看似不相干的神經元中找出關連,並形成綿密的網狀邏輯。
然而神經元越多,網路越龐大,需要用來儲存神經網路的空間需求也越高,但儲存空間在某些終端,尤其是移動智慧裝置中,是非常稀有的資源,因此如果要讓這些儲存空間有限的智慧終端也能形成AI處理能力,那麼神經網路模型就不能太大。
很有趣的是,其實我們大腦在成長過程中,也會經歷類似的過程,這個過程叫做synaptic pruning,也就是神經突觸修剪。而如果大腦沒有在發育過程中經過有效的修剪,最終可能會發展成自閉症。而自閉症大腦前額葉的神經連結遠比正常人多。
補充TensorFlow模型優化工具的不足
為了解決這個問題,包括深鑑在內的很多開發者,都提出過不同的壓縮方式與邏輯,而其中,剪枝法已經被證明是效率最高的其中一種。剪枝法其實就是把神經網路中,對整體邏輯影響層面小,甚至是不需要的分支修剪掉,讓模型的大小可以更有效的控制,然而剪枝法最重要的關鍵在於要剪在對的地方,才能在提升效率、降低儲存空間需求的同時,又要能兼顧模型邏輯的正確性。
Google在2018年曾發表了模型優化工具,通過使用訓練後量化的機制,能夠大幅降低機器學習模型的儲存空間需求,以及提升執行效率。
最初,該量化方法是採用降低引數的精度來達成,簡單來說,就是原本使用32bit浮點的模型,使用8bit整數來重新儲存和計算。當然,優化過程中還是需要經過比對和校準,藉以避免嚴重失真的狀況。
而才剛推出的剪枝API,則是在之前的模型優化工具中心增的優化工具。其功能就是前面所提到的,通過演算法,修剪掉在權重張量(Weight Tensor)中的非必要數值,讓神經網路中不必要的連線降到最低。
而剪枝API可以和前一版本的量化優化相容,換句話說,開發者可以在其模型中同時使用兩種優化方式,藉以取得更好的優化效率。
Google也在工具說明中示範瞭如何把MNIST的90%稀疏模型從12MB壓縮到2MB。
而在更多的模型壓縮實驗中,在不同稀疏準確率條件的設定下,剪枝API的壓縮效率表現從50%到90%,表現相當不錯。
工作原理
這個新的壓縮優化工具是基於Keras的權重修剪API,使用簡單但廣泛適用的演算法,並根據訓練期間的大小迭代刪除連線。
開發者指定最終目標稀疏度(例如90%),以及執行修剪的計劃(例如,在步驟2,000開始修剪,在步驟10,000停止,並且每100步執行一次),以及修剪的可選配置結構(例如,應用於某些形狀的單個值或值塊)。
隨著訓練的進行,修剪流程將被安排執行,消除那些具有最低幅度值(即最接近零的那些)的權重,直到達到指定的稀疏度目標。 每次修剪流程被安排執行時,便會重新計算當前稀疏度目標,從0%開始,直到它在修剪計劃結束時達到最終目標稀疏度為止。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2649524/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【譯】Effective TensorFlow Chapter9——使用Python ops進行核心設計和高階視覺化APTPython視覺化
- MySQL進階【八】—— MySQL優化之my.conf配置詳解MySql優化
- TensorFlow筆記(5)——優化手寫數字識別模型之優化器筆記優化模型
- JS進階系列 --- ajax請求優化JS優化
- 前端進階(1)Web前端效能優化前端Web優化
- Vue進階系列 --- 頁面架構優化Vue架構優化
- 「AutoML」如何使用強化學習進行模型剪枝?TOML強化學習模型
- 【TensorFlow篇】--Tensorflow框架視覺化之Tensorboard框架視覺化ORB
- JavaScript進階之函式柯里化JavaScript函式
- Apache 調優進階Apache
- 手擼網易雲進階課程-效能優化之NDK高效載入GIF優化
- MySQL 核心深度優化MySql優化
- TensorFlow神經網路優化策略神經網路優化
- 《MSSQL2008高階教程》之四“SQL優化”SQL優化
- 移動web效能優化從入門到進階Web優化
- APICloud開發者進階之路 | 編碼優化(一)APICloud優化
- APICloud開發者進階之路 | 編碼優化(二)APICloud優化
- 模型剪枝:剪枝粒度、剪枝標準、剪枝時機、剪枝頻率模型
- 如何在C語言中使用tensorflow(五)進階C語言
- 【JAVA進階架構師指南】之五:JVM效能調優Java架構JVM
- Hive高階優化Hive優化
- MySQL 高階優化MySql優化
- DFS剪枝最佳化策略
- 空間剪枝最佳化
- 人工智慧導論——智慧計算(進化演算法+群智慧優化)人工智慧演算法優化
- Django 進階之 celeryDjango
- 前端進階之困前端
- javascript 進階之 - PromiseJavaScriptPromise
- SAP PLM 進階 2 – 主要核心功能
- 「進階篇」Vue Router 核心原理解析Vue
- MySQL 優化三(優化規則)(高階篇)MySql優化
- 「譯」JS 引擎核心: 原型優化JS原型優化
- pytorch optim 優化器核心分析PyTorch優化
- 小遊戲進階課程:買量推廣優化策略遊戲優化
- 一看就懂之webpack高階配置與優化Web優化
- Mysql高階優化(一)MySql優化
- Mysql高階優化(二)MySql優化
- 圖解Leetcode組合總和系列——回溯(剪枝優化)+動態規劃圖解LeetCode優化動態規劃