mathtype過期后不顯示精簡(jiǎn)模式?
1.增加行距是不現(xiàn)實(shí)的。2.在mathtyp
沒有大數(shù)據(jù),我們?cè)撊绾螌C(jī)器學(xué)習(xí)的想法制成原型?
從研究思路的提出到實(shí)驗(yàn)的具體實(shí)現(xiàn),是工程中的基礎(chǔ)環(huán)節(jié)。但是這個(gè)過程往往會(huì)受到一些明顯的小瑕疵的影響。在學(xué)術(shù)界,研究生需要辛苦的研究——大量的寫代碼、寫解釋、寫論文。新的工程項(xiàng)目往往需要一個(gè)全新的代碼庫,而將過去使用的代碼直接擴(kuò)展到這些新項(xiàng)目中往往很困難。
基于這種情況,哥倫比亞大學(xué)計(jì)算機(jī)科學(xué)博士生、OpenAI研究員DustinTran從個(gè)人角度概述了從研究思路到實(shí)驗(yàn)過程的步驟。其中最關(guān)鍵的一步是提出新的想法,這往往要花很多時(shí)間;而且至少對(duì)于作者來說,實(shí)驗(yàn)環(huán)節(jié)不僅僅是學(xué)習(xí),更是解決不可預(yù)知問題的關(guān)鍵。此外,作者還明確表示,這個(gè)工作流程只適用于實(shí)驗(yàn)研究,理論研究需要遵循另一個(gè)流程,雖然兩者有相通之處。
找到正確的問題
在真正開始一個(gè)項(xiàng)目之前,如何讓你的想法"土地與環(huán)境一個(gè)比較正式的話題很關(guān)鍵。有時(shí)它很簡(jiǎn)單——就像導(dǎo)師會(huì)給你布置任務(wù)一樣;或處理特定數(shù)據(jù)集或?qū)嶋H問題;或者和你的伴侶談?wù)劊_定工作內(nèi)容。
更常見的是,研究實(shí)際上是一系列想法的結(jié)果,這些想法通常是通過日常談話、最近的工作、閱讀專業(yè)和非專業(yè)領(lǐng)域的文獻(xiàn)以及反復(fù)閱讀經(jīng)典論文而產(chǎn)生的。
我發(fā)現(xiàn)一個(gè)非常有用的方法——保存一個(gè)主文檔,這通常需要大量的工作。
首先,它有一個(gè)項(xiàng)目列表來安排所有的研究想法、問題和主題。有時(shí)它們可能是更高層次的問題,例如"強(qiáng)化學(xué)習(xí)的貝葉斯/生成方法和"解決機(jī)器學(xué)習(xí)中的公平問題也可以是一些非常具體的話題,比如"處理EP中記憶復(fù)雜性的推理網(wǎng)絡(luò)和"標(biāo)度偏差和對(duì)稱性的狄利克雷超越分析我經(jīng)常嘗試讓項(xiàng)目列表更簡(jiǎn)潔:通過一些鏈接展開子內(nèi)容。
然后,根據(jù)下一步要做的工作,將想法列表分類。這通常為我的后續(xù)研究指明了方向。我也可以根據(jù)這些項(xiàng)目的方向是否與我的研究觀點(diǎn)一致,它們的必要性和有效性,隨時(shí)修改這些項(xiàng)目的優(yōu)先順序。更重要的是,這份名單不僅關(guān)乎后續(xù)觀點(diǎn),還關(guān)乎下一個(gè)。我將來更喜歡學(xué)什么?從長遠(yuǎn)來看,這是對(duì)發(fā)現(xiàn)重要問題和提出簡(jiǎn)單新穎的解決方案的重要貢獻(xiàn)。我經(jīng)常訪問這個(gè)列表,重新安排事情,增加新的想法,刪除不必要的話題。最后,當(dāng)我能夠詳細(xì)解釋一個(gè)想法時(shí),它就可以成為一篇更正式的論文。總的來說,我發(fā)現(xiàn)在同一個(gè)位置(同一個(gè)格式)迭代idea的過程可以讓正式論文寫作中的銜接和實(shí)驗(yàn)過程更加流暢。
管理項(xiàng)目
我們的最新arXiv預(yù)印本庫。
我喜歡在GitHub庫中維護(hù)研究項(xiàng)目。不管做了多少研究單位"我會(huì)把它定義為相對(duì)獨(dú)立的東西。例如,它可能與當(dāng)前的一篇特定論文、一項(xiàng)應(yīng)用數(shù)據(jù)分析或特定主題相關(guān)聯(lián)。
GitHubrepository不僅可以用于跟蹤代碼,還可以用于跟蹤一般的研究進(jìn)度、論文寫作進(jìn)度或嘗試其他合作項(xiàng)目。但是項(xiàng)目的組織一直是個(gè)痛點(diǎn)。我更喜歡下面的結(jié)構(gòu),它來自戴夫·布雷。見:~Blei/seminar/2016_離散_數(shù)據(jù)/筆記/周_01.pdf。
把自己和合作者要做的事情列一個(gè)清單,這樣就把問題和前進(jìn)的方向說清楚了。
Doc/包含所有記錄的項(xiàng)目,每個(gè)子目錄包含一個(gè)會(huì)議紀(jì)要或文檔提交,main.tex為主文檔,每個(gè)章節(jié)是一個(gè)不同的文件,比如introduction.tex,將每個(gè)章節(jié)分開可以讓很多人同時(shí)處理不同的章節(jié),從而避免合并。有些人喜歡在主要實(shí)驗(yàn)完成后一次性寫一篇完整的論文,但我更喜歡把論文作為當(dāng)前想法的記錄,讓它隨著實(shí)驗(yàn)的進(jìn)展繼續(xù)前進(jìn),就像想法本身一樣。
Etc/是和之前的目錄無關(guān)的其他東西。我通常用它來存儲(chǔ)項(xiàng)目中討論留下的白板內(nèi)容的圖片。有時(shí)候,我會(huì)在日常工作中獲得一些靈感,我會(huì)將它們記錄在Markdowndocument中,這也是一個(gè)處理對(duì)我工作的各種評(píng)論的目錄,比如我的合作者對(duì)我論文內(nèi)容的反饋。
Src/是所有代碼編寫的地方。可運(yùn)行腳本直接寫在src/上,類和實(shí)用程序?qū)懺赾odebase/上。下面我會(huì)詳細(xì)解釋(還有一個(gè)腳本輸出目錄)。
寫代碼
Edward是我現(xiàn)在用來寫所有代碼的工具,我發(fā)現(xiàn)它是快速試驗(yàn)現(xiàn)代概率模型和算法的最佳框架。
愛德華林克:
在概念層面上,愛德華的吸引力在于語言遵循數(shù)學(xué):模型的生成過程轉(zhuǎn)化為每個(gè)愛德華代。代碼;然后我要寫的算法轉(zhuǎn)化成下一行...這種純粹的轉(zhuǎn)換過程,避免了日后試圖將代碼擴(kuò)展成自然研究問題的麻煩:比如之前使用了不同的方法,或者調(diào)整了梯度估計(jì),或者嘗試了不同的神經(jīng)網(wǎng)絡(luò)架構(gòu),或者在大數(shù)據(jù)集上應(yīng)用了其他方法等等。
在實(shí)踐層面上,我總是受益于愛德華的現(xiàn)有模型示例(在edward/examples或edward/notebooks中)。我把預(yù)置的算法源代碼(在Edward/推論中)作為一個(gè)新文件粘貼到我項(xiàng)目中的codebase/目錄下,然后進(jìn)行調(diào)整。這使得從零開始變得非常簡(jiǎn)單,我們也可以避免很多低級(jí)的細(xì)節(jié)。
寫代碼的時(shí)候,我總是按照pep8(我特別喜歡PEP8軟件包:),然后盡量把每個(gè)腳本和腳本共享的類、函數(shù)定義分開;前者放在codebase/中以供導(dǎo)入。從第一步開始就保持代碼質(zhì)量永遠(yuǎn)是最好的選擇,這個(gè)過程非常重要,因?yàn)轫?xiàng)目會(huì)隨著時(shí)間的推移而擴(kuò)大,其他人也會(huì)逐漸加入進(jìn)來。
Jupyternotebook很多人都在用JupyterNotepad(鏈接:)作為一種交互的代碼開發(fā),也是一種簡(jiǎn)單的嵌入可視化和LaTeX的。對(duì)我來說,我沒有。;我沒有把它集成到我自己的工作流程中。我喜歡將所有代碼寫入Python腳本,然后運(yùn)行這些腳本。但Jupyter等工具的交互性值得稱贊。
實(shí)驗(yàn)管理
有必要投資一個(gè)好的工作站或者云服務(wù)提供商。GPU的這個(gè)特性基本上是通用的,我們應(yīng)該有權(quán)利并行運(yùn)行很多作業(yè)。
當(dāng)我在本地計(jì)算機(jī)上完成腳本后,我的主要工作流程是:
1.運(yùn)行rsync將本地計(jì)算機(jī)的Github庫(包括未授權(quán)的文檔)同步到服務(wù)器的目錄。
2.到服務(wù)器的ssh。
3.啟動(dòng)tmux并運(yùn)行腳本。很多事情很復(fù)雜,tmux可以讓你擺脫這個(gè)過程,所以你不不必等到它結(jié)束后再與服務(wù)器交互。
腳本可行后,我開始用多個(gè)超參數(shù)配置鉆探實(shí)驗(yàn)。這里有一個(gè)有用的工具tf.flags,它使用命令行參數(shù)來增強(qiáng)Python腳本,并向您的腳本添加如下內(nèi)容:
然后,您可以運(yùn)行以下終端命令:
這使得提交超級(jí)參數(shù)修改的服務(wù)器任務(wù)變得容易。
最后,談到管理實(shí)驗(yàn)期間的任務(wù)輸出,回想一下上一篇文章中的src/directory的結(jié)構(gòu):
我們描述了每個(gè)腳本和代碼庫/。其他三個(gè)目錄用于組織實(shí)驗(yàn)輸出:
檢查站/記錄培訓(xùn)中保存的模型參數(shù)。當(dāng)算法每迭代固定次數(shù)時(shí),使用。這有助于維持長時(shí)間的實(shí)驗(yàn)——您可以取消一些任務(wù),稍后恢復(fù)參數(shù)。每個(gè)實(shí)驗(yàn)的輸出都會(huì)存儲(chǔ)在checkpoints/下的子目錄中,比如20170524_192314_batch_size_25_LR_1e-4/。第一個(gè)數(shù)字是日期(YYYYMMDD),第二個(gè)是時(shí)間(HMS),其余都是超級(jí)參數(shù)。
記錄/存儲(chǔ)視覺學(xué)習(xí)的記錄。每個(gè)實(shí)驗(yàn)都有自己的子目錄,對(duì)應(yīng)于checkpoints/。使用Edward的一個(gè)優(yōu)點(diǎn)是,您可以簡(jiǎn)單地將一個(gè)參數(shù)(logdirlog/subdir)傳遞給日志。跟蹤的默認(rèn)張量流摘要可通過TensorBoard可視化。
培訓(xùn)后輸出/記錄探索性輸出;比如生成的圖片或者matplotlib圖,每個(gè)實(shí)驗(yàn)都有自己對(duì)應(yīng)checkpoints/的子目錄。
軟件容器。Virtualenv是管理Python安裝環(huán)境的必備軟件,可以降低安裝Python的難度。如果你需要更強(qiáng)大的工具,Docker容器可以滿足你的需求。
虛擬鏈接:
碼頭集裝箱鏈接:
TensorBoard是可視化和探索模型訓(xùn)練的優(yōu)秀工具。因?yàn)門ensorBoard有很好的交互性,你會(huì)發(fā)現(xiàn)它非常容易使用,因?yàn)樗馕吨悴徊恍枰渲煤芏鄊atplotlib函數(shù)來理解訓(xùn)練。我們只需要把它加到代碼的張量上。
Edward默認(rèn)記錄了大量的摘要,以便可視化訓(xùn)練迭代中函數(shù)值的損失、梯度和參數(shù)的變化。TensorBoard還包含了時(shí)間的對(duì)比,這也為全裝修TensorFlow代碼庫提供了很好的計(jì)算圖。對(duì)于僅通過TensorBoard無法診斷的疑難問題,我們可以輸出out/目錄中的內(nèi)容,查看結(jié)果。
調(diào)試錯(cuò)誤消息。我的調(diào)試工作流程很糟糕。在這方面,我在代碼中嵌入了打印的語句,并通過消除過程來查找錯(cuò)誤。這個(gè)方法很原始。雖然我還沒有還沒試過,聽說TensorFlow的調(diào)試器很厲害。
增強(qiáng)研究理解
繼續(xù)研究你的模型和算法。通常,學(xué)習(xí)過程會(huì)讓你對(duì)自己的研究和模型有更好的理解。這可以讓你回到繪圖板,重新思考你的位置,并尋求進(jìn)一步改善的方法。如果該方法涉及要想成功,可以從簡(jiǎn)單的配置逐步擴(kuò)大規(guī)模,嘗試解決高維問題。
在更高的層次上,工作流本質(zhì)上是將科學(xué)方法應(yīng)用于現(xiàn)實(shí)世界。在實(shí)驗(yàn)的每一次迭代中,都不需要拋棄主要思想。另一方面,這一切的理論基礎(chǔ)必須是堅(jiān)實(shí)的。
在這個(gè)過程中,實(shí)驗(yàn)并不是孤立的。合作,與其他領(lǐng)域的專家交流,閱讀論文,從短期和長期的角度考慮問題,參加學(xué)術(shù)會(huì)議,這些都有助于拓寬你對(duì)問題的思考,有助于解決問題。