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

實(shí)驗(yàn)研究工作流程詳解:如何把你的機(jī)器學(xué)習(xí)想法變成現(xiàn)實(shí)

開發(fā) 開發(fā)工具
基于此種情況,哥倫比亞大學(xué)計(jì)算機(jī)科學(xué)博士生及 OpenAI 研究者 Dustin Tran 從其個(gè)人角度概述了從研究思想到實(shí)驗(yàn)過程的步驟。

從研究思想的提出到實(shí)驗(yàn)的具體實(shí)現(xiàn)是工程中的基礎(chǔ)環(huán)節(jié)。但是這一過程常常被一些明顯的小瑕疵所影響。在學(xué)術(shù)界,研究生需要辛苦的科研——大量的編寫代碼,撰寫說明以及論文創(chuàng)作。新的工程項(xiàng)目經(jīng)常需要全新的代碼庫,而且通常很難把過去應(yīng)用過的代碼直接延伸到這些新項(xiàng)目當(dāng)中去。

基于此種情況,哥倫比亞大學(xué)計(jì)算機(jī)科學(xué)博士生及 OpenAI 研究者 Dustin Tran 從其個(gè)人角度概述了從研究思想到實(shí)驗(yàn)過程的步驟。其中最關(guān)鍵的步驟是提出新觀點(diǎn),這往往需要大量時(shí)間;而且至少對(duì)作者來說,實(shí)驗(yàn)環(huán)節(jié)不僅是學(xué)習(xí),更是解決無法預(yù)測(cè)的問題的關(guān)鍵所在。另外,作者還明確說明:這個(gè)工作流程僅適用于實(shí)驗(yàn)方面的研究,理論研究則需要遵循另外的流程,盡管這兩者也有一些共同點(diǎn)。機(jī)器之心對(duì)該工作流程進(jìn)行了編譯介紹,你有什么想法呢?不妨在評(píng)論中與我們分享。

找對(duì)問題

在真正開始一個(gè)項(xiàng)目之前,如何讓你的想法「落地」成為更正式的議題是非常關(guān)鍵的。有時(shí)它很簡(jiǎn)單——就像導(dǎo)師會(huì)給你分配任務(wù);或者處理一個(gè)特定的數(shù)據(jù)集或?qū)嶋H問題;又或是和你的合作者進(jìn)行談話來確定工作內(nèi)容。

更為常見的是,研究其實(shí)是一系列想法(idea)不斷迭代所產(chǎn)生的結(jié)果,這些想法通常是通過日常談話、近期工作、閱讀專業(yè)內(nèi)和專業(yè)外領(lǐng)域文獻(xiàn)和反復(fù)研讀經(jīng)典論文所產(chǎn)生的。

我的所有尚未探索過的研究思想的主文檔

我的所有尚未探索過的研究思想的主文檔

我發(fā)現(xiàn)了一種方法非常有用——即保持一個(gè)單一的主文檔(master document),這通常需要很多工作。

首先,它有一個(gè)項(xiàng)目列表來排列所有的研究想法、問題和題目。有時(shí)它們可以是比較高層面的問題,就像「用于強(qiáng)化學(xué)習(xí)的貝葉斯/生成方法」、「解決機(jī)器學(xué)習(xí)領(lǐng)域的公平性問題」;也可以是一些很具體的議題,比如「處理 EP 中記憶復(fù)雜度的推理網(wǎng)絡(luò)」、「規(guī)模偏置的與對(duì)稱的 Dirichlet 先驗(yàn)的分析」。我經(jīng)常努力把項(xiàng)目列表寫得更加簡(jiǎn)明:子內(nèi)容通過一些鏈接進(jìn)行展開。

然后,根據(jù)接下來要做的工作來對(duì) idea 清單進(jìn)行分類。這通常會(huì)給我的后續(xù)研究指明方向。我也可以根據(jù)其方向是否和我的研究觀點(diǎn)一致、其必要性和有效性隨時(shí)修改這些項(xiàng)目的優(yōu)先級(jí)。更重要的是,這個(gè)列表清單不僅僅是關(guān)于后續(xù)觀點(diǎn)的,更是關(guān)于接下來我更愿意研究什么內(nèi)容的。從長(zhǎng)遠(yuǎn)角度來考慮,這對(duì)于找到重要問題和提出簡(jiǎn)單新穎的解決方法是有重要貢獻(xiàn)的。我經(jīng)常訪問這個(gè)清單,重新安排事務(wù),添加新想法,刪除不必要的議題。最終當(dāng)我可以詳細(xì)說明一個(gè) idea 的時(shí)候,它就可以成為一篇比較正式的論文了。一般來說,我發(fā)現(xiàn)在同一個(gè)位置(同一個(gè)格式)迭代 idea 的過程可以使正式論文寫作中的銜接和實(shí)驗(yàn)過程都變得更加流暢。

