對人工智能的一些思考和給初學者的建議

"THE TRUE SIGN OF INTELLIGENCE IS NOT KNOWLEDGE BUT IMAGINATION. " ——Albert Einstein

寫在前面的一些話

各位大佬們好,我是一個人工智能研究領域的小學生,願意的話,你們可以叫我Carlisle。在開啓這個博客之前,我已經完成了四年的本科學習,我的專業是信號處理,同時現階段我正在海外完成人工智能碩士學位。很開心在我的學術生涯道路上得到了許多老師和同事的幫助,使得我能夠在漫長的人工智能發展歷史中,留下屬於我自己的一筆痕跡。隨着人工智能技術的不斷髮展變化,越來越多的人開始投入到人工智能的領域中,或者從原有的研究領域逐漸結合人工智能進行創新創造。在2020年這一代的研究人員中,許多人都是跨學科背景進行人工智能的研究的,因此難免在進行人工智能學習時候有很多的困惑。

這個系列的博客主要是面向對人工智能感興趣的朋友們。我希望通過這個系列的博客,將我自己對於人工智能的整體學習入門情況和一些技術上的內容進行解釋說明。同時我還會不定期更新一些我自己讀到的感興趣的論文,或者有一些是對我自己發表的學術論文的解讀和分析,希望能夠幫助大家樹立理解人工智能相關論文的一些思路,同時和大家交流看法,提升我自己的水平。因爲筆者還是一個研究領域的小學生,所以難免有寫的不對或者不好的地方。如果大家有任何發現,請直接在評論區毫不客氣地留言發問或指出(其實客客氣氣也挺好=)),時間允許的條件下我會盡力回覆大家。謝謝!這篇文章的文字內容篇幅比較長,希望大家能耐心看下去,相信會對你或多或少有一些幫助和啓發。

1. 關於人工智能,我想說

談及人工智能,大家都非常感興趣,這個概念和事情在當下時代被賦予了很多神奇的色彩。許多AI算法也用在了不同的工業和學術領域,創造着巨大的財富。那麼神祕的人工智能究竟是怎麼回事?人工智能是否像我們所看到的,門外漢看着直呼驚奇,道上的朋友侃侃而談,揮斥方遒呢?其實一切的一切,都起源於一個神奇的基礎叫做“梯度”,也就是我們說的導數。這也是後來,所有人工智能的最最基礎。在這個基礎上,人工智能進行了廣泛的演變進化,像一個方便的插件一樣可以隨時嵌入到許多研究領域,如:醫療,藝術設計,金融,環境,語言學等等。這裏要強調的一點是,我一直堅信並永遠相信,“人工智能是許多基礎學科和傳統問題的另一種看待和解決方式”。許多學者習慣性地把人工智能看的很高端很前沿,在追逐前沿發展的過程中,忘記了自己的老本行,輕視了基礎和傳統學科的重要性,同時研究的內容不具備實際應用價值。這是非常容易陷入的一個誤區,我經常聽到許多相關專業的博士生抱怨到:“我不知道我研究這個將來出來能做什麼?” 因此,我在博文的開篇,着重強調一下這一點。

2. 從何開始上手學習人工智能?

我身邊有很多希望學習人工智能的人,大家面臨的最普遍的問題就是:我到底該從何處開始學習人工智能?在這裏,我不能給出一個明確的答案,因爲每個人的情況和長處不同。因此,我只能給出一個普遍適用的學習流程以幫助大家,儘快樹立對於人工智能的宏觀框架概念,然後大家可以自己選擇從哪裏下手進行深入研究。

