首頁>技術>

檢測神經網路結構中的數值缺陷

摘要

在架構級別檢測深度學習軟體中的 bug 可以提供在模型級別檢測 bug 所不能提供的額外好處。本文首次嘗試在架構級別進行檢測數值缺陷的靜態分析,提出了一種基於抽象解釋的神經結構檢測數值缺陷的靜態分析方法。他們的方法主要包括兩種抽象技術,即張量和數值。此外,為了在保證在足夠的檢測精度的前提下進行縮放,他們提出了兩種抽象技術:張量劃分和(元素)仿射關係分析來分別提取張量和數值。他們將張量劃分和仿射關係分析(以及區間分析)的組合方案稱為 DEBAR,並在兩個資料集上評估它:已知缺陷的神經結構(收集自現有研究)和真實的神經結構。評價結果表明,DEBAR 在精度上優於其他張量和數值抽象技術,且不損失可擴充套件性。DEBAR 能在 1.7-2.3 秒內成功地檢測出所有已知的數字錯誤,且沒有誤報。在真實的架構中,DEBAR 每個架構在 2.6-135.4 秒內報告 529 個警告,其中 299 個警告是真正的正面警告。

1 介紹

在軟體系統(被稱為 DL 軟體系統)中使用深度神經網路(DNNs)越來越流行,支援關鍵分類任務,如自動駕駛、面部識別和醫學診斷。構建這樣的系統需要訓練一個 DNN 模型,該模型基於一個由深度學習(DL)程式編寫的神經結構。為了簡化 DL 程式的開發,開發人員普遍採用各種 DL 框架,如 TensorFlow。一個神經結構,即一個具有一組引數的張量網路,由一個配置來完成一個學習任務的計算圖捕獲。該體系結構在給定的訓練資料的基礎上,對這些引數進行了具體的約束,並給出了一個 DL 模型,該模型是為一個分類任務而訓練的。

為了避免 DL 軟體系統中意外或不正確的行為,有必要檢測其神經結構中的缺陷。儘管各種測試或驗證 DL 模型的方法被提出來,但這些方法並沒有滿足兩類利益相關者的需求:(1)設計和釋出神經架構的架構供應商被其他使用者使用,(2)開發人員使用神經結構來訓練和部署基於開發人員自己的訓練資料集的模型。

在本文中,他們首次嘗試在架構級別進行 bug 檢測的靜態分析。具體地說,針對的是數值缺陷。數值缺陷通常是由複雜的元件互動引起的,很難在程式碼檢查期間發現。神經結構可能包含會導致嚴重後果的數值缺陷。神經結構中的數值缺陷表現為“NaN”和“INF”形式,或者是訓練或推理過程中的崩潰。例如,當一個非零的數除以 0,結果是 INF,表示它是一個無限的數;當 0 除以 0 時,結果是“NaN”,表示它不是一個數字。當在訓練過程中出現數值缺陷時,使用錯誤的神經結構訓練的模型就會失效。只有在進行推斷時才顯示的數值缺陷更具破壞性:當在實際的系統使用時遇到某些輸入時,它可能會使軟體系統崩潰或出現意外的系統行為。

之前的實證研究表明,透過測試來檢測數值缺陷在架構層面太具有挑戰性。為了在架構層次上檢測數值缺陷,在本文中,他們建議使用靜態分析,因為靜態分析能夠覆蓋由大量引數和神經架構可能的輸入所施加的巨大組合空間。本文提出了一種基於抽象解釋的在神經結構中檢測數值缺陷的靜態分析方法,該方法主要包括兩種抽象技術,即張量抽象技術和數值抽象技術。他們研究了三種張量抽象技術:陣列展開、陣列粉碎和張量分割,以及兩種數值抽象技術:區間抽象與仿射關係分析。在這些技術中,陣列擴充套件、陣列粉碎和區間抽象是將現有的用於命令式程式的抽象技術進行改進。此外,為了保持在足夠精度的同時實現可擴充套件性,他們提出了張量劃分來劃分張量,並根據他們的見解推斷分割槽上的數值資訊:一個張量的許多元素都受到相同的操作。特別是,在適當的抽象解釋下,將(具體的)張量元素表示為一個抽象元素,可以減少分析工作的數量級。受此啟發,張量分割首先將一個張量中的所有元素抽象為一個抽象元素,然後在具體元素經過不同操作時迭代地將每個抽象元素分割為更小的元素。每個抽象元素代表張量的一個劃分,與一個數值區間相關聯,該數值區間表示其具體元素的範圍。此外,為了精確起見,除了區間分析外,他們還進行仿射關係分析,以推斷表示分割槽的抽象元素之間的元素間仿射相等關係。

