兩個月入門深度學習,全靠動手實踐!一位前端小哥的經驗分享

兩個月入門深度學習,全靠動手實踐!一位前端小哥的經驗分享

在當前社會,技術日新月異,一個全棧工程師不及時學習新知識,掌握AI技能,再過兩年就算不上“全棧”了。

產品發燒友、前端小哥Shival Gupta在意識到這一點後,通過兩個多月的探索,掌握了基本的AI技能,並在Hackernoon上發文分享了自己的學習歷程。

量子位搬運過來,各位可以參考他的學習思路。

建立第一個神經網絡

大家給初學者的建議,通常是通過吳恩達的Coursera課程來入門。

這樣開始很好,但是我在聽課時很難保持專注。不是說這個課程不好或存在其他問題,而是我真的非常討厭專心聽課。我習慣於通過實踐來學習,所以爲什麼不這麼做呢?

讓我們開始動手實現神經網絡吧。

我沒有直接跳到神經網絡,因爲還需要熟悉一些基礎內容。我先嚐試熟悉這個領域的所有專有名詞,爲下一步的語言學習作鋪墊。

也就是說,第一項任務不是學習,而是熟悉這個領域。

我是個用JavaScript和Nodejs做開發的前端工程師,暫時也不想轉後端,於是就找到了一個叫做nn的簡單神經網絡模塊,並用它來實現一個帶有虛擬輸入的“與”門。

我選擇了這樣一個問題:對於任意三個輸入X、Y和Z,輸出爲X和Y的“與”運算結果。

以下是實現代碼:

var nn = require(‘nn’)
var opts = {
layers: [ 4 ],
iterations: 300000,
errorThresh: 0.0000005,
activation: ‘logistic’,
learningRate: 0.4,
momentum: 0.5,
log: 100
}
var net = nn(opts)
net.train([
{ input: [ 0,0,1 ], output: [ 0 ] },
{ input: [ 0,1,1 ], output: [ 0 ] },
{ input: [ 1,0,1 ], output: [ 0 ] },
{ input: [ 0,1,0 ], output: [ 0 ] },
{ input: [ 1,0,0 ], output: [ 0 ] },
{ input: [ 1,1,1 ], output: [ 1 ] },
{ input: [ 0,0,0 ], output: [ 0 ] }
])
// send it a new input to see its trained output
var output = net.send([ 1,1,0])
console.log(output); //0.9971279763719718
選擇這個問題,是受一份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),這是一個由安德森-霍洛維茨風險基金整理的乾貨網站,確實是針對開發人員和創業者的最方便資源之一。

△ AI Playbook。地址:http://aiplaybook.a16z.com/
5. 我開始在Youtube上觀看Siraj Rawal的精彩視頻,這是一個以深度學習和機器學習爲核心的專欄。
視頻地址:
https://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A

  1. 我讀了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

  1. 我讀了Andrej Karpathy的博客(https://karpathy.github.io/),他是特斯拉的AI主管。雖然我無法理解裏面的一些內容,這讓我很頭疼,但是我發現,在多花一些時間以後,我對這些概念有了一定理解。

  2. 帶着信心,我開始通過複製和粘貼來逐行實現一些深度學習教程中的代碼,並在我自己的電腦上運行代碼,嘗試訓練相關模型。很卡……因爲大多數模型需要很長的訓練時間,我也沒有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就開始動手吧。

編譯自 Hackernoon 量子位 出品 | 公衆號 QbitAI

原文地址:https://hackernoon.com/how-i-started-with-learning-ai-in-the-last-2-months-251d19b23597

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章