管理一個(gè)項(xiàng)目

我們?yōu)榻诘?arXiv 預(yù)印本搭建的 repository

我們?yōu)榻诘?arXiv 預(yù)印本搭建的 repository

我喜歡在 GitHub 存儲(chǔ)庫中維護(hù)研究項(xiàng)目。不管一個(gè)「單元」的研究是多少,我都會(huì)將其定義成某種相對(duì)自我包含的東西;比如,它可能會(huì)連接到一篇特定的論文、一個(gè)已被應(yīng)用的數(shù)據(jù)分析或目前一個(gè)特定主題。

GitHub 存儲(chǔ)庫不僅可用于跟蹤代碼,而且還可用于跟蹤一般的研究進(jìn)程、論文寫作進(jìn)度或嘗試其它合作項(xiàng)目。但項(xiàng)目的組織方式一直以來都是一個(gè)痛點(diǎn)。我比較喜歡以下的結(jié)構(gòu),該結(jié)構(gòu)來自 Dave Blei,可參閱:http://www.cs.columbia.edu/~blei/seminar/2016_discrete_data/notes/week_01.pdf

  1. -- doc/ 
  2.   -- 2017-nips/ 
  3.     -- preamble/ 
  4.     -- img/ 
  5.     -- main.pdf 
  6.     -- main.tex 
  7.     -- introduction.tex 
  8. -- etc/ 
  9.   -- 2017-03-25-whiteboard.jpg 
  10.   -- 2017-04-03-whiteboard.jpg 
  11.   -- 2017-04-06-dustin-comments.md 
  12.   -- 2017-04-08-dave-comments.pdf 
  13. -- src/ 
  14.   -- checkpoints/ 
  15.   -- codebase/ 
  16.   -- log/ 
  17.   -- out/ 
  18.   -- script1.py 
  19.   -- script2.py 
  20. -- README.md 

README.md 為自己和合作者保持了一個(gè)需要去做的事的列表,這讓面臨的問題和前進(jìn)的方向變得明確。

doc/包含所有的記錄事項(xiàng),每個(gè)子目錄都包含一個(gè)會(huì)議紀(jì)要或是文獻(xiàn)提交,main.tex 是主要文檔,每一章節(jié)都是不同文件,如 introduction.tex,讓每個(gè)章節(jié)分開可以讓多人同時(shí)處理不同的章節(jié),避免合并沖突。有些人喜歡在主要實(shí)驗(yàn)完成后一次寫出完整論文,但我更喜歡把論文作為目前想法的記錄,并且讓它和想法本身一樣,隨著實(shí)驗(yàn)的進(jìn)展不斷推進(jìn)。

etc/是其他與前面的目錄無關(guān)的內(nèi)容。我通常用它來存儲(chǔ)項(xiàng)目中討論留下的白板內(nèi)容的圖片。有時(shí)候,我在日常工作中獲得了一些靈感,我會(huì)將它們都記錄在 Markdown 文檔中,它也是一個(gè)用于處置對(duì)于工作的各種評(píng)論的目錄,如合作者對(duì)于論文內(nèi)容的反饋。

src/是編寫所有代碼的位置??蛇\(yùn)行的腳本都是直接寫在 src/上的,類和實(shí)用程序?qū)懺诹? codebase/上。下面我將詳細(xì)說明一下(還有一個(gè)是腳本輸出目錄)。

編寫代碼

我現(xiàn)在寫所有代碼的工具都是 Edward,我發(fā)現(xiàn)它是快速實(shí)驗(yàn)現(xiàn)代概率模型和算法的***框架。

Edward 鏈接:http://edwardlib.org/

在概念層面上,Edward 的吸引力在于語言遵循數(shù)學(xué):模型的生成過程被轉(zhuǎn)化為每行 Edward 代碼;隨后希望寫出的算法被轉(zhuǎn)化為下一行……這種純凈的轉(zhuǎn)換過程免去了在未來試圖將代碼拓展為自然研究問題時(shí)的麻煩:例如,在之前使用了不同的方法,或者調(diào)整了梯度估值,或嘗試了不同的神經(jīng)網(wǎng)絡(luò)架構(gòu),或是在大數(shù)據(jù)集中應(yīng)用了其他方法等等。

在實(shí)踐層面上,我總是從 Edward 的現(xiàn)有模型示例(在 edward/examples 或 edward/notebooks)中受益,我將預(yù)置算法源代碼(在 edward/inferences)作為一個(gè)新文件粘貼到我的項(xiàng)目中的 codebase/目錄中,然后進(jìn)行調(diào)整。這樣從零開始就變得非常簡(jiǎn)單了,我們也可以避免很多低級(jí)細(xì)節(jié)上的缺失。