他們在兩個資料集上評估方法的可擴充套件性和準確性:一組由現有研究收集的帶有已知數值缺陷的 9 個結構和一組 48 個大型真實神經結構。在評價中,他們設計了比較實驗來研究三種張量抽象技術和兩種數值抽象技術。將張量劃分和仿射關係分析與區間抽象的組合方案的實現具體命名為 DEBAR,並將其開源。在可伸縮性方面,評估結果表明陣列擴充套件是不可擴充套件的,它在 33 個架構中超時,時間預算為 30 分鐘,而其他技術是可擴充套件的,可以在 3 分鐘內成功分析所有架構。在精度方面,DEBAR 可以達到 93.0%的精度,與陣列粉碎(87.1%的精度)和(單)區間提取(80.6%的精度)的效能幾乎相同。這些結果證明了張量劃分和仿射關係分析以及區間抽象的有效性。

綜上所述,本文的主要貢獻有三點:(1)研究了一種用於神經結構數值缺陷校正的靜態分析方法,使用三種抽象技術來抽象張量,兩種抽象技術來抽象數值。(2)為分析神經結構設計的兩種抽象技術:張量劃分(用於抽象張量)和仿射關係分析(用於推斷張量劃分之間的數值關係)。(3)在 48 個真實的神經網路架構中對 9 個 bug 架構的評估,展示了 DEBAR 的有效性。

2 概述

本節旨在透過清單 1 中的示例解釋提出的方法如何檢測數值缺陷。

清單 1.激勵示例的程式碼片段

2.1 區間抽象

區間抽象是一種常用的數值抽象解釋技術,其中每個標量變數 v 用區間表示,表示上界和下界,然後透過將標準操作對映到區間算術來計算這些區間。為了檢測數值缺陷,可以為各種操作預定義安全條件,例如,透過限制引數在回撥時不取零值。由於區域內的任何元素的區間都包含 0,因此檢測到一個潛在的數值缺陷。

2.2 陣列擴充套件

陣列擴充套件是將命令式程式中的陣列抽象為抽象域的一種基本技術:陣列中的元素一對一對映到抽象域,不執行抽象。利用區間抽象,可以直接將一個張量中的元素一一對映到抽象域中的範圍。可伸縮性是陣列擴充套件的主要問題。原因在於需要為張量中的每個元素記錄一個間隔,在激勵示例中,需要為中心記錄 200 個間隔,為偏移記錄 200 個間隔,這極大地影響了可擴充套件性。在之後的評估中,對於時間預算為 30 分鐘的大多數真實模型,他們使用陣列擴充套件超時進行分析。

2.3 陣列粉碎

陣列粉碎是一種可選的抽象技術,它使用一個抽象元素來表示一個張量中的所有元素。這樣,抽象元素的數量就大大減少了。在區間抽象中,使用一個範圍來覆蓋一個張量中的所有元素。

2.4 張量劃分與仿射關係分析

為了在保持足夠精度的情況下進行縮放,他們提出了提取張量和數值的兩種方法。第一個技術是張量劃分,它允許一個張量被分割成多個分割槽,其中每個分割槽被抽象為一個概要變數,我們為這些概要變數保持區間範圍。第二種方法是仿射關係分析,它保持分割槽之間的仿射關係,並利用這種關係實現更精確的分析。具體來說,為了支援張量分割槽,他們維護了每個分割槽的索引集。

3 方法

3.1 準備工作

抽象解釋的基礎。在抽象解釋中,具體性質在具體域 C 中用偏序 ⊆ 描述,抽象性質在抽象域 A 中用偏序 ⊆ 描述。為了推斷 DL 程式中變數的值範圍,需要計算每個變數可能的值集。

區間的抽象域。區間 AI 的抽象域被定義為

仿射等式的抽象域。在 DL 程式中保持變數之間的仿射關係。

3.2 神經結構的抽象

在神經結構使用張量分割和區間抽象的仿射等式關係抽象張量。

張量分割槽。他們引入了一種新的陣列抽象粒度,即張量分割,它是陣列分割的一種形式(也稱為陣列分割),但專門針對張量操作。

具有仿射等式關係的區間抽象。結合區間抽象和仿射等式關係抽象作為數值抽象,來推斷 DL 程式中標量變數和由張量分劃引入的輔助抽象摘要變數的取值範圍。可以使用關係數值抽象域(如多面體)來推斷(不等式)關係。然而,由於許多張量操作都引入了仿射等式關係,因此本文只考慮變數之間的仿射等式關係。此外,仿射相等關係的推斷成本較低,因此適合分析較大的 DNN。此外,由於 ReLU 運算元在 DNN 實現中廣泛使用,對於每個變數 a,引入 aReLU 來表示 ReLU(a)的結果變數。

