全面解析Inception Score原理及其局限性
作者丨尹相楠
學校丨里昂中央理工博士在讀
研究方向丨人臉識別、對抗生成網絡
本文主要基于這篇文章:A Note on the Inception Score,屬于讀書筆記的性質,為了增加可讀性,也便于將來復習,在原文的基礎上增加了一些細節。?
很多關于 GAN 生成圖片的論文中,作者評價其模型表現的一項重要指標是 Inception Score(下文簡稱 IS)。其名字中 Inception 來源于 Google 的 Inception Net,因為計算這個 score 需要用到 Inception Net-V3(第三個版本的 Inception Net)。?
Inception Net 是圖片分類網絡,在 ImageNet 數據庫上訓練,ImageNet 數據庫共有 1.2M 個 RGB 圖片,分為 1000 類。Inception Score 只是把 Inception Net-V3 作為一個工具,理解 Inception Score 不需要知道 Inception Net-V3 的細節,各種深度學習框架中都已經包含了預訓練好的 Inception Net-V3 了,直接拿來用就好了。
基本原理
眾所周知,評價一個生成模型,我們需要考驗它兩方面性能:1. 生成的圖片是否清晰;2. 生成的圖片是否多樣。生成的圖片不夠清晰,顯然說明生成模型表現欠佳;生成的圖片夠清晰了,我們還要看是不是能生成足夠多樣的圖片,有些生成模型只能生成有限的幾種清晰圖片,陷入了所謂 mode collapse,也不是好的模型。?
Inception Score 是這樣考慮這兩個方面的:?
1. 清晰度:把生成的圖片 x 輸入 Inception V3 中,將輸出 1000 維的向量 y ,向量的每個維度的值對應圖片屬于某類的概率。對于一個清晰的圖片,它屬于某一類的概率應該非常大,而屬于其它類的概率應該很小(這個假設本身是有問題的,有可能有些圖片很清晰,但是具體屬于哪個類卻是模棱兩可的)。用專業術語說, p(y|x) 的熵應該很小(熵代表混亂度,均勻分布的混亂度最大,熵最大)。?
2. 多樣性:如果一個模型能生成足夠多樣的圖片,那么它生成的圖片在各個類別中的分布應該是平均的,假設生成了 10000 張圖片,那么最理想的情況是,1000 類中每類生成了 10 張。轉換成術語,就是生成圖片在所有類別概率的邊緣分布 p(y) 熵很大(均勻分布)。
具體計算時,可以先用生成器生成 N 張圖片,然后用公式 (1) 的經驗分布來代替:
綜合上面兩方面,Inception Score 的公式為:
exp:僅僅是為了好看,沒有具體含義。
x~Pg :表示從生成器中生圖片。
p(y|x) :把生成的圖片 x 輸入到 Inception V3,得到一個 1000 維的向量 y ,也就是該圖片屬于各個類別的概率分布。IS 提出者的假設是,對于清晰的生成圖片,這個向量的某個維度值格外大,而其余的維度值格外小(也就是概率密度圖十分尖)。
p(y) :N 個生成的圖片(N 通常取 5000),每個生成圖片都輸入到 Inception V3 中,各自得到一個自己的概率分布向量,把這些向量求一個平均,得到生成器生成的圖片全體在所有類別上的邊緣分布,見公式 (1)。
:對 p(y|x)?和 p(y) 求 KL 散度。KL 散度離散形式的公式如下:
KL 散度用以衡量兩個概率分布的距離,它是非負的,值越大說明這兩個概率分布越不像。但這個距離不是對稱的,觀察公式, P(i) 很大 Q(i) 很小的地方對 KL 距離貢獻很大,而 P(i) 很小 Q(i) 很大的地方對 KL 距離的貢獻很小。
我們預期的某個維度值很大,而 p(y) 總體均勻,因此需要把放在公式 (2) 中雙豎線的前面。放到后面可能會造成的極端值被忽略,而正是這個極端值的存在告訴了我們這個生成的圖片是否清晰。?
綜合起來,只要 p(y|x)?和 p(y) 的距離足夠大,就能證明這個生成模型足夠好。因為前者是一個很尖銳的分布,后者是一個均勻分布,這倆距離本就應該很大。?
公式 (2) 很不直觀,在實際操作中可以改成如下形式:
實際操作中,先用生成的大量樣本代入公式 (1),求出,然后再對每個樣本求出,計算它和的 KL 散度,最后求平均,再算一下指數即可。?
Inception Score 的 pytorch 版本代碼可以參考下面的鏈接,十分清晰易懂:
https://github.com/sbarratt/inception-score-pytorch
深入理解Inception Score
我們對公式 (2) 取對數刨除無用的 exp,并作簡單的推導:
可以發現,公式 (4) 的結尾正是互信息的定義式,即:
注意,互信息是對稱的,即 I(y;x)=I(x;y) 。而互信息的 Wikipedia 頁面,給出了它和熵之間的關系推導。
熵,條件熵,信息增益和互信息
熵是衡量隨機變量不確定性的量,對隨機變量 x,其信息熵的公式為:
條件熵是衡量在給定條件下,隨機變量不確定性的量。對隨機變量 x,y 條件熵的公式為:
關于這兩個公式的直觀解釋,請參閱數學之美第 6 章 [1]。
而對于互信息,我們可以作如下推導:
從公式 (8) 中發現,對于隨機變量 y,其本來的不確定性是 H(y),而給定了條件 x 后,y 的不確定性變為了 H(y|x)。因此,互信息為:給定某個條件后,隨機變量不確定性的減少程度,因此也叫信息增益。而這個指標同時反映的是兩個變量的相關程度。
互信息和信息增益是等價的,一個側重表達兩個隨機變量的相關程度,一個側重給定某個條件后,隨機變量不確定性的減少程度。
PS:協方差也可以用于表示兩個隨機變量的相關性,但是只能表示兩個變量之間的線性相關性,但協方差的好處是不需要知道變量的概率分布函數,而這對互信息是必須的。具體見這個鏈接 [2]。
有了上面的推導,再代回到公式 (5):
我們根據公式 (9) 發現,Inception Score 的真實意義是:生成的所有樣本在各類別的分布函數的熵,與每個樣本在各類別可能性的分布的熵(的期望)之差。第一項越大,說明生成的樣本在各類上分布越平均,第二項越小,說明生成的樣本屬于某個類別的可能性越大,說明這個樣本越清晰。
Inception Score的局限性
在 A Note on the Inception Score 中,作者首先舉了一個一維的例子,用以說明 Inception Score 并不能反映生成模型的性能。
▲?圖1
假設真實數據以 1/2 的概率分別從兩個正態分布 N(-1, 2) 和 N(1,2) 中采樣(如圖 1),各自對應的類別分別為 0 和 1。那么最優貝葉斯分類器為:
公式 10 的圖像如圖 2。即給出一個 x,分別算一下它在左正態分布和右正態分布的概率,代入上式,大于 0.5 表示來自右邊的正態分布,小于 0.5 表示來自左邊的正態分布。注意在 x=0 時,它來自左右兩個分布的概率均為 0.5。
▲?圖2
而根據 Inception score 的計算公式 (9),我們可以設計這樣的生成器:以相同概率隨機生成 -∞ 和 +∞。為了方便閱讀,這里重新復制一遍公式 (9):
根據圖 2 中最優判別器的圖像,可以知道:
(11) 代入 (9) 的第二項,可以得到 H(y|x)=0,而生成?-∞ 和 +∞?的概率都是 1/2,故 H(y)=log2。因此,Inception Score 可以取到最大值 2。?
除此之外,還有很多分布都可以得到很高的 Inception Score,例如均勻分布 U(-100,100),正態分布 N(0, 20) ,因為它們都可以得到 H(y)=log2(關于坐標原點對稱,所以生成兩類的概率相同),同時得到一個很小的 H(y|x)=0(最優判別器下,大于 0 的數對應的概率都很大,小于 0 的數,概率都很小)。反而真正的分布,左右兩個正態分布對應的 Inception Score 小于前面這些分布。
作者總結,Inception Score 主要有兩個問題:
Inception Score 自身的問題
錯誤的使用場景?
Inception Score自身的問題
1. Inception Score 對神經網絡內部權重十分敏感。
作者利用 TensorFlow, Torch 和 Keras 等不同框架下預訓練的 Inception V2 和 Inception V3 ,計算同一個數據庫(50 k CIFAR-10 training images 和 50k ImageNet validation images)的 Inception Score。
發現盡管不同框架預訓練的網絡達到同樣的分類精度,但由于其內部權重微小的不同,導致了 Inception Score 很大的變化,在 CIFAR-10 上 IV3 (inception v3) Torch 和 IV3 Keras 算出的 Inception Score 相差了 11.5% ,在 ImageNet 上,IV3 Torch 和 IV3 Keras 算出的 IS 相差 3.5%,這些差異,足以涵蓋某些所謂 state-of-the-art 的模型所作出的提升。
2. 計算 Inception Score 的方式不對。
通常計算 Inception Score 時,會生成 50000 個圖片,然后把它分成 10 份,每份 5000 個,分別代入公式 (3) 計算 10 次 Inception Score,再計算均值和方差,作為最終的衡量指標(均值+-方差)。?
但是 5000 個樣本往往不足以得到準確的邊緣分布,尤其是像 ImageNet 這種包含 1000 個類的數據集,僅僅 5000 個樣本是不夠的。作者通過實驗證明,把同一個數據集分成不同的份數,會影響最后的 Inception Score。因此,作者建議把 50000 個樣本放到一起,來確定邊緣分布。?
同時,作者建議去掉 Inception Score 提出者基于審美原因加進公式的 exp,根據上文,去掉后可以直接解釋為互信息。改進后的 Inception Score 公式為:
按照作者的改進,就不會出現把數據集劃分為不同份數,計算的 Inception Score 不一致的現象了。對于方差,可以通過計算每一個生成數據的來計算(相當于 n_split = N)。
錯誤的使用場景?
1. 分類模型和生成模型在不同的數據集上訓練。
由于 Inception V3 是在 ImageNet 上訓練的,用 Inception V3 時,應該保證生成模型也在 ImageNet 上訓練并生成 ImageNet 相似的圖片,而不是把什么生成模型生成的圖片(臥室,花,人臉)都往 Inception V3 中套,那種做法沒有任何意義。?
Inception Score 基于兩個假設:?
Inception V3 可以準確估計 p(y),即樣本在所有類別上的邊緣分布;
Inception V3 可以準確估計 p(y|x) ,從而計算出條件熵,用條件熵反映圖片的真實程度。
對于假設 1,作者計算了 CIFAR-10 的邊緣分布,取了排名前 10 的預測類。把這 10 類和 CIFAR-10 的 10 類相比較,發現,它們并沒有對應關系。再一次說明了生成模型的訓練數據需要和 Inception Net 或者別的什么分類網絡的訓練數據一致。不能在一個數據集上訓練分類模型,用來評估另一個數據集上訓練的生成模型。?
對于假設 2,Inception 網絡通過 p(y|x) 計算出條件熵,條件熵越低表示生成的圖片越真實,這也是有問題的。作者計算了 CIFAR 10 訓練集的條件熵是 4.664 bit,而在隨機噪聲圖片上,條件熵是 6.512 bit,僅僅比真實訓練集圖片高了一點點。
而在 ImageNet 的 validation set上,Inception net 算出的條件熵是 1.97 bit,也就是說 CIFAR 訓練數據比起 ImageNet 更接近隨機噪聲,這顯然是不科學的,因為 CIFAR 數據再不濟也是真實圖片,應該和 ImageNet 的條件熵更接近才對。再一次說明了,不能在一個數據集上訓練分類模型,用來評估另一個數據集上訓練的生成模型。
2. 優化 Inception Score (不直接地&隱式地)。
Inception Score 只能是粗糙的指導,如果直接優化這個 Inception Score,會導致生成對抗樣本(只會刷分,其實并不真實)。但同時也應該注意到,間接地優化這個分數,同樣會導致生成對抗樣本,例如用這個指標來確定是否停止訓練,調整超參數,甚至調整網絡架構。
作者在附錄中提出了一種可以刷 Inception Score 的方法:把生成樣本輸入分類模型中,用梯度下降來修改輸入的樣本,讓它在某一類的概率達到非常大,這樣,條件熵就降下來了,同時讓不同樣本優化不同的類,循環遍歷所有的類,這樣就能保證邊緣分布是均勻分布,即生成的圖片把每個類都均勻覆蓋了。但是,這會導致生成毫無意義的圖片。?
3. 沒有反映過擬合。
根據 Inception Score 的計算原理,我們可以發現:如果神經網絡記住了所有的訓練集圖片,然后隨機輸出,那么它會得到一個很高的 Inception Score。但是這種生成模型是沒有意義的。
因此在用 Inception Score 評估生成模型的性能時,應該加上別的指標,證明模型沒有過擬合,即模型輸出的圖片和訓練集中任何圖片都不同,單純用 Inception Score 評估性能是不全面的。
總結
本文全面講解了 Inception Score 的原理和它存在的一些問題:?
IS大,不一定生成的圖片就真實;
分類模型參數的輕微變動將影響 IS;
使用 IS 時,分類模型和生成模型應該在同一個數據集上訓練;
通常計算 IS 的方法是有漏洞的:估計的樣本數據量太小,導致同一堆數據,分割的份數不同算出的 IS 不同;
以 IS 為優化目標會導致產生對抗樣本;
IS 無法反映生成模型過擬合情況。
綜上,IS 是一個渾身硬傷的評價指標,能不用還是不要用了……
經常與 IS 并列的還有 Fréchet Inception Distance,關于它的簡介請移步本人的另一篇文章 [3]。限于水平,這篇文章會比較水,沒能對 Fréchet Distance 做出理論推導或者直觀解釋,只是引用了一下公式,但從公式中仍然可以看出,它比 IS 更加有道理一點。
相關鏈接
[1]?https://github.com/Tongzhenguo/ebooks/blob/master/數學之美.pdf
[2]?https://stats.stackexchange.com/questions/81659/mutual-information-versus-correlation
[3]?https://zhuanlan.zhihu.com/p/54213305
點擊以下標題查看更多往期內容:?
自動機器學習(AutoML)最新綜述
圖神經網絡綜述:模型與應用
近期值得讀的10篇GAN進展論文
自然語言處理中的語言模型預訓練方法
從傅里葉分析角度解讀深度學習的泛化能力
兩行代碼玩轉Google BERT句向量詞向量
AI Challenger 2018 機器翻譯參賽總結
TensorSpace:超酷炫3D神經網絡可視化框架
深度長文:NLP的巨人肩膀(上)
NLP的巨人肩膀(下):從CoVe到BERT
#投 稿 通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢??答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
??來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
? 投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
?
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點擊 |?閱讀原文?| 獲取最新論文推薦
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的全面解析Inception Score原理及其局限性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 今晚直播 | 平安人寿资深算法工程师姚晓
- 下一篇: 本周有哪些值得读的 AI 论文?我们替你