描述
內容簡介
|
作者簡介
| 王成
華東交通大學電腦應用技術碩士畢業,機器學習領域知乎專欄常駐作者,自媒體創作者。專注於機器學習、深度學習技術原理分享,寫作8年累積數百萬字手稿,出版了《跟我一起學機器學習》,並著有 This Post Is All You Need 等電子讀物。
黃曉輝 哈爾濱工業大學電腦軟體與理論博士畢業,華東交通大學資訊工程學院教授、博士研究生導師,南洋理工大學電腦科學與工程學院訪問學者,贛鄱俊才支持計畫高校領軍人才(青年領軍人才),江西省傑出青年基金得主,江西省自然科學二等獎(排名第一)獲得者。長期從事深度學習、機器學習相關領域的研究工作,主持多項國家級和省級課題,並獲得多項發明專利。 |
目錄
| 第1 章 深度學習簡介
1.1 深度學習的發展階段 1.2 深度學習中的關鍵人物 1.3 深度學習框架介紹 1.4 本書的系統結構
第2 章 環境設定 2.1 系統結構介紹 2.2 深度學習環境安裝 2.3 開發環境安裝設定
第3 章 深度學習基礎 3.1 線性迴歸 3.2 線性迴歸的簡捷實現 3.3 梯度下降與反向傳播 3.4 從零實現迴歸模型 3.5 從邏輯迴歸到Softmax 迴歸 3.6 Softmax 迴歸的簡捷實現 3.7 從零實現分類模型 3.8 迴歸模型評估指標 3.9 分類模型評估指標 3.10 過擬合與正規化 3.11 超參數與交叉驗證 3.12 啟動函式 3.13 多標籤分類
第4 章 卷積神經網路 4.1 卷積的概念 4.2 卷積的計算過程 4.3 填充和池化 4.4 LeNet5 網路 4.5 AlexNet 網路 4.6 VGG 網路 4.7 NIN 網路 4.8 GoogLeNet 網路 4.9 ResNet 網路 4.10 DenseNet 網路
第5 章 模型訓練與重複使用 5.1 參數及日誌管理 5.2 TensorBoard 視覺化 5.3 模型的儲存與重複使用 5.4 模型的遷移學習 5.5 開放原始碼模型重複使用 5.6 多GPU 訓練 5.7 資料前置處理快取
第6 章 模型最佳化方法 6.1 學習率排程器 6.2 梯度裁剪 6.3 批歸一化 6.4 層歸一化 6.5 組歸一化 6.6 動量法 6.7 AdaGrad 演算法 6.8 AdaDelta 演算法 6.9 Adam 演算法 6.10 初始化方法
第7 章 循環神經網路 7.1 RNN 7.2 時序資料 7.3 LSTM 網路 7.4 GRU 網路 7.5 BiRNN 網路 7.6 CharRNN 網路
第8 章 時序與模型融合 8.1 TextCNN 8.2 TextRNN 8.3 CNN-RNN 8.4 ConvLSTM 網路 8.5 3DCNN 8.6 STResNet
第9 章 自然語言處理 9.1 自然語言處理介紹 9.2 Word2Vec 詞向量 9.3 Word2Vec 訓練與使用 9.4 GloVe 詞向量 9.5 詞向量的微調使用 9.6 fastText 網路 9.7 Seq2Seq 網路 9.8 序列模型評價指標 9.9 NMT 網路 9.10 注意力機制 9.11 含注意力的NMT 網路 9.12 含注意力的RNN
第10 章 現代神經網路 10.1 ELMo 網路 10.2 Transformer 網路 10.3 Transformer 結構 10.4 Transformer 實現 10.5 Transformer 對聯模型 10.6 BERT 網路 10.7 從零實現BERT 10.8 BERT 文字分類模型 10.9 BERT 問題選擇模型 10.10 BERT 問題回答模型 10.11 BERT 命名實體辨識模型 10.12 BERT 從零訓練 10.13 GPT-1 模型 10.14 GPT-2 與GPT-3 模型 10.15 基於GPT-2 的中文預訓練模型 10.16 InstructGPT 與ChatGPT 10.17 ChatGPT 與提示詞工程 10.18 百川大模型使用 10.19 百川大模型實現 10.20 GPT-4 與GPT 的使用 |
序
| 前言
作為《跟我一起學機器學習》的姊妹篇,兩年之後《史上最完整 - 一本書晉升深度學習世界級大師》一書也終於出版了。北宋大家張載有言:「為天地立心,為生民立命,為往聖繼絕學,為萬世開太平。」這兩部著作雖然沒有這樣的宏偉願景,但在它們的撰寫過程中我們自始至終都秉持著「為往聖繼絕學」的想法在進行。 作為機器學習方向的重要分支,深度學習在近年來的發展可謂大放異彩。隨著深度學習技術的不斷發展,與之相關的技術應用已經深入滲透到了我們日常生活的各方面,從醫療保健、金融服務到零售,以及從交通再到智慧助理、智慧家居等,尤其是在以GPT 為代表的大語言模型出現以後,深度學習技術的影子更是無處不在。如今,利用ChatGPT 來作為日常生產力工具更是成為一種共識。例如在本書的成文過程中ChatGPT 就為我們提供了不少的靈感和啟示,部分內容也是在ChatGPT 的輔助下完成的,而這在10 年乃至5 年前都是難以想像的。也正因如此,對於這些熱門應用背後技術的探索便逐漸成為電腦行業及大專院校所推崇的物件,但對於絕大多數初學者來講,想要跨入深度學習這一領域依舊存在著較高的門檻,所以一本「數+ 形」結合、動機原理並重、細緻考究的入門圖書就顯得十分必要了。 儘管目前市面上已經存在著大量類似圖書,但現有圖書的不足之處在於往往太過高估了學生的學習能力。首先,這類別圖書往往都只是羅列了一堆名詞概念、抽象晦澀的數學公式或是枯燥冗長的程式,而這對於初學者或是數學基礎比較薄弱的學生來講是極為糟糕的,作為過來人我們對此深有體會;其次,這類別圖書在介紹各個演算法時僅做到了知其然而不知其所以然,並沒有介紹每個演算法模型出現的背景和動機,仿佛它們都是一個個從天而降的獨立個體,彼此之間毫無前因後果的聯繫;最後,對於演算法原理或實現的細節之處並沒有充分把握,往往會一筆帶過,而這就導致了初學者總有一種似是而非、朦朦朧朧的感覺。 「數無形時少直覺,形少數時難入微,數形結合百般好」,這是本書在撰寫過程中所遵循的第一大原則。在學習深度學習相關內容的過程中,如果只看論文,則只能了解到演算法模型的整體思想而無法精確刻畫其中的細節之處;如果只看程式,則會發現均是各種矩陣之間的四則運算,並不知道其中的含義。因此,本書在寫作之初就始終秉持著要以「數+ 形」結合的方式來介紹每個演算法模型,即先透過圖示直觀地來介紹模型的整體思想和原理,再透過實際的數學計算過程或程式來刻畫其中的細節和模糊之處。用圖形去形像化,用程式去唯一化,真正做到「數+ 形」結合,讓各位讀者能夠真正地做到看得懂、學得會、寫得出。為了將各個演算法的建模原理表述清楚,本書使用了近400 幅示意插圖。 為了直觀地感受卷積操作的計算過程,我們繪製了全部4 種情況下的卷積計算示意圖;為了厘清GoogLeNet 中各個網路層的參數及輸出資訊,我們重新繪製了更加詳細的網路結構圖並全方位地進行了標記;為了講清楚多頭注意力中「多頭」的概念,我們完整繪製了整個注意力機制的計算流程圖;為了講清楚BERT 模型的預訓練任務和4 大經典下游任務的建構原理,我們對於每個任務模型和資料集建構流程都進行了圖例繪製;為了介紹百川大模型內部的原理機制,我們又根據官方開放原始碼的程式繪製了其網路結構圖,以便讀者從第一眼就能把握其整體的技術架構;為了講清楚大模型對話場景中的Key-Value 快取機制,我們根據Transformers 框架中的實現程式繪製了對應原理圖。這樣的圖示還有很多,因為我們始終相信,能夠用眼睛看到的一定是最直觀、最容易理解的。 「知其然,更要知其所以然」,這是本書在撰寫過程中所遵循的第二大原則。任何一個演算法的提出都不會是憑空捏造或無中生有的,它不是是為了解決新場景下的問題,就是是為了對已有演算法模型進行改進,因此明白一個演算法模型背後的動機就顯得格外重要了。一方面我們能更進一步地理解作者的想法及與其他演算法模型之間的聯繫;另一方面也可以學習如何去講好一個故事,所以我們不僅需要知道一項技術的原理,還需要知道為什麼出現了這種技術、它的動機是什麼、它需要解決什麼樣的問題等。這樣才更有利於我們了解整個技術的發展脈絡並形成一個合理的思考方向。 因此,本書在行文過程中對於每個演算法模型的介紹都遵循了「動機+ 原理」的方式進行,即先整理其提出時的背景動機,然後介紹其具體的實現原理,而非直愣愣地開始就某個演算法模型介紹,以至於前後銜接生硬。這也將使各位讀者不僅能學會一個演算法的原理和使用方法,同時還能知道它所提出的契機,養成這樣的思維習慣對於一些讀者後續的論文寫作也是百利而無一害的。 「如履薄冰,有理有據」,這是本書在撰寫過程中所遵循的第三大原則。在本書簽訂出版合約之初我們就預留了充分的時間,約定15 個月交稿,計畫12個月完稿,而實際上14 個月就完成了,目的就是能在一個輕鬆的氣氛下完成寫作。不過如果再算上之前在理解Transformer(2021 年3—8 月) 和BERT(2021 年8 月—2022 年4 月) 這兩個模型所花費的13 個月時間,整本書總共歷經了27 個月,所以我們也時常告誡自己切莫心急浮躁、切莫急功近利、切莫誤人子弟,要為我們寫下的每一句話、每個字負責。同時,在本書的撰寫過程中對於每個重要細節的把握我們也會進行多方求證,力爭在理解上不會出現太大偏差。對於同一個模型的實現過程我們通常會參考不同框架中的實現原始程式,例如參考TensorFlow、PyTorch、Transformers 及論文作者的實現等,然後根據這些程式整理出一份保留核心邏輯且適合初學者學習的範例程式。 例如在介紹BERT 模型的實現過程時, 先後閱讀了GoogleResearch、PyTorch 和Transformers 框架中的相關實現過程;為了弄清楚fastText 模型中關於中文N-gram 的建構方式,我們在官方開放原始碼專案的dictionary.cc 檔案中找到了佐證;為了畫出ELMo 模型的真實結構圖,我們在官方的Allennlp 函式庫中見到了答案;為了弄清楚大語言模型對話場景中模型在推理時的具體解碼過程,我們歷經幾番周折終於在Transformer 函式庫的generation/utils.py 模組中找到了範例,甚至就連GPT 這個簡稱的來歷我們也都細緻地進行了考究,而這些本可以一筆帶過。 對於GPT 這個簡稱的來歷,它到底應該是Generative Pre-Training 的縮寫,還是Generative Pretraining Transformer 的縮寫,我們也曾反覆思考過很多次。此時有讀者可能會說:這還用想?當然是後者,因為GPT 用到的是Transformer中解碼器的部分。可當時我們並不這樣認為。首先GPT 表示生成式預訓練模型Generative Pre-Training 也並無不可,因為它的確是第1 個大規模語料下的生成式預訓練模型;其次GPT-1 的論文中並沒有明確交代T 的代指,甚至全文中根本沒有出現GPT 這一縮寫,反而從標題Improving Language Understanding by Generative Pre-Training 來看它更符合是Generative Pre-Training 的縮寫;最後,我們檢索OpenAI 官網的所有論文和內容後,仍沒有明確發現GPT 的來由,但對於這件事的疑惑並沒有停止。在我們寫作GPT-2 的相關內容時意外發現了論文的第二作者 Jeffrey Wu 的 GitHub 帳戶。在瀏覽他的所有專案時我們意外發現了一個名為minGPT 的專案,其簡介中赫然寫到一句描述:A minimal PyTorch re-implementation of the OpenAI GPT(Generative Pretrained Transformer) training,到這裡總算是找到了官方對於GPT 簡稱的認證。 當然,上面提到的細節之處本書中還有很多,讀者可以在閱讀學習的過程中自行慢慢體會。本書的目的只有一個,那就是所有的坑都讓我們先來踩,所有的錯都先讓我們來犯,各位讀者只需跟隨本書的足跡一步一步踏入深度學習的大門。不過遺憾的是,這本書也只能剛好帶領各位讀者進入深度學習的大門,至於怎麼將這些技術用得更好、用得更出色還需要各位讀者在實際使用中進行反覆錘煉。
致謝 首先感謝清華大學出版社趙佳霓編輯的耐心指點,以及對本書出版的推動。其次感謝在本書中所引用文獻的作者,沒有你們的付出也不會有本書的出版。如果說我們看得比別人更遠一些,那只是因為我們站在了巨人的肩膀上。在本書的寫作過程中從《動手學深度學習》《神經網路與深度學習》,以及史丹佛大學的CS224N 和CS231N 中獲得了不少靈感,在此特意向李沐老師和邱錫鵬老師及相關作者表示感謝,感謝這些深度學習領域中的巨人。同時我們也要感謝我們的家人在身後默默地支持我們。最後要感謝我自己,感謝那個曾經無數次想要放棄但依舊堅持下來的自己。 寫好一本書不容易,寫好一本能讓初學者讀懂且有所裨益的書更不容易。由於我們才學和資歷尚淺,書中難免存在著這樣或那樣目前尚未發現的錯誤,因此還請各位讀者海涵與見諒。同時,也歡迎各位同行前輩對本拙作不吝指教。在今後的歲月裡,我們也將不遺餘力地持續去打磨這兩本書中的內容,力爭以最直觀、最簡潔和最有新意的語言將各個演算法的原理與實現呈現在各位讀者面前,繼續秉持著「為往聖繼絕學」的初心。 王成 於上海 |




















