
傑弗瑞·希頓
自早期以來,神經網絡就一直是人工智能的支柱。現在,令人興奮的新技術(例如深度學習和卷積)正在將神經網絡帶入一個全新的方向。在本書中,我們將演示各種現實世界任務中的神經網絡,例如圖像識別和數據科學。我們研究了當前的神經網絡技術,包括ReLU激活、隨機梯度下降、交叉熵、正則化、Dropout及可視化等。
《人工智能算法(卷3):深度學習和神經網絡》|傑弗瑞·希頓 一句話概括 這是一本系統梳理神經網絡模型、訓練算法和工程實踐的技術書,從經典自組織網絡、霍普菲爾德網絡和前饋網絡講到深度學習、CNN、RNN、正則化、模型選擇與可視化。 核心邏輯 全書沿着“模型結構—訓練方法—深度架構—泛化控制—工程建模”展開: 1. 從神經元、網絡層和激活函數建立基礎模型。2. 介紹自組織映射、霍普菲爾德網絡、玻爾茲曼機等經典結構。3. 深入講解前饋網絡、反向傳播及其他優化算法。4. 進入深度學習、卷積神經網絡和循環神經網絡。5. 通過剪枝、正則化、Dropout和超參數選擇控制泛化能力。6. 利用混淆矩陣、t-SNE等工具評估並理解模型。7. 最終把各環節整合爲面向真實數據的建模流程。 核心思想是:神經網絡不是簡單堆疊更多層,而是數據表示、網絡結構、目標函數、優化方法和泛化控制共同組成的系統。 核心內容 1. 神經網絡的基本計算單元 人工神經元接收多個輸入,爲每個輸入分配權重,再加上偏置並經過激活函數產生輸出。 網絡通常由三類層組成: - 輸入層接收特徵。- 隱藏層對信息進行逐級轉換。- 輸出層根據任務產生類別概率或預測數值。 激活函數爲網絡引入非線性。如果沒有非線性,多層網絡仍只能完成線性變換。 書中重點介紹ReLU。它在正數區間保留輸入、負數區間輸出零,計算簡單,並有助於緩解深層網絡中的梯度問題。 2. 不同網絡結構解決不同問題 全書不僅介紹現代深度網絡,也回顧多種經典結構: - 自組織映射通過競爭學習,把高維樣本投射到低維空間,同時儘量保留鄰近關係,適合聚類和數據探索。- 霍普菲爾德網絡是一種循環聯想記憶模型,可根據不完整信息恢復已存儲模式。- 玻爾茲曼機利用隨機單元和能量函數學習數據分佈。- 前饋神經網絡讓信息從輸入層逐層流向輸出層,適合分類和迴歸。- 徑向基函數網絡通過樣本與中心點之間的距離構造非線性響應。- RNN利用循環連接保存序列歷史,適合時間序列等有順序的數據。 這些模型反映了神經網絡發展的不同思路:競爭、聯想記憶、概率建模、函數逼近和序列狀態建模。 3. 數據處理與權重初始化影響訓練起點 輸入特徵的取值範圍差異過大,會讓優化過程變得困難,因此通常需要標準化或歸一化。 權重也不能全部初始化爲相同數值,否則同層神經元會不斷學習相同特徵。合理的隨機初始化能夠打破對稱性,同時避免網絡信號過早放大或衰減。 訓練前需要明確: - 輸入和輸出的編碼方式。- 特徵是否需要規範化。- 分類與迴歸應使用什麼輸出結構。- 激活函數與初始化方法是否匹配。- 數據如何劃分爲訓練集、驗證集和測試集。 模型的問題有時並不來自算法本身,而是來自數據表達和訓練起點。 4. 反向傳播讓網絡學會調整參數 前向傳播根據當前參數產生預測,損失函數衡量預測與真實目標之間的差距。 反向傳播利用鏈式法則,從輸出層向前計算損失對每個權重和偏置的梯度。優化器再根據梯度更新參數,使損失逐步下降。 訓練過程可以概括爲: 1. 輸入一個批次的數據。2. 完成前向傳播。3. 計算損失。4. 反向傳播梯度。5. 更新參數。6. 在多個批次和訓練輪次中重複。 深度學習的基礎並沒有脫離這一閉環,只是在網絡結構、數據規模、計算能力和優化策略上更加複雜。 5. 優化算法決定學習方式 書中除反向傳播外,還介紹模擬退火、彈性傳播RPROP和萊文伯格—馬夸特算法等方法。 - 模擬退火通過一定程度的隨機探索,嘗試跳出局部最優。- RPROP主要依據梯度符號調節每個參數的更新步長,降低梯度大小差異帶來的影響。- LMA結合梯度下降與二階近似思想,適合部分中小規模非線性最小二乘問題。- 隨機梯度下降使用小批數據頻繁更新參數,更適合大規模深度學習。 不存在適合所有任務的優化器。數據規模、模型大小、內存成本、收斂速度和泛化效果都會影響選擇。 6. 深度學習依賴結構與工程條件的共同成熟 深度學習的發展不僅因爲網絡層數增加,也因爲多項技術同時進步: - ReLU改善深層網絡的梯度傳播。- 隨機梯度下降和小批訓練提高可擴展性。- Dropout和正則化降低過擬合。- GPU顯著提高矩陣和卷積計算速度。- 大規模數據爲複雜模型提供訓練基礎。- 成熟工具降低了模型構建和實驗成本。 深度網絡能夠逐層學習表示:前層識別基礎模式,後層再將這些模式組合成更復雜的特徵。 7. CNN利用圖像的空間結構 全連接網絡把每個像素分別連接到下一層,不僅參數很多,也忽略了圖像的局部結構。 CNN通過三個關鍵機制改善這一問題: - 局部連接:卷積核只觀察圖像的一小片區域。- 權重共享:同一個卷積核在不同位置重複使用。- 池化:壓縮特徵圖,保留較重要的局部響應。 書中以LeNet-5和MNIST手寫數字識別爲例,展示卷積層、最大池化層和稠密層如何組成完整的分類網絡。 卷積層負責提取局部特徵,池化層降低空間尺寸,稠密層根據高級表示完成最終分類。 8. 模型不僅要擬合訓練數據,還要泛化 訓練誤差很低,並不代表模型能夠處理新樣本。網絡過大、數據過少或訓練時間過長,都可能導致過擬合。 書中介紹多種控制方法: - L1正則化鼓勵更多參數趨近於零,可能產生較稀疏的模型。- L2正則化懲罰過大的權重,使參數分佈更平滑。- Dropout在訓練時隨機屏蔽部分神經元,減少對特定連接的依賴。- 剪枝刪除貢獻較小的連接或單元,壓縮模型複雜度。- 驗證集和交叉驗證用於比較模型及超參數。- 提前停止可以避免模型繼續記憶訓練集噪聲。 模型選擇的目標不是找到訓練集上最複雜的網絡,而是在預測能力、穩定性和計算成本之間取得平衡。 9. RNN爲時間序列保留歷史狀態 普通前饋網絡把樣本視爲相互獨立,但時間序列中的當前值往往受到此前信息影響。 簡單RNN把前一時刻的隱藏狀態傳遞到當前時刻,使模型擁有一定的短期記憶。應用前還要設計合適的時間序列編碼方式,例如: - 使用過去若干時間點預測未來。- 將連續序列切分成訓練窗口。- 處理輸入和輸出之間的時間對應關係。- 避免把未來信息泄漏進訓練特徵。 簡單RNN在長期依賴上存在梯度消失或爆炸問題,但它建立了序列神經網絡的基本思想。 10. 評估與可視化幫助理解模型 分類任務可以使用混淆矩陣觀察每個類別被正確識別或錯誤混淆的情況。相比單一準確率,它能暴露模型具體錯在哪裏。 迴歸任務則需要根據預測誤差、異常值敏感性和實際業務代價選擇評價指標。 t-SNE可以把高維數據或中間特徵映射到二維空間,幫助觀察樣本是否形成聚類、類別是否重疊。但它主要是一種探索性工具,二維圖上的距離和結構需要謹慎解釋。 可視化的意義不是讓模型自動變得可解釋,而是爲發現數據、特徵和預測中的異常提供線索。 11. 完整建模是一套迭代流程 書中通過Kaggle等場景,將神經網絡建模概括爲一個反覆迭代的過程: 1. 明確問題及評價指標。2. 清洗、規範化並劃分數據。3. 建立簡單基準模型。4. 選擇網絡結構和訓練參數。5. 觀察訓練與驗證表現。6. 調整正則化、網絡規模和超參數。7. 分析錯誤樣本和可視化結果。8. 在獨立測試數據上做最終評估。 一個有效模型不僅要分數高,還需要能夠復現、部署和應對新數據。 本書最值得關注的核心觀點 神經網絡建模最關鍵的能力,不是記住更多網絡名稱,而是理解“結構、優化和泛化”之間的相互制約。 網絡結構決定模型能夠表達什麼;訓練算法決定參數能否找到有效解;正則化、數據劃分和模型選擇決定這種解能否推廣到未知樣本。 因此,遇到模型效果不佳時,不能只靠增加層數。還應依次檢查數據質量、輸入表達、損失函數、梯度傳播、學習率、過擬合程度和評價指標。深度學習是完整的實驗系統,而不是單一算法。 一段話總結 《人工智能算法(卷3):深度學習和神經網絡》從人工神經元、網絡層、激活函數和前饋計算講起,系統介紹自組織映射、霍普菲爾德網絡、玻爾茲曼機、徑向基函數網絡,以及反向傳播、RPROP、萊文伯格—馬夸特等訓練方法;隨後進入由ReLU、小批訓練、GPU和正則化共同推動的深度學習,重點拆解LeNet-5、卷積層、池化層、稠密層和MNIST圖像分類,並進一步討論剪枝、L1/L2正則化、Dropout、時間序列、簡單RNN、模型選擇、混淆矩陣與t-SNE可視化。全書最核心的啓發是:神經網絡的性能來自數據表示、模型結構、優化方法、泛化控制和評估流程的協同,真正可靠的深度學習實踐不是盲目增加模型複雜度,而是通過可驗證、可復現的迭代不斷尋找表達能力與泛化能力之間的平衡。
用深度學習建模 爲了不超出本書的範圍,我們將根據我們的條目展示Kaggle競賽的一個解決方案。由於GBM超出了本書的主題範圍,因此我們將聚焦於使用深度神經網絡。爲了介紹集成學習,我們將使用裝袋(bagging)的方法,將10個經過訓練的神經網絡組合在一起。像裝袋這樣的集成方法,通常會使10個神經網絡的集成得分高於單個神經網絡。 [插圖] 16.2.1 神經網絡結構 對於這個神經網絡,我們使用了由稠密層和Dropout層組成的深度學習結構。由於這個結構不是圖像神經網絡,因此我們沒有使用卷積層或最大池層。這些層類型要求緊鄰的輸入神經元彼此具有一定的相關性。但是,構成數據集的93個輸入可能不相關。圖16-6展示了該深度神經網絡的結構。 [插圖] 圖16-6 參加挑戰賽的深度神經網絡的結構 如你所見,神經網絡的輸入層有93個神經元,它們對應數據集中的93個輸入列。3個稠密層分別具有256、128和64個神經元。此外,兩個Dropout層分別有256個和128個神經元,Dropout概率爲20%。輸出是一個Softmax層,對9個輸出組進行了分類。我們將神經網絡的輸入數據歸一化,以獲取其[插圖]分數。 我們的策略是分別在兩個稠密層之間使用一個Dropout層。我們爲第一個稠密層選擇的神經元數量爲2的冪,在這個例子中,我們使用2的8次冪(256)。然後,我們每次將其除以2,依次得到接下來的兩個稠密層。這個過程分別得到256、128,最後是64。對第一個稠密層使用數量爲2的冪的神經元,加上另外兩個依次除以2的稠密層,這種模式效果很好。隨着實驗的繼續,我們在第一個稠密層嘗試了2的其他次冪。 我們用SGD訓練了神經網絡。該程序將訓練數據分爲驗證集和訓練集。SGD訓練僅使用訓練數據集,但它監視驗證集的誤差。我們進行訓練,直到驗證集的誤差在200次迭代中都沒有得到改善爲止。至此,訓練停止了,程序在200次迭代中選擇了訓練最好的神經網絡。我們將這個過程稱爲儘早停止,這有助於減少過擬合。當神經網絡不再提高驗證集的得分時,可能會發生過擬合。
4.5.2寫到:S型、ReLU和Softmax激活函數使用0~1的範圍,而雙曲正切激活函數使用−1~1的範圍。 ReLu的輸出範圍,真的是0-1嗎?!
谷歌翻譯的都比這本書翻譯的更好