機器學習大數據學習路線總結

機器學習大數據學習路線總結

八月 18, 2019 - 機器學習&大數據

前言

好久好久好久沒有更新過博客的內容了,這次把前一段時間給浪潮俱樂部的新成員總結的機器學習和大數據學習路線總結放上來水一篇博客,不管怎麼說也算是給其他人一個參考吧。如果你覺得這篇文檔的內容有失偏頗,請聯繫BB醬進行修改。

寫在前面

歡迎大家來到西電浪潮俱樂部,相信對於你們中的大多數同學來說,來到俱樂部是因爲被人工智能,大數據的名頭所吸引,想要學習相關技術,並且在未來能夠有機會從事這些領域的研究或工作。那麼,希望BB醬的這篇文章能夠多少給你們起一些正面作用。

可能會有很多人覺得,人工智能看起來超厲害,超NB,學了人工智能就能統治世界!這話說的也不無道理,畢竟現在已經21世紀了,而且你們瞭解人工智能的渠道一般是媒體和網絡,像前幾年超級火爆的AlphaGo,最近新興的自動駕駛,智能家居,類腦計算這些話題也總是在媒體上被大肆報道。說的玄乎一點,還有什麼各類科幻電影,機器人什麼的也少不了人工智能的影子。不管怎麼說,你現在已經是或者即將成爲西電浪潮俱樂部的一員了,那你就是上了我的賊船,沒那麼容易回頭了。

但是任何事物的紅火終歸是有道理的,人工智能領域現在火的一塌糊塗,人工智能也已經從計算機領域的學科演變成了一個多學科、多領域混合的方向。那麼對於我們而言,要選擇合適的切入點是很重要的。我們俱樂部目前將方向大致劃分成機器學習方向和大數據方向,從不同的角度詮釋人工智能的基本組成部分。

可能你們屬於不同的部門,有着不同的職責(B事),但是不管怎麼說,我們都是一個以技術爲主要驅動力的社團,因此對於我們的成員來說,學習技術也是最重要的一部分。不管是什麼部門,我們的技術培訓和討論都是在一起進行的。

在這篇文章開始之前,我們希望你已經對於基礎的C語言和基本的程序設計方法有了一個簡單的瞭解,能夠上手寫一寫簡單的C語言上機題,如果你對算法和數據結構等知識有所瞭解,那麼你對學習過程將會變得更加容易。

那麼,接下來的這篇不短的文章,給出了我目前理解的針對大家當前學習情況的可能的一套學習方案。要是有什麼不對的地方,還請指正,當然也可以直接過來找我,我們可以面對面進行深度♂討論。

網絡上的入門路線資源:

在開始之前,有興趣的同學可以看一下網上大神總結的入門路線,可以和我寫的這一篇一起作爲一個參考,祝各位武運昌隆。
學習攻略 | 機器學習 學習路線圖 https://zhuanlan.zhihu.com/p/27183621
如何用3個月零基礎入門「機器學習」? https://zhuanlan.zhihu.com/p/29704017
大數據最佳學習路線總結 https://juejin.im/post/5b1a71c25188257d571f24a2
大數據學習路線攻略 https://blog.csdn.net/zzq900503/article/details/79346215

機器學習入門綜述

針對浪潮俱樂部而言,我們的機器學習方向,就是學習機器學習、深度學習有關的算法、框架和應用的方向。
那麼什麼是機器學習呢?我們先來看看維基百科:

  • 機器學習是一門人工智能的科學,該領域的主要研究對象是人工智能,特別是如何在經驗學習中改善具體算法的性能。
  • 機器學習是對能通過經驗自動改進的計算機算法的研究。
  • 機器學習是用數據或以往的經驗,以此優化計算機程序的性能標準。
  • A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.

看起來很厲害,其實機器學習簡單來說就是讓機器按照和人一樣的方法進行學習,通過經驗來不短改正自身結構和方法,從而獲得知識。也就是說,看上去很智能,其實本質上還是數學哦。

前置知識

這裏我總結了一些機器學習領域相關的前置數學知識,這些知識在後面的學習中都會或多或少的用到,建議在系統學習機器學習前有所涉獵。
注意:
不一定非要看完所有的前置知識再開始你的學習!
不一定非要看完所有的前置知識再開始你的學習!
不一定非要看完所有的前置知識再開始你的學習!

