1. 程式人生 > 實用技巧 >用簡單術語讓你看到貝葉斯優化之美

用簡單術語讓你看到貝葉斯優化之美

選自Medium

作者:Andre Ye

機器之心編譯

編輯:Panda

貝葉斯優化是機器學習超引數優化的常用技術之一,本文不會使用艱深的數學論證,而是通過簡單的術語帶你領略貝葉斯優化之美。

假設有一個函式 f(x)。其計算成本很高,它不一定是分析表示式,而且你不知道它的導數。

你的任務:找到全域性最小值。

當然,這是一個困難的任務,而且難度超過機器學習領域內的其它優化問題。梯度下降就是一種解決方案,它能通過函式的導數,利用數學捷徑來實現更快的表示式評估。

或者,在某些優化場景中,函式的評估成本較低。如果你能在幾秒內得到輸入 x 的變體的數百種結果,那麼使用簡單的網格搜尋就能得到很好的結果。

或者,你還可以使用一整套非常規的非梯度優化方法,比如粒子群或模擬退火。

不幸的是,當前的任務沒有這樣的便利。我們的優化受到了多個方面的限制,其中最顯著的包括:

  • 計算成本高。理想情況下,只要我們查詢函式的次數足夠多,我們就能在實質上將它復現出來,但在實際情況下,輸入的取樣很有限,優化方法必須在這種情況下也能有效工作。

  • 導數未知。在深度學習以及其它一些機器學習演算法中,梯度下降及其變體方法依然是最常用的方法,這當然是有原因的。知道了導數,能讓優化器獲得一定的方向感——我們沒有這種方向感。

  • 我們需要找到全域性最小值,這個任務即使對於梯度下降這種複雜精細的方法來說也很困難。我們的模型有時需要某種機制來避免被困於區域性最小值。

解決方案:針對以最少的步驟尋找全域性最小值的問題,貝葉斯優化是一個優雅的框架。

我們來構建一個假設的示例函式 c(x),即一個模型在給定輸入 x 下的成本。當然,這個函式的實際情況對優化器來說是未知的。假設 c(x) 的實際形狀如下:這就是所謂的「目標函式」。

貝葉斯優化可通過一種名為「代理優化(surrogate optimization)」的方法解決這一問題。在語境中,代理母親(代孕媽媽)是指同意為其他人生小孩的女人。基於同樣的語境,代理函式是指目標函式的一種近似。

代理函式可基於取樣得到的資料點而構建。

我們可以根據代理函式來識別哪些點是有潛力的最小值。然後我們在這些有潛力的區域執行更多采樣,然後據此更新代理函式。

在每一次迭代中,我們都要繼續觀察當前的代理函式,通過取樣對相關區域有更多瞭解,然後更新函式。注意,代理函式可表示成評估成本低得多的數學形式(比如用 y=x 近似表示一個成本更高的函式 y=arcsin((1-cos²x)/sin x) 的某個特定範圍)。

經過一定數量的迭代之後,我們的目標是抵達全域性最小值,除非該函式的形狀非常古怪(比如其中有大量大起大落的部分),這時候你就要問自己了:是不是資料有問題?

我們先來欣賞一下這種方法的美妙之處。它不會對函式做出任何假設(只要它是可優化的既可)、不需要導數的相關資訊、可通過巧妙地使用不斷更新的近似函式來執行常識推理。對原本的目標函式的高成本估計也不再是問題。

這是一種基於代理的優化方法。但它的貝葉斯性質體現在哪裡?

貝葉斯統計和建模和本質是基於新資訊先驗(之前的)信念,然後得到更新後的後驗(之後的)信念。這裡的代理優化就是這樣工作的,使得其能通過貝葉斯系統、公式和思想很好地表示。

我們來更仔細地看看這個代理函式,其通常表示成高斯過程,這可被看作是一種擲骰子過程,返回的是與給定資料點擬合的函式(比如 sin 或 log),而不是數字 1 到 6. 這個過程會返回若干函式以及它們各自的概率。

左圖:基於 4 個數據點生成的幾個基於高斯過程的函式;右圖:將這些函式聚合之後。

Oscar Knagg 這篇文章直觀地介紹了高斯過程的工作方式:https://towardsdatascience.com/an-intuitive-guide-to-gaussian-processes-ec2f0b45c71d

