[譯] 最近兩個月中我是如何開始學習 AI 的

Aurora_極光開發者發表於2017-10-31

簡評:人工智慧是 21 世紀最重要的技能。在人人都很忙碌的今天,如何把人工智慧這個技能點加上?作者用自己的親身經歷告訴大家。

當我關閉我的創業公司 Zeading 時,我被這次失敗驚醒的同時感覺心裡空落落的,就像失去了一些非常特別的東西。

全棧工程師在面臨劇變的時代是不夠的。在接下來的兩年中,沒有人工智慧技術的全棧將不再是全棧。

是時候採取行動了。我做出了我認為現在唯一能做的行動 —— 像開發者那樣更新我的技能,以像產品經理一樣的心態以及像企業家一樣的哲學觀來面向資料。

正如著名的風險投資家,人工智慧和金融科技的思想領袖 Spiros Margaris 雄心勃勃地對我說:

如果創業公司和企業只依賴於最前沿的 AI 和機器學習演算法作為競爭 —— 這是不夠的。AI 將不是競爭優勢,而是基本需求。你聽過有人把用電作為競爭優勢的嗎?

構建我的第一個神經網路

一般是建議在 Coursera 註冊 Andrew Ng 的課程。這是個很棒的網站但我發現我很難在觀看課程時保持長時間的專注。倒不是說這門課程很糟糕,只是我真的很難在講座中聚精會神。一直以來我個人 的學習模式就是實踐,所以我想幹嘛不直接來實現自己的神經網路。

我沒有直接跳到神經網路,因為它是一個更高的學習方式。我先熟悉了這個領域的所有概念,這樣我才能學習用專業術語談論這個領域。

第一個任務不是學習。而是去熟悉。

我的知識背景是純 JavaScript 和 NodeJs,暫時不想換別的。我搜尋到一個簡單的神經網路模組叫 nn,然後通過模擬輸入用它來實現一個與(AND)門。通過這篇指導,我選擇了這個問題:對於任意的輸入 X,Y,Z,輸出結果都是 X AND 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複製程式碼

幸福來得太快了!

當得到的結果是 0.9971 時,我意識到,這個神經網路學會了如何做一個 AND 操作,並且忽略附加的輸入。這樣的結果極大地增強了我的自信心。

這就是機器學習主要的宗旨。你給計算機程式一個資料集,然後調整內部的引數,它就能夠從一個新的資料集中通過觀察原始資料得到一個縮小誤差的結論。

這個方法,我後來瞭解到,它也被稱為梯度下降

補充人工智慧知識

當我從第一個人工智慧程式中獲取了滿滿的自信後,作為開發者,我迫不及待地想要了解能用機器學習做什麼更多的東西。

  • 我解決了幾個監督學習的問題,比如迴歸分類

  • 我通過一個有限的資料集來用多元線性迴歸嘗試預測哪支隊伍將取得勝利(預測結果相當差,但感覺還是不錯的)。

  • 我在 Google 機器學習雲上嘗試了一些演示,看看 AI 在今天能做什麼(作為一個 SaaS 產品,Google 做得足夠好了)

  • 我被 AI Playbook 難住了,由 Andreessen-Horowitz 組織的出色的資源,受人尊敬的基金。無愧為開發者和創業者最便捷的資源。

  • 開始在 Youtube 上看 Siraj Rawal’s awesome channel關於深度學習和機器學習的集中討論。

  • 閱讀 Hacker Noon 上的優秀部落格,講述了大佬如何在矽谷建立 Not Hotdog app(不知道咋翻譯 = =)。這是我們能做的最接近深度學習的案例之一。

  • 閱讀了 Andrej Karpathy 的部落格,特斯拉 AI 部門的主管。儘管我尚不能夠理解他講的任何東西,讓我很頭疼,但是我在多次被血虐後,對一些概念開始有點理解了。

  • 鼓起勇氣,我開始逐字實現一些深度學習的教程(複製和貼上)並嘗試在我的機器上訓練模型和執行程式碼。大多數時候,結果很爛,因為大多數模型需要的訓練時間很長,而且我沒有 GPU。

逐漸地,我從 JavaScript 切換到了 Python,並且在我的 Windows 機器上安裝了 Tensorflow

這整個過程都是在被動地消化內容,並在你的腦海裡建立參考,當以後遇到一個真正的問題時,可以使用這些知識。

正如 Steve Jobs 所說,你只能往後看才能把這些點連起來。

趕上聊天機器人火車

作為電影 《》 的粉絲,我也想要做一個聊天機器人。我接受了這個挑戰,然後設法用 Tensorflow 在不到兩小時內完成。幾天前我在我其中一篇文章裡列出了這個過程的大綱和商業需求。

幸運的是,這篇文章廣為好評,被 TechInAsiaCodeMentorKDNuggets 推薦了。這對我個人而言是個很棒的時刻,因為我才剛開始寫技術部落格。我認為這篇文章可以算是我 AI 學習的里程碑之一。

我在 Twitter 和 LinkedIn 上交了許多朋友,我可以和他們全面而深度討論 AI 開發,發現自己的不足。我在諮詢專案上收穫了幾個 offer,最重要的是,年輕的開發者和 AI 初學者開始向我提問如何開始學習 AI。

這就是我寫這篇文章的原因。為了幫助更多的人從我的經歷中找到開始他們的學習旅行的線索。

萬事開頭難。

其他

這絕不是一個簡單的事情。當我在 JavaScript 上卡住時,我幾乎一夜之間跳到了 Python,學習如何編寫程式碼。在經過幾小時的訓練後,我的模型在我的 i7 機器上跑不出結果,這讓我很煩躁,它們會返回一個胡亂的結果,就像在一個隊伍在板球比賽中贏得比賽一樣,這是個 50-50 的概率。學習 AI 不像學習 Web 框架一樣。

在微觀層次的計算中發現你的什麼輸出 —— 你的程式碼還是資料更為合理,這是一種技巧。

AI 同樣不只是一門學科。這是一個用來形容任何從簡單迴歸問題到某天殺死我們的殺人機器人的總括術語。像其他你接觸的學科一樣,你可能想要 cherry pick AI 中任何你想要的足夠好的部分,比如計算機視覺或者自然語言處理,或者上帝禁止的,統治世界的等等。

Atlantis Capital 的 Gaurav Sharma 是 AI、金融科技、加密等行業的知名領導者,在與他的對話中,他向我表示:

在人工智慧的時代,“變聰明”意味著完全不同。我們需要人們執行高階的、關鍵的、創造性的、有思考能力的以及需要高度的情感參與的工作。

你必須讓自己沉迷於計算機如何突然學會用它們的方式來做事情。耐心和好奇心是你應該堅持的兩個關鍵原則。

這是一段很長很長的旅程。非常累,非常容易煩躁,以及非常花時間的過程。

但好處在於,像世界上其他旅程一樣,從一個簡單的步伐開始。


知乎專欄:極光日報

原文連結:How I started with learning AI in the last 2 months

極光日報,極光開發者 的 Side Project,每天導讀三篇國外技術類文章,歡迎投稿和關注。

相關文章