1. 程式人生 > >更快更強,深度學習新庫fastai“落戶”PyTorch

更快更強,深度學習新庫fastai“落戶”PyTorch


幾天前,有人統計了歷年ICLR論文錄用者使用的深度學習框架,發現雖然TensorFlow還高居榜首,但PyTorch近一年來的使用資料已經翻了3倍,可以和TF比肩。這是個令人驚訝的訊息,也讓不少從業者開始正視這一發展趨勢,籌備“雙修”事宜。在下文中,論智給讀者帶來的是fast.ai釋出的一個簡便、好用的PyTorch庫——對PyTorch感興趣的讀者不妨先從這個庫開始試手。

隨著網際網路和知識傳播的深度結合,現在線上課程對許多人來說已經不是新鮮事物。在深度學習領域,最受學生歡迎的MOOC課程平臺有三個:Fast.ai、deeplearning.ai /Coursera和Udacity。其中,因為Jeremy Howard化繁為簡、實戰為上的獨特授課風格,Fast.ai給人的印象一直很“接地氣”:

  • 研究如何快速、可靠地把最先進的深度學習應用於實際問題。
  • 提供Fast.ai庫,它不僅是讓新手快速構建深度學習實現的工具包,也是提供最佳實踐的一個強大而便捷的資源。
  • 課程內容簡潔易懂,以便儘可能多的人從研究成果和軟體中收益。

國慶期間,Fast.ai釋出一個新的、面向深度學習的免費開源庫——fastai。這是個PyTorch庫,雖然還是預覽版,但它目前已經為最重要的深度學習應用程式和資料型別提供了一致的API,且相比其他深度學習庫,它在準確性和速度上有顯著提高,同時所需的程式碼大大減少。

感興趣的開發者可以訪問fastai的 GitHub 進行安裝: github.com/fastai/fast…

fastai庫

從去年宣佈開發開始,歷時18個月,fastai深度學習庫v1.0終於和大家見面了。在專案啟動之初,開發人員就曾介紹過PyTorch作為一個平臺的優勢:可以利用常規python程式碼的靈活性和各種函式構建、訓練神經網路,可以解決更廣泛的問題……

現在,經過Fast.ai團隊和PyTorch團隊的共同努力,我們迎來了一個為計算機視覺、文字、表格資料、時間序列、協同過濾等常見深度學習應用提供單一一致介面的深度學習庫。這意味著,如果你已經學會用fastai建立實用的計算機視覺(CV)模型,那你就可以用同樣的方法建立自然語言處理(NLP)模型,或是軟體支援的其他模型。

早期使用者使用反饋

GitHub上的語義程式碼搜尋

Fast.ai的課程是GitHub的資料科學家和高管(包括CEO在內)提高資料素養的一個重要途徑,其中,Github的高階機器學習科學家Hithl Husain在過去兩年中一直通過Fast.ai學習深度學習,他認為這些MOOC課程開啟了Github的資料新時代,使資料科學家們更有信心解決機器學習中的最新問題。

作為fastai的第一批使用者,Hithl Husain和他的同事Ho-Hsiang Wu最近釋出了一個實驗版工具“語義程式碼搜尋”,允許開發者直接通過意義而不是關鍵詞匹配來查詢程式碼, 這意味著最佳搜尋結果不一定包含你搜索的單詞 。在 官方部落格文章 中,他們介紹了自己棄用Tensorflow Hub轉而投向fastai的原因,稱後者能更輕鬆地訪問最先進的架構(如AWD LSTMs)和技術(如隨機重啟迴圈學習率)。

                           語義程式碼搜尋


在過去的12個月裡,Husain一直在體驗預釋出版本的fastai庫。他表示:

我之所以選擇fast.ai,是因為它能在保證相同效能的情況下,用模組化、高階API實現最先進的技術和創新,同時減少計算量。語義程式碼搜尋只是冰山一角,銷售、營銷、反欺詐,人們能用fastai為各行各業帶去革命性的變化。

生成音樂

Christine McLeavey Payne是從上一期Fast.ai深度學習課程中脫穎而出的一名學生。她的人生經歷非常豐富:從舊金山交響樂團的古典鋼琴師,到金融領域的HPC專家,再到斯坦福大學的神經科學和醫學研究員。現在,她已經在OpenAI開啟了又一段人生旅途,而在近期的OpenAI專案中,她用fastai建立了一個能生成鋼琴曲和室內音樂的LSTM——Clara。

fastai是一個了不起的資源,即便是我這樣剛接觸深度學習的新手,也能用短短几行程式碼就得到fastai模型。我不完全知道這些先進技術背後的原理,但我的模型能執行,而且訓練用時更短,效能也更好。

