谷歌發佈TensorFlow模型優化工具包剪枝API,繼續優化神經網絡效率_風聞
TechEdge科技边界-2019-05-16 08:54
一直以來,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%開始,直到它在修剪計劃結束時達到最終目標稀疏度為止。
目前權重修剪API,也就是剪枝API已經成為新的TensorFlow模型優化工具項目(https://github.com/tensorflow/model-optimization)的一部分,GitHub上源碼以及所有相關説明文檔都已經公開,開發者可以自由的取用。