首先,在學習人工智能的過程中,需要你有廣泛的知識面和研究基礎,其中包括但不限於,線性代數,高等數學,高等代數,隨機過程,概率論與數理統計,工程數學等。那麼很多同學聽到這裏就已經開始打退堂鼓了,因爲所有提到的東西都是和數學相關的。但是實際上,現階段的人工智能“應用”,對於數學原理的依賴性並不是很大,反而是對於網絡結構的設計和對於任務的理解,佔據了相當重要的比例。這其中很大一部分原因是我們有很多,很方便使用的深度學習框架,如我們耳熟能詳的TensorFlow,PyTorch,Keras,Theano,Caffe等。這些框架幫助我們實現了許多複雜繁瑣的計算過程,這使得我們在對問題進行建模等方面得到了極大的簡化。事實上,現如今我們只需要幾十行代碼便可以復現一個基本的神經網絡。通過這一點可以看出,框架的出現幫助人工智能在極短的時間裏獲取了最廣泛的普及。這一點有利,也有弊。

深度學習框架的來龍去脈——史上最全面最新的深度學習框架對比分析

事實上,在學習的過程中,我們在最開始應避免使用框架,而是使用單純的基本編程語言,如python語言等,和矩陣計算庫NumPy對這一系列計算進行復現,以便深入瞭解人工智能的底層運行原理。當然這一點,本質上是對專業的人工智能研究人員提出的要求與期望。如果只是一般的AI使用者,那麼可以在最開始藉助框架,快速實現一些令人拍案叫絕的Demo。一旦實現了一些有趣的應用,你會深深的愛上這個領域,這也能夠最大化激發你對人工智能的渴望與學習動力。初學者可以在先借助框架梳理基本概念,並通過明確基本問題的答案進行問題啓發式學習,如:如何使用Numpy構建自己的訓練數據?如何構建基礎的神經網絡?如何選擇優化器?如何選擇損失函數?如何進行參數與超參數的調整?如何判斷模型訓練情況與進行模型性能評價?等等。當你獲取了這些基本的概念,再去深入探究底層情況,可能不會讓你一上來就碰一鼻子灰,深深陷入數學原理,後逐漸喪失了對人工智能的興趣。

其次,要多復現,多寫代碼,多Debug。許多初學者喜歡看,不喜歡寫。這是一個大問題,看代碼容易,寫代碼難,手寫代碼更難。熟能生巧在任何領域都不失爲經典。其次,只有你把Debug打開了,這個代碼纔會告訴你他是什麼樣子的,他在運行的過程中,處理着怎樣的數據,數據在反應什麼樣的問題。所以核心的學習建議就是Keep coding 和 Don't ask, debug.

3. 人工智能學習中的基本問題

其實我們平常談到的人工智能領域包含內容十分廣泛,有數據分析,機器學習,深度學習等等。這裏我默認大家已經具備了基本的數學基礎和計算機基礎,那麼我們就談一談如何上手實踐人工智能項目。從我個人理解的角度出發,開啓人工智能學習之旅,我們需要明確以下幾個問題:

1)開發的系統環境。通常我們談到開發環境,需要關注兩個點:windows環境還是Linux環境?以及CPU還是GPU訓練?我們現階段雖然有了很方便的深度學習框架來進行輔助研發,但是框架的要求不盡相同。這裏我們舉幾個簡單的問題來幫助大家樹立對於系統開發環境的要求。首先,筆者個人認爲Linux系統環境對於深度學習是非常有好處的。舉個最簡單的例子,同樣的代碼在Linux環境下運行的速度會比windows快很多。同時,在工業界中,許多嵌入式設備的系統環境都會選擇使用Linux,因爲輕量,且穩定。同時,許多依賴項安裝在linux下比windows要容易,但是需要使用者比較熟悉Linux系統環境開發,同時具備Linux使用經驗和基礎,不然很多時候除了問題沒有辦法調試,反而不如使用windows來的方便,因爲在系統圖像化這一塊,windows可是做的遠超linux,非常適合非CS背景人員進行開發。