為什麼要使用高斯過程來建模代理函式,而不是使用其它曲線擬合方法?這是因為高斯過程本質上就是貝葉斯模式的。高斯過程是一種概率分佈,就像一個事件的最終結果分佈一樣(比如擲硬幣的 1/2 概率),只不過高斯過程是在所有可能的函式上的分佈。

舉個例子,我們也許可以定義當前的資料點集可由函式 a(x) 表示 40%、由函式 b(x) 表示 10% 等等。通過將代理函式表示成概率分佈,可使用新資訊,通過固有的概率貝葉斯過程來完成更新。也許當新資訊被引入時,a(x) 函式又只能表示 20% 的資料了。這樣的變化受貝葉斯公式的約束。

這會使得類似於新資料點的多項式迴歸擬合這樣的目標難以完成甚至不可能完成。

表示成先驗概率分佈的代理函式會通過一個「獲取函式(acquisition function)」而更新。這個函式負責在探索與利用權衡的基礎上,對提議的新點進行測試。

  • 利用的目標是取樣代理模型能很好地預測目標函式的地方。這會用到已知的有潛力的位置。但是,如果我們已經充分探索了某個特定的區域,再繼續利用已知資訊也收益不大了。

  • 探索的目標是取樣不確定度較高的位置。這能確保空間中不留下未探索的主要區域——全域性最小值可能就藏在此處。

太過重視利用而不太重視探索的獲取函式會讓模型駐留於其發現的第一個最小值(通常是區域性最小值)。反過來,重探索而輕利用的獲取函式則一開始就不會留在某個最小值,不管是區域性最小值還是全域性最小值。因此,為了得到很好的結果,需要達到微妙精巧的平衡。

獲取函式 a(x) 必須兼顧探索和利用。常見的獲取函式包括預期提升和提升的最大可能性,所有這些衡量的都是給定有關先驗(高斯過程)的資訊下,一個特定輸入在未來產生回報的概率。

我們歸總一下這些知識點。貝葉斯優化的執行方式為:

  1. 初始化一個高斯過程「代理函式」先驗分佈。

  2. 選擇幾個資料點 x 使得獲取函式 a(x) 在當前先驗分佈上的結果是最大的。

  3. 在目標成本函式 c(x) 中評估資料點 x 並獲取其結果 y。

  4. 使用新資料更新高斯過程先驗分佈,得到一個後驗分佈(這將作為下一步的先驗分佈)。

  5. 重複第 2-5 步並多次迭代。

  6. 解讀當前的高斯過程分佈(成本很低),找到全域性最小值。

貝葉斯優化的核心是將概率思想融入到代理優化思想之中。這兩種思想組合到一起,能創造出一種強大的系統。該系統具有很多應用場景,從醫藥產品開發到自動駕駛汽車。

不過,貝葉斯優化最常見的應用領域還是機器學習,尤其是超引數優化任務。舉個例子,如果我們要訓練一個梯度上升分類器,則會遇到幾十個超引數,從學習率到最大深度再到最小不純度拆分值。在這裡,x 表示模型的超引數,c(x) 表示模型在給定超引數 x 下的表現。

使用貝葉斯優化的主要動機是:在有些場景中,評估輸出的成本非常高。首先,需要使用這些引數構建一整個整合樹;其次,它們需要執行並完成幾次預測,這對於整合方法來說成本高昂。

可以這樣說,在給定一組引數的條件下,使用神經網路來評估損失函式的速度更快:只是重複執行矩陣乘法,這是非常快的,尤其是使用專用計算硬體時。這是使用梯度下降的原因之一,也就是反覆查詢以找到前進的方向。

總結

  • 代理優化是使用一個代理函式或近似函式來通過取樣估計目標函式。

  • 貝葉斯優化是通過將代理函式表示成概率分佈而將代理優化放入一個概率框架中,然後再使用新資訊更新這個分佈。

  • 獲取函式則是用於基於已知的先驗,評估利用空間中的某個特定點得到「好」結果的概率。其關鍵在於探索與利用的平衡。

  • 貝葉斯優化的主要使用場景是目標函式評估成本高的任務,比如超引數調節。有一些用於該任務的軟體庫,比如 HyperOpt。

原文連結:https://towardsdatascience.com/the-beauty-of-bayesian-optimization-explained-in-simple-terms-81f3ee13b10f

©THE END

轉載請聯絡 機器之心 公眾號獲得授權

投稿或尋求報道:con[email protected]