自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用三維Demo看懂各種優(yōu)化算法,還有C++程序員福音

新聞 前端 算法
機(jī)器學(xué)習(xí)里的優(yōu)化算法很多,比如SGD、Adam、AdaGrad、AdaDelta等等,光是它們的迭代公式就已經(jīng)夠讓人頭疼。

本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。

機(jī)器學(xué)習(xí)里的優(yōu)化算法很多,比如SGD、AdamAdaGrad、AdaDelta等等,光是它們的迭代公式就已經(jīng)夠讓人頭疼。

用三維Demo看懂各種優(yōu)化算法,還有C++程序員福音

好在TensorFlow、Keras、PyTorch中都集成了這些優(yōu)化工具,但它們是如何在一步步迭代中“滑落”到最小值的,你真的清楚嗎?

現(xiàn)在有一個(gè)機(jī)器學(xué)習(xí)優(yōu)化算法的Demo,能幫你從圖像中直觀感受到調(diào)參對(duì)算法結(jié)果的影響,以及各自的優(yōu)缺點(diǎn)。

它就是ensmallen!它的開發(fā)者不僅提供了Demo,還給程序員們打包了一份C++數(shù)據(jù)庫,那我們先來試玩一下吧。

試玩Demo

試玩方法很簡(jiǎn)單,甚至不需要安裝任何軟件,進(jìn)入ensmallen網(wǎng)站,選擇Demo標(biāo)簽,就能看到一組優(yōu)化算法的3D示意圖。

頁面默認(rèn)是常見的Adam算法,我們會(huì)看到參數(shù)沿著紅色的路線,最終落入損失函數(shù)的***點(diǎn):

用三維Demo看懂各種優(yōu)化算法,還有C++程序員福音

左側(cè)是參數(shù)初始值所在位置,也就是圖片中的紅點(diǎn),可以用鼠標(biāo)隨意拖動(dòng)。

中間和右側(cè)的圖都是損失函數(shù)的“等高線”。中間以不同顏色標(biāo)記不同高度,右側(cè)直接給出了損失函數(shù)的梯度場(chǎng),以箭頭指向表示梯度方向、長度表示梯度大小??梢钥闯龅雀呔€越密集的地方,梯度也越大。

如果覺得上面的損失函數(shù)圖不夠清晰直觀,還有高清3D大圖:

用三維Demo看懂各種優(yōu)化算法,還有C++程序員福音

隨著迭代步數(shù)的增加,損失函數(shù)的數(shù)值不斷減?。?/p>

用三維Demo看懂各種優(yōu)化算法,還有C++程序員福音

Adam算法可以調(diào)節(jié)的超參數(shù)有:步長、迭代次數(shù)、允許誤差、β1β2、模糊因子ϵBatch Size。

用三維Demo看懂各種優(yōu)化算法,還有C++程序員福音

拖動(dòng)滑動(dòng)條調(diào)節(jié)超參數(shù),“紅線”的形狀和終點(diǎn)也會(huì)隨之變化。我們不妨調(diào)節(jié)一下步長,看看這個(gè)參數(shù)會(huì)對(duì)結(jié)果造成什么樣的影響。

增加步長會(huì)讓學(xué)習(xí)曲線震蕩幅度變大,步長太小會(huì)讓損失函數(shù)收斂過慢:

用三維Demo看懂各種優(yōu)化算法,還有C++程序員福音

△ 步長分別是0.3、0.03和0.003的三種情況

以上只是最簡(jiǎn)單的情況,Demo界面還提供其他奇形怪狀的損失函數(shù):

用三維Demo看懂各種優(yōu)化算法,還有C++程序員福音

以及近乎所有常見的優(yōu)化算法:

用三維Demo看懂各種優(yōu)化算法,還有C++程序員福音

在不同形狀的損失函數(shù)里,這些優(yōu)化算法各有優(yōu)缺點(diǎn)。

