受到 Judea Pearl 近期採訪的啟發,Ferenc Huszár 發表部落格,從觀察和干預資料分佈(對應監督學習和因果推理)的區別和聯絡出發,闡述了他對因果推理在機器學習中的意義的看法。他指出因果推理是深度學習的必要補充,而不是作為其對立面,必須在兩者中取其一舍其一。
你可能已經看到了 Judea Pearl 的新書,以及在我的社交圈中廣為流傳的相關採訪。在採訪中,Pearl 將我們在機器學習中所做的大部分工作視為曲線擬合。雖然我認為這是誇大其詞,但這提醒我們,大多數富有成效的辯論往往是由有爭議的或非常傲慢的言論引發的。將機器學習稱為鍊金術就是很好的一例。讀完這篇文章後,我決定再研究一下他著名的 do-calculus 和因果推理。
這種反覆時常在我身上發生。我第一次學微積分是在一門(非常不受歡迎但很高等的)貝葉斯網路本科課程中。從那以後,每隔兩三年我就會在不同的情境下再次遇到它,但不知怎的,我從未被其觸動過。我一直認為「這東西很難並且/或者不切實際」。最終,我將其拋之腦後。直到現在,我才意識到這些東西的重要性。
這一次,我想我完全領會了因果推理的意義,而且變成了一個十足的信徒。我知道我的覺悟已經遲了,但我認為致力於資料和條件概率研究的人瞭解這個工具集的基礎知識是基本的補充,在我的整個職業生涯中完全忽視這一點讓我感到尷尬。
在這篇文章中,我將嘗試闡釋基礎知識,告訴你為什麼也要考慮這個問題。如果你致力於深度學習,那你就有了更好的理由來理解這一點。如果把 Pearl 的評論解釋為將因果推理與深度學習相對立,那他的觀點可能沒有幫助。相反,你應該理解為,Pearl 強調的是因果推理在深度學習中有著很大的潛在應用價值。不要因為因果圖看起來很像貝葉斯網路而氣餒(這不是巧合,因為它們都是由 Pearl 開創的),它們與深度學習並非競爭關係,而是對深度學習的補充。
基礎知識
首先,因果推理區分兩種可能要估計的條件分佈型別。tldr:在 ML 中,我們通常只估計其中一種,但在某些應用中,我們其實應該嘗試或必須估計另一個。
為了設定,假設我們從一些聯合分佈 p(x,y,z,…) 中採集了獨立同分布資料樣本。假設我們有大量資料和最佳工具(如深度網路)來完整估計這種聯合分佈或其任何屬性,以及條件分佈或邊際分佈。換句話說,我們假設 p 是已知的和易處理的。假設我們最終對變數 y 在給定 x 情況下的結果感興趣。在高階別上,可以用兩種方式提出這個問題:
觀察值 p(y|x):假設我觀察到變數 X 取值為 x,Y 的分佈情況如何。這是我們通常在監督機器學習中所估計的。它是一個條件分佈,可以從 p(x,y,z,…) 中計算出它的值:p(y|x)=p(x,y)/p(x)。我們都非常熟悉這個物件,也知道如何從資料中估計它。
干預式的 p(y|do(x)):如果我將 X 的值設定為 x,Y 的分佈情況如何。這描述瞭如果我通過人為地強制變數 X 取值 x 來干預資料生成過程,但根據生成資料的原始過程模擬其餘變數時我將觀察到的 Y 的分佈(注意,資料生成過程與聯合分佈 p(x,y,z,…) 不同,這是一個重要的細節)。
二者不是一回事嗎?
不,p(y|do(x)) 和 p(y|x) 通常不是一回事,可以用幾個簡單的思維實驗來驗證這一點。比如,Y 是咖啡機爐中的壓強,取值大約在 0 到 1.1 巴之間,這取決於咖啡機開了多久。設 X 為內建氣壓計的讀數。假設我們在任意時間一起觀察 X 和 Y。假設氣壓計功能正常,p(y|x) 應為以 x 為中心的單峰分佈,這是由於測量噪聲而具有隨機性。然而,p(y|do(x)) 實際上不依賴於 x 的值,並且通常與 p(y) 相同,即爐內壓力的邊際分佈。這是因為人工設定氣壓計的值(例如,通過移動指標)實際上不會導致容器內的壓力上升或下降。
綜上所述,y 和 x 是相關的或統計相關的,因此看到 x 可以預測 y 的值,但是 y 不是由 x 導致的,所以設定 x 的值不會影響 y 的分佈。因此,p(y|x) 和 p(y|do(x)) 的表現差別很大。這個簡單的例子只是冰山一角。當存在大量具有複雜互動作用的變數時,干預條件和觀察條件之間的差異可能更加細微且難以表徵。
我想要哪一個?
根據要解決的應用,你應該嘗試估計以下條件之一。如果最終目標是診斷或預測(即觀察自然發生的 x 並推斷 y 的可能值),則需要觀察條件 p(y|x)。這就是我們在監督學習中已經做的,也是 Judea Pearl 所說的曲線擬合。這對於分類、影像分割、超解析度、語音轉錄、機器翻譯等一系列重要應用都有好處。
在你最終希望根據估計的條件控制或選擇 x 的應用中,你應該嘗試估計 p(y|do(x))。例如,如果 x 是一種醫學療法,而 y 是結果,你不僅對觀察自然進行的療法 x 和預測結果感興趣,還希望在瞭解療法 x 如何影響結果 y 的情況下主動選擇療法 x。類似的情況發生在系統識別、控制和線上推薦系統中。
p(y|do(x)) 到底是什麼?
這也許是我以前沒有掌握的主要概念。p(y|do(x)) 實際上是一個普通的條件分佈,但它不是基於 p(x,z,y,…) 而是基於一個不同的聯合 pdo(X=x)(x,z,y,…) 計算的。如果我們實際進行了有關干預,這個 pdo(X=x) 就是我們觀察到的資料的聯合分佈。p(y|do(x)) 是我們將從隨機對照試驗或 A/B 試驗中收集的資料中學習到的條件分佈,其中試驗者控制了 x。請注意,在許多情況下,實際執行干預或隨機試驗可能無法實現,或者至少是不切實際或不道德的。你不能做 A / B 測試,強迫你的一半受試者吸食大麻,另一半則吸食安慰劑來了解大麻對他們健康的影響。即使不能從隨機實驗直接估計 p(y|do(x)),物件仍然存在。因果推理和 do-calculus 的要點是:
如果我不能在隨機對照試驗中直接測量 p(y|do(x)),我能否根據在對照試驗之外觀察到的資料進行估計?
這些都是怎麼聯絡起來的?
讓我們從一個圖表開始,該圖表顯示瞭如果我們只關心 p(y|x)(即簡單的監督學習案例)會發生什麼情況:
假設我們依次觀察三個變數:x、z、y。資料是從 3 個變數上的一些可觀察聯合分佈中採集的獨立同分布,由標記為「observable joint」的藍色因子圖表示。是否瞭解什麼是因子圖並不重要,圓圈代表隨機變數,小正方形代表變數的聯合分佈。我們傾向於從 x 預測 y,並假設 z 是第三個變數,我們不想推斷,但我們也可以衡量(把這一點包括在內是為了完整性起見)。觀察條件分佈 p(y|x) 是由這個聯合分佈通過簡單的條件計算得到的。從訓練資料中我們可以建立一個模型 q(y|x;θ) 來接近該條件分佈,例如使用深度網路最小化交叉熵或其它。
現在,如果我們真正感興趣的是 p(y|do(x)) 而不是 p(y|x)?這就是它的樣子:
所以,我們仍然有藍色的觀察聯合分佈,資料仍然從這個聯合分佈取樣。但是,我們要估計的物件位於右下方,即紅色干預條件分佈 p(y|do(x))。這與干預聯合分佈有關,干預聯合分佈上方標有紅色因子圖。這是一個相同領域的聯合分佈 p,但它是一個不同的分佈。如果我們可以從這個紅色分佈中取樣(例如,實際進行一個隨機對照試驗,從中選擇 x),這個問題將通過簡單的監督學習來解決。我們可以從紅色聯合分佈生成資料,並直接從那裡估計模型。然而,我們假設這是不可能的,我們所擁有的只是從藍色聯合分佈取樣的資料。我們必須看看是否可以從藍色聯合分佈中估計紅色條件分佈 p(y|do(x))。
因果模型
如果想在藍色和紅色聯合分佈之間建立連線,我們必須引入關於資料生成機制因果結構的附加假設。預測我們的分佈如何因互動作用而改變的唯一方法是設法知道變數是如何因果相關的。這種關於因果關係的資訊不能僅靠聯合分佈中獲得。我們必須介紹比這更有表達性的東西,如下所示:
除了可觀察的聯合分佈外,我們現在還有一個世界因果模型(左上)。這個因果模型比聯合分佈包含更多的細節:它不僅知道壓力和氣壓計讀數是相關的,而且知道壓力導致氣壓計上升,而不是反過來。該模型中的箭頭對應於假設的因果關係方向,沒有箭頭表示變數之間沒有直接的因果關係影響。因果圖到聯合分佈的對映是多對一的:幾個因果圖與同一個聯合分佈對應。因此,通常不可能僅通過觀察資料在不同的因果解釋之間作出結論性選擇。
提出因果模型是一個建模步驟,在這個步驟中,我們必須考慮關於世界因果規律的假設,即什麼導致什麼。一旦有了因果圖,我們就可以通過破壞因果網路來模擬干預的效果:刪除通往 do 運算子中節點的所有邊。這些顯示在上圖的中頂部。然後,分解的因果模型產生由綠色因子圖表示的聯合分佈。這個聯合有一個相應的條件分佈 p~(y|do(x)),我們可以用它作為我們對 p(y|do(x)) 的近似。如果我們定性地得到了正確的因果結構(即沒有缺失的節點,並且箭頭的方向都正確),這個近似是精確的,p~(y|do(x))=p(y|do(x))。如果我們的因果假設是錯誤的,這個近似可能是假的。
關鍵的是,為了得到這個綠色的因子圖,從而在觀測資料和干預性分佈之間建立橋樑,我們必須將資料與附加的假設結合起來,還需要先驗知識,如果可以的話。光靠資料是無法做到這一點的。
Do-calculus
現在的問題是,當我們只有藍色分佈的資料時,能得到綠色條件分佈的多少資訊呢?我們現在的處境比以前好,因為有了把兩者聯絡起來的因果模型。長話短說,這就是所謂的 do-calculus 要做的事。do-calculus 允許我們修改綠色條件分佈,直到我們可以用藍色分佈下的各種邊緣、條件和期望分佈來表達它。do-calculus 擴充套件了我們處理條件概率分佈的工具包,增加了四個規則,我們可以應用於包含 do 運算子的條件分佈。這些規則考慮了因果圖的屬性。這些細節沒法在單個博文中展開,但這裡有一篇導論性的論文:https://arxiv.org/abs/1305.5506。
理想情況下,作為 do-calculus 推導的結果,你最終可以得到 p~(y|do(x)) 的等價公式,其中不再包含任何 do 運算子,因此你可以僅根據觀測資料來估計它。如果是這種情況,我們會稱因果查詢 p~(y|do(x)) 是可識別的。相反,如果無論我們如何努力應用 do-calculus 都不能實現這種情況,我們都稱因果查詢為不可識別的,這意味著我們將無法根據已有資料來估計它。下圖概括了這種因果推理機制的非凡之處。
作為包括幾個 do-calculus 規則的推導結果, 這種新的「可估公式」給出了 p~(y|do(x)) 的等價表示式。如果你只關心 p(y|x),那麼請注意原本完全無關的變數 z 現在是如何必要地用於執行因果推理的。如果不能觀察 z,我們仍然可以進行監督學習,但是我們將無法回答因果推理查詢 p(y|do(x))。
怎麼判斷因果模型是否正確?
僅靠觀察資料,你永遠也沒法充分驗證因果圖的有效性和完整性。然而,因果模型的某些方面還是可以通過經驗來驗證的。尤其是,因果圖暗示了變數集合之間的某些條件獨立或依賴關係。這些相關性或獨立性可以通過經驗來測試,如果資料中沒有這些相關性或獨立性,則表明因果模型是錯誤的。將這一觀點向前推進,你可以嘗試執行完整的因果發現:嘗試從經驗資料中推斷出因果模型或其至少某些方面。
但底線是:一個完整的因果模型是一種先驗知識,你必須將其新增到你的分析中,以獲得因果問題的答案,而不是進行實際干預。光憑資料推理是不能給你這個答案的。與貝葉斯分析中的先驗不同(可以提高資料效率但並非不可或缺),因果推理中的因果圖是必不可少的。除了少數例外情況,沒有它們你所能做的就是進行隨機對照實驗。
總結
因果推理確實是一個基本的東西。它讓我們可以回答「如果我們做了 x 會發生什麼」這類的問題,這些問題通常需要受控實驗和明確的干預來回答。我甚至沒有提到更有力的反事實推理。
在某些情況下,你可以不需要因果推理。通常,你真的只是想做正常的推理。在其他諸如無模型 RL 的應用中,顯式控制某些變數的能力可以讓你避免明確地回答因果問題。但是在幾種非常重要的應用情況中,因果推理提供了以原則性方式解決問題的唯一方法。
我想再次強調,這不是一個討論用深度學習還是因果推理的問題。在很多情況下,你可以同時用到這兩個。因果推理和 do-calculus 讓你能夠理解一個問題,並根據在因果圖中捕獲的假設從資料中確定需要估計的內容。但是,一旦完成了這一工作,你仍然需要強大的工具來根據資料實際評估這一點。此時,你仍然可以使用深度學習、SGD、變分邊界等。最近的文章以及 Pearl 聲稱沒有得到充分探索的,正是將深度學習的剖面結構應用於因果推理。
原文地址:http://www.inference.vc/untitled/