進階深度學習?這裡有9個給程式設計師的建議
俗話說得好,人往高處走。
在當前人工智慧火得一塌糊塗的時候,很多程式員的心思也開始活絡起來了。
“要不要轉行做人工智慧?”
想必是很多程式員心中都有過的念頭。
到底該怎麼轉呢?很多人查了資料之後,一臉懵逼:
一邊要熟練掌握線性代數、矩陣計算,一邊要搞概率論,還要去研究各種庫與框架等等。
實在是不知道該從何開始,就拖延了下去,然後很是焦慮。
現在,你不用焦慮了。
國外一個開發者分享了自己的學習過程,並結合自己的經歷,給出了9個建議。
這名開發者名叫Alexey Gaziev,是一家社交媒體管理創業公司的CTO,原來是一名Ruby開發者,後來自己學習深度學習。
在開始之前,我們先跟著Alexey澄清一下相關的概念:
機器學習是實現人工智慧的一組工具,深度學習是機器學習的一個特定子集。
好了,下面正式開始。
1、不要焦慮
可能你不太喜歡數學。就我個人而言,自從八年前畢業後,在開始學習深度學習之前,都沒有再碰過數學教科書了。
但在你想要轉行做人工智慧之前,用谷歌進行一些簡單的搜尋並與周圍比較喜歡數學的人交談後,你會形成這樣一個認知:
你需要積累大量的數學知識,然後才能嘗試用神經網路解決現實世界中的問題。
兩年前我得到的印象是這樣的:
● 熟練掌握線性代數、矩陣運算等;
● 掌握概率論,讓托馬斯·貝葉斯牧師成為你的朋友;
● 從線性迴歸開始,研究所有經典的機器學習概念;
● 瞭解如何在Python、C、C++或Java中實現這些演算法;
● 瞭解如何製作資料集、提取特徵、微調引數,並養成一種直覺,能夠明白哪種演算法適合手頭的任務;
● 熟悉深度學習框架/庫;在我開始學的時候,是Theano和Torch,現在可能是PyTorch、TensorFlow和Keras 。
一些專家認為,只有在掌握了這些技能之後,你才能去解決一些實際問題,比如區分貓和狗的圖片。
如果你跟我一樣,上面的清單足夠讓你心裡打起退堂鼓,然後不停地拖延。
雖然從技術上來說,列表中的所有內容都是正確的,但這些並不是入門級的要求。
只要你會程式設計,你就可以開始訓練模型了。
2、還是程式碼
看看下面這個程式碼:
# a bunch of Python imports like:
from fastai.imports import *
data = ImageClassifierData.from_paths( "./dogscats" , tfms=tfms_from_model(resnet34, 224 ))
learn = ConvLearner.pretrained(resnet34, data, precompute= True )
learn.fit( 0.01 , 3 )
# Wait 17 seconds or so...
你能夠從中看到什麼?
● 這用的是Python。
● 使用了fastai深度學習庫。
● 不包括匯入資訊的話,只有三行。
● resnet 34看上去似乎很重要,看不懂?去谷歌搜一下,就能找到答案。
這是fast.ai課程中一個非常神奇的案例。這份課程是由Jeremy Howard製作的。
他提倡的理念是:從一些抽象概念開始,然後經過一些實際的操作之後,再進行深入的學習。
上面的程式碼,調整了一個預先在ImageNet上訓練好的影象分類模型,使用到的資料集大約有1500萬張圖片。
這樣它就可以解決剛才提到的區分狗和貓的任務了。
只要經過3次訓練,它就能達到98%的準確率。在裝有GPU的電腦上訓練,只需要17秒。
當然,這三行程式碼背後隱藏著多年的研究、數十篇學術論文和數千工時的反覆試驗。
但這是你現在可以直接使用的程式碼。一旦你掌握了它的要點,用它去區分其他影象,與區分貓和狗沒有什麼不同。
3、找個小夥伴
就算是一個勤奮的人,有時候也會拖延。當我準備開始學習機器學習,特別是深度學習的時候,我正沉迷於《風暴英雄》。
為了讓自己能夠在通往新知識的漫長道路上邁出第一步,我和朋友達成了一個協議。
因為他也想著進入人工智慧行業,所以我們決定一起停止拖延,參加相同的課程,並相互監督學習程序。現在,我們經常一起參加各種活動。
如果你在身邊找不到一起學習的人,你可以在線上找,線上有很多地方能幫你找到志同道合的初學者。
4、避免認知過載
眾所周知,學習比較難的東西非常容易讓人產生挫敗感。作為人類,我們傾向於逃避挫敗感。
同時,學習太容易的東西也不會讓人滿意,很快就會讓人失去任何動力。
這裡的訣竅是,能消化多少,就吃多少。
剛開始的時候,我選了一個很難的深度學習課程。但沒有先打好基礎。
當對課程中介紹的一些概念很迷糊的時候,我開始驚慌失措了。
去網上找任何能找到的東西去學習,比如各種文章、書籍和其他的課程。
這讓我不能專注於一門課程,學習我應該學習的基礎材料。
事後看來,我應該堅持學習一門課程,不應該試圖去並行學習。畢竟,人類不擅長同時處理多工。
如果現在開始學習,我會先看看Howard的fast.ai,還有吳恩達的最新課程。
後者更側重於理論,前者側重於快速實現,這是最好的入門方式。
記住調整自己的節奏,避免同時處理多個任務,並小步快跑。
5、為自己設定目標
不要想著一口吃個大胖子。而是應該選擇那些能夠你更有滿足感的領域。
以下是一些關於初始專案的建議:
● 如果你對視覺藝術充滿熱情,可以深入研究計算機視覺。用神經網路對影象中的物體進行分類,檢測照片中人的情感或年齡,遷移一種藝術風格,或者是生成原創藝術品。
● 如果你對聲音更感興趣,你可以用神經網路創作音樂,對音樂流派進行分類,並像 Spotify 一樣推薦新的音樂。 或者你可以探索語音風格的轉換,用別人的聲音說話。
● 如果你喜歡電子遊戲,你絕對應該研究強化學習。你可以訓練遊戲AI,讓它幫你打遊戲。而且,你可以盡情玩遊戲,沒有人會說你,因為你是在搞研究。
● 如果你對使用者體驗和客戶支援感興趣,可以研究自然語言處理和聊天機器人。你可以在一定程度上與客戶互動:從資訊中推斷意圖,為常見的問題提供即時答案。
在嘗試研究了計算機視覺之後,我和我的朋友將注意力轉移到了自動語音識別( ASR )和自然語言處理上。
一方面,谷歌和蘋果等巨頭公司大力發展自動駕駛,計算機視覺可以說是資金非常充足的研究領域,深度學習在這個領域地位也很穩固。
在影象分類方面,神經網路預測的準確率從2010年的75%以下,增長到2018年的98 %以上。
另一方面,與語言相關的挑戰,尤其是與書面語言相關的挑戰,直到最近才開始從神經網路中獲益。
目前最熱門的領域是機器翻譯(MT)。每個人都可能注意到,谷歌翻譯的質量在過去幾年裡有了顯著提高。自2015年以來,深度學習在這方面發揮了重要作用。
有一個事實,能夠幫助你瞭解深度學習能夠以多快的速度改變幾十年沒有變化的研究領域:
2015年,神經網路首次出現在機器翻譯競賽中。2016年,90%的參賽選手都是基於神經網路的。
你也可以從相關的學術論文中提取出大量的知識,並應用到現實世界的任務中,尤其是你的研究與文字有關係的時候。
6、參加競賽
2010年,Kaggle,現在世界上最大的資料科學家和機器學習者社群,將黑客馬拉松的精神帶入到了學術領域。
從那時起,通過競賽的方式解決機器學習的任務已經成為一種標準化的實踐。
從微軟到歐洲核子研究中心(CERN),公司和機構都非常樂意提供獎品,組織相關的挑戰與競賽,以換取獲獎作品背後技術的授權。
機器學習競賽是一個非常好的方式,不僅能夠幫助你評估技能、在某一領域尋找“基準”的感覺、從更高階的競爭對手那裡獲得靈感,還能幫你找到合作伙伴、怒刷個人存在感等等。
把參加一個競賽當做你進入人工智慧行業的“成年禮”吧。對我和我的朋友來說,這發生在2017年。
因為我們想了解亞馬遜,而且這也是我們進行多級影象分類的機會,再加上我們也很關心環境。
兩個多月來,我們每個週末都在解決一個問題:從衛星影象中檢測森林砍伐狀況並區分出原因。
還有一個跡象,展示了與深度學習相關的一切有了快速進展:一年前,我們花了大量時間和精力琢磨如何在谷歌雲平臺以更低的成本進行實驗。
現在,谷歌提供免費的GPU,支援Jupyter膝上型電腦環境,並且提供很多服務幫你訓練模型。
這次競賽,我們沒有獲獎,只是進入了前15 %,犯下了每個初學者都會犯的錯誤。但經驗是無價的:我們獲得了信心,轉身投入到了下一場競賽中,這次在自然語言處理領域。
這是一個俄羅斯大型銀行舉辦的開發問答系統的挑戰,競爭者們要使用一個獨特的俄語資料集。
任務是訓練系統根據一段文字回答問題。模型在Docker容器中提交,RAM限制在8GB內,在給定自然語言的問題時,應該能夠突出文字段落中的相關部分。
在這場競賽中,我們需要提交的不用是一個已經訓練好的模型,而是一個解決方案,然後必須在不到2小時的機器時間內進行全面訓練,並對測試問題給出答案。為了確保公平競爭,測試資料集只公開了一部分。
我們的解決方案排在了第二,但我們太關注解決任務,忘了閱讀規則。他們要求禁止團隊合作,並且只接受個人專案。最後,我們之後只得了一個安慰獎。
現在,我告訴每個向我尋求建議的人,參加競賽要對抗衝動,直面問題,花些時間仔細閱讀規則。
我對深度學習的興趣主要是面向實際應用的,也就是想出可以應用到業務需求的解決方案。我注意到了一個排行榜上很有趣的現象:
頂級解決方案通常是學術性的,商業部署很難,而稍低一點的解決方案通常是最有商業前途的應用。
7、跟上發展節奏
深度學習的發展速度非常快,就這篇文章來說,儘管只是介紹性的,非學術的,在某些方面都有點過時了。
跟上發展節奏最好方法,是成為一個充滿同行的大型線上論壇中的一員。
如果你懂俄語,一定要加入Open Data Science社群:一個擁有超過12000個使用者和超過140個公共頻道的公共Slack服務。
無論是通過Reddit的r / machine learning還是Meetup.com,總有一種方法可以幫你找到相關的團體。
在Twitter上關注一些大牛,訂閱一些電子郵件, 對於跟上發展節奏來說也很重要。當然,你也可以把時間投入到世界各地的各種線下訓練營中。
一旦你心裡有了底氣,試著參加一個關於人工智慧、機器學習和深度學習的重要會議:今年,我有幸參加了ICLR。
其他值得注意的國際會議有CVPR和NIPS。此外,還有一點要注意的是,在人工智慧領域,一定要適應首字母縮寫的詞彙。
8、利用自己的程式設計技巧
有一個顯而易見的事實:Python完全贏得了人工智慧和資料科學社群的支援。
對我來說,作為一名Ruby開發人員,切換到Python不難。僅僅需要幾周的練習就可以掌握了。
不過,我還是花了一些時間學習了免費的中級Python程式設計課程,這絕對沒有壞處。
對於一名軟體開發來說,程式語言“障礙”不是問題。那些不會程式設計的人,想要進入深度學習更難。所以你已經領先了。
但是,你不要指望這裡有一些優秀的OOP程式碼和直觀的API。大多數公共程式碼示例也不會經過嚴肅的程式碼審查。
即使在同一個庫中,相同的功能也可能會有不同的API。
另外,不要對文件抱有很大的希望。在將學術論文翻譯成程式碼的時候,如果遇到了異常細節,你必須得去看原始碼,這並不容易。而且,測試覆蓋率也經常是缺乏的。
但這也是一個發揮你程式設計優勢的機會,你可以用公開發行的Jupyter筆記本製作一些比較好的可以重複使用的庫。
9、補上數學知識
我把最重要的留到了最後。最終,你還是得填補你在數學上的空白,尤其是你想跟上技術發展節奏的時候。
幸運的是,機器學習有自己的“聖經”,是一本長達800頁的教科書,由伊恩·古德費勒、優素福·本吉奧和艾倫·庫爾維爾編寫,被稱為“Deep Learning Book”,在網上可以免費獲取。
第一部分中,主要介紹線性代數、概率論和資訊理論、數值計算、機器學習基礎等等。你看完之後,當你再跟進當前的研究時,它會讓你不再感到害怕。但這一部分有130頁,讀起來很枯燥,但你不會後悔的。
原文釋出時間為:2018-10-14
本文作者:乾明