微型神經網路,也稱輕量級神經網路,是指需要參數數量較少和計算代價較小的神經網路模型。由於微型神經網路計算開銷小,微型神經網路模型可以部署在計算資源有限的設備上,如智慧型手機、平板電腦或其他嵌入式設備。構建微型神經網路一般從網路結構最佳化和網路裁剪兩個角度出發。
基本介紹
- 中文名:微型神經網路
- 外文名:Mini neural network
- 學科:人工智慧
- 特徵:參數數量較少和計算代價較小
- 領域:深度學習
- 方法:網路結構最佳化和網路裁剪
定義,必要性與可能性,方法,近似類方法,基於張量分解,量化方法,網路裁剪,深度學習特點,
定義
微型神經網路簡單來說是對原來神經網路結構進行最佳化和網路裁剪。從深度學習的理論發展來看,尋求特定任務下最小的深度學習系統有利於幫助研究人員進一步理解深度學習的作用機理,如神經元的物理含義,神經元的學習能力極限等方面。構建和生成微型神經網路模型有利於將更多深度學習算法套用到移動端,降低對設備性能的要求。近年來,有關學者提出了不是微型神經網路架構,如MobileNets,ShuffleNet使用深度可分離的卷積來構建輕量級的深層神經網路。構建微型神經網路的方法可以分為近似,量化和裁剪、基於張量分解等方法。
必要性與可能性
深度學習是近年來機器學習中最具有代表性的技術,在圖片識別,自然語言處理,語音識別,機器人技術等許多模式識別的關鍵領域均取得了突破性的成就。深度卷積網路將圖像識別的準確率提高了一個台階,並在個別領域,如人臉識別中取得了超過人類的識別水平。深度學習的本質是大數據支持下的多層人工神經網路系統,一個深度學習模型通常包含數以百萬計甚至千萬計的參數和十幾層甚至幾十層的網路。例如,AlexNet網路的參數數目約為6000萬個,而VGG網路擁有1.4億參數。巨量的參數帶來性能提升的同時,也帶來網路體量巨大、運算緩慢等缺點,不利於深度學習模型向運算資源有限的設備和套用中嵌入。另一方面,深度神經網路又常常是過參數化的。尤其是對於特定的任務而言,有相當部分的神經元和連線權重對模型的性能沒有實質性的影響,或這些影響可以藉由再訓練方法由其他神經元填補。構建微型神經網路不但具有必要性,也具有可能性。首先,儘管神經網路通常是深度越深,效果越好,但針對具體的套用場景和需求,適當深度和參數數目的網路即能夠滿足。盲目加深網路複雜度所帶來的微弱性能提升在許多套用場合意義並不大。其次,神經網路常常存在過參數化的問題,網路神經元的功能具有較大的重複性,即使在網路性能敏感的場景,大部分網路也可以被“安全地”壓縮而不影響其性能。
方法
近似類方法
近似類方法主要利用矩陣或張量分解的思想,通過少量參數重構原始網路參數矩陣或參數張量,以達到減少網路存儲開銷的目的。通常,在網路運行時,這些參數將會被適當重建,網路的運行時開銷並沒有得到有效減少。
基於張量分解
張量是向量和矩陣的自然推廣,向量可稱為一階張量,矩陣可稱為二階張量,將矩陣堆疊形成“立方體”,這種數據結構則稱為三階張量。一張灰度圖像在計算機中由矩陣表示,是二階張量。一張RGB三通道的彩色圖像在計算機中則保存為三階張量。當然,三階張量也可以堆疊形成更高階的張量。張量分解是張量分析中的重要組成部分,其基本原理是利用張量數據中的結構信息,將張量分解為形式更簡單、存儲規模更小的若干張量的組合。典型的張量分解方法有CP分解,Tucker分解等。在神經網路中,參數通常以“張量”的形式集中保存。對全連線層而言,全連線通過權重矩陣將輸入向量變換到輸出向量,其參數為二階張量。對卷積層而言,設輸入數據為具有𝐶通道的三階張量。則卷積層中的每一個卷積核也都是具有𝐶通道的三階卷積核,故一層卷積層所包含的一組卷積核構成了形如𝐵 × 𝑀 ×𝑁×𝐶的四階張量。基於張量分解的網路壓縮的基本思想,就是利用張量分解的技術將網路的參數重新表達為小張量的組合。重新表達後的張量組一般能夠在一定的精度下近似與原張量相同,而所占用的空間又得到大大降低,從而獲得網路壓縮的效果。有關學者分別是利用張量CP分解和Tucker分解的網路壓縮工作。隨著張量分解的研究,該類網路壓縮方法也得到發展。利用較新的Tensor Train分解方法,經過Tensor Train分解得到的張量組可以通過反向傳播算法獲得更新,實際上形成了一種占用空間更小的網路層。
量化方法
量化方法的主要思想是將網路參數的可能值從實數域映射到有限數集,或將網路參數用更少的比特數來表示。量化的方法將原本具有無限種可能的參數約束到少數幾種參數中,再對這些參數進行重用,就可以減少網路存儲開銷。通過改變參數的數據類型,如將原本的64位浮點型量化為整形甚至布爾型,網路的運行時開銷也將得到大幅度減少。
網路裁剪
網路裁剪的主要特點是會直接改變網路的結構。網路裁剪可以按粒度分為層級裁剪,神經元級裁剪和神經連線級裁剪。層級裁剪的裁減對象是網路層,裁剪的結果是獲得更淺的網路。通常,神經網路想要達到良好的模式識別效果,必須具有較深的深度,但對具體問題而言,深度太深也會帶來過擬合風險增高,訓練難度加大等問題,且過深的網路對提高具體場景下模式識別的性能幫助有限,因此有時會對網路進行層級的裁剪。神經元級的裁剪對象是一層中的神經元或濾波器,裁剪的結果是獲得更“瘦”的神經網路,瘦長的神經網路不但能夠減少網路存儲開銷,還能提高網路運算速度。經過層級或神經元級裁剪的神經網路,仍然保持了原本神經網路的正規性,即網路的存儲和運算規則仍然保持不變,只是規模變小。神經連線級的裁剪對象是一條具體的網路連線,或一個具體的參數,裁剪的結果通常是獲得更為稀疏的網路。神經連線級的裁剪往往更加精細可控,對網路性能的影響最小。但神經連線級的裁剪會導致網路失去正規性,經過裁剪的網路權值張量變的稀疏,因此在存儲和運算時需要採用稀疏張量的存儲和運算規則,不利於並行。
深度學習特點
深度學習是機器學習的一項分支,是一類由大數據推動,以多層人工神經網路為表現形式,以特徵提取為主要目的的算法,既可以用於監督學習,也可以用於非監督學習。我們將深度學習的特性總結如下:
一是計算密集。深度學習的一般形式是多層的人工神經網路,一個深度學習模型往往含有數以百萬計甚至千萬計的參數,龐大的模型必須有大量的訓練樣本作為支撐才能抑制過擬合,提高泛化能力。儘管有一些工作試圖降低深度學習所需要的樣本數,但總體而言,沒有大量的數據支撐,深度學習就無從談起。網路規模和數據量兩方面共同決定深度學習具有計算密集的特性。
二是特徵的自動提取和分層處理,深度神經網路主要處理的問題是從數據中自動提取特徵。這種特徵的提取是通過逐層組合抽象完成的,具有分層特性。網路的底層(近輸入端)抽取的是局部的,低級的特徵,這些特徵經過逐層組合和非線性變換,在高層(遠輸入端)形成全局和抽象的特徵。特徵的語義性從低到高得到逐漸加強。
三是工程性強,可解釋性弱。儘管在深度學習的理論方面已經有許多有意義的工作,但深度學習的原理尚不明確,在大多數情況下深度學習仍然像是一個“黑盒子”,缺乏嚴格的理論證明。另一方面,深度學習是一門工程性非常強的學科,神經網路的編程、調參、最佳化都具有很強的實踐性,十分依靠工程師的個人經驗。