熱門話題
#
Bonk 生態迷因幣展現強韌勢頭
#
有消息稱 Pump.fun 計劃 40 億估值發幣,引發市場猜測
#
Solana 新代幣發射平臺 Boop.Fun 風頭正勁
你正在特斯拉進行機器學習工程師的面試。
面試官:我們需要在車輛的邊緣硬體上部署一個神經網絡,但它不適合放入記憶體。你會怎麼處理?
你:我會使用知識蒸餾來訓練一個更小的模型。
面試結束。
這是你錯過的內容:
知識蒸餾需要幾週的計算,因為本質上你是在訓練一個新模型。
但解決方案已經在你訓練好的網絡中。
大多數神經元都是死重 - 消耗內存但幾乎不對預測做出貢獻。
讓我們看看如何識別它們!
以下是步驟:
步驟 1) 照常訓練神經網絡。
步驟 2) 將驗證集通過訓練好的網絡,對於隱藏層中的每個神經元,計算:
- 平均激活值
- 激活值的方差(如果激活值可以是負的)
檢查這個👇

步驟 3) 剪除激活均值和方差接近零的神經元,因為它們對模型輸出影響不大。
理想情況下,繪製在幾個剪枝閾值下的性能,以選擇適合您大小與準確性權衡的模型。
查看這個 👇

讓我們來看看代碼。
我們首先定義一個簡單的神經網絡並對其進行訓練。
由於我們稍後將計算神經元級別的激活以進行剪枝,因此在前向傳播中返回所有中間激活。
查看這個👇

接下來,我們定義兩個包含三個元素的列表:
- 一個將存儲激活的均值
- 另一個將存儲激活的標準差
我們將驗證集通過我們的模型,以計算每個隱藏層的這些統計數據。
查看這個 👇

在這個階段,讓我們創建一個神經元級統計的分佈圖,如上所生成的。
如下面所示,大多數神經元的平均激活值及其標準差都重度分佈在接近零的值附近。
接下來讓我們嘗試修剪它們。

對於修剪,我們遍歷一個閾值列表並:
- 創建一個新網絡並轉移通過閾值的權重。
- 評估新網絡並計算總參數。
- 將結果附加到列表中。
查看這個 👇

此表比較了修剪模型在幾個閾值下相對於原始模型的準確性和大小減少。
在 mean=0.1 和 std-dev=0.4 時:
- 模型的準確性下降了 0.08%。
- 模型的大小減少了 62%。
這是一個巨大的減少。
查看這個 👇

這是另一個有趣的結果。
在 mean=0.5 和 std-dev=1 的情況下:
- 模型的準確率下降了 0.5%。
- 模型的大小減少了 74%。
所以基本上,我們可以用四分之一的參數獲得幾乎相似的性能。
查看這個 👇

當然,準確性和大小之間存在權衡。隨著我們減小大小,準確性會下降(查看視頻)。
但在大多數情況下,準確性並不是我們優化的唯一指標。
相反,效率、內存等幾個操作指標才是關鍵因素。
390
熱門
排行
收藏
