1. 程式人生 > >淺談深度學習中超引數調整策略

淺談深度學習中超引數調整策略

歡迎訪問Oldpan部落格,分享人工智慧有趣訊息,持續醞釀深度學習質量文。

前言

深度學習中,設計模型以及保證模型的正確性是首要需要考慮的。當模型設定完成時,理論上模型不存在問題,實現效果也通過計算可以復現出來。一切準備就緒後,那麼接下來需要操作的就是——調參了。

正文

為什麼很多人都稱深度學習為煉丹?為什麼丹藥那麼難煉?為什麼為什麼,因為煉丹的調料放多少不知道啊?得一個一個去嘗試啊。

很多時候,模型搭建好了,但是隨之而來的就是引數選擇問題。引數選擇我們一般大概分為兩種方式,手動選擇和自動選擇。

  • 手動選擇就是我們利用對模型的理解和對結果的分析進行調參,手動選擇引數,這樣準確率稍高一些,但是時間長了我們會受不了,有時候真的會懷疑人生。
  • 自動選擇就是設計一個自動調參工具,讓程式自己跑就行了,當然這個對機子的要求高一些,相同情況下用GPU調參速度是用CPU的幾十倍。

接下來主要說一下自動選擇的幾個方式,程式利用pytorch程式碼說明。

手動選擇

手動選擇就是自個兒看,自己根據對模型的理解和對結果的分析進行,最好是視覺化卷積層進行分析,這樣可以觀察並慢慢尋找到一些迭代時隱藏的規律。

關於如何視覺化可以看一下,知乎上相關問題的回答

自動選擇

自動選擇說白了就是讓程式碼一直跑,然後用你提供的不同超引數一遍一遍嘗試然後得到比較滿意的結果。

Photo by SigOpt

如上圖,假設我們有2個超引數(n_estimators

max_depth),每個超引數的取值的不同組合所得到的score結果也不同。取值越合適score越高,當然上面的圖只是展示了二維的超引數,如果是3個或3個以上的超引數,我們可以想象一個超平面,最合適的引數組合得到的分數在最高點。

網格搜尋

網格搜尋是我們最常用的超引數調參策略。我們把每個可能的超引數組合都寫下來,進行嘗試:

style_weights = [0.1, 0.5, 1, 1.5, 2.5, 5, 10, 15, 20, 50, 100, 150, 200, 500, 1000,
                 5000, 10000, 50000, 100000, 500000, 1000000]
content_weights = [1, 5, 10, 100]

比如上面的程式碼,我們有兩個超引數,分別是style_weightcontent_weight,我們列出這些引數可能的值,然後進行訓練:

for i in range(len(content_weights)):
    for j in range(len(style_weights)):
        output = run_painterly_transfer(cnn, cnn_normalization_mean, cnn_normalization_std, style_img=style_image,
                                        content_img=content_image, mask_img=mask_image, tmask_img=tmask_image,
                                        style_weight=int(style_weights[j]), content_weight=int(content_weights[i]))

程式碼很簡單,通過迴圈將你覺得可能的引數都嘗試了一遍,我們可以在程式執行的過程中把你覺得需要的中間結果和最終結果都儲存到一個資料夾中,當訓練完成後去檢視分析即可。

整個過程就像下面的動圖:

Photo by SigOpt

一個一個找,嘗試就行了,可能某一天你睡覺起來,就會發現驚喜。

隨機搜尋

隨機搜尋就是利用分佈函式來模擬隨機數,然後利用隨機數生成的引數來進行訓練:

# 我們利用numpy中的隨機數生成器來生成隨機數
style_weights_rd = list(np.random.randint(0, 1000, size=20))
content_weights_rd = list(np.random.randint(0, 10, size=5))

同上面的引數一樣,只不過換成了在特定範圍的隨機值,當然這個範圍是我們自己定的。

然後將下面list換成隨機list即可:

for i in range(len(content_weights_rd)):
    for j in range(len(style_weights_rd)):
        output = run_painterly_transfer(cnn, cnn_normalization_mean, cnn_normalization_std, style_img=style_image,
                                        content_img=content_image, mask_img=mask_image, tmask_img=tmask_image,
                                        style_weight=int(style_weights_rd[j]), content_weight=int(content_weights_rd[i]))

整個過程動圖分析如下:

Photo by SigOpt

在《Random Search for Hyper-Parameter Optimization》這篇論文中提高了為什麼我們經常使用隨機搜尋而不是用網格,其實上面的圖很形象了,那就是實際中適合的引數往往在一個完整分佈中的一小塊部分,我們使用網路搜尋並不能保證直接搜尋到合適的超引數中,而隨機搜尋則大大提高了找到合適引數的可能性。

Photo by Bergstra, 2012