神經結構的抽象域

定義 3.1.將具有仿射等式關係的張量劃分和區間抽象的抽象域定義為

3.3 抽象張量操作

接下來,將展示如何基於張量劃分和仿射關係分析(以及間分析)來構造抽象運算,以分析神經結構中三種常見的張量運算。為了便於演示,使用向量(一維張量)和矩陣(二維張量)來說明該方法,該方法可以推廣到多維張量。

加減法。張量加減,以 C=A±B 的形式,取兩個相同形狀的輸入張量 A, B 計算得到的張量 C。

例如,假設一維張量 A 和 B 都被分成兩個部分,和

對齊 A 和 B 的分割槽後,有

,

在 C= A+ B 後,對於 C,有:

連線。在 DNN 實現中,張量可以連線在某些維度 p。一個賦值語句表示,兩個輸入張量 A 和 B 是連線形成一個輸出張量 C 沿著維度 p。例如,圖 1 顯示了兩個二維張量 A 和 B 是連線形成一個張量 C 沿著維度 0(行)。處理連線操作,首先,需要對齊分割槽 A 和 B 的所有其他維度除了維度 p。對齊分割槽,在每個維度(維 p 除外),我們使用一組聯合分割槽 A 和 B 的位置作為一個新的分割槽位置,B 和 C 的維度也是 p,不改變分割槽 A 和 B 的位置,而分割槽的設定位置 C 包括(1)一個分割槽的位置尺寸 p;(2) A 在維 p 中的大小,記為 n(表示 A 與 B 的邊界);(3) B 的分割槽位置(p 維)加 n,設 NA、NB 分別表示對齊後 A、B 的分割槽數。

圖 1.連線張量(水平)

對於圖 1 所示的示例,假設

在這裡,暫時用 bi 表示 Bi 的彙總變數。對齊 A 和 B 的分割槽後,有

那麼,在 C = Concatenate(A, B, O)後,對於 C,有:

分割。張量可以沿著一定的維數分解成次張量。如圖 2。

圖 2.分割張量(垂直)

3.4 輸入範圍和引數範圍

在前面的章節中,他們將間隔初始化為相應型別的完整範圍,例如,對於浮點數,[FLOAT_MIN, FLOAT_MAX]。然而,在現實世界中,輸入可能只落在一個小範圍內。例如,影象的 RGB 值為[0,255]。特別地,在許多應用中,在預處理步驟之後,輸入被歸一化到一個小範圍內(例如[- 1,11])。同樣,神經網路的引數也可能落在一個小範圍內。例如,許多神經結構都使用權值初始化函式進行初始化,它反映了所需引數的上界和下界。假設這些輸入和引數的全範圍可能會導致不必要的誤報,因此他們的方法還允許使用者指定輸入範圍和引數範圍,並使用使用者提供的範圍來初始化間隔。

4 評估

評估目的是為評估 DEBAR (RQ1)的有效性以及研究 DEBAR (RQ2 和 RQ3)中的技術,回答以下研究問題:

RQ1: DEBAR 在檢測數值錯誤時是否有效?

RQ2:三種張量抽象技術的效果如何?

RQ3:這兩種數值抽象技術效果如何?

4.1 資料集

為評估收集了兩個資料集。第一個資料集是現有研究收集的 9 個有 bug 的架構。缺陷架構來自於兩項研究:8 個架構來自於之前關於 TensorFlow 缺陷的實證研究,1 個架構來自於評估 TensorFuzz 的研究。

由於第一個資料集中的大部分架構都比較小,所以收集了第二個資料集,它包含了 TensorFlow 研究模型庫中大量研究專案的 48 個架構。整個集合包含 66 個由研究人員和開發人員為不同領域的不同任務在 TensorFlow 中實施的專案,包括計算機視覺、自然語言處理、語音識別和對抗式機器學習。總的來說,第二個資料集包含了大量的神經結構。並且,在收集資料集時,並不知道該資料集中的架構是否包含數值缺陷。

4.2 輸入範圍和引數的設定範圍

在計算中,他們保守地提供了輸入範圍。透過權重初始化函式來確定引數範圍。如果引數初始化為零,將其範圍設定為預設值[-1,1]。並且為未初始化的引數提供了一些啟發:將方差設定為[0,FLOAT_MAX],將 count 和 step 設定為[1,FLOAT_MAX]。否則,將引數範圍設定為[FLOAT_MIN, FLOAT_MAX]。

