超引數搜尋不夠高效?這幾大策略瞭解一下

ofollow,noindex" target="_blank">機器之心 翻譯
Alessio Gozzoli 作者 朱乾樹 張倩 編譯
超引數搜尋不夠高效?這幾大策略瞭解一下
整天 babysitting 深度學習模型是不是很心累?這篇文章或許能幫到你。本文討論了高效搜尋深度學習模型最佳超引數集的動機和策略。作者在 FloydHub 上演示瞭如何完成這項工作以及研究的導向。讀完這篇文章後,你的資料科學工具庫將新增一些強大的新工具,幫助你為自己的深度學習模型自動找到最佳配置。
與機器學習模型不同,深度學習模型實際上充滿了 超引數 。
當然,並非所有變數對模型的學習過程都一樣重要,但是,鑑於這種額外的複雜性,在這樣一個高維空間中找到這些變數的最佳配置顯然是一個不小的挑戰。
幸運的是,我們有不同的策略和工具來解決搜尋問題。開始深入!
我們的目的
怎麼做?
我們希望找到最佳的 超引數 配置,幫助我們在驗證 / 測試集的關鍵度量上得到最佳分數。
為何?
在計算力、金錢和時間資源有限的情況下,每個科學家和研究員都希望獲得最佳模型。但是我們缺少有效的 超引數 搜尋來實現這一目標。
何時?
-
研究員和深度學習愛好者在最後的開發階段嘗試其中一種搜尋策略很常見。這有助於從經過幾個小時的訓練獲得的最佳模型中獲得可能的提升。
-
超引數 搜尋作為半 / 全自動深度學習網路中的階段或元件也很常見。顯然,這在公司的資料科學團隊中更為常見。
等等,究竟何謂 超引數 ?
我們從最簡單的定義開始,
超引數 是你在構建機器 /深度學習模型時可以調整的「旋鈕」。
將 超引數 比作「旋鈕」或「撥號盤」
或者:
超引數 是在開始訓練之前手動設定的具有預定值的訓練變數。
我們可能會同意學習率和Dropout率是 超引數 ,但模型設計變數呢?模型設計變數包括嵌入,層數,啟用函式等。我們應該將這些變數視為 超引數 嗎?
模型設計變數 + 超引數 →模型引數
簡單起見,我們也可以將模型設計元件視為 超引數 集的一部分。
最後,從訓練過程中獲得的引數(即從資料中學習的變數)算 超引數 嗎?這些權重稱為模型引數。我們不將它們算作 超引數 。
好的,讓我們看一個真實的例子。請看下面的圖片,僅以此圖說明深度學習模型中變數的不同分類。
變數類別示例圖
下一個問題:搜尋代價高昂
我們已經知道,我們的目標是搜尋 超引數 的最佳配置,但 超引數 搜尋本質上是一個受計算能力、金錢和時間約束的迭代過程。
超引數 搜尋週期
一切都以猜測一個不錯的配置開始(步驟 1),然後我們需要等到訓練完畢(步驟 2)以獲得對相關度量標準的實際評估(步驟 3)。我們將跟蹤搜尋過程的進度(步驟 4),然後根據我們的搜尋策略選擇一個新的猜測引數(步驟 1)。
我們一直這樣做,直到達到終止條件(例如用完時間或金錢)。
我們有四種主要的策略可用於搜尋最佳配置。
-
照看(babysitting,又叫試錯)
-
網格搜尋
-
隨機搜尋
-
貝葉斯優化
照看
照看法被稱為試錯法或在學術領域稱為研究生下降法。這種方法 100% 手動,是研究員、學生和業餘愛好者最廣泛採用的方法。
該端到端的工作流程非常簡單:學生設計一個新實驗,遵循學習過程的所有步驟(從資料收集到特徵圖視覺化),然後她按順序迭代 超引數 ,直到她耗盡時間(通常是到截止日期)或動機。
照看(babysitting)
如果你已經註冊了 deeplearning.ai 課程,那麼你一定熟悉這種方法 - 這是由Andrew Ng教授提出的熊貓工作流程。
這種方法非常有教育意義,但它不能在時間寶貴的資料科學家的團隊或公司內部施展。
因此,我們遇到這個問題:
有更好的方式來增值我的時間嗎?
肯定有!我們可以定義一個自動化的 超引數 搜尋程式來節約你的時間。
網格搜尋
取自命令式指令「Just try everything!」的網格搜尋——一種簡單嘗試每種可能配置的樸素方法。
工作流如下:
-
定義一個 n 維的網格,其中每格都有一個 超引數 對映。例如 n = (learning_rate, dropout_rate, batch_size)
-
對於每個維度,定義可能的取值範圍:例如 batch_size = [4,8,16,32,64,128,256]
-
搜尋所有可能的配置並等待結果去建立最佳配置:例如 C1 = (0.1, 0.3, 4) -> acc = 92%, C2 = (0.1, 0.35, 4) -> acc = 92.3% 等...
下圖展示了包含Dropout和學習率的二維簡單網格搜尋。
兩變數併發執行的網格搜尋
這種平行策略令人尷尬,因為它忽略了計算曆史(我們很快就會對此進行擴充套件)。但它的本意是,你擁有的計算資源越多,你可以同時嘗試的猜測就越多!
這種方法的真正痛點稱為 curse of dimensionality(維數災難)。這意味著我們新增的維數越多,搜尋在時間複雜度上會增加得越多(通常是指數級增長),最終使這個策略變得不可行!
當 超引數 維度小於或等於 4 時,通常使用這種方法。但實際上,即使它保證在最後找到最佳配置,它仍然不是首選方案。相反,最好使用隨機搜尋——我們將在下面討論。
現在試試網格搜尋!
單擊以下連結可在 FloydHub 上開啟 Workspace:https://www.floydhub.com/signup?source=run。你可以使用工作區在完全配置的雲伺服器上執行以下程式碼(使用 Scikit-learn 和 Keras 進行網格搜尋)。
# Load the dataset x, y = load_dataset() # Create model for KerasClassifier def create_model(hparams1=dvalue, hparams2=dvalue, ... hparamsn=dvalue): # Model definition ... model = KerasClassifier(build_fn=create_model) # Define the range hparams1 = [2, 4, ...] hparams2 = ['elu', 'relu', ...] ... hparamsn = [1, 2, 3, 4, ...] # Prepare the Grid param_grid = dict(hparams1=hparams1, hparams2=hparams2, ... hparamsn=hparamsn) # GridSearch in action grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=, cv=, verbose=) grid_result = grid.fit(x, y) # Show the results print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_)) means = grid_result.cv_results_['mean_test_score'] stds = grid_result.cv_results_['std_test_score'] params = grid_result.cv_results_['params'] for mean, stdev, param in zip(means, stds, params): print("%f (%f) with: %r" % (mean, stdev, param))
隨機搜尋
幾年前,Bergstra 和 Bengio 發表了一篇驚人的論文 (http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf),證明了網格搜尋的低效率。
網格搜尋和隨機搜尋之間唯一真正的區別在於策略週期的第 1 步 - 隨機搜尋從配置空間中隨機選取點。
讓我們使用下面的圖片(論文中提供)來展示研究員的證明。
網格搜尋vs 隨機搜尋
影象通過在兩個 超引數 空間上搜索最佳配置來比較兩種方法。它還假設一個引數比另一個引數更重要。這是一個安全的假設,因為開頭提到的深度學習模型確實充滿了 超引數 ,並且研究員 / 科學家 / 學生一般都知道哪些 超引數 對訓練影響最大。
在網格搜尋中,很容易注意到,即使我們已經訓練了 9 個模型,但我們每個變數只使用了 3 個值!然而,使用隨機佈局,我們不太可能多次選擇相同的變數。結果是,通過第二種方法,我們將為每個變數使用 9 個不同的值訓練 9 個模型。
從每個影象佈局頂部的曲線圖可以看出,我們使用隨機搜尋可以更廣泛地探索 超引數 空間(特別是對於更重要的變數)。這將有助於我們在更少的迭代中找到最佳配置。
總結:如果搜尋空間包含 3 到 4 個以上的維度,請不要使用網格搜尋。相反,使用隨機搜尋,它為每個搜尋任務提供了非常好的基準。
網格搜尋和隨機搜尋的優缺點
現在試試隨機搜尋!
單擊以下連結可在 FloydHub 上開啟 Workspace:https://www.floydhub.com/signup?source=run。你可以使用工作區在完全配置的雲伺服器上執行以下程式碼(使用 Scikit-learn 和 Keras 進行隨機搜尋)。
# Load the dataset X, Y = load_dataset() # Create model for KerasClassifier def create_model(hparams1=dvalue, hparams2=dvalue, ... hparamsn=dvalue): # Model definition ... model = KerasClassifier(build_fn=create_model) # Specify <mark data-type="technologies" data-id="2e982b73-88e2-41e8-a430-f7ae5a9af4bf">parameter</mark>s and distributions to sample from hparams1 = randint(1, 100) hparams2 = ['elu', 'relu', ...] ... hparamsn = uniform(0, 1) # Prepare the Dict for the Search param_dist = dict(hparams1=hparams1, hparams2=hparams2, ... hparamsn=hparamsn) # Search in action! n_iter_search = 16 # Number of <mark data-type="technologies" data-id="2e982b73-88e2-41e8-a430-f7ae5a9af4bf">parameter</mark> settings that are sampled. random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=n_iter_search, n_jobs=, cv=, verbose=) random_search.fit(X, Y) # Show the results print("Best: %f using %s" % (random_search.best_score_, random_search.best_params_)) means = random_search.cv_results_['mean_test_score'] stds = random_search.cv_results_['std_test_score'] params = random_search.cv_results_['params'] for mean, stdev, param in zip(means, stds, params): print("%f (%f) with: %r" % (mean, stdev, param))
後退一步,前進兩步
另外,當你需要為每個維度設定空間時,每個變數使用正確的比例非常重要。
常用的批大小和學習率的比例空間
例如,通常使用 2 的冪作為批大小的值,並在對數尺度上對學習率進行取樣。
放大!
從上面的佈局之一開始進行一定數量的迭代也很常見,然後通過在每個變數範圍內更密集地取樣並放大到有希望的子空間,然後甚至用相同或不同的搜尋策略開始新的搜尋。
還有一個問題:獨立猜測!
不幸的是,網格和隨機搜尋都有共同的缺點:
每一次新猜測都獨立於之前的訓練!
這聽起來可能有些奇怪、令人意外,儘管需要大量時間,但令照看法起效的是科學家有效推動搜尋和實驗的能力,他們通過使用過去的實驗結果作為資源來改進下一次訓練。
等一下,這些好像在哪兒聽過...... 嘗試將 超引數 搜尋問題建模為機器學習任務會怎麼樣?!
請允許我介紹下貝葉斯優化。
貝葉斯優化
此搜尋策略構建一個代理模型,該模型試圖從 超引數 配置中預測我們關注的指標。
在每次新的迭代中,代理人將越來越自信哪些新的猜測可以帶來改進。就像其他搜尋策略一樣,它也有相同的終止條件。
貝葉斯優化工作流
如果聽起來有點困惑,請不要擔心——是時候參考另一個圖例了。
高斯過程在起作用
我們可以將高斯過程定義為代理,它將學習從 超引數 配置到相關度量的對映。它不僅會將預測轉化為一個值,還會為我們提供不確定性的範圍(均值和方差)。
我們來深入研究這個偉大教程 (https://www.iro.umontreal.ca/~bengioy/cifar/NCAP2014-summerschool/slides/Ryan_adams_140814_bayesopt_ncap.pdf) 提供的示例。
有 2 個點的高斯過程的優化過程
在上圖中,我們遵循單變數(在水平軸上)的高斯過程優化的第一步。在我們想象的例子中,這可以代表學習率或 dropout 率。
在垂直軸上,我們繪製了相關度量作為單個 超引數 的函式。因為我們正在尋找儘可能低的值,所以可以將其視為損失函式。
黑點代表訓練到當前階段的模型。紅線是 ground truth,換句話說,就是我們正在努力學習的函式。黑線表示我們對 ground truth 函式的實際假設的平均值,灰色區域表示空間中的相關不確定性或方差。
我們可以注意到,點周圍的不確定性有所減少,因為我們對這些點的結果非常有信心(因為我們已經在這裡訓練了模型)。同時,在我們擁有較少資訊的領域,不確定性會增加。
現在我們已經定義了起點,準備好選擇下一個有希望的變數來訓練一個模型。為此,我們需要定義一個採集函式,它將告訴我們在哪裡取樣下一個引數。
在此示例中,我們使用了 Expected Improvement:這個函式旨在在我們使用不確定性區域中的建議配置時找到儘可能低的值。上面的 Expected Improvement 圖表中的藍點即為下一次訓練選擇的點。
3 點高斯過程
我們訓練的模型越多,代理人對下一個有希望取樣的點就越有信心。以下是模型經過 8 次訓練後的圖表:
8 點高斯過程
高斯過程屬於基於序列模型的優化(SMBO)類別的演算法。正如我們剛看到的,這些演算法為開始搜尋最佳 超引數 配置提供了非常好的基準。但是,跟所有工具一樣,它們也有缺點:
-
根據定義,該過程是有順序的
-
它只能處理數值引數
-
即使訓練表現不佳,它也不提供任何停止訓練的機制
請注意,我們只是簡單地談到了這個話題,如果你對細節部分以及如何擴充套件 SMBO 感興趣,那麼請看一下這篇論文 (https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf)。
現在試試貝葉斯優化!
單擊以下連結可在 FloydHub 上開啟 Workspace:https://www.floydhub.com/signup?source=run。你可以使用工作區在完全配置的雲伺服器上執行以下程式碼(使用 Hyperas 進行貝葉斯優化(SMBO-TPE))。
def data(): """ Data providing function: This function is separated from model() so that hyperopt won't reload data for each evaluation run. """ # Load / Cleaning / Preprocessing ... return x_train, y_train, x_test, y_test def model(x_train, y_train, x_test, y_test): """ Model providing function: Create Keras model with double curly brackets dropped-in as needed. Return value has to be a valid python dictionary with two customary keys: - loss: Specify a numeric evaluation metric to be minimized - status: Just use STATUS_OK and see hyperopt documentation if not feasible The last one is optional, though recommended, namely: - model: specify the model just created so that we can later use it again. """ # Model definition / hyper<mark data-type="technologies" data-id="2e982b73-88e2-41e8-a430-f7ae5a9af4bf">parameter</mark>s space definition / fit / eval return {'loss': <metrics_to_minimize>, 'status': STATUS_OK, 'model': model} # SMBO - TPE in action best_run, best_model = optim.minimize(model=model, data=data, algo=tpe.suggest, max_evals=, trials=Trials()) # Show the results x_train, y_train, x_test, y_test = data() print("Evalutation of best performing model:") print(best_model.evaluate(x_test, y_test)) print("Best performing model chosen hyper-<mark data-type="technologies" data-id="2e982b73-88e2-41e8-a430-f7ae5a9af4bf">parameter</mark>s:") print(best_run)
搜尋策略對比
現在讓我們來總結一下到目前為止所涵蓋的策略,以瞭解每個策略的優缺點。
總結
如果你或你的團隊有足夠的資源,貝葉斯 SMBO 可能是首選,但是你也應該考慮建立一個隨機搜尋的基準。
另一方面,如果你還在訓練或處於設計階段,即使在空間探索方面不切實際,照看法也是可以一試的。
正如我在上一節中提到的,如果一個訓練表現不佳,我們必須等到計算結束,因為這些策略都不能提供節省資源的機制。
因此,我們得出了最後一個問題:
我們能優化訓練時間嗎?
我們來試試看。
提前終止的力量
提前終止不僅是一項著名的正則化技術,而且在訓練錯誤時,它還是一種能夠防止資源浪費的機制。
下面是最常用的終止訓練標準的圖表:
終止標準
前三個標準顯而易見,所以我們把注意力集中在最後一個標準上。
通常情況下,研究人員會根據實驗類別來限定訓練時間。這樣可以優化團隊內部的資源。通過這種方式,我們能夠將更多資源分配給最有希望的實驗。
floyd-cli(我們的使用者用來與 FloydHub 通訊的軟體,已經在 Github 上開源)為此提供了一個標準:我們的高階使用者正在大規模使用它來調節他們的實驗。
這些標準可以在照看學習過程時手動應用,或者你可以通過常見框架中提供的鉤子 / 回撥在實驗中整合這些規則來做得更好:
-
Keras 提供了一個很好的提前終止功能,甚至還有一套回撥元件。由於 Keras 最近已經整合到Tensorflow 中,你也可以使用Tensorflow 程式碼中的回撥元件。
-
Tensorflow 提供了訓練鉤子,這些鉤子可能不像 Keras 回撥那樣直觀,但是它們能讓你對執行狀態有更多的控制。
-
Pytorch 還沒有提供鉤子或回撥元件,但是你可以在論壇上檢視 TorchSample 倉庫。我不太清楚 Pytorch 1.0 的功能列表(該團隊可能會在 PyTorch 開發者大會上釋出一些內容),這個功能可能會隨新版本一起釋出。
-
Fast.ai 庫也提供回撥元件,即使它目前沒有提供任何形式的文件(WIP),你也可以去找一個不錯的教程。幸運的是,他們有一個很棒的社群。
-
Ignite(Pytorch 的高階庫)提供類似於 Keras 的回撥,雖然還在開發階段,但它看起來確實是一個不錯的選擇。
名單就這麼多了,我的討論只涉及最常用 / 最流行的框架。-(我希望不會損害其他框架作者的玻璃心。如果是這樣,你可以將你的意見轉發給我,我會很樂意更新列表!)
還沒有結束。
機器學習有一個子領域叫做「AutoML」(AutomaticMachine Learning,自動機器學習),目的是實現模型選擇、特徵提取和 / 或 超引數 優化的自動化。
這就引出了最後一個問題(我保證是最後一個!):
我們能瞭解整個過程嗎?
你可以認為,AutoML 是一個解決了另一個機器學習任務的機器學習任務,類似於我們利用貝葉斯優化完成的任務,本質上是元機器學習。
研究:AutoML 和 PBT
你很可能聽說過谷歌的 AutoML,這是他們對神經架構搜尋的品牌重塑。請記住,在本文開頭,我們決定將模型設計元件合併到 超引數 變數中。那麼,神經架構搜尋是 AutoML 的子領域,旨在為給定任務找到最佳模型。關於這個主題的全面討論需要一系列文章。幸運的是,來自 fast.ai 的 Rachel Thomas 博士做了一項了不起的工作,我們很樂意提供連結:http://www.fast.ai/2018/07/12/auto-ml-1/。
我想和大家分享另一個來自 DeepMind 的有趣的研究成果,他們使用進化策略演算法的一種變體來執行 超引數 搜尋,稱為基於群體的訓練(Population Based Training,PBT)。PBT 也是 DeepMind 的另一項研究(《Capture the Flag: the emergence of complex cooperative agents》)的基礎,新聞報道並不完全,我強烈建議你去看看。引自 DeepMind:
就像隨機搜尋一樣,PBT 首先需要以隨機挑選 超引數 的方式訓練許多並行的神經網路。但是這些網路並不是獨立訓練的,而是使用其它網路的訓練資訊來修正這些 超引數 ,並將計算資源分配到那些有希望的模型上。這種方法的靈感來自於遺傳演算法:其中一個群體中的每個個體(被稱為 worker)可以利用除自身外其餘個體的資訊。例如,一個個體可能會從表現較好的個體那裡複製模型引數,它還能通過隨機改變當前的值來探索新的 超引數 集。
當然,這一領域可能還有許多其他有趣的研究。在這裡,我只是和大家分享了最近得到媒體關注的一些研究。
在 FloydHub 上管理你的實驗
FloydHub 最大的特點之一是能夠在訓練時比較使用不同的 超引數 集的不同模型。
下圖展示了 FloydHub 專案中的作業列表。你可以看到此使用者正在使用作業的訊息欄位(例如,floyd run --message "SGD, lr=1e-3, l1_drop=0.3" ...)以突出顯示在每個作業上使用的 超引數 。
此外,你還可以檢視每項作業的訓練指標。這些提供了快速瀏覽,幫助你瞭解哪些作業表現最佳,以及使用的機器型別和總訓練時間。
專案主頁
FloydHub 儀表板為你提供了一種簡單的方法來比較你在 超引數 搜尋中做的所有訓練——並且實時更新。
我們建議你為每個必須解決的任務 / 問題建立一個不同的 FloydHub 專案。通過這種方式,你可以更輕鬆地組織工作並與團隊協作。
訓練指標
如上所述,你可以輕鬆地在 FloydHub 上為你的作業釋出訓練指標。當你在 FloydHub 儀表板上檢視作業時,你將找到你定義的每個指標的實時圖表。
此功能無意替代Tensorboard(我們也提供此功能),而是旨在突出顯示你已選擇的 超引數 配置的訓練走勢。
例如,如果你正在監督訓練過程,那麼訓練指標肯定會幫助你確定和應用停止標準。
訓練指標
原文連結:https://blog.floydhub.com/guide-to-hyperparameters-search-for-deep-learning-models/
工程 超引數 AutoML 貝葉斯優化
相關資料
Neural Network
(人工)神經網路是一種起源於 20 世紀 50 年代的監督式機器學習模型,那時候研究者構想了「感知器(perceptron)」的想法。這一領域的研究者通常被稱為「聯結主義者(Connectionist)」,因為這種模型模擬了人腦的功能。神經網路模型通常是通過反向傳播演算法應用梯度下降訓練的。目前神經網路有兩大主要型別,它們都是前饋神經網路:卷積神經網路(CNN)和迴圈神經網路(RNN),其中 RNN 又包含長短期記憶(LSTM)、門控迴圈單元(GRU)等等。深度學習是一種主要應用於神經網路幫助其取得更好結果的技術。儘管神經網路主要用於監督學習,但也有一些為無監督學習設計的變體,比如自動編碼器和生成對抗網路(GAN)。
來源:機器之心
Dropout
神經網路訓練中防止過擬合的一種技術
來源:ImageNet Classification with Deep Convolutional
Curse of dimensionality
維數災難(英語:curse of dimensionality,又名維度的詛咒)是一個最早由理查德·貝爾曼(Richard E. Bellman)在考慮優化問題時首次提出來的術語,用來描述當(數學)空間維度增加時,分析和組織高維空間(通常有成百上千維),因體積指數增加而遇到各種問題場景。這樣的難題在低維空間中不會遇到,如物理空間通常只用三維來建模。
來源: 維基百科
Hyperparameter
在機器學習中,超引數是在學習過程開始之前設定其值的引數。 相反,其他引數的值是通過訓練得出的。 不同的模型訓練演算法需要不同的超引數,一些簡單的演算法(如普通最小二乘迴歸)不需要。 給定這些超引數,訓練演算法從資料中學習引數。相同種類的機器學習模型可能需要不同的超引數來適應不同的資料模式,並且必須對其進行調整以便模型能夠最優地解決機器學習問題。 在實際應用中一般需要對超引數進行優化,以找到一個超引數元組(tuple),由這些超引數元組形成一個最優化模型,該模型可以將在給定的獨立資料上預定義的損失函式最小化。
來源: Wikipedia
Genetic programming
遺傳程式設計或稱基因程式設計,簡稱GP,是一種從生物演化過程得到靈感的自動化生成和選擇計算機程式來完成使用者定義的任務的技術。從理論上講,人類用遺傳程式設計只需要告訴計算機“需要完成什麼”,而不用告訴它“如何去完成”,最終可能實現真正意義上的人工智慧:自動化的發明機器。
來源: 維基百科
Learning rate
在使用不同優化器(例如隨機梯度下降,Adam)神經網路相關訓練中,學習速率作為一個超引數控制了權重更新的幅度,以及訓練的速度和精度。學習速率太大容易導致目標(代價)函式波動較大從而難以找到最優,而弱學習速率設定太小,則會導致收斂過慢耗時太長
來源:Liu, T. Y. (2009). Learning to rank for information retrieval. Foundations and Trends® in Information Retrieval, 3(3), 225-331. Wikipedia
Grid search
網格搜尋是一項模型超引數優化技術,常用於優化三個或者更少數量的超引數,本質是一種窮舉法。對於每個超引數,使用者選擇一個較小的有限集去探索。然後,這些超引數笛卡爾乘積得到若干組超引數。網格搜尋使用每組超引數訓練模型,挑選驗證集誤差最小的超引數作為最好的超引數。
Machine Learning
機器學習是人工智慧的一個分支,是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、計算複雜性理論等多門學科。機器學習理論主要是設計和分析一些讓計算機可以自動“學習”的演算法。因為學習演算法中涉及了大量的統計學理論,機器學習與推斷統計學聯絡尤為密切,也被稱為統計學習理論。演算法設計方面,機器學習理論關注可以實現的,行之有效的學習演算法。
來源:Mitchell, T. (1997). Machine Learning. McGraw Hill.
Loss function
在數學優化,統計學,計量經濟學,決策理論,機器學習和計算神經科學等領域,損失函式或成本函式是將一或多個變數的一個事件或值對映為可以直觀地表示某種與之相關“成本”的實數的函式。
來源: Wikipedia
Regularization
當模型的複雜度增大時,訓練誤差會逐漸減小並趨向於0;而測試誤差會先減小,達到最小值後又增大。當選擇的模型複雜度過大時,過擬合現象就會發生。這樣,在學習時就要防止過擬合。進行最優模型的選擇,即選擇複雜度適當的模型,以達到使測試誤差最小的學習目的。
來源:李航著 統計學習方法 清華大學出版社
time complexity
在電腦科學中,演算法的時間複雜度是一個函式,它定量描述了該演算法的執行時間。這是一個代表演算法輸入值的字串的長度的函式。時間複雜度常用大O符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,亦即考察輸入值大小趨近無窮時的情況。例如,如果一個演算法對於任何大小為 n (必須比 n0 大)的輸入,它至多需要 5n3 + 3n 的時間執行完畢,那麼它的漸近時間複雜度是 O(n3)。
來源: 維基百科
Weight
線性模型中特徵的係數,或深度網路中的邊。訓練線性模型的目標是確定每個特徵的理想權重。如果權重為 0,則相應的特徵對模型來說沒有任何貢獻。
來源:Google AI Glossary
Deep learning
深度學習(deep learning)是機器學習的分支,是一種試圖使用包含複雜結構或由多重非線性變換構成的多個處理層對資料進行高層抽象的演算法。 深度學習是機器學習中一種基於對資料進行表徵學習的演算法,至今已有數種深度學習框架,如卷積神經網路和深度置信網路和遞迴神經網路等已被應用在計算機視覺、語音識別、自然語言處理、音訊識別與生物資訊學等領域並獲取了極好的效果。
來源: LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. nature, 521(7553), 436.
Tensor
張量是一個可用來表示在一些向量、標量和其他張量之間的線性關係的多線性函式,這些線性關係的基本例子有內積、外積、線性對映以及笛卡兒積。其座標在 維空間內,有 個分量的一種量,其中每個分量都是座標的函式,而在座標變換時,這些分量也依照某些規則作線性變換。稱為該張量的秩或階(與矩陣的秩和階均無關係)。 在數學裡,張量是一種幾何實體,或者說廣義上的“數量”。張量概念包括標量、向量和線性運算元。張量可以用座標系統來表達,記作標量的陣列,但它是定義為“不依賴於參照系的選擇的”。張量在物理和工程學中很重要。例如在擴散張量成像中,表達器官對於水的在各個方向的微分透性的張量可以用來產生大腦的掃描圖。工程上最重要的例子可能就是應力張量和應變張量了,它們都是二階張量,對於一般線性材料他們之間的關係由一個四階彈性張量來決定。
來源: 維基百科
Gaussian Processes

機器之心是國內領先的前沿科技媒體和產業服務平臺,關注人工智慧、機器人和神經認知科學,堅持為從業者提供高質量內容和多項產業服務。