稀疏
本人嘗試過的稀疏算法有限,目前嘗試過閾值稀疏和admm稀疏方式,在此做一小結。
日後若有別的這方面嘗試,會繼續加。
- 網絡層數多,結構複雜,往往有更多的冗餘
- 不同場景下需求不一樣。小數據集可以帶來更高的稀疏度
- 本身參數就小,可能更容易有更高的稀疏度
- 針對不同網絡層,採用不同的稀疏度
結構化稀疏
某些通道全爲零,或者某些行(列)全爲零
非結構化稀疏
閾值稀疏
簡言之,就是將絕對值小的值置爲零。
這裏細分還可以分爲 按層(per-layer) 和 按通道(per-channel)
- 隨機初始化再稀疏有時候比pretrain後稀疏效果好,特別是稀疏度較高的情況下
admm稀疏
將稀疏問題,轉化爲了優化問題,使用admm方法解之,得到凸優化解法,具體看paper。
分三步:
第一步:得到pretrain模型
第二步admm_prune: 修改loss函數,加上正則化項,引入Z,U
更新W,b
更新Z
更新U
不斷更新Z, U ,直到W 趨向於 Z或者正則化項收斂(Z趨於W稀疏後的結果, W趨於Z)
第三步retrain : 對W小的值置零,且對應位置保持爲零,不再更新
- 調參:稀疏度,學習率,net_loss和admm_loss的比例