他們在 DEBAR 開放原始碼中提供了每個架構的設定。

4.3 檢查不安全操作

透過調查之前的實證研究中的資料集,收集了不安全操作的列表,如表 1 所示。這些操作發生的頻率最高,而且很有可能造成數值誤差。在本文中,使用基於抽象解釋的靜態分析方法來檢驗這些操作是否會造成數值誤差。具體來說,經過分析,可以得到操作的引數 x 的區間範圍。然後檢查表 1 中列出的不安全約束。如果某個操作的不安全約束是可以滿足的,檢查器就會發出警報,表明該操作可能會導致數值錯誤,否則操作是安全的。他們方法的當前實現只檢查表 1 中列出的操作,但是可以很容易地擴充套件到其他操作。

表 1.需要檢查的操作

4.4 測量

該方法檢查每一個可能導致數值缺陷的操作,並決定是否應該報告警告。為了度量他們方法的有效性,他們將它作為一個分類器來分類每個操作是否有缺陷,並使用真/假、陽性/陰性的數量和準確性來評估它的有效性。

4.5 實現與硬體平臺

運用 Python 實現了 DEBAR 工具,所有的測量都是在執行 Ubuntu 16.04.6 LTS 的伺服器上執行的。

4.6 RQ1: DEBAR 的有效性

DEBAR 檢測在第一個資料集中的 9 個架構上所有已知的數字錯誤,零假陽性。它檢測來自第二個資料集的 299 個先前未知的操作,這些操作可能會導致現實體系結構中的數值錯誤。它正確地分類了 3073 個操作,只有 230 個誤報,準確率為 93.0%它是可擴充套件的,以處理現實世界的架構,所有這些分析在 3 分鐘內,平均時間是 12.1 秒。

4.7 RQ2: 張量抽象的研究

與粉碎陣列相比,DEBAR 甚至執行得更快,這表明開銷和分割槽幾乎可以忽略不計,主要由執行時間的隨機錯誤決定,DEBAR 成功地消除了 196 個誤檢,將(總)準確率從 87.1%提高到 93.0%。

與陣列擴充套件相比,DEBAR 的分析速度要快幾秒到幾百秒,而且在 30 分鐘的時間預算內,陣列擴充套件能夠分析的 24 個物件不會失去任何準確性。

這些觀察結果證實了張量劃分比其他兩種張量抽象方法更有效。

4.8 RQ3: 數值抽象的研究

DEBAR 的開銷可以忽略不計(平均 0.3%),並且消除了 411 個誤報,提高了準確率從 80.6%到 93.0%。這些觀察表明仿射關係分析是有效的,並在很大程度上有助於整體的有效性。

4.9 有效性的威脅

內部有效性的威脅主要在於方法的實現——是否正確地捕獲了我們的方法。為了減輕威脅,手動檢查了方法報告的所有警告,並分析了誤報的原因,在一定程度上驗證了實現。

外部效度的威脅在於被試的代表性。特別是,錯誤警告在所有警告中所佔的比例很大程度上取決於主題中數值缺陷的數量,可能無法一概而論。另一方面,準確性更具普遍性,因此選擇準確性作為他們評估的度量標準的一部分。

構建效度的威脅主要是已經定義了輸入範圍和引數範圍,實際使用者可能會與他們設定不同的範圍。為了減輕這種威脅,他們採取了一種非常保守的方法,這樣實際使用者可能只設置較小的範圍,而不是更大的範圍。為了進一步瞭解這些範圍的影響,他們進行了兩個額外的實驗來了解去除這些範圍的影響。從中發現,去除所有輸入範圍後,準確率下降 6.2 個百分點,去除所有引數範圍後,準確率下降 6.4 個百分點。結果表明,距離對 DEBAR 工具的精度有一定的影響。但是,效果相對較小,即使指定了不同的範圍,他們結論在一般情況下仍然成立。

5 結論

他們提出了一種靜態分析方法來檢測神經結構中的數值缺陷。在分割槽上特別設計了張量部分和仿射關係分析(與區間抽象一起使用),並將它們實現為 DEBAR。在兩個資料集上評估了他們方法在張量抽象和數值抽象技術的不同設定,結果表明(1)DEBAR 有效地檢測數值錯誤在現實神經結構(2)兩種專門設計的抽象技術對於提高檢測數值錯誤的可伸縮性和準確性至關重要。

12
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Spring cloud alibaba講解《一》:微服務介紹