兩個月入門深度學習,全靠動手實踐!一位前端小哥的經驗分享
王新民 編譯自 Hackernoon
量子位 出品 | 公眾號 QbitAI
在當前社會,技術日新月異,一個全棧工程師不及時學習新知識,掌握AI技能,再過兩年就算不上「全棧」了。
產品發燒友、前端小哥Shival Gupta在意識到這一點後,通過兩個多月的探索,掌握了基本的AI技能,並在Hackernoon上發文分享了自己的學習歷程。
量子位搬運過來,各位可以參考他的學習思路。
建立第一個神經網路
大家給初學者的建議,通常是通過吳恩達的Coursera課程來入門。
這樣開始很好,但是我在聽課時很難保持專註。不是說這個課程不好或存在其他問題,而是我真的非常討厭專心聽課。我習慣於通過實踐來學習,所以為什麼不這麼做呢?
讓我們開始動手實現神經網路吧。
我沒有直接跳到神經網路,因為還需要熟悉一些基礎內容。我先嘗試熟悉這個領域的所有專有名詞,為下一步的語言學習作鋪墊。
也就是說,第一項任務不是學習,而是熟悉這個領域。
我是個用JavaScript和Nodejs做開發的前端工程師,暫時也不想轉後端,於是就找到了一個叫做nn的簡單神經網路模塊,並用它來實現一個帶有虛擬輸入的「與」門。
我選擇了這樣一個問題:對於任意三個輸入X、Y和Z,輸出為X和Y的「與」運算結果。
以下是實現代碼:
選擇這個問題,是受一份9行代碼構建神經網路教程的啟發。地址:https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1
在我看來,上面的構建過程讓我對接下來的學習充滿了信心。當輸出值為0.9971時,我意識到這個網路學會了如何實現一個「與」運算,並忽略無關的額外輸入。
這正是機器學習的主旨。通過向計算機程序輸入一組數據,並調整程序的內部參數,使它能夠以從訓練集觀察到的誤差減小方式,來得到對新問題的答案。
後來我才知道,這種方法也被稱為梯度下降(gradient descent)。
梯度下降示意圖
開始AI之路
在我實現了我的第一個AI程序後,我充滿信心,想知道作為一個開發人員,還可以用機器學習來做什麼。
1.我解決了若干個關於監督學習的問題,如回歸和分類。
2.基於非常有限的數據集,我嘗試使用多變數線性回歸來預測哪個團隊將贏得某場給定的IPL電子競技比賽,實際的預測效果很差,但是我覺得很酷。
3.我試用了Google機器學習雲的一些demo,了解當前AI可以做什麼。
地址:https://cloud.google.com/products/machine-learning/
4.我偶然發現了AI Playbook(文末鏈接5),這是一個由安德森-霍洛維茨風險基金整理的乾貨網站,確實是針對開發人員和創業者的最方便資源之一。
5.我開始在Youtube上觀看Siraj Rawal的精彩視頻,這是一個以深度學習和機器學習為核心的專欄。
視頻地址:
https://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A
6.我讀了HackerNoon上一篇講《矽谷》劇組怎樣用Tensorflow做劇中那個Not Hotdog應用的。這是深度學習中我們最容易上手的一個例子。
HBO真的做了這個App(限美國、加拿大):
https://www.seefoodtechnologies.com/nothotdog/
文章地址:
https://medium.com/@timanglade/how-hbos-silicon-valley-built-not-hotdog-with-mobile-tensorflow-keras-react-native-ef03260747f3
7.我讀了Andrej Karpathy的博客(https://karpathy.github.io/),他是特斯拉的AI主管。雖然我無法理解裡面的一些內容,這讓我很頭疼,但是我發現,在多花一些時間以後,我對這些概念有了一定理解。
8.帶著信心,我開始通過複製和粘貼來逐行實現一些深度學習教程中的代碼,並在我自己的電腦上運行代碼,嘗試訓練相關模型。很卡……因為大多數模型需要很長的訓練時間,我也沒有GPU。
漸漸地,我將編程語言從Javascript轉換到了Python,並在Windows機器上安裝了Tensorflow。
這整個過程集中在被動地接受知識和建立知識庫上,因此當我遇到一個實際的用戶問題時,可以利用已有知識來解決。
正如喬布斯說過,你只能通過回溯過去理解其中的關聯。
抓住chatbot的熱潮
作為電影「Her」的狂熱粉絲,我想構建一個聊天機器人。我設法在兩個小時內學會了Tensorflow的使用,並將這個經歷和我對用戶需求的理解整理成了一篇文章。
在做這個聊天機器人之前,我對NLP的了解僅僅限於概念層面。
嘗試了市面上眾多聊天機器人之後,我發現,它們在本質上只是圖形用戶界面的替代品。如果在圖形用戶界面上操作超過兩步點擊,用聊天機器人的用戶體驗會比較好,反之,用聊天的形式就顯得多餘了。
開始構建聊天機器人的時候,我先給自己確定了兩條原則:
1.聊天機器人應該說人話,也就是說它得理解自然語言;
2.要用聊天機器人解決圖形UI中需要兩步以上操作的問題。
經過分析,我選擇構建一個通過自然語言命令找到正確日期的聊天機器人。比如說你可以問它「6天以後是幾號?」、「下個9月過完之後再過5周」之類的。
架構是這樣的:
然後,我跟著網上的一份教程,(地址:https://chatbotsmagazine.com/contextual-chat-bots-with-tensorflow-4391749d0077),用基礎的NLP技能和基於softmax的神經網路,不到兩小時就構建了一個查詢意圖分類器。
在確定了用戶的意圖之後,系統會對字元串進行語法分析並輸入,然後返回我想要查詢的日期。
說真的,並不難。如果你用Facebook Messenger Platform、Telegram的Bot Platform,或者api.ai、wit.ai、recast.ai等等工具,可能比我還快。
更多關於構建聊天機器人的心得,見這個鏈接::
https://hackernoon.com/i-built-a-chatbot-in-2-hours-and-this-is-what-i-learned-f5dbb4ba5fcc
在我的AI學習之旅中,這篇文章具有里程碑式的意義。
它讓我在Twitter和LinkedIn上交到了很多朋友,他們長期深入地和我討論AI技術的發展,甚至可以在我遇到困難時幫我一把。我收到了一些關於諮詢項目的Offer,更讓我開心是,開始有一些年輕的開發人員和AI初學者來問我是如何入門AI的。
這也促使了我寫下這篇文章,希望能幫助更多的人從我的經歷中得到線索,並開始他們的學習之路。
萬事開頭難。
一些理解
這絕不是一件簡單的事。
我最開始時用的是Javascript,後來突然換成Python,並學會如何用Python編程。
當我的模型在i7電腦無法訓練,或是經過數小時訓練,只返回一個無用結果時,我會感到煩躁。
學習AI的過程與學習一個Web框架不同。
這項技能要求你明白在微觀層面計算是如何進行的,並確定最為影響輸出結果的內容是代碼還是數據。
AI也不只是一個學科。這是一個總括性術語,其適用範圍可從簡單的回歸問題到未來的殺手機器人。與其他學科一樣,你可能要選擇AI中比較熱門的領域,如計算機視覺、自然語言處理,或者其他具有潛在發展空間的方向。
在和AI金融公司Atlantis Capital的Gaurav Sharma的交流中,他對我說:
在人工智慧時代,「聰明」意味著某些完全不同的東西。我們要求人們去完成非常關鍵、具備創造性和有個人見解的任務,和那些需要高情感投入的工作。
對於計算機是如何突然學會自主決策的,你要為之著迷。你應該堅持的兩個關鍵原則是耐心和求知慾。
這是一個非常漫長的旅程,很累也很刺激。
但最重要的是,所有旅程都是相同的,千里之行始於足下,想上手AI就開始動手吧。
原文地址:https://hackernoon.com/how-i-started-with-learning-ai-in-the-last-2-months-251d19b23597
—完—
加入社群
量子位AI社群10群開始招募啦,歡迎對AI感興趣的同學,加小助手微信qbitbot3入群;
此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。
進群請加小助手微信號qbitbot3,並務必備註相應群的關鍵詞~通過審核後我們將邀請進群。(專業群審核較嚴,敬請諒解)
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。
量子位QbitAI
? ? ? 追蹤AI技術和產品新動態


※一文看懂搜狗招股書:90次提到AI,王小川持股5%,凈利3.7億
※英特爾生產17個量子位超導晶元,現已交付合作夥伴
※AI如何變革阿里電商?iDST首席科學家任小楓首次公開演講
※Facebook悄悄參加星際AI大賽,然後輸了
※講道理,我覺得TensorFlow太遜了
TAG:量子位 |