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