如果損失函數(shù)的“等高線”是橢圓,Adam收斂速度很快,僅迭代100步左右就已經(jīng)收斂,而AdaGrad迭代了近300步才收斂。

用三維Demo看懂各種優(yōu)化算法,還有C++程序員福音

但Adam并非就有絕對(duì)優(yōu)勢(shì)。在有多個(gè)鞍點(diǎn)和局部最小值的圖形中,Adam雖然在開始階段下降速度很快,但是在***階段震蕩較嚴(yán)重,收斂速度反而不及AdaGrad。

上面的“玩法”只是Demo很小的一部分,想嘗試更多請(qǐng)參見文末的鏈接地址。

C++程序員福音

千萬不要以為ensmallen只是一個(gè)好玩的Demo,實(shí)際上它還是一個(gè)高效的C++優(yōu)化庫。對(duì)于用C++來給AI編程的程序員來說,它能對(duì)任意函數(shù)進(jìn)行數(shù)學(xué)優(yōu)化,解決了C++機(jī)器學(xué)習(xí)工具匱乏的痛點(diǎn)。

ensmallen除了打包基本優(yōu)化算法之外,用戶還可以使用簡(jiǎn)單的API輕松添加新的優(yōu)化器。實(shí)現(xiàn)新的優(yōu)化器只需要有一種方法和一個(gè)新的目標(biāo)函數(shù),通常用一到兩個(gè)C++函數(shù)就能搞定。

安裝ensmallen需要滿足以下要求:

  • 支持C++ 11的編譯器
  • C++線性代數(shù)與科學(xué)計(jì)算庫Armadillo
  • 數(shù)學(xué)函數(shù)庫OpenBLASIntel MKLLAPACK

ensmallen中的所有內(nèi)容都在ens命名空間中,因此在代碼中放置一個(gè)using指令通常很有用 :

  1. using namespace ens; 

以使用Adam為例,其代碼如下:

  1. RosenbrockFunction f; 
  2. arma::mat coordinates = f.GetInitialPoint(); 
  3. Adam optimizer(0.001, 32, 0.9, 0.999, 1e-8, 100000, 1e-5, true); 
  4. optimizer.Optimize(f, coordinates); 

其中,Adam優(yōu)化器中參數(shù)的順序依次是:步長、Batch Size、β1、β2、ϵ、***迭代次數(shù)、允許誤差、是否以隨機(jī)方式訪問每個(gè)函數(shù)。

至于其他優(yōu)化算法,可以去網(wǎng)站查看詳細(xì)的說明文檔。

***附上所有資源:

ensmallen壓縮包下載地址:

https://ensmallen.org/files/ensmallen-1.14.2.tar.gz

Demo地址:

https://vis.ensmallen.org/

 

責(zé)任編輯:張燕妮 來源: 量子位
相關(guān)推薦

2012-11-08 09:49:30

C++Java程序員

2021-02-26 10:41:59

C++程序員代碼

2010-01-12 10:40:22

C++程序員

2023-11-03 07:46:54

CodeGeeX編程助手

2016-03-25 11:57:23

Java程序員C++

2010-01-12 14:30:41

C++程序

2023-07-17 10:28:00

C/C++編程接口

2011-03-30 09:26:20

c++程序員

2010-01-14 18:07:30

C++語言

2016-11-07 20:43:37

C程序員Protocol Bu

2011-03-29 09:01:27

C++程序員

2011-04-11 17:41:35

C++程序員

2011-05-24 17:20:57

程序員

2010-01-14 13:24:49

CC++語言

2010-04-01 09:17:02

C++程序員

2014-07-30 13:44:57

2011-02-15 13:12:02

JavaC++

2013-07-18 09:58:18

C++程序員

2020-04-17 11:45:30

程序員技術(shù)創(chuàng)業(yè)

2018-06-04 12:41:50

程序員貪心算法分析
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)