深度神經網絡中的敏感性分析
根據已經回答的問題(從一層前饋網絡中提取權重重要性),我正在尋找關於神經網絡中輸入相關性的推斷。
考慮到深度網絡,通過從感興趣的輸出節點向後遍歷層來重建輸入重要性可能很困難或很耗時,我想知道是否有一些理論框架可以對神經網絡進行敏感性分析,基本上稍微改變一下輸入並考慮感興趣的輸出節點如何變化。
是否有在神經網絡中執行某種敏感性分析的規範方法?
我真的很歡迎一些 Python 代碼這樣做,如果有的話
您建議的敏感性分析對應於檢查輸出相對於輸入的偏導數。說輸出向量是(誰)給的, 在哪裡是輸入向量和是網絡實現的功能。輸出 wrt 輸入的雅可比行列式是:
Jacobian 給出了每個輸出對每個輸入的局部變化率,所以它告訴我們如何將對無窮小的擾動做出反應。如果我們從輸入開始並添加一個無窮小的值到輸入,我們期望th 輸出增加.
如果有很大的幅度,這意味著輸出對輸入敏感在其附近. 因為通常是非線性的,這種靈敏度的概念取決於輸入;在某些地區它可能很大,而在其他地區則接近於零。如果您想要某種關於輸出對輸入的依賴程度的匯總度量,則必須匯總多個輸入值。例如,您可以取雅可比行列式的絕對值,對訓練集中的所有輸入進行平均(作為輸入的基本分佈的預期值的替代值)。當然,這種總結最終會丟棄信息,因此在某些情況下可能會產生誤導。
您可以使用鍊式法則推導出雅可比行列式的表達式,類似於您如何使用反向傳播的參數推導損失函數的梯度。您還可以使用自動微分計算它,使用 Theano、TensorFlow 等庫。沒有太多理由執行有限差分(即實際模擬擾動並測量輸出變化),除非您的網絡實現的功能是不可微分的(在這種情況下,雅可比不存在)。
幾個警告:如果輸入的單位/比例不同,靈敏度也會有不同的單位/比例,不能直接比較。標準化/縮放輸入是一種可能的解決方案。同樣重要的是要記住,這種類型的分析告訴我們模型本身,但不一定是生成數據的底層分佈。例如,如果兩個輸入相關,模型可能最終使用第一個而不是第二個。在這種情況下,我們會發現第一個輸入的靈敏度較高,而第二個輸入的靈敏度較低,但不應斷定第一個輸入本質上對於預測輸出更重要。
這篇文章應該很有趣。