在編寫代碼時(shí),我一直遵循 PEP8(我特別喜歡 pep8 軟件包:https://pypi.python.org/pypi/pep8),隨后嘗試從腳本共享的類和函數(shù)定義中分離每個(gè)腳本;前者被放在 codebase/中以備導(dǎo)入。從***步開始維護(hù)代碼質(zhì)量總是***的選擇,這個(gè)過程非常重要,因?yàn)轫?xiàng)目會(huì)隨著時(shí)間不斷膨脹,同時(shí)其他人也會(huì)逐漸加入。

Jupyter 記事本。許多人在使用 Jupyter 記事本(鏈接:http://jupyter.org/)用作可交互式代碼開發(fā)的方法,它也是嵌入可視化和 LaTeX 的簡(jiǎn)單方法。對(duì)于我來說,我并沒有將它整合到自己的工作流中。我喜歡將自己所有的代碼寫入 Python 腳本中,然后運(yùn)行腳本。但 Jupyter 等工具的交互性值得稱贊。

實(shí)驗(yàn)管理

在好的工作站或云服務(wù)商做投資是必要的事。GPU 這樣的特性基本上普遍可用,而我們應(yīng)該有權(quán)限并行運(yùn)行許多工作。

我在本地計(jì)算機(jī)完成腳本編寫之后,我主要的工作流是:

1. 運(yùn)行 rsync 同步我本地計(jì)算機(jī)的 Github Repository(包含未授權(quán)文檔)到服務(wù)器的 directory。

2. ssh 到服務(wù)器。

3. 開始 tmux 并運(yùn)行腳本。眾事駁雜,tmux 能讓你超脫此進(jìn)程,從而不需要等待它的結(jié)束才與服務(wù)器再次交互。

在腳本可行之后,我開始用多個(gè)超參數(shù)配置鉆研實(shí)驗(yàn)。這里有一個(gè)有幫助的工具 tf.flags,它使用命令行論證增強(qiáng)一個(gè) Python 腳本,就像下面這樣為你的腳本增加一些東西:

  1. flags = tf.flagsflags.DEFINE_float('batch_size', 128, 'Minibatch during training')flags.DEFINE_float('lr', 1e-5, 'Learning rate step-size')FLAGS = flags.FLAGSbatch_size = FLAGS.batch_sizelr = FLAGS.lr 

然后,你可以運(yùn)行下面這樣的終端命令:

  1. python script1.py --batch_size=256 --lr=1e-4 

這使得提交超參數(shù)更改的服務(wù)器任務(wù)變得容易。

***,說到管理實(shí)驗(yàn)時(shí)輸出的任務(wù),回想一下前文中 src/目錄的結(jié)構(gòu):

  1. -- src/ 
  2.   -- checkpoints/ 
  3.   -- codebase/ 
  4.   -- log/ 
  5.   -- out/ 
  6.   -- script1.py 
  7.   -- script2.py 

我們描述了每個(gè)腳本和 codebase/。其他三個(gè)目錄被用于組織實(shí)驗(yàn)輸出:

  • checkpoints/記錄在訓(xùn)練中保存的模型參數(shù)。當(dāng)算法每固定次數(shù)迭代時(shí),使用 tf.train.Saver 來保存參數(shù)。這有助于維護(hù)長(zhǎng)時(shí)間的實(shí)驗(yàn)——你可能會(huì)取消一些任務(wù),后來又要恢復(fù)參數(shù)。每個(gè)實(shí)驗(yàn)的輸出都會(huì)存儲(chǔ)在 checkpoints/中的一個(gè)子目錄下,如 20170524_192314_batch_size_25_lr_1e-4/。***個(gè)數(shù)字是日期(YYYYMMDD),第二個(gè)是時(shí)間(HMS),其余的是超參數(shù)。
  • log/存儲(chǔ)用于可視化學(xué)習(xí)的記錄。每次實(shí)驗(yàn)都有屬于自己的和 checkpoints/中對(duì)應(yīng)的子目錄。使用 Edward 的一個(gè)好處在于,對(duì)于日志,你可以簡(jiǎn)單地傳遞一個(gè)參數(shù) inference.initialize(logdir='log/' + subdir)。被追蹤的默認(rèn) TensorFlow 摘要可以用 TensorBoard 可視化。
  • out/記錄訓(xùn)練結(jié)束后的探索性輸出;例如生成的圖片或 matplotlib 圖,每個(gè)實(shí)驗(yàn)都有自己的和 checkpoints/中對(duì)應(yīng)的子目錄。

軟件容器。virtualenv 是管理 Python 安裝環(huán)境的必備軟件,可以減少安裝 Python 的困難程度。如果你需要更強(qiáng)大的工具,Docker containers 可以滿足你的需要。

  • Virtualenv 鏈接:http://python-guide-pt-br.readthedocs.io/en/latest/dev/virtualenvs/
  • Docker containers 鏈接:https://www.docker.com/

探索、調(diào)試和診斷

探索、調(diào)試和診斷

TensorBoard 是可視化和探索模型訓(xùn)練的一種優(yōu)秀工具。因?yàn)?TensorBoard 具有良好的交互性,你會(huì)發(fā)現(xiàn)它非常易于使用,因?yàn)檫@意味著不需要配置大量 matplotlib 函數(shù)來了解訓(xùn)練。我們只需要在代碼的 tensor 上加入 tf.summary。

