日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

deeplearning算法优化原理

發布時間:2023/11/28 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 deeplearning算法优化原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

deeplearning算法優化原理
目錄
? 量化原理介紹
? 剪裁原理介紹
? 蒸餾原理介紹
? 輕量級模型結構搜索原理介紹

  1. Quantization Aware Training量化介紹
    1.1 背景
    近年來,定點量化使用更少的比特數(如8-bit、3-bit、2-bit等)表示神經網絡的權重和激活已被驗證是有效的。定點量化的優點包括低內存帶寬、低功耗、低計算資源占用以及低模型存儲需求等。
    低精度定點數操作的硬件面積大小及能耗比高精度浮點數要少幾個數量級。 使用定點量化可帶來4倍的模型壓縮、4倍的內存帶寬提升,以及更高效的cache利用(很多硬件設備,內存訪問是主要能耗)。除此之外,計算速度也會更快(通常具有2x-3x的性能提升)。由表2可知,在很多場景下,定點量化操作對精度并不會造成損失。另外,定點量化對神經網絡于嵌入式設備上的推斷來說是極其重要的。
    目前,學術界主要將量化分為兩大類:Post Training Quantization和Quantization Aware Training。Post Training Quantization是指使用KL散度、滑動平均等方法確定量化參數且不需要重新訓練的定點量化方法。Quantization Aware Training是在訓練過程中對量化進行建模以確定量化參數,它與Post Training Quantization模式相比可以提供更高的預測精度。
    1.2 量化原理
    1.2.1 量化方式
    目前,存在著許多方法可以將浮點數量化成定點數。例如:
    r=min(max(x,a),b)r=min(max(x,a),b)
    s=fracb?an?1s=fracb?an?1
    q=leftlfloorfracr?asrightrceilq=leftlfloorfracr?asrightrceil
    式中,xxx是待量化的浮點值,[a,b][a, b][a,b]是量化范圍,aaa是待量化浮點數中的最小值, bbb 是待量化浮點數中的最大值。leftlfloorrightrceilleft lfloor right rceilleftlfloorrightrceil 表示將結果四舍五入到最近的整數。如果量化級別為kkk,則nnn2k2^k2k。例如,若kkk為8,則nnn為256。qqq是量化得到的整數。 PaddleSlim框架中選擇的量化方法為最大絕對值量化(max-abs),具體描述如下:
    M=max(abs(x))M=max(abs(x))
    q=leftlfloorfracxM?(n?1)rightrceilq=leftlfloorfracxM?(n?1)rightrceil
    式中,xxx是待被量化的浮點值,MMM是待量化浮點數中的絕對值最大值。leftlfloorrightrceilleft lfloor right rceilleftlfloorrightrceil表示將結果四舍五入到最近的整數。對于8bit量化,PaddleSlim采用int8_t,即n=27=128n=2^7=128n=27=128qqq是量化得到的整數。 無論是min-max量化還是max-abs量化,他們都可以表示為如下形式: q=scale?r+bq = scale * r + bq=scale?r+b 其中min-max和max-abs被稱為量化參數或者量化比例或者量化范圍。
    1.2.2 量化訓練
    1.2.2.1 前向傳播
    前向傳播過程采用模擬量化的方式,具體描述如下:
    基于模擬量化訓練的前向過程可被描述為以下四個部分: 1) 輸入和權重均被量化成8-bit整數。 2) 在8-bit整數上執行矩陣乘法或者卷積操作。 3) 反量化矩陣乘法或者卷積操作的輸出結果為32-bit浮點型數據。 4) 在32-bit浮點型數據上執行偏置加法操作。此處,偏置并未被量化。 對于通用矩陣乘法(GEMM),輸入XXX和權重WWW的量化操作可被表述為如下過程:
    Xq=leftlfloorfracXXm?(n?1)rightrceilXq=leftlfloorfracXXm?(n?1)rightrceil
    Wq=leftlfloorfracWWm?(n?1)rightrceilWq=leftlfloorfracWWm?(n?1)rightrceil
    執行通用矩陣乘法: KaTeX parse error: Can't use function '$' in math mode at position 24: …_q * Wq 對量化乘積結果$?Yq$進行反量化:對量化乘積結… 上述公式表明反量化操作可以被移動到GEMM之前,即先對XqXqXqWqWqWq執行反量化操作再做GEMM操作。因此,前向傳播的工作流亦可表示為如下方式:
    訓練過程中,PaddleSlim使用等價工作流。在設計中,量化Pass在IrGraph中插入量化op和反量化op。因為在連續的量化、反量化操作之后輸入仍然為32-bit浮點型數據。因此,PaddleSlim量化訓練框架所采用的量化方式被稱為模擬量化。
    1.2.2.2 反向傳播
    權重更新所需的梯度值可以由量化后的權重和量化后的激活求得。反向傳播過程中的所有輸入和輸出均為32-bit浮點型數據。注意,梯度更新操作需要在原始權重上進行,即計算出的梯度將被加到原始權重上而非量化后或反量化后的權重上。
    因此,量化Pass也會改變相應反向算子的某些輸入。
    1.2.2.3 確定量化比例系數
    存在著兩種策略可以計算求取量化比例系數,即動態策略和靜態策略。動態策略會在每次迭代過程中計算量化比例系數的值。靜態策略則對不同的輸入采用相同的量化比例系數。 對于權重而言,在訓練過程中采用動態策略。換句話說,在每次迭代過程中量化比例系數均會被重新計算得到直至訓練過程結束。 對于激活而言,可以選擇動態策略也可以選擇靜態策略。若選擇使用靜態策略,則量化比例系數會在訓練過程中被評估求得,且在推斷過程中被使用(不同的輸入均保持不變)。靜態策略中的量化比例系數可于訓練過程中通過如下三種方式進行評估:
  2. 在一個窗口中計算激活最大絕對值的平均值。
  3. 在一個窗口中計算激活最大絕對值的最大值。
  4. 在一個窗口中計算激活最大絕對值的滑動平均值,計算公式如下:
    Vt=(1?k)?V+k?Vt?1Vt=(1?k)?V+k?Vt?1
    式中,VVV 是當前batch的最大絕對值, VtVtVt是滑動平均值。kkk是一個因子,例如其值可取為0.9。
    1.2.4 訓練后量化
    訓練后量化是基于采樣數據,采用KL散度等方法計算量化比例因子的方法。相比量化訓練,訓練后量化不需要重新訓練,可以快速得到量化模型。
    訓練后量化的目標是求取量化比例因子,主要有兩種方法:非飽和量化方法 ( No Saturation) 和飽和量化方法 (Saturation)。非飽和量化方法計算FP32類型Tensor中絕對值的最大值abs_max,將其映射為127,則量化比例因子等于abs_max/127。飽和量化方法使用KL散度計算一個合適的閾值T (0<T<mab_max),將其映射為127,則量化比例因子等于T/127。一般而言,對于待量化op的權重Tensor,采用非飽和量化方法,對于待量化op的激活Tensor(包括輸入和輸出),采用飽和量化方法 。
    訓練后量化的實現步驟如下:
    ? 加載預訓練的FP32模型,配置DataLoader;
    ? 讀取樣本數據,執行模型的前向推理,保存待量化op激活Tensor的數值;
    ? 基于激活Tensor的采樣數據,使用飽和量化方法計算它的量化比例因子;
    ? 模型權重Tensor數據一直保持不變,使用非飽和方法計算它每個通道的絕對值最大值,作為每個通道的量化比例因子;
    ? 將FP32模型轉成INT8模型,進行保存。
  5. 卷積核剪裁原理
    該策略參考paper: Pruning Filters for Efficient ConvNets
    該策略通過減少卷積層中卷積核的數量,來減小模型大小和降低模型計算復雜度。
    2.1 剪裁卷積核
    剪裁注意事項1 剪裁一個conv layer的filter,需要修改后續conv layer的filter。剪掉Xi的一個filter,會導致Xi+1X{i+1}Xi+1少一個channel, Xi+1X{i+1}Xi+1對應的filter在input_channel緯度上也要減1。
    剪裁注意事項2
    剪裁完XiXiXi之后,根據注意事項1從Xi+1X{i+1}Xi+1的filter中刪除了一行,在計算Xi+1X_{i+1}Xi+1?的filters的l1_norm的時候,有兩種選擇: 算上被刪除的一行:independent pruning 減去被刪除的一行:greedy pruning
    剪裁注意事項3 在對ResNet等復雜網絡剪裁的時候,還要考慮到后當前卷積層的修改對上一層卷積層的影響。 在對residual block剪裁時,Xi+1X{i+1}Xi+1層如何剪裁取決于project shortcut的剪裁結果,因為要保證project shortcut的output和Xi+1X{i+1}Xi+1的output能被正確的concat.
    2.2 Uniform剪裁卷積網絡
    每層剪裁一樣比例的卷積核。 在剪裁一個卷積核之前,按l1_norm對filter從高到低排序,越靠后的filter越不重要,優先剪掉靠后的filter.
    2.3 基于敏感度剪裁卷積網絡
    根據每個卷積層敏感度的不同,剪掉不同比例的卷積核。
    兩個假設
    ? 在一個conv layer的parameter內部,按l1_norm對filter從高到低排序,越靠后的filter越不重要。
    ? 兩個layer剪裁相同的比例的filters,稱對模型精度影響更大的layer的敏感度相對高。
    剪裁filter的指導原則
    ? layer的剪裁比例與其敏感度成反比
    ? 優先剪裁layer內l1_norm相對低的filter
    敏感度的理解
    橫坐標是將filter剪裁掉的比例,豎坐標是精度的損失,每條彩色虛線表示的是網絡中的一個卷積層。 以不同的剪裁比例單獨剪裁一個卷積層,并觀察其在驗證數據集上的精度損失,并繪出虛線。虛線上升較慢的,對應的卷積層相對不敏感,優先剪不敏感的卷積層的filter.
    選擇最優的剪裁率組合
    折線擬合為曲線,每在豎坐標軸上選取一個精度損失值,就在橫坐標軸上對應著一組剪裁率。 用戶給定一個模型整體的剪裁率,通過移動實線來找到一組滿足條件的且合法的剪裁率。
    迭代剪裁
    考慮到多個卷積層間的相關性,一個卷積層的修改可能會影響其它卷積層的敏感度,采取了多次剪裁的策略,步驟如下:
    ? step1: 統計各卷積層的敏感度信息
    ? step2: 根據當前統計的敏感度信息,對每個卷積層剪掉少量filter, 并統計FLOPS,如果FLOPS已滿足要求,進入step4,否則進行step3。
    ? step3: 對網絡進行簡單的fine-tune,進入step1
    ? step4: fine-tune訓練至收斂
  6. 蒸餾
    一般情況下,模型參數量越多,結構越復雜,其性能越好,但參數也越允余,運算量和資源消耗也越大;模型蒸餾是將復雜網絡中的有用信息將復雜網絡中的有用信息提取出來提取出來,遷移到一個更小的網絡中去,在的工具包中,支持兩種蒸餾的方法。
    第一種是傳統的蒸餾方法(參考論文:Distilling the Knowledge in a Neural Network)
    使用復雜的網絡作為teacher模型去監督訓練一個參數量和運算量更少的student模型。teacher模型可以是一個或者多個提前訓練好的高性能模型。student模型的訓練有兩個目標:一個是原始的目標函數,為student模型輸出的類別概率和label的交叉熵,記為hard-target;另一個是student模型輸出的類別概率和teacher模型輸出的類別概率的交叉熵,記為soft target,這兩個loss加權后得到最終的訓練loss,共同監督studuent模型的訓練。 第二種是基于FSP的蒸餾方法(參考論文:A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning) 相比傳統的蒸餾方法直接用小模型去擬合大模型的輸出,該方法用小模型去擬合大模型不同層特征之間的轉換關系,其用一個FSP矩陣(特征的內積)來表示不同層特征之間的關系,大模型和小模型不同層之間分別獲得多個FSP矩陣,然后使用L2 loss讓小模型的對應層FSP矩陣和大模型對應層的FSP矩陣盡量一致,具體。這種方法的優勢,通俗的解釋是,比如將蒸餾類比成teacher(大模型)教student(小模型)解決一個問題,傳統的蒸餾是直接告訴小模型問題的答案,讓小模型學習,而學習FSP矩陣是讓小模型學習解決問題的中間過程和方法,因此其學到的信息更多。
    由于小模型和大模型之間通過L2 loss進行監督,必須保證兩個FSP矩陣的維度必須相同,而FSP矩陣的維度為M*N,其中M、N分別為輸入和輸出特征的channel數,因此大模型和小模型的FSP矩陣需要一一對應。
  7. 輕量級模型結構搜索
    深度學習模型在很多任務上都取得了不錯的效果,網絡結構的好壞對最終模型的效果有非常重要的影響。手工設計網絡需要非常豐富的經驗和眾多嘗試,并且眾多的超參數和網絡結構參數會產生爆炸性的組合,常規的random search幾乎不可行,因此最近幾年自動模型搜索技術(Neural Architecture Search)成為研究熱點。區別于傳統NAS,專注在搜索精度高并且速度快的模型結構,將該功能統稱為Light-NAS.
    4.1 搜索策略
    搜索策略定義了使用怎樣的算法可以快速、準確找到最優的網絡結構參數配置。常見的搜索方法包括:強化學習、貝葉斯優化、進化算法、基于梯度的算法。當前的實現以模擬退火算法為主。
    4.1.1 模擬退火
    模擬退火算法來源于固體退火原理,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨溫升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最后在常溫時達到基態,內能減為最小。
    鑒于物理中固體物質的退火過程與一般組合優化問題之間的相似性,將其用于網絡結構的搜索。
    使用模擬退火算法搜索模型的過程如下:
    Tk=T0?thetakTk=T0?thetak
    begin{equation} P(r_k) = begin{cases} e^{frac{(r_k-r)}{T_k}} & r_k < r1 & r_k>=r end{cases} end{equation}
    在第k次迭代,搜到的網絡為NkN_kNk?, 對NkN_kNk?訓練若干epoch后,在測試集上得到reward為rkr_krk?, 以概率P(rk)P(r_k)P(rk?)接受rkr_krk?,即執行r=rkr=r_kr=rk?rrr在搜索過程起始時被初始化為0. T0T_0T0?為初始化溫度,thetathetatheta為溫度衰減系數,TkT_kTk?為第k次迭代的溫度。
    在的NAS任務中,區別于RL每次重新生成一個完整的網絡,將網絡結構映射成一段編碼,第一次隨機初始化,然后每次隨機修改編碼中的一部分(對應于網絡結構的一部分)生成一個新的編碼,然后將這個編碼再映射回網絡結構,通過在訓練集上訓練一定的epochs后的精度以及網絡延時融合獲得reward,來指導退火算法的收斂。
    4.2 搜索空間
    搜索空間定義了優化問題的變量,變量規模決定了搜索算法的難度和搜索時間。因此為了加快搜索速度,定義一個合理的搜索空間至關重要。在Light-NAS中,為了加速搜索速度,將一個網絡劃分為多個block,先手動按鏈狀層級結構堆疊c,再 使用搜索算法自動搜索每個block內部的結構。
    因為要搜索出在移動端運行速度快的模型,參考了MobileNetV2中的Linear Bottlenecks和Inverted residuals結構,搜索每一個Inverted residuals中的具體參數,包括kernelsize、channel擴張倍數、重復次數、channels number。4.3 模型延時評估
    搜索過程支持 FLOPS 約束和模型延時約束。而基于 Android/iOS 移動端、開發板等硬件平臺,迭代搜索過程中不斷測試模型的延時不僅消耗時間而且非常不方便,因此開發了模型延時評估器來評估搜索得到模型的延時。通過延時評估器評估得到的延時與模型實際測試的延時波動偏差小于 10%。
    延時評估器分為配置硬件延時評估器和評估模型延時兩個階段,配置硬件延時評估器只需要執行一次,而評估模型延時則在搜索過程中不斷評估搜索得到的模型延時。
    ? 配置硬件延時評估器
  8. 獲取搜索空間中所有不重復的 op 及其參數
  9. 獲取每組 op 及其參數的延時
    ? 評估模型延時
  10. 獲取給定模型的所有 op 及其參數
  11. 根據給定模型的所有 op 及參數,利用延時評估器去估計模型的延時
  12. 參考文獻
  13. High-Performance Hardware for Machine Learning
  14. Quantizing deep convolutional networks for efficient inference: A whitepaper
  15. Pruning Filters for Efficient ConvNets
  16. Distilling the Knowledge in a Neural Network
  17. A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning

總結

以上是生活随笔為你收集整理的deeplearning算法优化原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。