【GNN】圖神經網絡學習小結 and 筆記匯總
642
2025-04-03
機器學習的基礎是數學。數學并非是一個可選可不選的理論方法,而是不可或缺的支柱。如果你是一名計算機工程師,每天使用 UML、ORM、設計模式及其他軟件工程工具/技術,那么請閉眼一秒鐘,忘掉一切。這并不是說這些概念不重要,絕不是!但是機器學習需要一種不同的方法。如今 Python 如此流行的原因之一是其「原型設計速度」。在機器學習中,一種使用幾行代碼即可建模算法的語言絕對是必要的。
微積分、線性代數、概率論在機器學習幾乎所有算法中不可或缺。如果你的數學背景很扎實,請跳過這一章節。如若不然,那么重新溫習一下這些重要概念也不錯。考慮到理論的數量,我并不建議大家從大部頭開始。盡管一開始可以用它查詢具體概念,但是初學者先關注簡單的話題比較好。網上有很多好的在線資源(比如 Coursera、可汗學院或優達學城),實用且適合各種背景的人群。但是我建議從提綱之類的簡明書籍上手,其中所有核心概念均被涉及,次要概念可在需要的時候自行查詢。這種方法雖然不夠系統,但卻避免了這樣的缺陷:大量晦澀概念使得沒有扎實理論背景的人望而卻步。
初學者最好先學習下列內容:
概率論
1、離散型和連續型隨機變量
2、主要分布(伯努利分布、二項式分布、正態分布、 指數分布、 泊松分布、Beta 和 Gamma 分布)
3、矩估計和最大似然估計
4、貝葉斯統計
5、相關性系數和協方差(Correlation and Covariance)
線性代數
1、向量和矩陣
2、矩陣的行列式
3、特征向量和特征值
4、矩陣分解(如 SVD)
微積分
1、極限與導數
2、微分和積分
3、數值計算與最優化方法
網上有很多免費資源,比如:
《概率論入門》,Grinstead、Snell 著(https://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/amsbook.mac.pdf)
《線性代數入門》,Wise、Gallagher 著(http://www.stat.columbia.edu/~liam/teaching/4315-spr06/LinAlg.pdf)
《微積分入門》,Heinbockel 著(http://www.math.odu.edu/~jhh/Volume-1.PDF)
維基百科上也有很多好資源,對方程、定理等進行了清晰易懂的解釋。
機器之心也介紹過許多數學基礎與概念:
1>基礎入門:深度學習矩陣運算的概念和代碼實現
2>想了解概率圖模型?你要先理解圖論的基本定義與形式
3>深度神經網絡中的數學,對你來說會不會太難?
4>Reddit 熱門話題:如何閱讀并理解論文中的數學內容?
機器學習主要需要的數學基礎就是微積分、線性代數、概率論,我們感覺只需要掌握大學中常見的高數、線性代數、概率論與數理統計三門課程,基本上概念的理解就沒什么問題了。如果再學一點數值計算和最優化等,我們基本上就能理解機器學習的學習過程推導。
機器學習方法建議(面向初學者)
特征工程
開始機器學習的第一步是理解如何評估和改進數據集的質量。管理特征的類別和缺失、歸一化和降維(PCA、ICA、NMF)是大幅提高算法性能的基本技術,而且還有助于研究如何將數據集分割成訓練集和測試集、如何采取交叉驗證來取代傳統的測試方法。
機器之心也曾詳解過特征工程如 PCA 降維算法的詳細理論與推導,當然我們還介紹了其它有關特征的概念:
1>從特征分解到協方差矩陣:詳細剖析和實現PCA算法
2>基于TensorFlow理解三大降維技術:PCA、t-SNE 和自編碼器
3>似乎沒區別,但你混淆過驗證集和測試集嗎?
Numpy:Python 數值計算之王!
使用 Python 時,Numpy 不僅僅是一個庫。它是幾乎所有機器學習實現的基礎,因此了解它的工作原理、關注向量化和廣播(broadcasting)是非常必要的。這些技術可以幫助加速大多數算法的學習過程,利用多線程和 SIMD、MIMD 架構的力量。
官方文檔已經很完整了,不過,我還建議大家看一下以下資源:
1、《Python 數據科學手冊:數據使用的核心工具》,VanderPlas J. 著
2、《Python 科學編程入門書》,LangTangen P. H. 著
3、? 維度、廣播操作與可視化:如何高效使用TensorFlow
數據可視化
Matplotlib 即使不是純粹的機器學習話題,了解如何可視化數據集也很重要。Matplotlib 可能是最廣泛使用的解決方案:Matplotlib 易用,允許繪制不同種類的圖表。Bokeh 和 Seaborne 提供了有趣的替代方案。不必要徹底了解所有包,但是了解每一個包的優點和弱點還是很有用的,可以幫助你選擇合適的包。
了解 Matplotlib 細節的資源:《掌握 Matplotlib》,McGreggor D. 著
線性回歸
線性回歸是最簡單的模型之一,可以把它作為一個優化問題來研究,該問題可通過最小化均方誤差而得到求解。該方法雖然有效,但是限制了可利用的可能性。我建議還可以把它當作貝葉斯問題,使用之前的可能性展示參數(比如,高斯分布),優化變成了最大似然估計(Maximum Likelihood Estimation,MLE)。即使這看起來更加復雜,但該方法提供了一個可供幾十個其他復雜模型共享的新方法。
Coursera 上介紹貝葉斯統計的課程:
1、《貝葉斯統計:從概念到數據分析》(https://www.coursera.org/learn/bayesian-statistics/)
2、《貝葉斯統計:技術與模型》(https://www.coursera.org/learn/mcmc-bayesian-statistics)
以及這兩本書:
1、《思考貝葉斯》,Downey B. A. 著
2、《黑客的貝葉斯方法》Davidson-Pilon C. 著
包括線性回歸在內,機器之心曾介紹了一些解決回歸問題的方法(后文提供了 CART 算法進行回歸分析):
1、初學TensorFlow機器學習:如何實現線性回歸?
2、回歸、分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R實現)
線性分類
通常情況下,Logistic 回歸是最佳起始點,也是研究信息論進而了解信息熵、交叉熵和互信息的好機會。類別交叉熵(Categorical cross-entropy)是深度學習分類中最穩定、使用最廣泛的代價函數,一個簡單的 logistic 回歸可以展示它是如何加速學習過程的(與均方差相比)。另一個重要的話題是正則化(Ridge、Lasso 和 ElasticNet)。很多情況下,人們認為它是一種提高模型準確率的深奧方式,但是它的真實意義是更準確,在具體實例的幫助下變得易于理解。我還建議剛開始的時候,把 logistic 回歸當作一個簡單的神經網絡,可視化(以 2D 實例為例)權重向量在學習過程中的移動軌跡。
我還建議本節應包括超參數網格搜索。網格搜索不在沒有完整了解的情況下嘗試不同的值,而是評估不同的超參數集的性能。因此,工程師可以將注意力集中在可達到最高準確率的組合上。當然還有更加強大的貝葉斯優化方法,即利用先驗知識逼近未知目標函數的后驗分布從而調節超參數的方法。
1>從頭開始:用Python實現帶隨機梯度下降的Logistic回歸
2>如何通過牛頓法解決Logistic回歸問題
3>擬合目標函數后驗分布的調參利器:貝葉斯優化
支持向量機(SVM)
支持向量機提供了不同的分類方法(包括線性和非線性方法)。該算法非常簡單,具備基礎幾何知識的人也可以學會。不過,了解核支持向量機的工作原理非常有用,因為它會在線性方法失敗的時候展示出其真正實力。
一些有用的免費資源:
1、《支持向量機簡明教程》,Law 著
2、核函數方法,維基百科詞條
3、詳解支持向量機SVM:快速可靠的分類算法
4、詳解支持向量機(附學習資源)
決策樹
決策樹提供了另一種分類和回歸的方法。通常,它們不是解決復雜問題的首選,但它們提供了完全不同的方法,即使是非技術人員也可以很容易理解,該方法還可以在會議或演示中可視化。
1>教程 | 從頭開始:用Python實現決策樹算法
2>從決策樹到隨機森林:樹型算法的原理與實現
集成學習一覽
在理解了決策樹的動態特性以后,研究集成訓練樹的集(集成)來提高整體準確率的方法很有用。隨機森林、梯度樹提升和 AdaBoost 都是強大的算法,且復雜度較低。對比簡單的樹和提升方法與 bagging 方法采用的樹的學習過程挺有趣的。Scikit-Learn 提供了最常見的實現方法,但是如果你想更好地駕馭這些方法,我還是建議你在 XGBoost 上多花些時間,XGBoost 是一個既適用于 CPU 又適用于 GPU 的分布式框架,即使在較大的數據集上也能加速學習過程。
1、從Boosting到Stacking,概覽集成學習的方法與性能
聚類
當開始聚類方法的學習時,我的建議是從高斯混合算法(基于期望最大化/EM)學起。雖然 K-均值聚類要更加簡單易懂(也是必須要學習的),但是高斯混合算法為我們提供了純粹的貝葉斯方法,在其他類似任務中也十分實用。其它必學的算法還有層次聚類(Hierarchical Clustering)、譜聚類(Spectral Clustering)和 DBSCAN。這對你了解基于實例的學習或研究 K-近鄰算法(既適用于有監督又適用于無監督任務)也是有幫助的。譜聚類的一個有用的免費資源是:
1、《譜聚類教程》,Von Luxburg U 著
聚類算法是無監督學習中的代表,機器之心也曾詳細地介紹過各種聚類方法與實現:
1>機器理解大數據的秘密:聚類算法深度詳解
2>綜述分類、聚類和信息提取算法在文本挖掘領域內的應用
3>如何用Python和機器學習炒股賺錢?
神經網絡入門
神經網絡是深度學習的基礎,你可以在單獨的課程中學習神經網絡。但是,我認為理解感知機、多層感知機以及反向傳播算法的概念也很有幫助。Scikit-Learn 提供了一個實現神經網絡的簡單方法,但是,開始探索 Keras 也是一個好主意,Keras 是一個基于 Tensorflow、Theano 或 CNTK 的高級架構,允許使用最少的努力對神經網絡進行建模和訓練。開始神經網絡學習的一些好資源:
1>《人工神經網絡基礎》Hassoun M 著
2>《Keras 深度學習》Gulli A.、 Pal S. 著
目前最好的深度學習書籍可能就是:
《深度學習》,Goodfellow I.、 Bengio Y.、Courville A. 著
1>最全的DNN概述論文:詳解前饋、卷積和循環神經網絡技術
2>機器之心GitHub項目:從零開始用TensorFlow搭建卷積神經網絡
3>深度神經網絡全面概述:從基本概念到實際模型和硬件基礎
4>訓練的神經網絡不工作?一文帶你跨過這37個坑
5>TensorFlow從基礎到實戰:一步步教你創建交通標志分類神經網絡
6>神經網絡快速入門:什么是多層感知器和反向傳播?
7>教程 | 如何用30行JavaScript代碼編寫神經網絡異或運算器
8>神經網絡調試手冊:從數據集與神經網絡說起
9>神經網絡基礎:七種網絡單元,四種層連接方式
10>如何從信號分析角度理解卷積神經網絡的復雜機制?
11>神經網絡架構演進史:全面回顧從LeNet5到ENet十余種架構(附論文)
12>麻省理工解讀神經網絡歷史,三篇論文剖析基礎理論
最后,我們將介紹部分機器之心曾發過的綜述性技術文章或論文,并希望這些文章能對大家全面理解各種方法有所幫助:
1>自動駕駛計算機視覺研究綜述:難題、數據集與前沿成果
2>一文幫你發現各種出色的GAN變體
3>深度強化學習綜述:從AlphaGo背后的力量到學習資源分享
4>從FPS到RTS,一文概述游戲人工智能中的深度學習算法
5>視覺問答全景概述:從數據集到技術方法
6>神經風格遷移研究概述:從當前研究到未來方向
7>從語言學到深度學習NLP,一文概述自然語言處理
8>遷移學習全面概述:從基本概念到相關研究
9>一文綜述所有用于推薦系統的深度學習方法
10>一文讀懂遺傳算法工作原理(附Python實現)
11>從自編碼器到生成對抗網絡:一文縱覽無監督學習研究現狀
深度學習 神經網絡 機器學習
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。