其次,訓練模型使用CPU還是GPU?如果是CPU,那麼大部分框架你都可以很輕鬆的安裝好,但是相對訓練速度和計算時間會很慢很長,這其中一個很重要的原因是我們神經網絡大部分進行的是矩陣運算,這種計算在CPU的物理架構上不是很適用。如果選擇使用GPU,那麼你需要一些輔助的庫來幫助你進行環境搭建。這裏我們講的GPU一般是NVIDIA公司生產的GPU,因此主要的輔助依賴包括CUDA和CuDNN。利用CUDA技術,我們可以將那些內處理器串通起來,成爲線程處理器去解決數據密集的計算。CuDNN,全稱“CUDA Deep Neural Network library”,是專門爲進行深度學習而搭建的科學計算庫。這裏面需要注意的是,CUDA和CuDNN和使用深度學習框架的版本以及GPU驅動版本之間有着密切的關係。具體的依賴關係,NVIDIA公司已經爲我們處理好了並且在下載對應安裝文件的時候,他們會通過選擇現有的系統環境自動生成解決方案。因此,各位初學者不必太擔心現在的環境構建問題。同時,也有許多類似的博文來介紹環境搭建問題,筆者在這裏就不過多贅述。

2)框架的選擇。現階段,可供選擇的人工智能框架不勝枚舉。在學術研究中常見使用的深度學習框架有PyTorch,TensorFlow和Keras這三個。在機器學習領域我們通常使用的是Sklearn。在數據分析和可視化中我們通常使用的是Matplotlib和Pandas。

這裏沒有對框架批評或者偏向的意思,每一個框架的背後都凝聚着無數工程師的汗水和心血。筆者這裏提出的,只是經常出現在Github的集中常見框架,同時相對而言參考資料較爲豐富和全面,對於框架本身的問題也維護的相對較好。簡單聊聊就是,Tensorflow和Caffe出現的比較早,代碼書寫量相對其他框架來說要大一些,同時有一些自己的計算機制需要開發人員進行學習和熟悉。這對於初學者和非CS背景的研發人員來說可能有些困難,而且對應框架的文檔寫的比較深,需要一定的專業基礎才能夠很好理解。但是,許多老項目都選擇使用tensorflow和caffe進行研究,如MIT的很多項目都是基於caffe來進行展開的,那麼如果你想基於他們的優秀工作進行深入開展,理解這些框架並看懂他們的代碼就不可避免。然而對於初學者而言,最快最容易上手的框架,筆者個人認爲是Keras。Keras能夠讓初學者在最短的時間裏,構建起使用者人工智能項目的大致輪廓。同時對於系統環境的依賴性相對較弱。剛上手的朋友可能對深度學習系統環境配置不甚清楚,因此選擇一個依賴相對較少的框架能夠幫助我們儘快的關注到重點問題,而不是花費大量的精力在環境配置上。但是Keras本身的問題,也源於他的優勢,即“封裝性過好”。這樣的優點帶來的問題是,在創新研究工作中,你的工具不靈活,很難在固有的框架下做出非常新穎的工作。那麼與這個問題互補的就是PyTorch,這個框架相對來說較爲靈活,同時具備一定的封裝性,既能夠很方便的調用現有的模型,也能夠很靈活的進行封裝和創新開發。因此,筆者個人的建議是,都嘗試一下,然後選擇你自己最有感覺的那一款。推薦的學習路線是:keras到PyTorch,如果有必要,就到TF及其他。這裏強調一下,學習框架最快的辦法就是耐心閱讀每個框架的Document,和Tutorial。這些內容都可以在對應框架的主頁上找到,一定要耐心,切不可浮躁潦草。同時,在閱讀Document的同時要多寫代碼,多對比實驗結果,以便對代碼產生自己的理解和感知,這一點非常重要。

