農林漁牧網

您現在的位置是:首頁 > 農業

隱藏著的因果關係,如何讓相同的機器學習模型變得不同

2021-09-08由 機器之心Pro 發表于 農業

自變數和因變數怎麼區分

選自inference。vc

作者:Ferenc Huszár

機器之心編譯

參與:李詩萌、劉曉坤

本文是 Ferenc Huszár 關於因果推理系列的第二篇文章,他在第一篇中闡述了監督學習和因果推理如何在因果圖的框架下統一。在本文中,作者將通過幾個簡單的案例對比,展示當存在變數干預時,相同的聯合分佈如何受到因果關係的影響而出現截然不同的行為。

在這篇文章中,我將介紹在南非斯泰倫博斯大學的機器學習夏季學院講課中,用來解釋因果乾預的幾個簡單的例子。我將其稱之為三個指令碼的 toy example。

三個指令碼

假設你在教授程式設計課程,你讓學生寫一個 Python 指令碼,這個指令碼是要從均值和方差都確定的 2D 高斯分佈中取樣。因為從高斯分佈中抽樣的方法有很多種,可能會出現非常不同的方法。例如,下面是三個可以實現相同的、正確的取樣行為的指令碼:

隱藏著的因果關係,如何讓相同的機器學習模型變得不同

我透過反覆執行這些指令碼繪製了樣本點。如你所見,這三個指令碼在 x - y 座標圖上生成了相同的聯合分佈。你可以將這些分佈饋送到 two-sample test 中,然後你就會發現它們確實很難區分。

根據聯合分佈,這三個指令碼是不可區分的。

干預

儘管這三個指令碼產生了相同的分佈,但卻不盡相同。例如,當我們干預時,它們的行為會有所差異。

做個思想實驗:我是一個駭客,可以在 Python 直譯器中新增程式碼。對這些程式碼片段的每一行來說,我都可以插入一行我自己選擇的程式碼。假設我在每一行程式碼後都插入了一行 x=3,然後實際執行的程式碼是這樣的:

隱藏著的因果關係,如何讓相同的機器學習模型變得不同

我們現在可以在被黑的直譯器中執行指令碼,並觀察干預是如何改變 x 和 y 的分佈的:

隱藏著的因果關係,如何讓相同的機器學習模型變得不同

當然,我們可以看到,x 的值不再是隨機的了,它被設定為 3,這就導致所有的樣本都是沿著 x=3 的垂線排列的。但有趣的是,在不同的指令碼中,y 的分佈是不同的。在藍色的指令碼中,y 的均值在 5 左右,而綠色和紅色的指令碼中 y 的分佈是以 1 為中心的。下圖可以更好地觀察到干預行為下的 y 的邊緣分佈。

隱藏著的因果關係,如何讓相同的機器學習模型變得不同

我將這個圖示記為 p(y|do(X=3)),從語義上講這是指在將 x 的值設定為 3 的干預下的 y 的分佈。一般這和條件分佈 p(y|x=3) 是不同的,當然這三個指令碼都是一樣的。下面我將展示這些條件——請原諒這裡的估計誤差比較多,因為我真的懶得做這些圖了,但請相信我從技術上來講它們都是相同的:

隱藏著的因果關係,如何讓相同的機器學習模型變得不同

這裡的重點是:指令碼在干預下會產生不同的行為。

你只檢視指令碼產生的樣本的聯合分佈時,是很難區分指令碼的,但在干預下,它們的表現會有所差異。

因此,只有資料的聯合分佈不足以預測干預下的行為。

因果圖

如果聯合分佈不夠充分,那什麼級別的描述才能讓我們預測指令碼在干預下的行為呢?如果我有完整的原始碼,我當然可以執行修改後的指令碼(即執行實驗)並直接觀察它對分佈的影響。

但事實證明,你不需要完整的原始碼。只要知道原始碼對應的因果圖就夠了。因果圖編碼了變數間的因果關係,箭頭從原因指向結果。這裡有上述指令碼的因果圖:

隱藏著的因果關係,如何讓相同的機器學習模型變得不同

我們可以看到,即便它們產生了相同的聯合分佈,但指令碼的因果圖不同。因果結構這一附加知識使我們可以在不進行實驗的情況下推斷干預。為了在一般情況下做到這一點,我們可以用 do-calculus,在我之前的文章中有更詳細的解釋。

用圖來說,為了模擬干預的影響,你要先刪除指向被幹預變數的所有邊,對圖進行變換,在本例中這個變數是 x。