上圖則表明重要引數和不重要的引數在不同方法下的搜尋情況,我們給了兩個超引數,網格搜尋只能在我們設定的一小組範圍內進行,而隨機搜尋中的每個超引數是獨立的。也就是說網格搜尋因為我們的設定,超引數之間是有些許聯絡的,並不是獨一無二。研究表明隨機搜尋能夠更快地減少驗證集的誤差。

下面的程式碼中,加入content_weight中的1和5對結果的影響不大,但是我們通過for迴圈組合,和style_weights中的所有值都進行了嘗試了,顯然浪費了時間。

style_weights = [0.1, 0.5, 1, 1.5, 2.5, 5, 10, 15, 20, 50, 100, 150, 200, 500, 1000,
                   5000, 10000, 50000, 100000, 500000, 1000000]
content_weights = [1, 5, 10, 100]

貝葉斯優化

這個優化方法,說白了就是讓優化演算法來對超引數進行優化,也就是說,這個優化演算法的物件是超引數,然後結果是loss損失,通過求超引數對損失的梯度來實現對超引數的更新,呃,這個計算量真的很大很大,個人幾乎不用這個方法,一般都是大企業才會用。通過學習來調節引數,這個結果真的是更加不可預知的。

Photo by SigOpt

上面這個圖大概描述了這個過程,當然這只是“好的那一面”的過程。

後記

復現、調參並不容易,其實很多論文中實現的效果看起來不錯,但是實際上如果自己去復現是很難的。而且也有很多論文其實自身並沒有復現,只是理論上的實現就可以發表,神經網路在調參中不確定性因素太多,玄學深度學習名副其實。最後再強調一遍,如果超引數足夠多,訓練一兩個月都是有可能的。

所以說,路道阻且長。

此文由騰訊雲爬蟲爬取,文章來源於Oldpan部落格

歡迎關注Oldpan部落格公眾號,持續醞釀深度學習質量文:

相關推薦

深度學習引數調整策略

歡迎訪問Oldpan部落格,分享人工智慧有趣訊息,持續醞釀深度學習質量文。 前言 深度學習中,設計模型以及保證模型的正確性是首要需要考慮的。當模型設定完成時,理論上模型不存在問題,實現效果也通過計算可以復現出來。一切準備就緒後,那麼接下來需要操作的就是——調參了。

深度學習落地問題

歡迎訪問Oldpan部落格,分享人工智慧有趣訊息,持續醞釀深度學習質量文。 前言 深度學習不不僅僅是理論創新,更重要的是應用於工程實際。 關於深度學習人工智慧落地,已經有有很多的解決方案,不論是電腦端、手機端還是嵌入式端,將已經訓練好的神經網路權重在各個平臺跑起來,

深度學習的瓶頸

轉自網路              人工智慧現在已經非常火了,各種新聞機構都在不斷地放出猛料,有的說現在IBM的Waston人工智慧已經能夠徹底取代勞動者了;還有的說現在的演算法在醫療領域已經能夠打敗醫生了。每一天,都有新的人工智慧初創公司出現,每一家都聲稱自己在利用機器學習,徹底顛覆你個人的生活,這些都是商

湯澄:深度學習

1.關於訓練神經網路 1.1訓練神經網路是深度學習中最難的部分 先建立數學模型。需要一個超級大資料集,例如大量機場和出發日期的組合 ;需要量的計算能力。 1.2訓練過程 ·遍歷整個資料集 ·建立一個代價函式(Cost function) ·展示模型輸出與實際之間

周志華:深度學習

我們都知道直接掀起人工智慧熱潮的最重要的技術之一,就是深度學習技術。今天,其實深度學習已經有各種各樣的應用,到處都是它,不管影象也好,視訊也好,聲音自然語言處理等等。那麼我們問一個問題,什麼是深度學習? 深度學習的理論基礎尚不清楚 我想大多數人的答案,就是深度學習差不多就等於深度神經網路。有

深度學習(Deep Learning)的基本思想和方法

深度學習(Deep Learning),又叫Unsupervised Feature Learning或者Feature Learning,是目前非常熱的一個研究主題。 本文將主要介紹Deep Learning的基本思想和常用的方法。 一. 什麼是Deep Learning

深度學習訓練引數的調節

1、學習率 步長的選擇:你走的距離長短,越短當然不會錯過,但是耗時間。步長的選擇比較麻煩。步長越小,越容易得到區域性最優化(到了比較大的山谷,就出不去了),而大了會全域性最優 一般來說,前1000步,很大,0.1;到了後面,迭代次數增高,下降0.01,再多,然後再小一些。  2、權重 梯度消失的情

深度學習的落地問題

# 前言 深度學習不不僅僅是理論創新,更重要的是應用於工程實際。 關於深度學習人工智慧落地,已經有有很多的解決方案,不論是電腦端、手機端還是嵌入式端,將已經訓練好的神經網路權重在各個平臺跑起來,應用起來才是最實在的。 ![TIM截圖20180927154910](https://img2020.cnbl