– 高等數學:高數中的微積分部分是很重要的,無論是任何機器學習方法,最終都會歸結於求某個式子的最小值的問題,微積分中的一些知識也被作爲計算方法的一部分,我們至少需要掌握:

  1. 方向導數/梯度的概念
  2. 偏導數/求偏導數
  3. 求函數拐點和各種求最值方法
  • 線性代數
    從某種意義上說,線性代數是支撐現代機器學習的基礎知識,我們在機器學習中使用的幾乎所有方法,都繞不開線性代數的知識。在機器學習中,我們處於對計算性能的考慮,將大多數的循環操作轉化成矩陣之間的乘法運算。我們傳入和傳出的數據和參數也往往是以矩陣的形式呈現的。對於入門機器學習而言,以下的知識是需要大概掌握的:
  1. 矩陣的基本概念&矩陣運算
  2. 特徵值/特徵向量
  3. 向量空間/範數
  4. 常用距離
  • 概率論與數理統計: 機器學習的方法早在上個世紀就有人提出,但是知道最近才火起來,原因在於當今時代有了大量的數據支撐,我們纔可以把這種算法發揚光大。因此概率和統計的知識也顯得很重要了,我們應該大致掌握:
  1. 條件概率/貝葉斯定理
  2. 期望/方差/協方差
  3. 分佈函數
  4. 統計方法

前置知識的參考資料:

BB醬推薦線性代數入門書:線性代數及其應用 https://book.douban.com/subject/1425950/

各路博客參考資料(僅供參考)

機器學習理論篇1:機器學習的數學基礎 https://zhuanlan.zhihu.com/p/25197792
機器學習算法數學基礎之 —— 微積分篇(1) https://zhuanlan.zhihu.com/p/33794793
機器學習理論篇:機器學習的數學基礎 https://www.cnblogs.com/jialin0421/p/8988824.html
掌握機器學習數學基礎之概率統計 https://www.cnblogs.com/jialin0421/p/8988834.html
機器學習數學基礎-線性代數 https://www.cnblogs.com/jialin0421/p/8988843.html

萌新階段

在機器學習領域裏,有這麼幾套課程,可以被看做機器學習領域入門的聖經,而這些經典的課程,也一定是我們無論如何也不能繞過的必經之路。

  • 吳恩達機器學習(Machine Learning | Coursera):Coursera上極其經典的課程,國內在B站和網易雲課堂都有搬運,這套課程真的是經典中的經典,要求的知識水平不高,適合那些只聽說過“機器學習”這四個字的人進行學習,不是很強調數學基礎,入門必備。

     

  • 李宏毅機器學習:李宏毅是臺灣國立大學(NTU)的老師,應該是目前中文機器學習授課內容最好的老師之一了,課程本體在YouTube上發佈,但是B站有相關搬運,西電睿思上也有相關資源。我個人覺得李宏毅的講解還是比較清晰的,不過涉及到數學的部分不少,適合有一點點基礎的同學觀看。

  • 《機器學習》周志華前3章內容:說起這本《機器學習》,大家一般都叫它西瓜書,整本書比較偏理論,不過講解的很到位,也算是經典書籍了(雖然我還沒看完)。

  • Python語言基礎 :不管怎麼說,現在主流的機器學習框架大都是基於Python的,在這個階段,我們不需要掌握複雜的框架和網絡結構的實現,我們首先要學習的是Python基本語法以及numpy這個常用的Python庫。至於學Python,有很多很多的教程,都大同小異,有幾本常見的書,在下面參考資料裏會列出來(來源其他同學的學習教材)。

參考資料:

吳恩達機器學習:https://www.bilibili.com/video/av49445369
李宏毅機器學習:https://www.bilibili.com/video/av35932863
西瓜書:https://book.douban.com/subject/26708119/
《Python語言及其應用》:https://book.douban.com/subject/26675127/
《Python編程:從入門到實踐》:https://book.douban.com/subject/26829016/

入門階段

到了這個時候,你應該對機器學習有了一個大致的認知了,所以可以開始正式的入門工作了。在之前的課程中,你應該對於機器學習、深度學習這些東西有了一個比較清晰的輪廓,這也就意味着接下來的內容可能就很難繞過數學和代碼過程了,也算是你真正掉進這個深坑了。

  • cs231n:斯坦福最受歡迎的機器學習課程,雖然是面向計算機視覺領域的,但是其中的思想和方法卻大多通用,雖然我還沒看,但是這麼多人吹爆,那我也吹一吹。

     

  • 《機器學習》周志華4到10章內容:這一部分討論了一些經典常用的機器學習方法,像決策樹、神經網絡、SVM、貝葉斯分類器、聚類這些方法都有涉及。有了一定基礎之後這部分的數學公式推導對你應該大致能看懂了。(我覺得挺難)

  • 簡要學習深度學習框架:當然,如果你足夠強,你可以使用純numpy和Python原生代碼實現這些複雜的算法,但是大多數情況下,我們不夠強,所以我們需要框架來幫助我們。常見的框架有TensorFlow,Keras,pytorch,caffe 等等,任你選擇。我現在使用的是最傻瓜的Keras,像搭積木一樣搭建神經網絡還是很舒適的。靈活使用框架會讓你事半功倍。

  • Kaggle:Kaggle是一個線上的機器學習比賽平臺,由各大企業公司出題,獎金豐厚,而且表現出色的人可以被大廠直接 簽約。當然這和我們的關係不大,我們主要是學習上面的題目,搜索一下經典的題目,在各類博客上面有很多各位大神實現的優秀網絡算法,自己比這代碼抄一抄,改一改,熟悉一下基本的流程。