3)課程與教材選擇。在學習的過程中,許多同學都會迷惑,其他科目和研究領域都有書可以看,那人工智能領域的書有啥呢?其實市面上很多的教材都已經被廣泛宣傳,筆者在這裏簡單推薦幾本書。周志華教授的西瓜書(《機器學習》周志華著),花書《Deep Learning》by Ian J. GoodFellow.這兩本書對於初學者而言十分重要,他們很好地概括了人工智能不同的研究方向和人工智能基礎,同時沒有大量的數學公式需要你推導。因此,比較適合入門學者進行學習。課程的話,筆者個人比較推薦的是Andrew Ng. 教授發佈在Cousera上的在線學習課程。同時,LinkedIn也提供了許多在線學習的網絡資源。此外,斯坦福大學的公開課也是非常棒的在線教育資源,能夠幫助大家對人工智能進行較爲系統的學習。

4)研究方向的選擇。如我們前面所說,人工智能是對於舊問題的新的解決和理解。因此,他的研究方向是十分廣泛的,包括但不限於:醫療,藝術設計,金融,環境,語言學等等。如何選擇一個合適自己的,有意義的,感興趣的研究方向,就顯得十分重要。筆者在這裏無法給出一個很明確地方向闡述,因爲現在還在不斷地發展變化。只能說,現階段的通常情況下,我們可以將人工智能分爲三大方向,數據分析,計算機視覺和自然語言處理。那麼每個大方向下都有很多小方向,如:在數據分析中,數據清洗,數據挖掘,數據可視化等;在計算機視覺中,目標檢測與識別,圖像增強,圖像修復,圖像生成等;在自然語言處理中,機器翻譯,文本檢索,文本情感分析等。通過這樣一個簡單的敘述,我們可以發現人工智能的領域包含的內容十分的廣泛,那麼究竟該怎樣做出選擇?筆者的建議是,多讀論文,多上手嘗試。在復現論文和學習的過程中,你逐漸會有一種感覺,這就是我的領域。可能突然有一天,在你看到某個領域的某個問題,你有自己的獨特理解;又或是在學習某個領域的過程中,突然間你覺得,這是我要付出一輩子去研究的東西。那麼這個,就是你最適合的研究領域。筆者希望各位初學者保持初心,永遠探索,不斷創新。在不斷嘗試和學習的過程中,你會逐漸發現你真正感興趣的地方,並堅持走下去。沒有人是相同的,所以我也沒有任何辦法幫助大家決定自己的研究方向。只能在這裏祝福大家,在研究和工作的過程中,能夠找到自己的熱愛並走下去。

4. 人工智能項目中的核心問題

進行人工智能項目的研究,需要明確以下幾個核心問題。當你想清楚了這幾個基本的問題,那麼你就離成功實現這個項目不遠了。但最核心的問題還是,你做的這個研究,你的Motivation和Contribution是什麼,這個至關重要。

1)我的研究問題是什麼?

2)現階段做的最好的解決方案是什麼?

3)我能否理解他們的解決方案?

4)我自己是怎麼看待和理解這個問題的?

5)他們的解決方案是否有問題,缺陷,或者優勢?我能做什麼,能借鑑什麼?

6)幹。

5. 結束語

到此,我的第一篇長篇博文就已經告一段落了。這篇文章更傾向於對初學者構建一些基礎的概念,或者Big picture。並沒有太多技術相關的內容。我在後期會逐漸更新一些博客,用最簡單的話來解釋複雜的人工智能理論。但是我們仍然要去思考,在千軍萬馬投入人工智能學習的時代,我們如何做到與衆不同?信息時代,每個人能獲取的學習資源幾乎是均等的,在同樣的條件下,你如何從人羣中脫穎而出?當幾乎所有行業的人都可以說,我也可以是個人工智能研究人員的時候,你的長處和優勢又是什麼?希望每個走在路上的學者和研究人員,以及工作在社會不同位置的朋友們,都能夠在人山人海中找到屬於自己的定位,和自己的熱愛與生活走下去,我也在這裏與大家一起前行。最後,希望這個系列博客能夠真正幫助到有困難的朋友們,希望自己也能從這一過程中有所收穫。謝謝!

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