深度學習:如何計算模型以及中間變數的視訊記憶體佔用大小

# 前言 親,視訊記憶體炸了,你的顯示卡快冒煙了! ```python torch.FatalError: cuda runtime error (2) : out of memory at /opt/conda/conda-bld/pytorch_1524590031827/work/aten/src/TH

CNN/RNN網路各自引數含義、如何初始化引數,BP計算以及常見引數調整策略。。。。

今天給大家推薦一本入門深度學習必讀的權威教材,由深度學習權威Yoshua Bengio和GAN之父Ian Goodfellow等人合著的DeepLearning經典教程《Deep Learning》。 廢話不多說,直接上鍊接。 中文版pdf下載地址:https://p

Keras/Python深度學習的網格搜尋引數調優(附原始碼)

超引數優化是深度學習中的重要組成部分。其原因在於,神經網路是公認的難以配置,而又有很多引數需要設定。最重要的是,個別模型的訓練非常緩慢。在這篇文章中,你會了解到如何使用scikit-learn python機器學習庫中的網格搜尋功能調整Keras深度學習模型中的

網路爬蟲深度優先演算法和簡單程式碼實現

學過網站設計的小夥伴們都知道網站通常都是分層進行設計的,最上層的是頂級域名,之後是子域名,子域名下又有子域名等等,同時,每個子域名可能還會擁有多個同級域名,而且URL之間可能還有相互連結,千姿百態,由此構成一個複雜的網路。 當一個網站的URL非常多的時候,我們務必要設計好URL,否則在後期的理解

自動機器學習引數調整(貝葉斯優化)

【導讀】機器學習中,調參是一項繁瑣但至關重要的任務,因為它很大程度上影響了演算法的效能。手動調參十分耗時,網格和隨機搜尋不需要人力,但需要很長的執行時間。因此,誕生了許多自動調整超引數的方法。貝葉斯優化是一種用模型找到函式最小值方法,已經應用於機器學習問題中的超引數搜尋,這種方法效能好,同時比隨機搜尋省時。此

情感計算是人機互動核心?深度學習在情感分析的應用

除自然語言理解(NLU)外,情感計算(Affective Computing)也成為近年來 AI 領域熱門的研究方向之一。其中針對中文語境里人機互動中的情感、情緒識別與理解,竹間智慧已經做了許多有益的探索,特別是如何利用情感、情緒分析,來幫助機器人實現對「對話意圖」與「深

機器學習深度學習的模型設計

今天我們來聊一聊,機器學習與深度學習的模型設計。 運用機器學習演算法進行研究,其實就是尋找目標函式的過程。通過構建機器學習模型(形成函式集),用訓練資料做驅動,尋找與訓練資料匹配,並且在測試資料中表現優異的函式。所以構建機器學習模型就顯得十分的重要了。以線性迴

Spark機器學習之模型選擇和引數調整

模型選擇(超引數調諧)ML中的一個重要任務是模型選擇,或使用資料找到給定任務的最佳模型或引數。 這也叫調音。 可以針對個體估算器(如Logistic迴歸)或包括多個演算法,特徵化和其他步驟的整個管道完成調整。 使用者可以一次調整整個流水線,而不是單獨調整管道中的每個元素。

【遊戲開發】遊戲開發常見的設計原則

依賴關系 unity 說過 srp des log gof https 類繼承   俗話說得好:“設計模式,常讀常新~”。的確,每讀一遍設計模式都會有些新的體會和收獲。馬三不才,才讀了兩遍設計模式(還有一遍是在學校學的),屬於菜鳥級別的。這次準備把閱

網絡的IP地址

網絡ip 思科 華為 IP地址是現在生活中不可或缺的,互聯網的運用,使我們的生活變得多元化,充滿樂趣。想了解這一切,需要先從根本了解,今天淺談以下IP地址,從以下幾個方面介紹; 一.IP地址的作用:在一定範圍,唯一的標示,一個上網的設備;(凡是需要上網的設備,必須得有IP地址)

JAVAEE企業級應用開發之MVC 的V-VIEW視圖

插入 第一次 開發 優點 就會 mil 是否 javaee 方便 Step1.情景概要 Hello,小夥伴們,好久不見,之前跟大家分享了三層架構與MVC思想,相信大家對於這兩塊內容有了相對清晰的個人認識了,既然我們講到了MVC,這裏我們接著這塊內容繼續往下深入,今天我們來看

前端知識 | 在React使用echarts

har family spa microsoft -- nbsp date text break 方法一:echarts-for-react 是一個非常簡單的針對於 React 的 Echarts 封裝插件。和使用所有其他插件一樣,首先,我們需要 install 它:第一步