習(xí)模型審計(jì)實(shí)戰(zhàn))
在實(shí)際深度學(xué)習(xí)系統(tǒng)中模型審計(jì)往往比模型訓(xùn)練更難。訓(xùn)練時(shí)只需要關(guān)注損失曲線和評(píng)估指標(biāo)而審計(jì)時(shí)需要回答一個(gè)更尖銳的問(wèn)題模型做出這個(gè)預(yù)測(cè)到底依賴了哪些信息如果模型把背景、水印、陰影或某個(gè)與任務(wù)無(wú)關(guān)的特征當(dāng)成主要依據(jù)準(zhǔn)確率再高也不具備上線條件。ICON Decomposition 這類概念級(jí)解釋方法正是為了對(duì)深層網(wǎng)絡(luò)的內(nèi)部表示做“多變量概念級(jí)分解”把黑盒表征拆成一組可理解的語(yǔ)義概念再基于這些概念完成模型審計(jì)。本文會(huì)圍繞這個(gè)概念展開(kāi)先講清它解決的問(wèn)題再用一個(gè)最小可復(fù)現(xiàn)的 Python 示例展示實(shí)現(xiàn)思路最后說(shuō)明如何在真實(shí)項(xiàng)目里落地。1. 理解 ICON Decomposition從模型審計(jì)視角看深度表示1.1 深度表示為什么不透明深度神經(jīng)網(wǎng)絡(luò)內(nèi)部不是一個(gè)清晰的規(guī)則庫(kù)。以圖像分類為例網(wǎng)絡(luò)在前幾層可能學(xué)習(xí)到邊緣、顏色、紋理等低級(jí)特征在中間層會(huì)組合出更復(fù)雜的模式比如“毛皮”“輪子”“圓形物體”最后映射到類別概率。但問(wèn)題是這些模式不是以人類可讀的方式存儲(chǔ)的而是分散在成千上萬(wàn)個(gè)中間特征圖或向量維度里。一個(gè)常見(jiàn)誤解是神經(jīng)網(wǎng)絡(luò)最后的全連接層權(quán)重可以解釋模型決策。實(shí)際上最后一層只是把倒數(shù)第二層的向量映射到類別真正決定“這個(gè)概念是否出現(xiàn)”的信息早就在中間層被編碼了。如果只審計(jì)輸出層的權(quán)重?zé)o法發(fā)現(xiàn)模型是否偷偷使用了某些無(wú)關(guān)但容易區(qū)分的信號(hào)例如照片背景里常見(jiàn)的水印、邊框、拍攝設(shè)備噪聲。模型審計(jì)需要深入到這些表示內(nèi)部。ICON Decomposition 的出發(fā)點(diǎn)就在這里它不直接看單個(gè)神經(jīng)元而是把表示空間看成多個(gè)“概念方向”的組合嘗試用一個(gè)分解模型把這些方向分離出來(lái)。1.2 概念級(jí)解釋與顯著性圖的區(qū)別早期可解釋性大量使用顯著性圖例如 Grad-CAM、SmoothGrad它們回答的是“圖像哪個(gè)區(qū)域?qū)︻A(yù)測(cè)最重要”。這對(duì)定位問(wèn)題很有用但有一個(gè)明顯短板它只告訴你在哪里不告訴你那個(gè)區(qū)域觸發(fā)了什么概念。一張貓的圖片中模型可能關(guān)注了貓的臉也可能關(guān)注了背景里的地毯。同樣是高激活區(qū)域這兩者代表的決策邏輯完全不同。概念級(jí)解釋進(jìn)一步回答“為什么這個(gè)區(qū)域重要”。它會(huì)把內(nèi)部表示解釋為若干個(gè)概念例如“貓耳朵”“毛皮”“地毯紋理”“照片水印”然后說(shuō)明某張圖片的預(yù)測(cè)主要被哪些概念驅(qū)動(dòng)。這樣審計(jì)者就能判斷模型是否依賴了不該依賴的概念。ICON Decomposition 強(qiáng)調(diào)“多變量”概念指的是一個(gè)概念不一定對(duì)應(yīng)某個(gè)單獨(dú)的神經(jīng)元而可能是多個(gè)維度的線性組合或非線性組合。這在真實(shí)網(wǎng)絡(luò)里更常見(jiàn)一個(gè)語(yǔ)義概念通常被分布式地編碼在多個(gè)特征維度上用單神經(jīng)元解釋會(huì)錯(cuò)失大量信息。1.3 多變量概念分解的核心思路可以把深度表示看成一張表格。假設(shè)從中間層抽取出 (N) 個(gè)樣本的表示每個(gè)表示有 (D) 個(gè)維度組成矩陣 (R \in \mathbb{R}^{N \times D})。如果存在 (K) 個(gè)概念我們希望找到概念定義矩陣 (H \in \mathbb{R}^{K \times D})每一行是一個(gè)概念表示這個(gè)概念在原始特征維度上的權(quán)重樣本概念激活矩陣 (W \in \mathbb{R}^{N \times K})每一行表示這個(gè)樣本以多大強(qiáng)度包含每個(gè)概念。這樣就有近似關(guān)系[ R \approx W H ]這就是常見(jiàn)的矩陣分解形式。ICON Decomposition 的核心不是簡(jiǎn)單的逼近而是要求分解出的概念具有語(yǔ)義可解釋性并且能支撐后續(xù)審計(jì)。為了實(shí)現(xiàn)這一點(diǎn)通常還要對(duì) (H) 或 (W) 加入稀疏性、非負(fù)性、正交性等約束讓每個(gè)概念盡量由少量特征構(gòu)成同時(shí)避免多個(gè)概念重復(fù)表達(dá)同樣的信息。1.4 模型審計(jì)的應(yīng)用場(chǎng)景概念級(jí)分解最常用的四個(gè)審計(jì)場(chǎng)景如下審計(jì)目標(biāo)典型問(wèn)題概念級(jí)分解如何幫助偏見(jiàn)識(shí)別模型是否依賴性別、膚色、年齡等敏感屬性分解出與任務(wù)無(wú)關(guān)的敏感概念并統(tǒng)計(jì)其對(duì)預(yù)測(cè)的影響捷徑學(xué)習(xí)模型是否依賴水印、邊框、背景色等低成本特征發(fā)現(xiàn)訓(xùn)練數(shù)據(jù)中高頻出現(xiàn)的干擾概念數(shù)據(jù)泄漏測(cè)試集和訓(xùn)練集是否存在隱藏標(biāo)識(shí)在表示中分離出與任務(wù)無(wú)關(guān)但能區(qū)分?jǐn)?shù)據(jù)集來(lái)源的概念失效模式分析某些樣本類別準(zhǔn)確率低模型在想什么對(duì)比錯(cuò)誤樣本與正確樣本的概念激活差異這些場(chǎng)景的共同點(diǎn)是不能只看準(zhǔn)確率必須進(jìn)入模型內(nèi)部看證據(jù)。概念級(jí)分解提供了這套證據(jù)鏈。2. 理解多變量概念分解的數(shù)學(xué)基礎(chǔ)2.1 概念是方向不是神經(jīng)元在深度網(wǎng)絡(luò)中“概念”可以用表征空間中的一個(gè)方向來(lái)定義。例如假設(shè)某層特征有 512 個(gè)維度一個(gè)“條紋”概念可能不是第 37 個(gè)神經(jīng)元而是第 12、45、200 個(gè)維度的一組組合權(quán)重。這個(gè)權(quán)重向量在輸入空間中沒(méi)有直觀像素意義但在表示空間中代表一個(gè)語(yǔ)義方向。從幾何角度看給定一個(gè)概念向量 (v \in \mathbb{R}^D)樣本表示 (r_i) 對(duì)概念 (v) 的激活分?jǐn)?shù)可以定義為[ s_i \frac{r_i \cdot v}{|r_i| |v|} ]這個(gè)分?jǐn)?shù)可以理解為余弦相似度。如果多個(gè)樣本在某個(gè)概念方向上有持續(xù)的高激活就能說(shuō)明這些樣本共享某個(gè)語(yǔ)義模式。2.2 從單概念到多變量組合單概念方法一次只找一個(gè)概念向量例如 Concept Activation VectorCAV會(huì)用正負(fù)樣本在表示空間訓(xùn)練一個(gè)線性分類器把分類器權(quán)重當(dāng)作概念方向。這個(gè)方法有效但存在一個(gè)問(wèn)題多個(gè)概念可能同時(shí)出現(xiàn)在同一個(gè)表示里單獨(dú)找每個(gè)方向時(shí)容易互相干擾。ICON Decomposition 采用多變量分解的思路把表示矩陣一次分解成多個(gè)概念。這樣做的好處是概念之間可以互相競(jìng)爭(zhēng)避免重復(fù)表達(dá)一個(gè)樣本可以同時(shí)由多個(gè)概念解釋更貼近真實(shí)組合邏輯審計(jì)者能看到“概念組合”而不是“單一最強(qiáng)方向”。2.3 稀疏性與非負(fù)性為什么重要常見(jiàn)的矩陣分解包括 PCA、SVD、NMF 和稀疏編碼。它們都能把矩陣拆成若干因子但可解釋性差別很大。PCA/SVD 得到的因子可能有正有負(fù)某些維度互相抵消很難對(duì)應(yīng)到“某個(gè)概念出現(xiàn)了”或“某個(gè)概念沒(méi)出現(xiàn)”。非負(fù)矩陣分解要求 (W) 和 (H) 的所有元素不小于 0因此概念激活不能是負(fù)的。這在語(yǔ)義解釋上更自然一個(gè)概念要么不出現(xiàn)要么以一定強(qiáng)度出現(xiàn)不會(huì)出現(xiàn)“負(fù)的條紋”這種說(shuō)法。稀疏性要求概念向量 (H) 中很多維度為零或接近零這樣每個(gè)概念只依賴少量原始特征更容易歸納出語(yǔ)義。否則一個(gè)概念向量在所有維度上都有權(quán)重?zé)o法說(shuō)清它到底代表什么。注意非負(fù)性不是所有特征都滿足的前提。深度網(wǎng)絡(luò)中間層特征常常包含負(fù)數(shù)因此在做 NMF 前需要先做平移、ReLU 或歸一化處理。2.4 審計(jì)指標(biāo)概念貢獻(xiàn)、覆蓋度與穩(wěn)定性分解完成后只有“概念”還不夠還需要量化指標(biāo)來(lái)支撐審計(jì)結(jié)論。通??梢杂?jì)算三類指標(biāo)第一是概念貢獻(xiàn)。對(duì)某樣本 (i) 和概念 (k)可以用激活值 (W_{i,k}) 作為該概念對(duì)樣本表示的貢獻(xiàn)。如果要進(jìn)一步評(píng)估對(duì)預(yù)測(cè)的貢獻(xiàn)可以移除該概念后觀察概率變化。第二是覆蓋度。對(duì)某個(gè)類別統(tǒng)計(jì)該類別的樣本中哪些概念持續(xù)高激活。若一個(gè)概念只在極少數(shù)樣本上激活即使激活很強(qiáng)也不是類別的主要解釋。第三是穩(wěn)定性。同一個(gè)模型、同一批數(shù)據(jù)如果每次重新分解得到的概念完全不同審計(jì)結(jié)論就不可信。通常需要用多次初始化、交叉驗(yàn)證或其他聚類一致性指標(biāo)來(lái)評(píng)估。指標(biāo)計(jì)算方式審計(jì)用途概念貢獻(xiàn)概念激活值 / 樣本表示范數(shù)解釋單樣本預(yù)測(cè)類別覆蓋度類別內(nèi)高激活樣本比例判斷模型是否依賴某個(gè)共享概念穩(wěn)定性多次分解后概念方向的平均相似度判斷分解結(jié)論是否可信重構(gòu)誤差(|R - WH|_F)判斷概念數(shù)量是否足夠3. 環(huán)境準(zhǔn)備用 Python 搭一個(gè)概念分解實(shí)驗(yàn)3.1 安裝依賴下面示例以 Python 為核心使用 PyTorch 加載預(yù)訓(xùn)練模型使用 scikit-learn 做矩陣分解。建議新開(kāi)一個(gè)虛擬環(huán)境python -m venv icon-audit source icon-audit/bin/activate然后安裝依賴pip install numpy pandas scikit-learn matplotlib torch torchvision opencv-python如果只需要跑通分解部分不加載深度模型也可以只安裝pip install numpy scikit-learn matplotlib安裝完成后建議檢查版本避免出現(xiàn)兼容性差異python -c import sklearn; print(sklearn.__version__) python -c import torch; print(torch.__version__)3.2 準(zhǔn)備深度表示數(shù)據(jù)集為了演示完整鏈路過(guò)深可以先使用 CIFAR-10 和 PyTorch 自帶的 ResNet-18 預(yù)訓(xùn)練權(quán)重。這里要說(shuō)明下面的代碼只是提取表示的通用模板實(shí)際項(xiàng)目需要替換成自己的模型和數(shù)據(jù)集。約定一個(gè)“表示提取模塊”從 ResNet-18 的 layer3 輸出特征圖經(jīng)過(guò)全局平均池化后得到一個(gè) 256 維向量。代碼實(shí)現(xiàn)如下import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms class FeatureExtractor(nn.Module): def __init__(self, backboneNone, layer_namelayer3): super().__init__() if backbone is None: backbone torchvision.models.resnet18(weightsIMAGENET1K_V1) # 截取到指定層為止 self.features nn.Sequential( backbone.conv1, backbone.bn1, backbone.relu, backbone.maxpool, backbone.layer1, backbone.layer2, backbone.layer3, ) self.pool nn.AdaptiveAvgPool2d((1, 1)) def forward(self, x): x self.features(x) x self.pool(x) return x.flatten(1)這里的features直接截取了 ResNet-18 的前三個(gè)殘差階段。如果把layer_name參數(shù)改為不同層可以對(duì)比不同抽象級(jí)別的審計(jì)結(jié)果。3.3 構(gòu)造表示矩陣為了演示不一定要跑完整數(shù)據(jù)集??梢詮?CIFAR-10 測(cè)試集中均勻抽取 2000 張圖每類 200 張前向得到表示矩陣。transform transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ]) dataset torchvision.datasets.CIFAR10( root./data, trainFalse, downloadTrue, transformtransform ) # 每類抽 200 個(gè)樣本 sampled_indices [] for cls in range(10): cls_indices [i for i, label in enumerate(dataset.targets) if label cls][:200] sampled_indices.extend(cls_indices) subset torch.utils.data.Subset(dataset, sampled_indices) loader torch.utils.data.DataLoader(subset, batch_size64, shuffleFalse) extractor FeatureExtractor().eval() features, labels [], [] with torch.no_grad(): for x, y in loader: out extractor(x) features.append(out) labels.append(y) R torch.cat(features, dim0).numpy() # shape (2000, 256) y torch.cat(labels, dim0).numpy() # shape (2000,)這一步是審計(jì)的“原材料準(zhǔn)備”。后續(xù)所有分解都基于矩陣R因此R的質(zhì)量會(huì)影響審計(jì)結(jié)論。3.4 環(huán)境檢查清單檢查項(xiàng)預(yù)期結(jié)果說(shuō)明Python 可用版本 3.8 以上兼容 PyTorch 和 scikit-learnPyTorch 可加載預(yù)訓(xùn)練模型能下載權(quán)重如果網(wǎng)絡(luò)受限權(quán)重加載會(huì)失敗表示矩陣維度2000 x 256說(shuō)明特征提取正常樣本標(biāo)簽分布每類 200 個(gè)審計(jì)結(jié)論必須覆蓋所有類別4. 核心實(shí)現(xiàn)實(shí)現(xiàn)一個(gè) ICON 風(fēng)格的概念級(jí)分解4.1 特征預(yù)處理從神經(jīng)網(wǎng)絡(luò)中間層拿到的特征向量可能有負(fù)值直接做 NMF 會(huì)報(bào)錯(cuò)或產(chǎn)生不合理結(jié)果。這里先做兩個(gè)處理用min-max把每個(gè)特征維度縮放到[0, 1]或者使用ReLU將負(fù)值截?cái)酁?0。第一種方式保留更多信息第二種方式更接近“特征是否出現(xiàn)”的語(yǔ)義。這里以 min-max 為例from sklearn.preprocessing import MinMaxScaler scaler MinMaxScaler() R_scaled scaler.fit_transform(R)注意MinMaxScaler是在所有審計(jì)樣本上擬合的。如果后續(xù)要審計(jì)新數(shù)據(jù)新數(shù)據(jù)必須使用同一個(gè) scaler 轉(zhuǎn)換不能重新擬合否則概念定義會(huì)漂移。4.2 用 NMF 做多變量概念分解scikit-learn的NMF是現(xiàn)成可用的基線方法。它不僅支持非負(fù)約束還允許調(diào)整稀疏性。from sklearn.decomposition import NMF n_concepts 16 model NMF( n_componentsn_concepts, initnndsvda, beta_lossfrobenius, solvercd, max_iter500, random_state42 ) W model.fit_transform(R_scaled) # (2000, 16) H model.components_ # (16, 256) reconstruction_error model.reconstruction_err_參數(shù)解釋參數(shù)含義調(diào)整建議n_components概念數(shù)量最關(guān)鍵的參數(shù)過(guò)少會(huì)欠擬合過(guò)多會(huì)重復(fù)init初始矩陣方式nndsvda適合稀疏數(shù)據(jù)random適合快速驗(yàn)證beta_loss損失函數(shù)類型frobenius是平方誤差kullback-leibler對(duì)計(jì)數(shù)型特征更合適solver優(yōu)化方式cd適合中大型矩陣mu更穩(wěn)定但慢max_iter最大迭代次數(shù)如果重構(gòu)誤差仍未收斂需要調(diào)大random_state隨機(jī)種子審計(jì)必須固定否則結(jié)果無(wú)法復(fù)現(xiàn)4.3 增加稀疏約束讓概念更易解釋直接用 NMF 得到的概念可能仍然稠密每個(gè)概念在 256 個(gè)特征維度上都有明顯權(quán)重難以歸納語(yǔ)義。可以打開(kāi) L1 稀疏約束。model_sparse NMF( n_componentsn_concepts, initnndsvda, beta_lossfrobenius, solvercd, max_iter1000, alpha_W0.1, alpha_H0.1, l1_ratio0.9, random_state42 ) W_sparse model_sparse.fit_transform(R_scaled) H_sparse model_sparse.components_這里alpha_W和alpha_H控制 W 和 H 的 L1 正則強(qiáng)度l1_ratio0.9表示 90% 使用 L1 懲罰。增大alpha_H會(huì)讓概念定義更稀疏但也不能過(guò)大否則重構(gòu)誤差顯著上升。4.4 把概念映射回輸入空間得到概念向量 (H_k) 后還需要回答“這個(gè)概念的語(yǔ)義是什么”??梢园迅拍钕蛄慨?dāng)作一組特征權(quán)重對(duì)原始特征圖做加權(quán)求和得到概念激活圖。假設(shè)feature_map的形狀是(C, H, W)概念向量concept_vec的形狀是(C,)則概念激活圖如下def concept_activation_map(feature_map, concept_vec): # feature_map: (C, H, W) # concept_vec: (C,) cam torch.tensor(concept_vec) feature_map.view(feature_map.shape[0], -1) cam cam.view(feature_map.shape[1], feature_map.shape[2]) cam cam - cam.min() cam cam / (cam.max() 1e-8) return cam這個(gè)操作類似 Grad-CAM但不需要梯度也不需要類別預(yù)測(cè)。它反映的是“某個(gè)概念在空間上出現(xiàn)在哪里”。實(shí)際使用前需要對(duì)feature_map做上采樣到輸入圖像尺寸可配合 OpenCV 的resize完成。4.5 面向?qū)徲?jì)的概念報(bào)表分解只是中間步驟審計(jì)最終需要給出一份報(bào)表。以下函數(shù)統(tǒng)計(jì)每個(gè)概念在每個(gè)類別上的平均激活import pandas as pd df pd.DataFrame(W_sparse, columns[fconcept_{i} for i in range(n_concepts)]) df[label] y report df.groupby(label).mean().T print(report.round(3))輸出是一張概念-類別交叉表審計(jì)者可以通過(guò)這張表快速發(fā)現(xiàn)異常關(guān)聯(lián)。比如某個(gè)概念在類別 5 上平均激活為 0.8但在其他類別上接近 0說(shuō)明該概念幾乎就是這個(gè)類別的“專屬特征”。如果這個(gè)類別是人類標(biāo)簽該概念可能合理如果這是一個(gè)與任務(wù)無(wú)關(guān)的屬性就需要進(jìn)一步探查。5. 運(yùn)行驗(yàn)證從“能跑”到“審計(jì)結(jié)論可靠”5.1 用合成數(shù)據(jù)驗(yàn)證分解流程真實(shí)數(shù)據(jù)無(wú)法預(yù)知“正確”概念因此先把流程跑在一份人工合成數(shù)據(jù)上驗(yàn)證分解邏輯是否正確。假設(shè)有 300 個(gè)樣本每個(gè)樣本由 10 個(gè)特征構(gòu)成其中只有 3 個(gè)特征是有效概念其余全是噪聲r(shí)ng np.random.default_rng(0) n, d, k 300, 50, 3 true_W rng.uniform(0, 1, size(n, k)) true_H np.zeros((k, d)) # 概念1只用特征0-4 true_H[0, 0:5] 1.0 # 概念2只用特征10-14 true_H[1, 10:15] 1.0 # 概念3只用特征30-34 true_H[2, 30:35] 1.0 R_synthetic true_W true_H 0.01 * rng.normal(size(n, d))使用與上一節(jié)相同的 NMF 流程但將n_concepts設(shè)為 4觀察能否恢復(fù)出三個(gè)有效概念和第四個(gè)噪聲概念。這才是“驗(yàn)證方法有效”的第一步。5.2 評(píng)估概念穩(wěn)定性審計(jì)不是跑一次就能下結(jié)論的。概念分解受隨機(jī)初始化和樣本抽樣的影響很大??梢栽诙鄠€(gè)隨機(jī)種子下重復(fù)分解然后計(jì)算兩次概念矩陣的相似度。一種簡(jiǎn)化方法是固定樣本改變r(jià)andom_state對(duì)每個(gè)新概念在舊概念中找到最大余弦相似度取平均作為穩(wěn)定性分?jǐn)?shù)。from sklearn.metrics.pairwise import cosine_similarity def concept_stability(H1, H2): sim cosine_similarity(H1, H2) return np.mean(np.max(sim, axis1))如果多次運(yùn)行后的平均穩(wěn)定性低于 0.5說(shuō)明概念不穩(wěn)定要么增加樣本量要么增大稀疏約束要么固定隨機(jī)種子并明確說(shuō)明審計(jì)版本。5.3 審計(jì)發(fā)現(xiàn)示例模型依賴背景用一個(gè)典型場(chǎng)景說(shuō)明審計(jì)輸出如何幫助發(fā)現(xiàn)模型風(fēng)險(xiǎn)。在 CIFAR-10 上有兩個(gè)類別貓和狗。如果訓(xùn)練數(shù)據(jù)里貓的圖片大量出現(xiàn)在沙發(fā)上狗的圖片大量出現(xiàn)在草地上模型可能學(xué)習(xí)到“沙發(fā)”概念和“草地”概念而不僅僅是貓和狗本身。在概念分解報(bào)告中如果看到某個(gè)概念在貓類別上的激活顯著高于狗并且這個(gè)概念的概念激活圖主要落在背景區(qū)域而不是動(dòng)物主體區(qū)域那么基本可以懷疑模型存在背景依賴。驗(yàn)證方式可以是構(gòu)造一個(gè)“概念干預(yù)”實(shí)驗(yàn)。把測(cè)試圖片中背景區(qū)域替換成更常見(jiàn)的公共背景觀察預(yù)測(cè)概率變化。變化越大說(shuō)明模型對(duì)該背景概念的依賴越強(qiáng)。5.4 驗(yàn)證審計(jì)結(jié)論的可信邊界概念級(jí)分解是一種探索性工具不是最終裁決。審計(jì)結(jié)論必須寫明三個(gè)邊界樣本邊界只審計(jì)了哪批數(shù)據(jù)是否覆蓋真實(shí)數(shù)據(jù)分布模型邊界抽取了哪一層特征不同層得到的概念可能不同分解邊界概念數(shù)量 K 的選取會(huì)影響結(jié)論不能只看一組 K。注意概念解釋不等于因果解釋。某個(gè)概念與類別預(yù)測(cè)高度相關(guān)不能直接認(rèn)定模型“使用”了這個(gè)概念只能說(shuō)在表示空間中這個(gè)概念對(duì)預(yù)測(cè)路徑有較強(qiáng)的相關(guān)性。6. 常見(jiàn)問(wèn)題與排錯(cuò)路徑6.1 概念無(wú)法歸納成語(yǔ)義現(xiàn)象分解出的 16 個(gè)概念每個(gè)都看不出明確含義所有樣本激活都接近 0.5??赡茉蛱卣鳑](méi)有歸一化尺度差異導(dǎo)致分解結(jié)果被少數(shù)維度主導(dǎo)概念數(shù)量過(guò)多或過(guò)少特征本身抽象程度過(guò)高無(wú)法用簡(jiǎn)單直方圖歸納。處理方式先減少概念數(shù)量例如改為 8 個(gè)再檢查預(yù)處理是否生效然后對(duì)每個(gè)概念畫(huà)出高激活樣本人工查看共同點(diǎn)。如果依然無(wú)法歸納可以考慮換更靠近輸出的層或改用稀疏約束更強(qiáng)的參數(shù)。6.2 多次運(yùn)行結(jié)果差別大現(xiàn)象概念穩(wěn)定性分?jǐn)?shù)低于 0.5??赡茉驑颖玖刻MF 隨機(jī)初始化沒(méi)有收斂特征維度存在高度相關(guān)性導(dǎo)致多個(gè)局部最優(yōu)解。處理方式固定random_state把審計(jì)結(jié)果視為某一版本提高max_iter檢查reconstruction_err_是否下降增加特征規(guī)范化與稀疏約束如果特征維度極高先做 PCA 降維會(huì)損失一部分語(yǔ)義需要權(quán)衡。6.3 分解結(jié)果與審計(jì)問(wèn)題脫節(jié)現(xiàn)象概念都很有語(yǔ)義但沒(méi)有一個(gè)概念對(duì)應(yīng)用戶關(guān)心的敏感屬性或干擾特征??赡茉?qū)徲?jì)樣本中沒(méi)有覆蓋那些屬性概念數(shù)量不足目標(biāo)概念被壓進(jìn)其他概念中間層選擇不合適目標(biāo)屬性只出現(xiàn)在更淺或更深的層。處理方式先做一次快速單概念檢驗(yàn)用 CAV 方式驗(yàn)證目標(biāo)屬性是否存在可分離的概念方向。如果 CAV 能分離說(shuō)明表示中有相關(guān)信息再把概念數(shù)量調(diào)大或用其他分解算法繼續(xù)挖。6.4 排錯(cuò)清單問(wèn)題現(xiàn)象檢查方式處理建議NMF 報(bào)“Negative values”檢查 R 矩陣最小值對(duì)特征做 min-max或加非負(fù)平移重構(gòu)誤差很大打印reconstruction_err_增大概念數(shù)量或增大迭代次數(shù)概念大量重復(fù)計(jì)算概念之間余弦相似度增大稀疏約束或降低概念數(shù)量審計(jì)報(bào)告無(wú)法解釋對(duì)齊高激活樣本的原始圖片人工抽查必要時(shí)用聚類摘要結(jié)果不可復(fù)現(xiàn)查看random_state是否設(shè)置固定種子并記錄所有超參7. 最佳實(shí)踐與擴(kuò)展方向7.1 學(xué)習(xí)環(huán)境與生產(chǎn)環(huán)境的差異學(xué)習(xí)環(huán)境里跑通概念分解可以很快只要數(shù)據(jù)能加載、NMF 能收斂就行。生產(chǎn)環(huán)境做模型審計(jì)時(shí)還需要額外的工程化要求維度學(xué)習(xí)環(huán)境生產(chǎn)環(huán)境審計(jì)數(shù)據(jù)任意抽樣必須覆蓋真實(shí)分布和邊緣場(chǎng)景特征層隨意挑選記錄模型版本、層名、特征統(tǒng)計(jì)分解參數(shù)默認(rèn)或少量調(diào)整多次運(yùn)行并比較穩(wěn)定性報(bào)告打印表格輸出可追溯 JSON 或 PDF 報(bào)告監(jiān)控?zé)o記錄模型變更前后的概念漂移審批無(wú)審計(jì)結(jié)論需要復(fù)核人確認(rèn)7.2 概念級(jí)審計(jì)的落地流程一個(gè)可復(fù)用的概念級(jí)審計(jì)流程可以按下面五步執(zhí)行。第一步定義審計(jì)目標(biāo)。先寫清楚懷疑點(diǎn)是否擔(dān)心背景依賴、敏感屬性、數(shù)據(jù)泄漏還是類別失效模式。第二步確定表示層。從模型的多個(gè)中間層分別抽取特征不要只選一層因?yàn)椴煌Z(yǔ)義可能在不同抽象級(jí)別出現(xiàn)。第三步進(jìn)行多變量概念分解。使用固定隨機(jī)種子記錄概念數(shù)量、稀疏參數(shù)和重構(gòu)誤差。第四步人工解釋概念。抽取每個(gè)概念的高激活樣本生成概念激活圖由領(lǐng)域?qū)<医o概念打標(biāo)簽。第五步輸出審計(jì)報(bào)告。包括概念定義、覆蓋率、穩(wěn)定性、風(fēng)險(xiǎn)判斷、建議動(dòng)作。7.3 從 NMF 走向更完整的 ICON 方案NMF 只是一個(gè)便于復(fù)現(xiàn)的基線。真實(shí)以 ICON Decomposition 為標(biāo)題的方法可能還會(huì)包含更多設(shè)計(jì)例如用變分自編碼器學(xué)習(xí)非線性概念表示通過(guò)稀疏自編碼器把概念激活限制在稀疏碼本上在概念層與預(yù)測(cè)層之間加入因果干預(yù)估計(jì)概念對(duì)預(yù)測(cè)的因果效應(yīng)對(duì)多個(gè)概念做交互效應(yīng)分析識(shí)別“概念組合”導(dǎo)致的錯(cuò)誤。實(shí)際項(xiàng)目中可以根據(jù)數(shù)據(jù)規(guī)模選擇方法適用場(chǎng)景代價(jià)NMF中型特征矩陣快速基線線性分解表達(dá)能力有限稀疏自編碼器大規(guī)模表示能學(xué)到非線性概念訓(xùn)練復(fù)雜需要調(diào)參CAV / TCAV驗(yàn)證單一概念假設(shè)需要正負(fù)樣本標(biāo)注ICON 風(fēng)格分解多概念同時(shí)出現(xiàn)需要審計(jì)報(bào)告實(shí)現(xiàn)成本高需領(lǐng)域?qū)<覅⑴c7.4 審計(jì)報(bào)告應(yīng)包含哪些內(nèi)容無(wú)論使用哪種方法最終審計(jì)報(bào)告都應(yīng)包含以下內(nèi)容模型與數(shù)據(jù)版本包括預(yù)訓(xùn)練權(quán)重、特征層名稱、數(shù)據(jù)集切分分解配置概念數(shù)量、隨機(jī)種子、歸一化方式、稀疏參數(shù)概念清單每個(gè)概念的權(quán)重 Top 特征、高激活樣本、人工命名審計(jì)發(fā)現(xiàn)哪些概念與目標(biāo)無(wú)關(guān)但激活顯著哪些類別存在風(fēng)險(xiǎn)證據(jù)圖表概念激活圖、概念-類別熱力圖、穩(wěn)定性評(píng)分建議動(dòng)作是否需要重新訓(xùn)練、收集數(shù)據(jù)或加入約束。實(shí)際操作中“審計(jì)”兩個(gè)字容易讓人直接聯(lián)想到上線前檢查。更合理的做法是把它放進(jìn)模型迭代流程每次數(shù)據(jù)更新或模型微調(diào)后都重新跑一次概念級(jí)審計(jì)觀察概念是否漂移、是否有新的捷徑特征出現(xiàn)。這樣ICON Decomposition 的意義就不只是調(diào)試模型更是讓模型交付從“準(zhǔn)確率高”升級(jí)為“理由可信”。對(duì)任何需要解釋模型行為的團(tuán)隊(duì)來(lái)說(shuō)這都是值得長(zhǎng)期投入的方向。