想學習深度學習需要什么樣的基礎?
可以先看看本人另外一篇相關博客:
普通程序員轉型AI免費教程整合,零基礎也可自學 - 流風,飄然的風 - 博客園
http://www.cnblogs.com/zdz8207/p/ai-learn-resource.html
關於編程基礎
只會 Java 語言,不會 C/C++/Python 能學習嗎?或者學過 C/C++/Python,但是沒有實際應用過,或者基礎不好,是否可以學?是否有 Python 學習教程推薦?如果 C++/Python 基礎比較薄弱,是否可以學?
【回答】可以。
在數據科學、大數據和機器學習(深度學習)領域,Python 被視作最為簡潔和直接的腳本編程語言,被科研領域和工程領域廣泛采用,因此 針對 Python 編程語言本身,跟隨編程實戰,在編程的過程中逐步了解。
事實上 Java 編程語言在大數據處理和機器學習領域的應用也十分廣泛,其中涉及到 真實工程代碼 的部分。注重於實際應用的編寫,因此編程語言特性方面的門檻較低。
使用編寫的實驗程序,轉化為實際的工業級代碼和產品,將涉及 C/C++ 和 Java 代碼的編寫。由於 Java 在面向對象的基本結構上與 C++ 十分相似,因此這一塊也應當不是問題。
通過學習不僅對整個機器學習、深度學習和分布式大數據實時處理有一個全面的認識,而且在非常實際的工程實踐,將來找工作和職業發展,都將會有非常大的提升。
如果有其他語言的基礎,但是沒有 C++和 python 基礎也是完全可以學習的,語言只是工具,有其他語言基礎學習新語言很快,尤其是 Python 這種語言很簡單,而 Java 和 C++ 相比之下可能需要花費更多時間去學習。
需要大數據基礎嗎?
【回答】不需要。
在實戰過程中學習機器學習領域的經典理論、算法和工程實踐,學習大數據或海量數據的高性能分布式處理,通過這兩大領域的學習和碰撞。
關於數學基礎
有的同學有數學基礎,但是缺乏 C++/Python 編程語言;有的同學沒有數學基礎,是否可以學?
數學基礎需要到什么程度?如果提前學習是否有資料推薦?
【回答】並不需要特別高的數學基礎,只需要掌握大學本科階段學習的高等數學、線性代數和概率論等課程。
雖然從應用角度上來看:
如果想要深入研究深度學習,比如完全自己實現不同結構的網絡,設計網絡的層與參數最好能夠熟練運用矩陣理論中的相關工具,但是我相信如果職業道路規划不是算法工程師,一般並不會深入到這一層面。
對應於不同應用領域,還需要不同的數學工具,比如和圖像、信號識別相關的領域,圖形學等相關的基礎功底是必須要有的,但這個已經是復雜的現實應用問題了,並不在入門范圍之內,應用領域還是相對較為簡單的。
實際上,如果你是一個工科生,你會發現學習數學最難的地方就是不理解這些數學工具到底能幫助我們去解決什么問題,因為大學老師大多數都是數學專業老師,並不會從學生各自專業的角度來講解數學問題。
但是當你知道你需要用數學工具做什么,有一個明確目標后,你會發現你的動力和學習能力將會有一個突破,你不會覺得這些數學知識是枯燥乏味的。
因此哪怕你的數學基礎相對薄弱,有一個明確的目的,再去補充這些數學知識,相信學員自己一定能解決這個問題。
數學也絕對不是學習這門課的障礙,但是如果你想以其作為職業,去打好這個數學的底子是不可或缺的。
最后,如果你是數學專業,或者覺得自己數學很好的學生,你們也更不用擔心不會 1、2 門語言,因為計算機語言只是一種工具,最關鍵的還是訓練自己的思維,這種思維的核心就是數學和算法。
如果你數學很好,學習這些語言是很快的,而且本門課程中除了最后的 C++ 開發,也不會應用到什么特別的語法特性。
但是另一方面也不要忽視學習好這些工具的重要性,只是希望學生自己能夠權衡。
對數學好的同學來說,可能最致命的是一個誤區,因為計算機的基礎是數學,所以完全使用數學思維去解決計算機問題是沒問題的,計算機有自己的思維模式,哪怕是那些基於數學原理的算法問題,所以數學專業的同學必須要學會認識到這種思維的差異並學會使用計算機的思維來解決問題,而機器學習則是計算機思維的一個典型代表。
至於需要的數學基礎,肯定是希望同學能夠學習高等數學中的微積分,線性代數和概率論的相關知識,對於沒有實際編程經驗的學生則推薦深入學習一下離散數學(網上有很多大學相關免費的公開課可以學的)。需要的數學基礎也就是這些了。
關於內容
深度學習和機器學習的關系是什么?要先學機器學習再學深度學習嗎?
【回答】機器學習肯定是深度學習的基礎,因為深度學習就是深度神經網絡,而人工神經網絡則是機器學習的一大經典模型。
但機器學習領域包含的算法和模型太多,因此想要專精深度學習不一定要學會其他許多的機器學習算法和理論。
所以只需要學習 機器學習中和深度學習相關的必備基礎知識就可以了。
但是如果你想要以后往算法工程師發展,去學習熟悉其他的機器學習模型也是必不可少的。
Caffe 框架和 TensorFlow 框架,keras框架都要學嗎?
【回答】現在大多數圖像識別的教程都使用Caffe講解,同時TensorFlow 的視頻教程也很多,也是很熱門的框架。
TensorFlow 是目前最強大的機器學習框架,沒有之一,而且有 Google 公司的支持,有最龐大的社區,一旦有什么新模型都會有 TensorFlow 的實現可以使用(得益於 TensorFlow 的架構設計)。用 TensorFlow 來進行快速實驗是非常好的選擇。
TensorFlow 有兩個比較大的問題:
第一:TensorFlow 的單機執行效率低,尤其是和 Caffe 相比,對於資金並不是很充足的創業公司,在有一定量數據的情況下,並無法支撐一個可以快速運行 TensorFlow 訓練的集群,這個時候 Caffe 以及其各種改版往往是更好的選擇,而我們日常工作的實驗場景就被此局限,因此更偏向於實際使用 Caffe。
第二:TensorFlow 過於龐大,實際開發產品 SDK 的時候,我們希望訓練出來的模型能夠直接放到產品中使用,因此訓練和產品 SDK 使用的深度學習框架往往是一致或者可以互相轉換的。
而 TensorFlow 過於龐大復雜,還需要使用專門的構建工具,在實際產品應用集成中往往要使用能夠完全掌控的工具和框架並進行修改,TensorFlow 的復雜性正和這種要求背道而馳。
當然一般公司沒有人力對 TensorFlow 進行深度研究、裁剪和維護,所以目前大部分產品中使用 Caffe。
keras框架是在TensorFlow基礎上再進行封裝的,更容易調用接口實現應用功能的,類似SpringMVC框架在JavaEE基礎上進行封裝一樣。
關於就業
學習了課程,掌握了這個技能,能不能找到工作,是否有匹配的崗位?
【回答】可以
需要自己平時更多地去實踐,成為某一領域專家,你知道該去學習什么,還有學習的思路、方法,以及平時難以接觸到的大型企業實際的工程經驗和架構方法,這將對你的未來工作和職業發展提供極大幫助。
通過學習可以匹配到以下幾個崗位:
這個實際崗位在很多公司中往往是算法工程師
大數據分析和處理方面的崗位
雲計算應用或平台的開發工程師
機器學習或深度學習應用或平台的研發工程師
而算法工程部門的工程師一般會有兩類人(除去部門負責人等高級職位):
一類是能夠較熟練運用 1 到 2 門語言(比如 Python、Java 或 C++),數學功底好,熟悉機器學習和深度學習的人,他們的任務是不斷優化機器學習模型,進行訓練測試,調整參數等,這個過程中也需要編寫相當多的腳本來幫助自己解決各種問題。最后要能夠編寫實際的產品代碼,不需要有非常好的架構和設計思想,關鍵是能夠高效地實現某種算法。
一類是有好的編程功底,同時又能夠基本理解機器學習和深度學習的人,他們的任務往往是負責封裝改良第一類人實現的功能模塊,從時間、空間和代碼質量上改良模塊的實現,同時負責維護完整的算法 SDK,這類 SDK 往往要求能夠快速迭代更新,能夠配上完整的訓練和測試流程,需要開發者具有較強的工程能力還有架構、設計思維。
至於崗位問題完全不用擔心,尤其現在有許多以人工智能為核心的公司如爆發式增長,以及傳統 IT 企業向海量數據處理、機器學習和深度學習領域不斷加大投入,對這類工程師的需求量極大。
大公司還是小公司需要這種崗位?機器學習工程師的薪資待遇如何?
現在大公司和小公司都有,尤其是以人工智能為主的公司。同時人工智能已經很明確是未來的大趨勢,大風口。
現在有許多以人工智能為核心的公司如爆發式增長,以及傳統IT企業向海量數據處理、機器學習和深度學習領域不斷加大投入,對這類工程師的需求量極大。
至於薪資待遇方面,由於目前以及可預期的未來很長一段時間,這類崗位的需求和缺口都非常大,對該領域的實踐和工作經驗,能夠獲得高於市場的薪酬水平。
如果你想快速掌握各方面的專業技能,不落后這個人工智能的時代。如果你的機器學習基礎非常薄弱,沒有在工程實踐中使用過機器學習,沒有實時數據處理的經驗,那么,現在就是開始學習的時候了。