參考資料:

cs231n: https://www.bilibili.com/video/av16585576
《Keras深度學習實戰》:https://book.douban.com/subject/27036791/
《PyTorch深度學習》:https://book.douban.com/subject/33408564/
《TensorFlow:實戰Google深度學習框架(第2版)》:https://book.douban.com/subject/30137062/
Kaggle官網:https://www.kaggle.com/

進階階段

如果你在本科期間完成了上面的過程,那麼恭喜你,你已經成爲一個很強的同學了,你對於基本的模型和框架有所掌握,別人說什麼概念你也都能回答個差不多。那麼現在的你面臨就是問題就是,你需要選擇一個方向進行深入學習,現在西電老師做的主流的方向有兩個,CV方向和NLP方向。

當你們學會了上面的大部分事情的時候,走到這裏已經基本上沒有什麼成套的課程和書籍可以教給你了,現在你要做的是去讀論文,瞭解現有的技術的發展情況,看看那些人把你之前學的東西用的多麼出神入化,多麼牛逼,你就知道自己之前的知識就是學了個P。看到這麼一句話,目前中國還沒有人能夠勝任深度學習純理論的研究,大部分都是在做深度學習應用領域的研究。事實上也確實如此,如果對這方面有興趣的同學可以考慮出國深造。
視覺方向要掌握的最基礎的網絡模型有CNN,RNN,GAN這些東西。要讀的論文不少,順着這些文章讀下去又能看到很多新的模型和網絡。另外,老師會給你提供很大的幫助,有問題可以去聯繫老師,老師會給你更好也更新的論文讓你學習,會很有收穫。

現在這個階段,你們做的事情,應該就是你們在進入浪潮俱樂部之前以爲人工智能應該做的事情了,現在的你們大致上也應該對自己未來的發展有個掌握了,剩下的就是你們自己的努力了。

大數據入門綜述


聲明:BB醬能力有限,對大數據知之甚少,這一部分可能在未來會有極大的改動,還請同學們諒解,同時也歡迎同學們一起參與編寫。

大數據不是某個專業或一門編程語言,實際上它是一系列技術的組合運用。有人在知乎上寫了這麼一個等式,我覺得還蠻有道理的:
大數據 = 編程技巧 + 數據結構和算法 + 分析能力 + 數據庫技能 + 數學 + 機器學習 + NLP + OS + 密碼學 + 並行編程
看起來是不是很高端的樣子,實際上大數據做的事情,確實也就是這些事情的綜合應用,可能不是那麼追求原理,但是基本的方法和應用也應該熟練掌握。
大數據可以簡單的分爲:數據的採集與中間件、數據存儲、數據分析和數據處理,而這些基礎的方向都是基於現有的大數據平臺和框架,入門難度 可能比較高,但是入門後的成長曲線比較平滑。

前置知識

說起學習大數據的前置知識,我覺得吧,其實最重要的是一套編程思想和計算機思維。從某種角度上講,從事Web後端開發的同學可能會對這部分的知識有所涉獵,因爲無論是集羣還是並行計算,最基礎的知識都離不開Web相關的應用。
– Linux基本知識:當然,不只是針對大數據,任何同學都應該掌握基本的Linux知識。所謂的基本知識,其實就是常用的命令語句和一些簡單的原理,《鳥哥的Linux私房菜》是本好書,可它太厚太重了,不太建議完全學完再開始做。邊用邊學應該是一種不錯的手段。

  • 關係型數據庫基礎:看起來很高級,其實就是學一下MySQL的相關知識,所謂的關係型數據庫,就是利用集合代數等概念來進行信息信息處理的一種數據庫形式。因爲做大數據離不開存儲和數據處理,所以一切事物都應該從基礎開始。

     

  • 非關係型數據庫:這個的代表是MongoDB,其其靈活的數據存儲方式備受當前 IT 從業人員的青睞。在現在以PB數量級大小儲存數據的年代,MongoDB也發揮了很重要的作用,這也是你應該瞭解的內容。

  • Redis:這是一個開源的,支持網絡的,基於內存的,鍵值對存儲的數據庫。我不是太懂這一塊也不敢多說,反正NB就對了。

參考資料

由於我對大數據知識瞭解有限,給出的參考資料可能不是很好,因此請大家僅供參考
廖雪峯Git教程:https://www.liaoxuefeng.com/wiki/896043488029600
MongoDB菜鳥教程:https://www.runoob.com/mongodb/mongodb-tutorial.html
Redis菜鳥教程:https://www.runoob.com/redis/redis-tutorial.html
《鳥哥的Linux私房菜》: https://book.douban.com/subject/4889838/
《數據庫系統概論》: https://book.douban.com/subject/26317662/