隱藏著的因果關係,如何讓相同的機器學習模型變得不同

第一行的三個圖描述了這三個指令碼。第二行是變換後的圖,在這些圖中刪除了所有指向 x 的邊。在第一個指令碼中,圖在變換前後看起來是一樣的。從這一點看,我們可以總結出 p(y|do(x))=p(y|x),也就是說在 x=3 時的 y 的分佈和在 x=3 時的 y 的條件分佈是一樣的。在第二個指令碼中,在變換後 x 和 y 中不再有任何連線,因此它們是相互獨立的。從這一點看,我們可以總結出 p(y|do(X=3))=p(y)。改變 x 的值對 y 的值不會產生影響,所以無論你將 x 設定為多少,y 都只是從它的邊際分佈中抽樣得到的。這一點也適用於第三張因果圖。

它的意義在於:只通過檢視因果圖,我們就可以預測指令碼在 x=3 的干預下的行為。我們可以在正常(無干預)條件下用觀察資料來計算並繪製出這三個指令碼的 p(y|do(X=3)),而不需要進行實驗或模擬干預。

因果圖允許我們在沒有任何干預的情況下預測模型在干預下的行為。

這證明可以在正常情況(無介入行為)下只用從指令碼中獲得的樣本估計干預試驗下 y 的觀測值的分佈。這就是所謂的觀測資料的因果推斷。

簡言之,干預因可以改變果,干預果不能改變因,就像在函式中我們也需要區分自變數和因變數。

隱藏著的因果關係,如何讓相同的機器學習模型變得不同

文章主旨

本文主旨總結在下面的圖片中:

隱藏著的因果關係,如何讓相同的機器學習模型變得不同

讓我們考慮一下在給定資料(來自聯合分佈的獨立同分布樣本)的情況下求解機器學習問題的場景。只要從聯合分佈中抽樣,就可以求解很多機器學習問題。例如,你可以透過逼近 p(y|x) 做有監督的機器學習,然後用它來執行影象分類、語音識別等任務。這些問題共同組成了藍色集合。

但是,我們知道有些問題不是隻用資料或聯合分佈就能解決的。值得注意的是,你通常無法根據現有資料預測出系統在某些干預下會做出什麼樣的行為。這類問題不在藍色集合之內。

但是,如果你用因果圖(有向無環圖,圖中的節點代表變數)中編碼的因果假設來補充資料,那麼你就可以利用這些額外的假設來回答這些問題,如綠色集合所示。

我還展示了更大的問題集合,但我在此不對它們進行敘述,將它們留在日後的帖子中。

(因果)圖來自哪裡

我最常被問到的問題是:如果我不知道圖是什麼樣的怎麼辦?如果我得到的圖是錯誤的怎麼辦?解決方法有很多。

必須要接受你的分析是基於所選擇的圖的,你的結論在編碼的假設下才是有效的。從某種程度上講,從觀測資料得到的因果推斷是主觀的。當你公開結果時,你必須要警告「在這些假設下,這個結果是成立的」。如果讀者不同意你的假設,他們可以對此提出質疑。

至於如何獲得圖,根據應用的不同而不同。如果你用推薦系統這樣的線上系統,就很容易畫出因果圖,因為它和子系統的連線以及資料饋送通路都是相對應的。在其他應用中,特別是在醫療健康領域,可能涉及到更多考慮。

最後,你可以用不同的發現因果關係的技術來嘗試從資料本身識別因果圖。理論上講,一般情況下是無法透過資料恢復完整的因果圖的。但是如果你添加了一些額外的平滑度或獨立性假設,就能夠以一定的可靠性從資料中恢復圖。

總結

我們已經看到,聯合分佈建模的作用存在侷限。如果你想預測干預的效果,也就是說計算類似於 p(y|do(x)) 的量,你就要在分析中加入因果圖。

樂觀的態度是,在獨立同分布的環境中,畫因果圖並使用 do-calculus(或類似的方法)都可以顯著拓寬機器學習可以解決的問題的邊界。

但從悲觀的角度看,如果你不瞭解這些,可能會一直集中於僅解決綠色區域的問題。但僅靠資料是無法為你提供這些問題的答案的。

無論如何,從觀察資料進行因果推斷都是一個值得注意的重要話題。

原文連結:https://www。inference。vc/causal-inference-2-illustrating-interventions-in-a-toy-example/

本文為機器之心編譯,轉載請聯絡原作者獲得授權。