閱讀 demucs 程式碼時,發現對頻率維度有這樣的操作:
add frequency embedding to allow for non equivariant convolutions over the frequency axis.
但什麼是非等變卷積?非等變性又是什麼?
等變性 equivariant、不變性 invariant
等變性:對於一個函式來說,若輸入資料發生變化(例如平移),則輸出資料也會以相同的方式變化。例如對於卷積,如果將輸入影像平移一段距離,輸出的特徵也會向相同方向平移。
不變性:對於一個函式,輸入資料發生的變化不會影響到輸出。例如對於 maxpool,輸入影像進行較小平移可能不會影響到輸出特徵的分佈。
所以,非等變卷積就是指:輸入資料的變化不會導致輸出資料也會相應直接變化 的卷積。
題外話:CNN 的空間不變性
例如對於一張貓貓圖,略微向左平移依然是一張貓貓圖。對於卷積分類模型(例如 Resnet),對影像進行平移幾乎不會影響分類結果。這主要歸功於卷積神經網路的池化層。
空間不變性是 CNN 歸納偏置(inductive bias)之一。CNN 的另一個歸納偏置是區域性相關性(locality)。
為什麼頻率維度需要進行非等變卷積?
聲音的頻率軸很特殊,不同頻率上的聲音往往有特別的意義(例如人聲總是佔據中高頻,貝斯總是佔據低頻)。為了讓網路就學習到與頻率位置相關的特徵,不被平移混淆,需要進行非等變的卷積。
demucs 的做法很直接,使用 nn.Embedding
對 512 個頻率位置進行編碼。這樣一來網路就能意識到不同頻率有著自己的意義了。
demucs 在這裡用到了兩個 trick:初始化 nn.Embedding 引數使其平滑遞增;新增 scale 讓 embedding 權重的訓練更加敏感。非常有趣。
參考來源
- https://github.com/adefossez/demucs
- “什麼叫CNN的空間不變性?”,https://www.zhihu.com/question/280577481
- Lunarnai,“CNN中的equivariant vs. invariant”,https://zhuanlan.zhihu.com/p/41682204