Edward 默認(rèn)記錄了大量摘要,以便可視化訓(xùn)練迭代中損失的函數(shù)值、漸變和參數(shù)的變化。TensorBoard 還包括經(jīng)過時(shí)間的比較,也為充分修飾的 TensorFlow 代碼庫提供了很好的計(jì)算圖。對(duì)于無法只用 TensorBoard 進(jìn)行診斷的棘手問題,我們可以在 out/目錄中輸出內(nèi)容并檢查這些結(jié)果。

調(diào)試錯(cuò)誤信息。我的調(diào)試工作流非常糟糕。對(duì)此,我在代碼中嵌入打印語句并通過消去過程來尋找錯(cuò)誤。這種方法非常原始。雖然還沒有嘗試過,但我聽說 TensorFlow 的 debugger 功能非常強(qiáng)大。

提升研究理解

不斷考研你的模型與算法,通常,學(xué)習(xí)過程會(huì)讓你對(duì)自己的研究和模型有更好的了解。這可以讓你回到制圖板上,重新思考自己所處的位置,尋求進(jìn)一步提升的方法。如果方法指向成功,我們可以從簡(jiǎn)單的配置逐漸擴(kuò)大規(guī)模,試圖解決高維度的問題。

從更高層級(jí)上看,工作流在本質(zhì)上就是讓科學(xué)方法應(yīng)用到真實(shí)世界中。在實(shí)驗(yàn)過程中的每一次迭代里,拋棄主要想法都是不必要的。但另一方面,這一切的理論基礎(chǔ)必須穩(wěn)固。

在這個(gè)過程中,實(shí)驗(yàn)并不是孤立的。合作、與其他領(lǐng)域的專家溝通、閱讀論文、基于短期以及長(zhǎng)期角度考慮問題、參加學(xué)術(shù)會(huì)議都有助于拓寬你看待問題的思路并能幫助解決問題。

說明

本工作流主要用于實(shí)證研究,但其中的一些方法是值得其他任務(wù)參考的。

主文檔結(jié)構(gòu)的模板可以參考:https://github.com/dustinvtran/latex-templates

參考文獻(xiàn)

1. Gelman, A., & Shalizi, C. R. (2012). Philosophy and the practice of Bayesian statistics. British Journal of Mathematical and Statistical Psychology, 66(1), 8–38.

2. Pearl, J. (2000). Causality. Cambridge University Press.

 

3. Wainwright, M. J., & Jordan, M. I. (2008). Graphical Models, Exponential Families, and Variational Inference. *Foundations and Trends in Machine Learning, 1(1–2), 1–305.

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2009-12-03 14:53:49

.NET Framew

2010-07-28 17:19:28

ICMP協(xié)議

2017-07-13 11:20:30

機(jī)器學(xué)習(xí)業(yè)務(wù)問題MVP

2017-07-21 13:45:48

機(jī)器學(xué)習(xí)分類器MVP模型

2011-08-08 15:14:11

PPPOE

2022-10-09 15:18:31

SwaggerOpenAPI工具

2010-08-23 10:00:49

DHCP服務(wù)器

2011-03-31 10:54:01

Cacti工作流程

2010-07-13 16:21:22

FIX協(xié)議

2023-05-05 08:29:15

Spring后臺(tái)服務(wù)器

2010-06-12 17:44:19

ARP協(xié)議

2009-06-05 10:26:05

struts工作流程

2010-09-27 10:19:09

DHCP工作流程

2022-11-02 15:11:44

LightHouseChrome插件

2020-06-29 19:31:46

GIMPPhotoShop開源

2010-06-23 14:46:54

DHCP協(xié)議

2010-06-24 16:40:16

Bittorrent協(xié)

2014-02-20 09:50:15

云存儲(chǔ)云服務(wù)工作流程

2024-07-10 09:45:58

2009-07-27 14:13:15

點(diǎn)贊
收藏

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