調整超參數對於優化機器學習模型至關重要,但這一過程計算量巨大且十分複雜。傳統的網格搜尋、隨機搜尋甚至貝葉斯最佳化方法常常會忽略超參數空間中的關鍵區域,從而導致模型並非最優。
在本次演講中,我們將展示我們開發的一款 JMP 插件,該插件利用空間填充式實驗設計 (DOE) 來更有效率地解決超參數調優難題。空間填充式 DOE 的使用確保了超參數組合在整個參數空間內更均勻地採樣,從而減少了所需的評估次數,同時提高了找到最佳設定的機率。
本次演講還將重點介紹 JMP 18 中與 Python 的改進集成,以及如何利用 JMP 內建的 DOE 等功能來幫助資料科學家。本次演講將先進的統計技術與實用易用的工具結合,以提升模型在各種應用中的效能。
大家好,感謝各位蒞臨本次講座。本次講座的主題是利用空間填充設計來調整超參數,進而改善機器學習。我是 Peter Hirsch,我的合作演講者是 Scott Allen。在詳細介紹我們改進機器學習的方法之前,我想先分享一些研究成果。
這裡有兩位參賽者,他們的挑戰是建立 10 個預測模型。每個預測模型都是針對分類反應變數的。如果我們看一下這兩位參賽者的背景,一位是世界知名的資料科學家 Russ Wolfinger,另一位則並非世界知名的資料科學家。這就像我和麥可喬丹一對一打籃球一樣,結果很可能一邊倒。
如你所見,最終結果非常接近,而且那些並非世界知名的資料科學家實際上取得了更好的結果。這怎麼可能? Torch Companion 插件是我的秘密武器。這個插件幫助我們所有人提升了建模結果,這就像在單挑籃球賽中擁有勒布朗詹姆斯這樣的隊友一樣。
我想先做一個非常簡單的測試。當我們觀察這張圖片時,我們看到的是貓還是狗?再看看另一張圖片,我們看到的是貓還是狗?很簡單,我們可以看出左邊是狗,右邊是貓,但是我們要如何確定圖片中的動物是貓還是狗呢?關鍵特徵是什麼?如果我們要建立一個模型,該如何訓練它來辨識貓還是狗呢?這裡有一張圖,它直觀地展示了神經網路的建構方式。在這個例子中,圖片是一個手寫的數字“4”,它被分成三層,每層有四個節點。
每個節點對原始輸入都有不同的表示,這些節點和層組合起來用於預測。每個資料集的複雜程度可能不同。例如,上面的例子,僅僅識別一個點是綠色還是紅色,可能比下面的例子(例如,識別狗或貓的圖片)簡單得多。後者可能需要更複雜的模型。層數、層大小或每層的節點數稱為超參數,需要調整才能優化每個模型。
我們如何調整模型來解決不同的問題?這裡是 JMP 中 Torch 調優插件的啟動窗口,裡面有許多不同的選項。我們可以調整諸如訓練輪數、學習率、層大小、激活函數等參數。有了這些選項,我們可以運行數百萬種不同的組合。那麼,我們該從哪裡開始呢?
在探索超參數空間時,我們可以採取幾種方法。第一種是網格搜索,我認為這是最常用的方法,或者說與全因子設計最接近。如果我們採用這種方法,我們會考察所有因子的所有可能組合,這將導致我們需要運行超過兩百五十萬個不同的模型。在大多數情況下,這數量太多了。我們也可以進行隨機搜索,即隨機選擇一些因子組合進行運行。
我們也可以採用貝葉斯優化方法,或者可以諮詢 Russ Wolfinger。當然,如果你能隨時聯繫到 Russ,或者找到其他和 Russ 水平相當的數據科學家,那就太好了,但這並非總是可行。我和 Scott,或是一個普通的實驗人員,該如何解決這個問題?我們把它當作一個實驗來處理。在 JMP 中,我們該如何進行實驗呢?是每次只考慮一個因素嗎?不,Drake 認為這不是個好主意。我們應該設計一個實驗。接下來我們會簡單討論這個方法,然後我把麥克風交給 Scott。
謝謝,Peter。接下來我們會一起了解這個 Torch Companion 插件的組成,展示一些範例,然後稍微實際操作一下。在此之前,我先簡單介紹一下這個外掛程式包含哪些內容。
這個插件實際上是將 JMP 的許多不同功能整合在一起,例如表格函數、DOE 平台、Russ 和他的團隊開發的 Torch 深度學習插件,以及一些圖表構建器輸出。雖然這些功能您或許可以單獨完成,但這個外掛程式旨在打造一個無縫的工作流程。與許多 JMP 平台類似,使用者需要指定列,這些列可以作為回應、因子和驗證條件。然後,您需要指定 Torch 參數,或在本例中指定參數範圍或不同的選項,並將這些參數傳遞給 Torch 外掛程式。我們想快速瀏覽一下這些介面。
列對話方塊與標準 JMP 平台中的對話方塊非常相似,您可以在其中載入回應列、因子列和驗證列。因子列可以是數值型、字元型,也可以是影像模型(在本例中)。我認為 Torch 外掛程式為 JMP 帶來的一個獨特功能是能夠查看圖像模型,因此我們也確保將此功能整合到這個配套插件中。點擊“確定”後,您將進入規範視窗。我們與 Russ 就此進行了一些討論,以獲得一些指導,以了解應該包含哪些參數,以便篩選出最接近最優的模型。
本文的目標是將 Torch Companion 與 Torch Deep Learning 外掛程式結合使用。我們並未列出所有可能需要調整的參數,但實際上,這將幫助您更有效率地接近最佳模型。我們可以調整模型類型(例如表格模型或影像模型)以及一些相關的調整參數。我們也可以查看不同的模型結構參數選項,特別是 DOE 試驗次數。這樣,您就可以擺脫每次只運行一個模型、一次只調整一個因素的繁瑣方法,只需設定一系列參數,即可一鍵查看 200 到 300 個模型。
你會注意到這裡有些選項是灰色的。我們希望這款外掛能夠方便Torch新手或機器學習新手使用,所以我們設定了一些限制條件。我知道Peter在開發過程中也很喜歡這些限制。
是的,它確實能讓我保持專注。這很有幫助。
如果您不熟悉這些不同類型的模型,我們預先選擇了一些最常用的模型和一些不錯的起點。如果您想使用此外掛程式篩選參數,可以選取「篩選參數」複選框,然後您就可以查看一系列參數了。同樣,我們會將一些可能並非最佳的選項灰顯,這些選項會根據您的資料表而有所不同。我們還篩選了一些更常用的激活函數,並將其中一些參數設為 2 的冪次方縮放,這有助於您更有效率地篩選各種參數,例如圖層大小。
我們還想在這裡添加一些高級選項。如果您選擇進階選項,您將可以存取 Torch 外掛程式中所有不同的模型類型,包括不同的表格模型類型以及所有可用的啟動函數。根據您對 Torch 深度學習的了解程度,您可以選擇簡單的路徑,也可以選擇進階路徑。讓我們來看一個例子。在這個例子中,我預先加載了一些不同的選項,包括一系列的訓練輪數和學習率,選擇了一些層大小,並將次數設為 100。您可以根據需要設定任意次數的試驗。
設定好所有參數範圍後,點選「運行」。點擊「運行」後,我們就進入了插件的背景運行。點擊“運行”後,它會在進行一些表格操作後生成空間填充圖。然後,它會將空間填滿設計表中的每一行傳遞給 Torch 深度學習。實際上,在正式開始之前,我已經啟動了一個模型。您可以看到我設定了運行 500 個 Torch 模型,並且可以看到它一直在運行,就像我們剛才講解的那樣。它正在遍歷空間填滿設計表中的每一行,讓我們大致了解損失函數隨訓練輪數的變化情況,從而判斷我們選擇的參數是否合適。我們將繼續講解,稍後再來查看結果。
Torch深度學習外掛程式運行後,完成數百個、數十個或您指定的任何數量的模型計算後,它會使用一些額外的表格函數和圖表構建器匯總結果,然後提供一個輸出或報告視窗供您解讀這些結果。根據解讀結果,您可以選擇兩條不同的路徑。一條路徑會帶您回到參數設定階段。也許您沒有得到任何令人滿意的模型。也許您認為這些模型還有改進的空間。
您可以設定新的參數範圍,選擇不同的函數,然後重新開始循環,這樣新結果就會加入原始結果。或者,您可能找到了一些非常優秀的模型,您對此充滿信心,認為無需進一步改進。現在,您可以將這些模型直接匯入 Torch 深度學習插件,以便進行更深入的模型最佳化;或者,您可以比較、儲存和部署這些模型;或者,您可以調整在配套工具中無法調整的參數。這就是我們設計的流程,整個過程很有趣。不過,我必須說,Peter 才是模型建構的主要貢獻者。 Peter,也許您可以分享一下您的使用經驗。
我想,如果這裡有軟體開發人員,你們可以把 Scott 看作是插件的開發者,而我是測試人員。我想到幾點。這是一個實驗設計(DOE),而 DOE 通常是一個迭代過程,我們先進行一次 DOE,從中學習,然後在此基礎上建立一個可能更優的 DOE。如果我們看一下我從幾個模型中得到的結果,你會發現大多數情況下我運行了不只一個 DOE。通常,這些模型運行速度非常快,只需幾秒鐘,因此可以運行大量的模型。有時運行時間會更長,需要運行多個 DOE,而且一開始肯定不想運行 100 個。例如,看看上面的第一個模型,那是一個圖像模型,每個模型大約需要 10 分鐘才能運行。
如果你一開始就創建 200 個模型,那你可能要等到週末才能看到結果。但如果你看看其他一些模型,你會發現如果每個模型運行時間都只有 4 秒,那麼運行 200 個模型可能稍微好一點。這裡有幾點建議。我喜歡先使用留出交叉驗證集,因為這比 K 折交叉驗證快得多。當你真正開始使用 K 折交叉驗證時,如果你喜歡這種方式,最後在 Torch 中運行模型時,你可以切換驗證列,但我認為在進行模型調優時,我更喜歡使用單一驗證集。
另外,我很喜歡Scott內建的時間檢查功能。如果你擔心某個模型(例如圖像模型)可能需要很長時間才能完成,你可以讓調優插件幫你檢查。
好的。謝謝你,彼得。我敢說,除了 Rust 之外,你在 JMP 製作的火炬模型數量可能是所有人中最多的。
絕對是表現最差的那些。
我們換個角度,進入插件,展示一些報告,以及如何篩選和最佳化這些模型。我們再來看看我們的模型。還沒完全完成。我們只得到了大約 270 個,而我們指定的是 500 個。
另一個內建功能是取消操作。您可以取消目前操作,原因可能有很多。例如,運行時間超出預期,或時間緊迫。無論是什麼原因,您都可以取消。當您接受 torch 錯誤時,系統會提供選項,讓您選擇繼續下一次執行。例如,您可能正在運行圖像模型,所有模型都運行得很快,但接下來某個模型運行時間會非常長。
你可以繼續運行 DOE,直接跳過當前實驗,進行下一個實驗;或者你也可以完全停止運行 DOE,我們在這裡選擇後者。程式會停止運行,然後產生報告,報告視窗現在就在這裡。這就是報告視窗。我們的 DOE 共有 500 個實驗,但你可以看到我們已經得到了其中 270 個實驗的結果。
接下來,我們將查看這個結果表格,我將引導大家了解一些最重要的資訊。首先是匯總統計資料。表格按驗證 R 平方值排序,因此驗證 R 平方值越高,行號越低。接下來,您可以查看所有不同的參數設定、不同的輸入以及一些輸出,例如模型運行時間以及目前已運行的 DOE 數量。
首先,你可以查看 R 平方熱圖。它實際上就是將驗證集的 R 平方值與訓練集的 R 平方值繪製在一起。你當然希望模型在驗證集和訓練集上都具有較高的 R 平方值,但你也能看到這裡 R 平方值的範圍很廣。如果你是 Torch 新手或機器學習新手,這一點尤其重要:如果你不確定應該設定哪些參數,那麼你得到的模型可能只有 R 平方值這麼低。你可能會想,我恐怕真的無法建立一個好的模型了。
然後你調整一些參數,結果可能反而更糟。我們可以看到,當你篩選一系列參數時,就能更清楚地了解模型的潛力。在這個例子中,我們可以看到一些模型表現相當不錯,驗證集和訓練集的 R 平方值都很高。雖然有一些內建的數據過濾器,但這些都只是在圖表構建器中,所以你當然可以隨意使用這些數據繪製圖表。還有兩個標籤頁分別用於查看各個參數,例如模型調優參數(如學習率和訓練輪數)及其隨時間或模型空間的變化趨勢,以及激活函數和其他層結構參數。
你可以考慮掃描多種不同類型的激活函數。我知道,彼得,你在運行這些模型時發現了一些有趣的結果。
當然。我們剛開始開發這個外掛的時候,Russ 建議我們先用 ReLU 來啟動函數。 ReLU 是最常用的,幾乎人人都用,是個不錯的起點。有些情況下 ReLU 的確表現不錯,但大多數情況下,我們發現其他激活函數的效果更好一些。倒不是說 Russ 的方法不好,只是能夠研究所有這些激活函數,看看能否透過調整參數獲得更好的結果,這確實很有幫助。
不。我認為這確實是我們的一個目的:如果您不了解這些激活函數,或者即使您了解,也可能根據經驗知道哪些函數適合某個數據集或模型類型,但如果您不了解,那麼這個功能就能幫助您快速瀏覽所有激活函數。在這個例子中,我們瀏覽了其中的六個函數,但實際上還有 20 個函數可供您參考。
我們還有一個參數重要性輸出。這實際上只是快速建立一個自助法森林模型,以顯示哪些超參數或調優參數對響應(在本例中為驗證集的 R 平方值)的影響最大。此外,我們還提供了各個模型的詳細資訊。您會注意到結果表中有一列提供了唯一的模型 ID,因此如果您想深入了解任何模型,只需打開該列即可。這只是 Torch 運行時導出的數據,因此即使我們基於驗證集的 R 平方值匯總了所有信息,您仍然可以訪問所有模型的詳細信息。所有模型的總計統計資訊都可用。
我想報告視窗的內容基本上都涵蓋到了,最後再總結一下插件的幾種不同工作流程選項。第一種是重新運行。在這種情況下,我們可能對某些模型的結果感到滿意,但我們可以查看使用了哪些激活函數,也許我們想要增加層數或層大小,所以我們可以回到先前的規範,並篩選出特定的函數。
也許我們只想查看這三個模型,但也可能想查看更大的圖層尺寸。那麼,我們可以指定,例如只查看 50 個圖層,然後點擊「執行」按鈕,執行選定的參數序列,然後再執行另外 50 個圖層,並將結果新增至表格。這是一個可以考慮的工作流程選項。另一種是紅色三角形中的一些選項。也許您對這個模型或這兩個模型感到滿意,並希望將它們匯入 Torch 外掛程式直接運行。
您無需來回切換並記住每個參數設置,然後手動輸入到 Torch 插件中。只需點擊紅色三角形,然後選擇“運行所選模型”。點擊「運行所選模型」後,它會將這些參數傳遞給 Torch 插件並運行,然後在 Torch 插件中產生報表。現在,我們可以查看這些模型的對比情況。可以看到,我們已經傳遞了所有相關的參數,現在我們可以更直接地比較最佳擬合模型,並更好地了解這些匯總統計資料。
最後,也許你的模型運行時間很長。在這種情況下,你可能無法在一天內完成所有調優工作。如果你想保存結果並稍後繼續,可以點擊紅色三角形,我們將保存此結果的資料表。保存後,我可以將其保存到任何我想要的位置,然後稍後重新加載。接下來,我們將示範如何操作。
我要關閉這個窗口,點擊確定。現在,如果我想重新載入已儲存的資料表,我會回到我之前的原始資料表。這是我之前用於建模的數據表。我要運行插件(也就是配套程式),然後點擊「呼叫」。你只需要確保輸入正確的列,也就是你在調優時指定的列,然後點選確定。現在,我們不用在這裡指定所有不同的參數,只需點擊「載入」按鈕即可,我之前沒有打開這個按鈕。
我們來這裡,進入調優結果頁面,然後點擊「開啟」。此時會跳出一個對話框,提示我們 x 軸變數、y 軸變數和驗證列都與之前相同。如果其中任何一項與您最初運行的參數不匹配,則不會載入。點擊「確定」後,我們將看到先前的調優運行結果,並且所有圖表都會重新產生。您可以返回設定頁面,然後重新執行這些調優。
我想這就是我想展示的全部了。 Torch 外掛裡還有一些其他選項,我真心希望大家能將它與 Russ 和他的團隊開發的 Torch 深度學習外掛程式結合使用。我相信,一旦您開始使用它,您會發現其中還有一些其他有用的功能。現在,或許我可以把麥克風交給 Peter,讓他談談一些結果,或者說最終結果。
聽起來不錯。謝謝,斯科特。這裡紅色部分是我模型驗證得到的R平方值,藍色部分是拉斯模型的驗證結果。我這麼說並非貶低拉斯。拉斯是一位優秀的資料科學家,但我認為這更體現了實驗設計(DOE)的優勢,而非一次只考慮一個因素。
這表明,如果讓化學家和數據科學家分別運行模型,並使用實驗設計(DOE),化學家可以取得與優秀數據科學家類似的成功,甚至可能做得更好。調優插件賦予了所有人這種能力,正如Scott所說,它並非旨在取代Torch插件,而是與Torch插件配合使用,並且將在應用程式商店上架。您可以同時取得這兩個插件。
我給自己頒發了一枚奧運獎牌,因為我打敗了Russ,我覺得這對任何人來說都是相當不錯的成績,尤其對於一個沒有數據科學背景的人來說更是如此。我們一開始討論的是識別貓狗,但如果從你的實際工作角度來思考,你會發現有很多不同的圖像模型,甚至是表格模型,你都可以使用這種深度學習神經網路方法,而調整這些超參數可以幫助你獲得更好的結果。
這些圖片來自 Torch 外掛程式故事書中的一些範例。我認為每個人都有類似的數據,可以應用這種方法。當然,我們也要感謝 Russ。我知道我們之前有點「刁難」他,但他在開發這個插件的過程中也給了我們很大的幫助,幫我們設定了一些規則,讓我不至於手忙腳亂。當然,也要感謝 JMP 指導委員會選擇這次演講。正如我們之前提到的,Torch 外掛程式和 Tuning 外掛程式都可以在應用程式商店下載。如果您想下載,可以掃描這裡的二維碼,或直接訪問 marketplace.jmp.com。謝謝。
謝謝。