機器學習為何那麼難?也許你的方法不對
作者 | Jason Brownlee
譯者 | 大愚若智
編輯 | Emily
AI 前線導讀:日常生活中那些實用的技能,例如閱讀、駕駛、編程,並不是通過這種方式學習的,實際上是通過一種完全逆轉的,自上至下的方式學習的。這種自上至下的方式可以直接用於學習類似機器學習這種技術課題,並能讓你用愉悅的方式,更快速地獲得成效。
更多乾貨內容請關注微信公眾號「AI 前線」,(ID:ai-front)
諸如數學、物理學,甚至計算機科學這些學科通常會使用自下至上的方式講授。
這種方式會在學習的主題範圍內以邏輯的方式列出需要學習的課題,並通過自然的過渡逐漸深入並變得複雜。
問題在於人類並不是執行學習程序的機器人,我們需要動機、激勵,以及更重要的:將課題本身與切實的成效結合在一起。
日常生活中那些實用的技能,例如閱讀、駕駛、編程,並不是通過這種方式學習的,實際上是通過一種完全逆轉的,自上至下的方式學習的。這種自上至下的方式可以直接用於學習類似機器學習這種技術課題,並能讓你用愉悅的方式,更快速地獲得成效。
本文將介紹在學習技術課題時,自上至下和自下至上兩種方式的差異,以及推薦使用這種方式學習機器學習技術以及相關數學知識的原因。
閱讀完本文後,你將了解到:
大學裡講授技術課題所用的自下至上的方式,以及這種方式存在的問題。
人們如何通過自上至下的方式學習閱讀、駕駛和編程,以及這種方式的原理。
使用自上至下的方式學習機器學習技術及數學知識的大框架,以及快速獲得成效的方法。
這就開始吧。
機器學習為何那麼難?也許你的方法不對, 照片作者:popofatticus,保留部分權利
概述
這篇文章很重要,因為我覺得可以啟發你放棄學院風格的自下至上的學習方式,用一種新方法學習機器學習技術。
本文將分為下列七部分:
自下至上的學習
學著閱讀
學著駕駛
學著寫代碼
自上至下的學習
學習機器學習技術
學習數學
自下至上的學習
以某個專業,例如數學為例。
我們需要通過一種邏輯的方法列出數學領域的不同課題,這些課題之間相互緊密關聯,我們需要通過自然而然的方式逐漸深入學習不同的技能、能力以及學識。
問題在於,這種邏輯式的進展也許只對已經位於另一端,可以憑直覺發現不同課題之間關係的人而言是合理的。
大部分學校會通過教材的安排採取這種自下至上的,自然而然的漸進式方法。有很多技術和科學領域的學習都是通過這種方式講授的。
回想一下高中或者本科學習,以及你學習過的一些基礎學科,例如:
數學
生物學
化學
物理學
計算機科學
回想一些那些教材的安排方式,每周的安排,每學期的安排,每學年的安排。自下至上,邏輯上循序漸進。
但是通過教材安排在邏輯上循序漸進,也許並不是通過教材學習獲得最高成效的最佳方法。
我們並不是執行學習程序的機器人。我們是有感情的人類,需要動機、興趣、專註、鼓勵,以及成果。
你可以用自下至上的方式學習技術課題,確實有少數人更喜歡這種方式,但這並不是唯一的方法。
如果你已經學完了某個技術課題,仔細回想一下吧,你實際上是如何學會的?我敢打賭絕對不是通過自下至上的方式。
學著閱讀
再回想一下,你是如何學會閱讀的?
我兒子已經開始閱讀了。沒有太多深思熟慮,他(實際上是學校和我們父母)使用了這些常規的技巧:
直接從「讀」著手,藉此產生興趣並看到成效。
寫下字母表,發出正確的讀音。
記住常用詞,以及它們的讀音和拼寫方法。
對於不認識的詞,使用「拼讀」的啟發式方法學習。
在大人輔導下通讀全書。
在沒有大人輔導下通讀全書。
重點在於他會不斷意識到為何閱讀這件事很重要,並將其與他想做的其他事情緊密聯繫在一起,例如:
為了看懂電視劇的字幕。
為了閱讀他喜歡的故事,例如星球大戰。
為了出門在外能夠看懂標誌和菜單。
等等等等……
另外一個重點在於,他可以立即獲得能夠回顧的結果,並能藉此了解自己能力的提高程度。
辭彙量越來越大
更流暢的閱讀習慣
更複雜的圖書
他並沒有採用下面這些方法學習閱讀:
詞性的定義(動詞、名詞、副詞等)
語法規則
發音規則
人類語言發展史
學著駕駛
你開車嗎?
不開車也沒關係,但大部分成年人都有必要學會駕駛。整個城市乃至全社會都是圍繞著每個人的移動能力設計而來的。
你是如何學習駕駛的?
我記得有些書面考試,甚至還有計算機上的考試。學習過程我完全記不起來了,不過肯定曾經學過。但我還記得一些事情。
我記得請了一位駕校教練,上了一些駕校課程。每節課都很實用,我們需要坐在車裡實踐那些必須掌握的技能,並學著在路上駕駛。
我的駕校教練沒有向我講授或討論下列內容:
機動車的發展歷史
內燃機理論
車輛常見機械故障
汽車的電氣系統
交通流量理論
儘管對這些知識完全陌生,但直至今日我依然安全駕駛無事故。
實際上我也從沒想過要學習那些知識。我不需要,沒興趣學它們,它們也無法幫我實現我真正的目的:以簡單安全的方式去往不同地點。
如果車壞了,找專業人員處理即可。
學著寫代碼
我初學編程時完全不懂代碼或軟體工程的真正含義。
當時我就是自己坐在家裡擺弄各種 Basic 命令,擺弄 Excel 里的不同命令,隨後試著修改計算機遊戲。諸如此類,很有趣的操作。
當我開始學習編程以及軟體工程時,我已經是大學生了,當時使用了自下至上的方法。
我們從這些話題著手:
編程語言理論
數據類型
控制流結構
數據結構
等等等等……
當我們終於可以開始寫代碼時,只能使用命令行界面,並飽受編譯器錯誤、路徑錯誤等問題的折磨,當然免不了還有與編程本身沒什麼關係的各種錯誤。
我恨編程。
簡單回顧一下過去幾年。不知何故,我最終作為一名專業的軟體工程師開始處理一些複雜的系統,這些系統對用戶很重要,我很擅長這個工作,當然也很熱愛它。
最後我參加了一些介紹如何創建圖形用戶界面的課程,此外還有介紹如何通過 Socket 編程讓計算機相互通信的課程,以及介紹如何通過線程讓多個東西同時運行的課程。
我將這些知識與我真正喜歡的東西緊密聯繫在一起:開發能解決實際問題,供他人使用的軟體。我將其與真正重要的目標聯繫在一起,所以這些知識不再抽象,也不再難懂。
至少對我,以及很多像我這樣的開發者來說,我們的學習方式完全錯了。錯得離譜。這樣的方式浪費了我多年的時間和精力,而最終的結果 / 收效不堪一提,像我這樣胸懷熱情,有時間的學生,應該將這些時間和精力用在自己真正熱愛的事情上。
自上至下的學習
自下至上的方式不僅僅是講授技術課題的常見方式,似乎看起來也是唯一的方式。
但如果你仔細想一下自己實際上是如何學習的,情況就截然不同了。
大學課程的設計者往往是相關領域的專家,他們確實想幫助大家學習。他們會列出所有知識點,讓你通過邏輯的方式循序漸進地學習他們設計的教材,他們認為這樣可以幫你獲得你所需,而他們恰巧具備(希望如此吧)的技能和能力。
正如上文所述,這種方式可能確實適合某些人。
但並不適合我,希望也不適合你。實際上我遇到過的程序員,很少能精通自己通過計算機科學課程學習的編程技能,就算精通,也是他們自己通過實踐項目自學,而非學校學習獲得的。
此時可以考慮換為選擇自上至下的方法。
將習以為常的傳統方式翻轉過來。
不要從各種定義和理論著手,而是將課題與你希望的結果聯繫在一起,並學著掌握如何能快速直接地獲得所需結果。
制定一個學習計劃,專註於能獲得最終結果的實踐過程,根據需要深入學習其中的某些領域,但始終圍繞真正需要的最終結果。
效果截然不同
這是一種與傳統方式截然不同的方法。
如果採用這種方法,請絕對不要採用傳統的思維方式或對照和比較。
所有責任都在於你,無法怪罪於其他原因,如果不能成功,原因只在於你自己中斷了學習。
這種方式是迭代的。每個課題可能需要反覆學習多次,每次都更加深入。
這種方式並不完美。一開始效果可能並不明顯,但只要堅持就會好轉。
這種方式需要探索。學習者必須抱有持之以恆堅持探索的心態。
這種方式需要責任感。學習者需要對自己的改進和提高負責。
這種方式需要好奇心。學習者必須密切關注自己的興趣所在並堅持不懈。
這種方式有些危險
說真的,我多次聽到一些「專家」說過類似的話,例如他們會說:
你必須先懂得理論,隨後才能使用這種技術,否則肯定無法正確地使用。
我也同意,最初的效果可能並不明顯,但是後續的提高和專業技能並非僅僅來源於理論和各種基本因素。
如果你認為新手程序員不應將變更推送到生產環境並部署,那麼你一定會確信機器學習技術的新手也應該遵循相似的限制。
技能需要展示出來。
信任是自己贏得的。
無論如何獲得某個技能,情況都是如此。
你是技術人員
真的嗎!?
這是我經常聽到的另一種針對這種學習方式的「批評」。
沒錯,我們想要成為技術人員,在實踐中通過各種工具為人們提供幫助,我們不想成為學者。
你並不需要全面學習所有相同的基礎知識,因為你學習的目的和他們截然不同。不過你也可以隨時回過頭來學習你認為有必要學習的任何知識,只要你覺得自己用得到。
業內的開發者並不是計算機科學家,他們是工程師,是以自己的作品引以為豪的技術人員。
高效、富有成效、有趣的學習方式
這種學習方式的收益遠遠大過可能面臨的挑戰:
可以直奔目標著手參與。
可以通過上下文情境將更深入的知識甚至理論聯繫在一起。
可以根據項目的目標有效地篩選需要掌握的課題。
這種方法更快。
這種方法更有趣。
並且我敢說,這種方法可以讓你感覺更好。
為何能感覺更好?
因為課題可以與你在感情上聯繫在一起。你可以將其與自己關注的成果或結果聯繫在一起,你在對自己投資,你可以證明自己的能力。我們都熱愛自己擅長的事物(哪怕並未意識到自己到底有多擅長),這有助於讓我們獲得動機、熱忱以及激情。
富有熱忱的學習者將直接超越原教旨主義者。
學習機器學習技術
那麼到底該如何學習機器學習技術?
你是否參加了大學裡那些自下至上的課程?你是否在通過此類課程形成自己的學習體系?或者更糟糕的:
你是否採取了自上至下的方式,但卻又心懷愧疚甚至不安全感?
你並不孤單,每天在網上幫助初學者時我都會遇到類似的情況。
為了幫你將目標與學習聯繫在一起,強烈建議使用自上至下的方式學習機器學習技術。
不要從前導的數學知識學起。
不要從機器學習理論知識學起。
不要從零開始編寫每種演算法的代碼。
這些事可以隨後再做,可以在你將抽象的知識與目標聯繫在一起之後,完善並深化你的理解。
首先學習如何使用固定的框架以及免費易用的開源工具解決最簡單的預測建模問題。
通過大量效性項目練手,並逐漸提高這些項目的複雜度。
通過公開的作品展示你的成果。
※python:一句話說機器學習演算法和調參-集成學習篇
※靈魂拷問:是什麼讓機器學習達不到我們的期待呢?
TAG:機器學習 |