萌新階段

現在的你有了基本的數據庫基礎,並且對Linux放下了戒心,那麼你就可以開始學習一下程序設計的技巧了。除了學校教的C和C++之外,Java也是必不可少的一環,所以當你初一萌新階段的時候,應該大致瞭解一下如何利用程序設計語言完成數據庫的設計和操作。

  • Java基礎:畢竟大數據繞不開Java。我現在複製一段知乎的話:Java 語言具有功能強大和簡單易用兩個特徵,跨平臺應用能力比 C、C++ 更易用,更容易上手。同時還具有簡單性、面向對象、分佈式、健壯性、安全性、平臺獨立與可移植性、多線程、動態性等特點。最重要的一點是 Hadoop 是用 Java 編寫的。事實上也確實如此,Java這門語言是你必須要攻克的部分。

     

  • Scala基礎:這也是從知乎複製的:Scala 是一種多範式的編程語言,其設計的初衷是要集成面向對象編程和函數式編程的各種特性。由於 Scala 運行於 Java 平臺(Java 虛擬機),併兼容現有的Java 程序,所以 Scala 可以和大數據相關的基於 JVM 的系統很好的集成。也就是說,Scala是運行在Java平臺的大殺器,學了就是變強。但是我也不知道應該學什麼,從什麼上面學,請各位善用網絡資源。

參考資料:

《第一行代碼 Java》:https://book.douban.com/subject/27034265/

入門階段

有了Java和Scala,你有了程序設計利器和麪向對象的方法,現在你已經有資格接觸大數據的框架和項目實戰了。當然,像Hadoop這種東西,如果你單純的想要搭建一個環境,可能對於Java的要求不是那麼高,但是如果你會Java並且能夠弄懂你搭建環境時敲的每一個命令,你就會有一個長足的進步。
– Hadoop:Hadoop是一個使用java編寫的Apache開放源代碼框架,它允許使用簡單的編程模型跨大型計算機的大型數據集進行分佈式處理。Hadoop是一個大而全的平臺,提供了一個分佈式的大環境。從安裝學起,會收穫很多。

  • HDFS:當我們有了大量的數據的時候,我們需要一個合適方法把它儲存起來,HDFS在本質上是爲了讓大量的數據能橫跨成百上千臺機器,但是你看到的是一個文件系統而不是很多文件系統。你像文件路徑一樣讀取文件,但實際上是從不同的機器中讀取。

     

  • MapReduce:當我們用了很多臺機器存下這些數據之後,我們需要一個系統,能夠調動各類資源,發動多臺電腦對任務進行並行處理,MapReduce也就應運而生。

  • Spark:是一個專門用來對那些分佈式存儲的大數據進行處理的工具,它並不會進行分佈式數據的存儲。在某種程度上可以看做起和MapReduce的相似的作用。這個框架也是依賴於Hadoop,是學習數據處理很重要的一部分。在Spark平臺上,你可能會用到各種機器學習,深度學習算法進行數據的處理。

  • kafka:這是一個學名叫布式發佈-訂閱消息系統的東西,本質上來說是一個消息隊列。比如,數據產生於web service,而數據的處理,需要在Hadoop或者Spark中進行,此時就需要一個工具,可以將需要處理的數據從源頭搬移到處理的系統中,Kafka就是這麼個數據搬運渠道的角色。

參考資料

《Hadoop大數據實戰權威指南》:https://book.douban.com/subject/30126096/
《Hadoop實戰》https://book.douban.com/subject/6859710/
Spark入門指南 https://www.jianshu.com/p/dd28b5c41f7a
一篇不錯的知乎回答 https://www.zhihu.com/question/27974418/answer/38965760

進階階段

我是真的不知道怎麼進階了,希望你們中的強者補全這份文檔。

寫在最後

前面說了這麼一大堆東西,我估計也沒幾個人能把它看完。這份文檔可能也不是那麼適合所有人,也許對於0基礎的同學讀起來還有一點困難,不過這都不要緊,現在看不懂,以後總會有看懂的時候。到那個時候你就會發現,這篇文檔寫的有多麼的簡陋和主觀。

針對大一的同學們來說,最重要的還是好好學習。打好基礎。有能力的同學可以嘗試一些Web項目或者各類比賽,鍛鍊一下自己的思維能力和代碼能力。畢竟你們大多和計算機專業有關,代碼能力對你們來說是極其重要的一環。記得一定要規範自己的代碼風格,因爲你的代碼不只給你一個人看。

最後,不管你最後有沒有選擇我們西電浪潮俱樂部,我們都祝你在人工智能的領域有所建樹,有所發展。

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