全文共4221字,預計學習時長13分鍾
隨著越來越多的公司采用人工智能技術,機器學習工程師-即開發人工智能(AI)機器和能夠學習並應用知識的高級程序員的需求量增大。
這些專業人員需要進行編程以應對複雜的數據集/算法,進而訓練人工智能機器。
越來越多的軟件工程師開始轉型人工智能,而大多數人都是從頭開始學的機器學習。
但是,相比于新框架機器學習更難掌握。
作爲一個高效的實踐者,你需要充分理解該領域的理論、廣泛掌握當前最尖端的知識,並且有能力以不確定的方式塑造問題。
網上很多指南只會簡單地教你如何在一個策劃好的數據集上訓練可以立即使用的模型,並達到一個不錯的准確度,然後就結束了。事實上,要成爲一個優秀的機器學習工程師必須掌握更廣泛的技能。
那麽,關于人工智能,有遠見的軟件工程師應該學習哪些內容呢?
筆者還記得自己第一次學習編碼是在中學,父親是一名程序員,他打開一個文本編輯器,在屏幕上輸入了以下代碼:
- public class HelloWorld {
- public static void main(String[]args) {
- System.out.println("HelloWorld.");
- }
- }
“這是幹什麽用的?”我問道。
“這會打印出‘Hello World’。”父親回答。
“public是什麽?Class是什麽?static是什麽?……”
“忽略這些詞。這些只是樣板文件。”
但是筆者被那些看不懂的所謂樣板文件嚇壞了,所以開始學習這些關鍵詞的意思。結果發現,這複雜又無聊,幾乎扼殺了筆者這個年輕程序員的遠大抱負。
如今學習軟件開發比筆者高中時候要容易得多,主要是因爲有了像codecademy.com這樣的網站,建立基本開發環境也更加容易,以及對像Python和Javascript這樣高級、解釋性語言的全面教授。
從對編碼一無所知到在浏覽器中編寫下第一條條件語句,只需要幾分鍾即可。沒有雜亂的環境設置、安裝、編譯器或樣板需要處理——可以直接進入有趣的部分。
這正是最好的學習方式。首先,要學習高水平的核心概念,只有這樣,才能欣賞和理解背後的細節以及它們爲什麽重要。先學習Python,然後是C語言,再然後是彙編語言,而不是反過來。
然而不幸的是,如今,很多人開始學習機器學習時和筆者學習Java時有著同樣的經曆。先學習最低級的細節——分層架構、反向傳播、丟棄法(Dropout)等等——這讓人以爲機器學習是非常複雜的,也許應該先上一堂線性代數課,然後放棄。
這很遺憾,因爲在不久的將來,大多數用機器學習的軟件開發師是不需要去思考,也不需要知道任何低級的概念。正如(通常)不需要彙編代碼,也不需要實現TCP棧或加密庫一樣,程序員只是將機器學習作爲工具,而將細節留給一小部分專家去解決。在這一點上——機器學習“民主化”後——開發人員將不需要理解實現細節,而需要掌握應用這些智能算法的最佳實踐。
現在進展到的階段
如今,如果想建立一個神經網絡來識別照片中貓的臉,或者預測下一條推特是否會走紅,那麽可能需要開始學習 TensorFlow或者PyTorch了。這些基于Python的深度學習庫是當今設計神經網絡最流行的工具,而它們的出現都還不足5年。
在其短暫的生命周期中,TensorFlow已經成爲一種比五年前更加方便用戶的方式了。在早期,想要成爲一名合格的TensorFlow程序員,不僅要了解機器學習,還要了解分布式計算和延遲圖形架構。即使是寫一份簡單的書面聲明也困難重重。
就在今年早秋,TensorFlow 2.0正式發布,新框架對開發人員更加友好。下面是TensorFlow 2.0的Hello-World式模型:
- model = tf.keras.models.Sequential([
- tf.keras.layers.Dense(512, activation='relu'),
- tf.keras.layers.Dropout(0.2),
- tf.keras.layers.Dense(32, activation='relu'),
- tf.keras.layers.Dense(1, activation='softmax')
- ])
- model.compile(optimizer='adam',
- loss='sparse_categorical_crossentropy'),
- metrics=['accuracy']))
- model.fit(x_train, y_train, epochs=5)
- model.evaluate(x_test, y_test)
- viewrawhello_world_keras.py hosted with ❤ by GitHub
如果以前設計過神經網絡,那上面的代碼是簡單易讀的。但是如果沒有設計過神經網絡或者正處于學習階段,可能會産生一些疑問。
比如,丟棄法(Dropout)是什麽?這些密集的層(layers)是什麽,需要多少,又該放在什麽位置?sparse_categorical_crossentropy是什麽?TensorFlow 2.0消除了一些構建模型的阻礙,但並沒有抽象出設計那些模型的實際架構。
發展方向
那麽,操作簡便的機器學習工具未來會是什麽樣子呢?從谷歌、亞馬遜到微軟、蘋果,每個人都在探索這個問題的答案。此外——免責聲明——這也是筆者作爲谷歌工程師一直在思考的問題。
首先,人們將會看到更多的開發人員使用預先訓練好的模型來完成常見任務,也就是說,不需要收集自己的數據或訓練自己的神經網絡,而是可以使用谷歌/亞馬遜/微軟的已有模型。許多雲提供商已經這樣做了。例如,通過點擊谷歌雲REST終端,就可以使用預先訓練的神經網絡來:
· 從圖像中提取文本
· 標記照片中的常見對象
· 將語音轉換爲文本
· 語際翻譯
· 識別文本的情感
· 其他
也可以使用谷歌的ML Kit或蘋果的Core ML等工具,在設備上的移動應用程序中,運行預先訓練好的模型。
坦白說,與使用TensorFlow構建的模型相比,使用預訓練的模型優勢在于(除了易用性之外),谷歌研究人員在整個數據網絡和大量GPUs 和TPUs上訓練神經網絡模型,會比程序員自己構建的更精確。
使用預先訓練的模型的缺點是,它們解決的是一般性問題,比如在圖像中識別貓和狗,而不是特定領域的問題,比如識別裝配線上某個部件的缺陷。
但是,即使在爲特定領域的任務訓練自定義模型時,這些工具也正在變得更加易于使用。
谷歌的免費 可教機器網站允許用戶使用拖拽操作在浏覽器中收集數據和訓練模型。今年早些時候,麻省理工學院發布了一個類似無代碼的界面,用于構建在觸摸屏設備上運行的自定義模型,該界面是爲醫生等非編碼人員設計的。微軟以及像lobe.ai這樣的初創公司也提供類似的解決方案。同時,谷歌雲自動機器學習是一個針對企業工作負載的自動化模型訓練框架。
接下來學什麽
隨著機器學習工具更加易于使用,希望使用這種技術(但不是成爲專家)的開發人員,其技能將會發生變化。所以,如果想像韋恩-格雷茨基(Wayne-Gretsky)那樣計劃冰球的走向,現在應該學什麽呢?
知道什麽時候使用機器學習總是很難……
機器學習算法不同于標准軟件的地方在于它們是概率性的。即使是一個高度精確的模型有時也會出錯,這意味著對很多問題來說它不是最佳解決方案,特別是對于它本身。以基于機器學習的語音轉換爲文本的算法爲例:當讓Alexa“關掉音樂”時,她錯把鬧鍾調到淩晨4點,這影響不大。但如果醫學版的Alexa錯把醫生給開的藥Adderall聽成了Enulose,影響就大了。
理解什麽時候以及如何在生産中使用模型始終是一個微妙的問題。在以下情況下尤其棘手:
1. 風險很高
2. 人力資源有限
3. 人類對預測有偏見或預測不准確
以醫學影像爲例。在全球範圍內都缺少醫生,在診斷疾病方面,機器學習模型通常比訓練有素的醫生更准確。但是人們會想讓算法對自己是否患有癌症持最後的發言權嗎?幫助法官判刑的模型也是如此。模型可能有偏見,但人也是如此。
理解什麽時候使用機器學習是有意義的,如何正確地應用它不是一個容易解決的問題,但是這個問題不會很快消失。
可解釋性
衆所周知,機器學習模型是不透明的。這就是爲什麽它們有時被稱爲“黑匣子”。人不太可能用“神經網絡告訴我的”作爲唯一的證據,來說服副總裁做出重大的商業決策。另外,如果不明白爲什麽模型會做出這樣的預測,人可能就不會意識到它在做出有偏見的決定(比如拒絕貸款給特定年齡或特定地區的人)。
正是因爲這個原因,機器學習領域的許多玩家都著眼于構建“可解釋的人工智能”性能——讓用戶更仔細地檢查模型用什麽性能來進行預測的工具。人們還沒有將解決其作爲一個行業問題進行解決,但正在取得進展。例如,在11月,谷歌推出了一套解釋工具以及一種叫做模型卡的東西——一種幫助用戶理解機器學習模型局限性的可視化指南。
通過應用取得創新
有些開發人員擅長機器學習,有些開發人員擅長神經科學,但很少有人兩者都擅長。幾乎任何複雜的領域都是如此。未來幾年,人們從機器學習中看到的最大進步可能不是來自改進的數學方法,而是來自不同專業領域的人,他們學習了足夠多的機器學習並將其應用到自己的領域。例如,在醫學成像中,最令人興奮的突破——能夠在掃描中發現惡性疾病——不是由新的神經網絡架構取得的,而是由應用于新問題的相當標准的模型取得的。
所以,如果軟件開發人員幸運地擁有額外的專業知識,那麽他就已經領先了。
留言點贊關注
我們一起分享AI學習與發展的幹貨
如轉載,請後台留言,遵守轉載規範