
齋藤康毅
《深度學習進階:自然語言處理》是《深度學習入門:基於Python的理論與實現》的續作,圍繞自然語言處理和時序數據處理,介紹深度學習中的重要技術,包括word2vec、RNN、LSTM、GRU、seq2seq和Attention等。本書語言平實,結合大量示意圖和Python代碼,按照“提出問題”“思考解決問題的新方法”“加以改善”的流程,基於深度學習解決自然語言處理相關的各種問題,使讀者在此過程中更深入地理解深度學習中的重要技術。
在飛機上瀏覽完了《深度學習進階:自然語言處理》最後一章。如果要了解NLP,這本書無疑是非常好的選擇。最近語言大模型(LLM)很火,爲了進一步理解chatGPT,又重新撿起本書。去年初,簡單瀏覽了這本書,當時確實沒怎麼細看,就想看看相關概念,這次比較詳細地過了一遍,相關概念更清晰了。 作者還有另一本書,《深度學習人門:基於Python的理論與實現》,寫得也很好,包括了深度神經網絡的基本知識介紹和如何用代碼實現,非常棒。 近年來,日本人寫的技術書,確實質量非常高,值得我們尊重和學習。 本書沿襲了作者一貫風格,不依賴現成的庫,全是直白的代碼,以及相關原理的介紹,作爲入門的書,是非常棒的,因爲不需要去再額外構建其他知識。反而這樣的書就是背景知識,是進階的基礎。 我從本書瞭解了NLP的幾個核心概念: 1,單詞的分佈式表示。 2,構建單詞分佈式表示的兩類方法:計數法,基於神經網絡的推理法。 3,基於神經網絡構建的embeding層。看到embeding數據,知道是啥意思了,爲啥能簡化計算。 4,如何降維數據,稀疏矩陣到稠密矩陣的轉換,比如用SVD。 5,表達自然語言序列的RNN模型,以及優化的LSMT。 6,時序到時序的轉換機制。 7,RNN在時序轉時序的缺陷,以及引入注意力機制。 8,對Transformer的簡單介紹。 本書對注意力機制的介紹非常淺,特別是自注意力機制,內容基本上不具有參考價值,文中提到了17年的論文《Attention Is All You Need》,就是有名的Transformer,可惜,沒有講清楚,一筆帶過。這可能是作者寫完了本書,要出版的時候,突然發現了Transformer風口的到來。這本書日本版是18年出版的,可以想象當時作者加入注意力機制是多麼倉促。 作者在18年出版本書的時候,GPT和BERT還沒有發放異彩,但,作者能已經預判到注意力機制的廣闊前景,算是有很好的前瞻性了,因此緊急在書中加入注意力機制。 當然,這本書的這一點缺陷不能掩蓋整本書的價值。 今天講注意力機制的書和論文非常多了,包括BERT、GPT,都是在Transformer基礎上構建起來的,引領了大模型的新時代。在NLP中,大模型已經發揮了超強力量,未來,大模型在視頻領域必然會帶來新的創新和更好的效果,拭目以待。 這本書中有很多NLP基礎概念和機制的介紹,讓我對NLP的概念理解更深刻,舉例如下: 1,單詞分佈式表示構建的原理。創新單詞的共現矩陣,然後轉換爲PPMI矩陣,再對PPMI矩陣做降維,用降維後的向量表達每個單詞,單詞的向量表示就是單詞的分佈式表示。 2,單詞向量表示。用向量表示單詞,可以更好地利用包括深度神經網絡在內的算法,因此這種表示方法非常流行。本書介紹了兩種方法,一種是基於計數,第二章重點介紹了這種方法,另一種是基於推理,就是本章開始介紹的方法,利用神經網絡模型來做推理。 3.,NLP中的推理方法。其實就是基於周圍的單詞推測中心詞的過程,這就是一種完形填空,只是用了神經網絡的機制。 4,RNN。RNN是爲了表達自然語言的序列。而word2vec是爲了表達單詞的分佈,也就是word2vec本質上是爲了構建每個單詞的向量表達。單詞向量表達通常作爲作爲RNN的輸入。 5,時序數據。在現實世界中有很多,包括文本、音頻、視頻等。構建時序數據的任務也有很多,包括翻譯、識別、模擬人行爲等。 6,編碼器。通常將時序數據轉換成隱藏狀態,這種隱藏狀態就是編碼後的一種向量,通常這個向量是固定長度。也就是,編碼可以把任意長度的時序數據轉換成固定長度的向量。 7,RNN,LSTM的缺陷。最大的問題就是在輸入序列太長的時候會發生向量溢出。也就是,採用固定長度的向量,信息表達一定會存在一個限量,超過這個向量就會丟失信息,讓編碼的準確度受損。注意力機制成爲更有選擇! 強烈推薦!
這是一本非常好的技術專業書籍,主要介紹深度學習技術在自然語言處理領域的相關知識,對於我這個技術小白來說着實難啃。雖然啃得十分艱難,但也收穫不少,通過自己對關鍵概念的理解,把重點總結下(總結的過程也很痛苦,肯定有不少理解錯誤): 1、費曼:What I cannot create, I do not understand. 凡我不能創造的,我就不能理解。這句話總結的非常好,尤其是對以應用爲核心的技術,想要弄清楚,就需要躬行實現,從零開始構建,理解結構和原理是關鍵。 2、神經網絡:神經網絡就是一個函數,主要的處理是:學習和推理,先學習,再利用學習好的參數進行推理。學習任務就是找函數的最優參數,推理任務就是完成問答,神經網絡的學習目標就是找到損失最小的參數。 3、學習和推理:推理(預測)的過程,輸入層->輸出層,就是正向傳播,即前饋神經網絡。學習(反思)的過程,輸出層->輸入層,就是反向傳播,傳播數據(梯度)。 4、損失與降低損失:神經網絡學習效果的指標是損失 loss,也是性能指標。損失即問題,即預測數據與正確數據之間的誤差,通過“預測->產生誤差->減小誤差”(提出假設->發現問題->解決問題)的閉環來進行學習和迭代。降低損失:用“梯度下降算法 gradient descent”降低損失 ,梯度指向當前權重參數所處位置中損失增加最多的方向,通過將參數向該梯度的反方向更新,可以降低損失。將向量各個元素的導數羅列在一起,就得到了梯度 gradient 。向量、導數、張量的導數稱爲梯度。 5、單詞向量化:通過測量單詞的向量表示的相似度來表示詞義的相似度,讓計算機能理解我們的自然語言。常用方法:餘弦相似度 cosine similarity 。餘弦相似度表示:兩個向量在多大程度上指向同一方向。相同方向,餘弦相似度爲1;方向完全相反,餘弦相似度爲-1 。 6、向量表示:基於計數和基於推理兩種方法,兩種方法都基於分佈式假設:單詞含義由上下文決定,這個假設非常重要。基於計數:一次性處理全部學習數據,基於推理:使用部分學習數據逐步學習。 7、語言模型、生成式與馬爾可夫性:語言模型 language model 給出了單詞序列發生的概率。生成式的根本是聯合概率(多個事件一起發生的概率),聯合概率可以由後驗概率的乘積表示。馬爾可夫性是指未來的狀態僅依存於當前狀態,當某個事件的概率僅取決於其前面的N個事件時,成爲 N 階馬爾科夫鏈。 8、RNN循環神經網絡:前饋 feedforward 是指網絡的傳播方向是單向的,前饋網絡不能很好處理時間序列數據,於是 RNN 循環神經網絡應運而生。RNN 循環即反覆並持續,讓數據有了迴路,RNN一邊記住過去的數據,一邊更新到最新的數據。RNN 不擅長學習時間序列數據的長期依賴關係,因爲BPTT(backpropagation through time 基於時間的反向傳播)會發生梯度消失和梯度爆炸。 9、LSTM:LSTM Long short-term memory(長短期記憶),可以長時間維持短期記憶。梯度裁剪對解決梯度爆炸有小,LSTM等Gated RNN 對解決梯度消失有效。 10、seq2seq :seq2seq 是一個時序數據轉換成另一個時序數據。RNN能生成文本,組合兩個 RNN 就能實現 seq2seq,有兩個模塊:Encoder編碼器+Decoder解碼器,編碼器 = embedding + LSTM,解碼器=embedding + LSTM,替換編碼器中的 LSTM 爲 CNN 循環神經網絡,則能實現圖像識別。 11、Attention 機制:注意力機制 Attention mechanism ,預計該機制,機器能像人一樣,將“注意力”集中在必要的信息上。seq2seq 中使用編碼器對時序數據進行編碼,然後將編碼信息(固定長度的向量)傳遞給解碼器,固定長度就是最大瓶頸。Attention技術的引入,核心是改造編碼器和解碼器,能很好的解決這個問題。 12、Transformer 模型: Transformer 是在“Attention is all you need”論文中提出的,Transformer 不用 RNN ,而用 Attention 進行處理。Transformer 是基於 Attention 構成的,其中使用了 Self-Attention 技巧。OpenAI 打造的 GPT 模型,最核心的就是 Transformer 模型。
閱讀完的第一感受與收穫總結: 🧠感受 對基礎一般,理解力不是很好(暫且稱爲領悟力有些遲鈍、滯後)的學習者較友好(關鍵是得耐得住性子讀🉐下去,如何耐得住性子讀下去呢?個人覺得最好帶着很多“爲什麼”去讀,邊讀邊查閱自己不理解的知識點,最後用第一性原理進行理解會更容易記住)基本上也儘可能遵循了第一性原理方式將一些勸退人的數學公式、符號轉換爲方便理解的語言符號。 多讀書的意義還可以是:通過從開始學習到現階段時刻的不斷積累之上,未來的某一個時刻的某一瞬間因爲某一個觸發點的觸動,就會對之前某個階段上怎麼都不是很理解的那個點忽然醍醐灌頂(或許這就是大家所說的——教育的迴旋鏢?滯後性?)。這裏,我覺得還是用楊絳老師的經典話解釋最合適:“年輕的時候以爲不讀書不足以瞭解人生,直到後來才發現如果不瞭解人生,其實是讀不懂書的。” 📖✍總結 如何耐得住性子讀下去呢?帶着“爲什麼”去讀,邊讀邊查閱自己不理解的知識點,最好用第一性原理(如何從根本出發推導複雜現象,第一性原理是“通向本質的路徑)進行理解會更容易記住 比如,第一層面上的“LSTM(Long Short-Term Memory)層”直譯爲中文“長短期記憶”嗎?再翻譯一下“長時間維持短期記憶”->那什麼叫“長時間維持短期記憶”?書中先指出傳統RNN梯度在時間方向上反覆相乘容易指數級衰減或爆炸,導致網絡只能記住很短的歷史信息,導致“短期記憶”無法延續這一問題的提出,接下來從LSTM內部結構通俗易懂方式的解釋進行論證: (下面內容是AI進行總結) LSTM 在 RNN 的基礎上引入“記憶單元”ct 以及三個門(遺忘門、輸入門、輸出門)。其中遺忘門 f 通過逐元素乘法 f⊙ct-1,有選擇地保留或抹除記憶;輸入門 g 則把新信息加到記憶單元上;輸出門 o 控制記憶單元對隱藏狀態 ht 的貢獻。這樣的設計讓信息在記憶單元中以“線性組合+門控”的方式流動,而不是簡單相乘。 因爲記憶單元的更新和輸出都通過門控線性變換,梯度在時間反向傳播時不會被連續相乘的非線性激活削弱,從而可以在數百個時間步內保持不衰減。作者用“×”節點的梯度分析和“簡略圖示法”說明:被遺忘門標記爲“保留”的記憶元素,其梯度幾乎完整地回流到前面的時間步;相反,被標記爲“忘記”的元素梯度被抑制。這種機制使得 LSTM 能夠“長”時間(相對於傳統 RNN)維持對短期記憶的準確保存與訪問,即實現了“長時間維持短期記憶”。
本書及其前作《深度學習入門:基於Python的理論與實現》是最好的深度學習入門書。深度學習技術並不艱深,跟着作者齊藤康毅直接從底層源代碼造輪子反而是最高效的學習方式。正如物理學家Feynman所說,凡我不能創造的,我就不能理解。對於理工科畢業生,具備基本的線性代數和微積分,會些python和numpy,這兩本書應該一兩個月就能學完(這次二刷用了一週時間)。數學和物理難在概念太過抽象在現實中難以對應,實驗設備稀缺使得沒有條件去動手形成直觀的理解和記憶。而大語言模型前的深度學習技術,代碼數據開源,幾萬元的電腦就能反覆實驗,學會不難。 作者從word2vec、RNN、LSTM、Seq2seq到Attention技術層層改進,一磚一瓦的搭出一個可用的語言模型。作者對算法代碼、網絡結構圖以及正向傳播和反向傳播的計算圖的講解都十分詳細,對數組的維度和大小,數據傳遞等細節也有很好的說明。看完本書對調包看懂文檔也是有幫助的。對於理解RNN和LSTM,比其他教程清晰很多。例如,RNN中雖然截斷反向傳播算法使得反向傳播會被截斷,但正向傳播的隱狀態是不截斷可以一直往後傳的,所以RNN的mini-batch數據準備不能隨機打亂,而要保持時序順序輸入。書中也給出了完整的數據準備代碼。這點在其他書中沒有看到過。 強烈推薦!
這是我讀過的關於自然語言處理最通俗易懂,理論和實踐結合最好的深度學習圖書,本書有如下特點: 簡明易懂:本書內容精煉,聚焦深度學習視角下的自然語言處理,延續前作的行文風格,採用通俗的語言和大量直觀的示意圖詳細講解,幫助讀者加深對深度學習技術的理解,輕鬆入門自然語言處理。 側重原理:不依賴外部庫,使用Python 3從零開始創建深度學習程序,通過親自創建程序並運行,讀者可透徹掌握word2vec、RNN、LSTM、GRU、seq2seq和Attention等技術背後的運行原理。 學習曲線平緩:按照“文字介紹一代碼實現一分析結果一發現問題一進行改善”的流程,逐步深入,讀者只需具備基礎的神經網絡和Python知識,即可輕鬆讀懂。
靠着三本日本人寫的深度學習的書勉強入門了,另兩本是《深度學習的數學》和《深度學習入門》,這三本書將學習曲線拉到非常平緩,以至於我都能看懂[旺柴]。這幾本書深得吾輩小白之心,基本每一個初學者覺得困惑的問題都給出了形象的解答。略有不足的地方是後兩章質量略有下降,有些地方一筆帶過解釋得不夠清晰,比如attention中的權重a爲什麼可以由單詞向量hs和狀態向量h點積求得,也許作者覺得讀者讀到這裏應該掌握了自行求解的能力。不管怎麼說,強烈推薦!
讀後感:word2vec 提出了基於神經網絡來構建單詞分佈式表示(向量)的方法,包含模型 CBOW 和 skip-gram,後續還通過引入 embedding 層和負採樣技術改進模型。 RNN 網絡用於處理時序數據,會在時序數據串行處理之間傳遞並維護內部隱藏狀態。 LSTM 網絡改進了普通 RNN,通過門控機制解決梯度消失問題,增加了輸入門、內部記憶單元、遺忘門和輸出門。 seq2seq 模型用於將一種時序數據轉換成另一種時序數據,包含編碼器和解碼器。通過引入 Attention 層來“選擇”重要的信息用於解碼器生成下一個詞。
分享一些個人看法: 1. 這本書寫的比較簡單,適合拿來複習或者對入門者比較友好。不過只能給你一個overall picture。 2. 需要深究的同學,適合和deep learning(Ian那本)。好像微信讀書上面有上架那本 3. 前面的基礎概念解釋的還是很清晰明瞭的,如果還有疑問,推薦一個人的頻道: Statquest。一個北卡的大牛,可視化了很多統計學概念 Good good study, day day up^_^
大概瀏覽了一下,都是比較古早的技術,現在看就像考古,不推薦作爲NLP入門書了。RNN好懂,可以看看;LSTM太複雜略過,沒必要去深究,有這精力還不如去看rwkv和mamba。而由於成書較早,重量級的transformer也只是提了一下。
同樣是走馬觀花看完了大概原理,跟着代碼實操一遍會有更好的理解。印象比較深的首先一個就是單詞的分佈式表示。然後從RNN,LSTM,到Attention,基本上是爲了解決現實中的突出問題,比如處理長時序,反覆提到的梯度消失梯度爆炸,並行計算提高訓練效率等。