她的音樂生成模型基於上課期間她構建的一個語言模型,利用fastai庫對NLP最新技術的支援,她在短短兩週內就完成了這個音樂生成專案,並取得了很好的初步成果。這是fastai庫實用性的一個典例,只需少量修改,開發者就能把文字分類模型改成音樂生成模型,這在實踐中能節省大量時間和精力。

                  IBM Watson高階研究員對音樂生成器Clara的評價


藝術創作

建築師、投資者Miguel Pérez Michaus一直在用預釋出版本的fastai進行他的“Style Reversion(風格還原)”實驗。所謂“風格還原”,就是把風格遷移後的影象恢復成原本的樣子,如下圖所示:

                                 風格還原


他表示:“我喜歡用fastai創作,因為它能實現Keras不能實現的東西,比如生成‘不標準’的東西。”作為早期使用者,他在過去12個月中目睹了fastai的更新迭代:

我很幸運地體驗了fastai的A測版本,雖然只是Alpha版,但它充分展示了自己的實用性和靈活性,而且允許我這樣具有領域知識但沒有正式電腦科學背景的人上手操作。fastai會變得越來越好。對於深度學習的未來,我個人有一點粗淺的認識,就是我們必須要詳細掌握黑盒背後的真實技術原理,在這種情況下,我認為fastai會廣受歡迎。

學術研究

在NLP領域,波蘭語一直是一個挑戰,因為它是一種形態豐富的語言,如波蘭語形容詞會根據名詞的數和性而變化。企業家Piotr Czapla和Marcin Kardas是深度學習諮詢公司n-wave的聯合創始人,基於 Cutting Edge Deep Learning For Coders 這門課程中顯示的思路,他們用fastai開發了一種新的波蘭語文字分類演算法,並在波蘭頂級NLP學術競賽中獲得一等獎,有關這項新研究的論文即將釋出。

根據Czapla的說法,fastai庫對他們的成功至關重要:

fastai適合那些沒有上百臺伺服器的普通人,這是我很喜歡它的一點。它支援快速開發和原型設計,並融入了所有最好的深度學習實踐。同時,Fast.ai課程是我開始學習深度學習的指路明燈,從上課的那天起,我才開始思考深度學習能做什麼。

示例:計算機視覺領域的遷移學習

Kaggle上有一個非常受歡迎的競賽專案:Dogs vs Cats。參賽者需要編寫一個演算法來分類影象是包含狗還是貓。這也是Fast.ai課程中經常涉及的一個競賽,因為它代表了一類重要問題:基於預訓練模型的遷移學習。

我們將以此為例,從 所需程式碼量、準確性和速度 三個指標上比較Keras和fastai的差異。以下是用fastai進行2-stage微調時的所有程式碼——不僅要編寫的程式碼非常少,設定的引數也非常少:

data = data_from_imagefolder(Path('data/dogscats'),
    ds_tfms=get_transforms(), tfms=imagenet_norm, size=224)
learn = ConvLearner(data, tvm.resnet34, metrics=accuracy)
learn.fit_one_cycle(6)
learn.unfreeze()
learn.fit_one_cycle(4, slice(1e-5,3e-4))複製程式碼

下表是兩個深度學習庫的差異對比:

Keras是現在最流行的訓練神經網路的方法之一,以上資料雖然是片面的,但fastai的改進能從側面說明Keras並不完美,它還有很大的改善空間。而無論是Keras還是其他深度學習庫,要完成同樣的任務,它們所需的程式碼量都遠遠超過fastai,相應的,它們的訓練時間會更長,且模型效能不一定會更好。

此外,fastai在NLP任務上也有強勁表現。下表是ULMFiT論文中的一幅截圖,顯示了文字分類演算法ULMFiT與IMDb資料集中排名靠前的演算法的相對誤差:

                                                 文字分類效能總結


fastai是目前唯一提供此演算法的庫,由於該演算法是內建的,你可以直接參考上面的Dogs vs Cats程式碼復現論文結果。以下是訓練ULMFiT語言模型的方法:

data = data_from_textcsv(LM_PATH, Tokenizer(), data_func=lm_data)
learn = RNNLearner.language_model(data, drop_mult=0.3,
    pretrained_fnames=['lstm_wt103', 'itos_wt103'])
learn.freeze()
learn.fit_one_cycle(1, 1e-2, moms=(0.8,0.7))
learn.unfreeze()
learn.fit_one_cycle(10, 1e-3, moms=(0.8,0.7), pct_start=0.25)
複製程式碼


來源: www.fast.ai/2018/10/02/…

編譯:Bot