從機器學習到深度學習

如今機器學習、深度學習、人工智能這些詞耳熟能詳,但大多數人對它的理解確是模稜兩可,本文是我總結出來的一些個人理解。魯迅先生說過:多一行公式,就少10個讀者。所以我儘量避免枯燥無味的數學公式。由於水平有限,可能存在一些理解上的不正確,但希望通過它,能讓大家對於機器學習以及深度學習有一個大致的宏觀瞭解。

一、機器學習(Machine Learning)

理論上來講,只要我們知曉發生一件事情的所有條件,我們就能夠通過函數的形式去預測這件事情。千篇一律的列子:房價,如果我們事先知道房子的面積、地段、是否是學區房、樓層等等信息我們就有辦法去預測房屋的價格。

在機器學習中我們把面積這些信息稱為:特徵,把預測結果的函數稱為:模型,而房價的預測就是我們的:結果,(真實房價-預測結果)²所有樣本的求和:損失函數。

我們的目標就是尋找一個最優的函數,使得損失函數的值儘可能的低。這樣我們就可以通過特徵去預估房價

1.基於數學推導模擬函數:lr、SVM等

以簡單的lr舉例:在一維特徵空間,線性迴歸是通過學習一條直線,使得這條直線儘可能擬合所有已有的看到的點y(觀測數據),並希望未看到的數據(測試數據)也儘可能落在這條線上(泛化性能)。這裡說直線可能不太正確,如果只有一個特徵是一條直線,兩個特徵是一個平面,三個特徵就是在四維空間線性可分,以此類推。


從機器學習到深度學習

線性迴歸房價預測


<code>舉例說明:假設房價

:y

,只與房屋面積:x有關,成線性關係(這裡人為的約束了函數模板y=wx,真實情況也可能是y=wx²) 真實值:y 預測值

:h

初始化超參數w=

1

初始化超參數學習率l=

1

函數模型

:h=wx

損失函數: ∑ (y-h)² ∑:為求和符號,即將每個樣本的損失累加 對w求導:d=∑

2

x²w-∑

2

xy, 將x,y,w值代入公式得到常量d 對w進行梯度更新:w=w-l*d 重複以上步驟,等待損失函數收斂得到最優模型。/<code>


從機器學習到深度學習

2分類任務決策邊界

上圖中H2和H3都將數據成功分類,但是明顯H3做得更好一些。可以簡單的認為SVM(支持向量機)擁有找出泛化能力最好的一條決策邊界。SVM它與LR的區別在於損失函數的定義,通過最大間隔的約束,使得決策邊界儘可能的遠離支持向量點,所以決策邊界就只與支持向量點有關,進而可以引入核函數將低維不可分的特徵映射到高維。一套幾乎完美的理論贏得了不少人的吹捧。

2.統計學理論去統計概率:

枯燥無味的概率論在生活中卻可以解釋很多有趣的事情。籃球巨星蔡徐坤投了三次籃,一次未中,求他下一次命中的概率。你想說是0%?貝葉斯告訴你答案是0.2,相比於0是不是顯得更加合理?


從機器學習到深度學習

籃球巨星

tf-idf(關鍵詞統計)、樸素貝葉斯、HMM、CRF由簡到深,這都是一些常見的統計學模型。即便當今深度學習大行其道,但是如:LSTM+CRF等模型在命名識別體任務上也是有自己出色的表現和優勢。

3.樹+模型融合

通過信息熵、基尼係數等構建樹的分叉節點從而生成一棵樹,擬合上一個模型訓練數據的殘差構建第二顆樹,通過樹的加權融合生成最終模型。(模型的融合也分多種)


從機器學習到深度學習

GBDT中的一顆樹結構


常見的模型:隨機森林、GBDT、xgboost等。

3.機器學習存在什麼樣的優勢和弊端呢?

優點:像是lr、SVM之類普遍的機器學習算法,是有嚴格的數學推導證明他的可實踐性質,可解釋性強,是可以在認知上理解的。並且只要特徵工程做得夠好,模型的表現也是可圈可點。

缺點:人為的賦予模型函數模板,降低模型去理解數據之間更深層次的關係,需要進行更深層次的數據挖掘。舉一個簡單的列子,在一些機器學習比賽中幾乎所有人都會對:“購物時間的年月日”這一特徵做處理。因為人們總是在週末的時間進行購物,這時候就需要特徵工程去構造新特徵,將年月日轉化為"週一至週日"的特徵,不然模型很難去挖掘到這一信息。

當然以上只是一個很簡單的例子,數據分析師會通過觀察數據,想出千奇百怪的trick。所以一個任務是否work,往往是看數據是否處理乾淨,特徵工程做得夠不夠好。跑模型的時間遠低於特徵工程時間

二、深度學習(Deep Learning)

1.神經網絡

人腦可能有1000多億個神經元,每個神經元都可能在幾個方向上互相連接著,這麼大量的神經元及連接就形成了一個超級大型的網絡。我們就是因為這些網絡而存在各種各樣的思想和意識 。

深度學習利用"分段線性函數可以擬合任意連續函數 "(多個神經元)這一特點,讓模型能夠學會自己去挖掘特徵之間的關係。相比於傳統機器學習它能學到的就更多了。


從機器學習到深度學習

兩層神經網絡

神經元:以上每一個黃色的圓就是神經元,兩個神經元通過一個線性的lr相連,加上relu、sigmoid等激活函數給予非線性變化。

神經網絡可能沒有我們想象的那麼神秘,它不過是多個線性迴歸的組合,用更多的神經元、更深的層去模擬函數罷了,他所謂的可解釋性差指的是:對於不同的任務,我們究竟該用多少神經元,多深的層去做,這往往取決於經驗、與不斷的嘗試。並不是越深的神經網絡就越好,過多的參數以及過於深的層很容易引起:模型訓練緩慢、梯度消失、梯度爆炸、過擬合等問題。

2.CV(計算機視覺)

計算機視覺本質上也是基本的神經網絡,但是我們如何將一張圖片轉化為特徵餵給模型?毫無疑問的答案是:像素。

但是一張圖片有那麼多個像素,每個像素作為一個特徵,模型會不會太大了?所以CV裡面一些比較核心的操作就是:卷積、池化一些列壓縮特徵的方法。而卷積的本質其實就是最簡單的加權求和,通過不斷的平移卷積核得到圖像特徵。採用多個不同大小的卷積核,就可以提取到圖像上不同的特徵。


從機器學習到深度學習

卷積計算

卷積的本質其實就是最簡單的加權求和,通過不斷的平移卷積核得到圖像特徵。

圖像有一個非常明顯的特點:臨近的幾個像素點它表達的大概率上是同一個事物,所以通過卷積核提取特徵在CV上效果是十分卓越的。


從機器學習到深度學習

卷積提取的圖像特徵

人們往往不能理解,通過對像素的提取得到一個更加小的圖片,那麼這張小的圖片究竟代表著什麼?想象一下在我們的生活中,就算遮掩住一張圖片的部分,我們其實也是可以認出來這張圖片究竟是貓,還是狗。人類辨別事物的方可能與你想象的不大相同。

2.nlp(自然語言處理)

圖像是計算機對現實的抽象,而自然語言是人類對現實世界的抽象。nlp可以解決許多語言問題如:聊天機器人、惡意評論多標籤分類、機器翻譯等。

如果用普通的神經網絡去實現一個閱讀理解問題,將一個個詞作為特徵輸入模型。但是這樣卻忽略了語言的一個重要特性:語義順序。比如:“我喜歡你”和“你喜歡我”模型會將兩句話理解為一個意思。

所以我們不能像普通神經網絡一樣,將所有的詞作為第一層神經網絡的輸入,而應該變更為每一層輸入一個詞,來保證語義順序。但這樣也造就了一個問題,神經網絡層太深,需要學習的參數太多。於是RNN(循環神經網絡)孕育而生。


從機器學習到深度學習

RNN-循環神經網絡

通過循環共享一個神經元,將上一個神經元的輸出通過非線性變化和本次輸入詞進行拼接作為輸入,來達到在更新少量參數的情況下模擬語義順序。

自然語言的一個痛點是語言的的長距離依賴問題,過長的語句在反向傳播的過程容易導致梯度消失的問題,RNN的變種:LSTM、GRU採用門控信號的形式告訴模型應該記住那些信息和應該遺忘那些信息。但這並不能從根源上避免梯度消失問題,lstm在超過200的序列長度上表現就會成斷崖式下降。這種數學上的遺忘和我們人類的遺忘看起來是十分相似的。


從機器學習到深度學習

LSTM

4.Bert

聊到了自然語言處理,就不得不說說顛覆nlp領域的模型Bert。出道即巔峰,它在機器閱讀理解頂級水平測試SQuAD1.1中表現出驚人的成績:全部兩個衡量指標上全面超越人類!並且還在11種不同NLP測試中創出最佳成績。

Bert是基於微調的預訓練模型,Google使用維基百科等數據集在1024塊TPU下訓練了

三天,得到預訓練模型參數,後續只需要在此基礎上針對特定任務微調,並且他也能夠很好的兼容下游任務,推翻了必須為不同任務設計不同的模型。


從機器學習到深度學習

2020glue榜單

上圖是最新的glue得分榜,百度的ERNIE在2019年底歷史性的將分數提到了90分,但是無論是阿里的StructBert,谷歌的T5,他們都是在Bert的基礎上進行了改進,替換預訓練任務、改變模型的深寬度、對bert的mask機制做出改進、更大的訓練集等等等等。所以Bert模型的思想顯得格外重要。

將分為五個部分,介紹Bert模型

•TransFormer

•Bert的預訓練任務

•下游任務對接

•對比Emlo預訓練模型

•總結

(1).TransFormer

Bert使用了Transformer.GPU Is All You Need一文中提出,採用自注意力機制的Transformer提取能力遠超過了LSTM。從黑盒的角度可以簡單的把它理解為是一種特徵提取器。


從機器學習到深度學習

TransFormer

對上圖一些名詞做簡單介紹

input Embedding+Positional Encoding:將句子轉化為字向量進行輸入,由於自注意力機制沒有位置相關性,引入位置編碼。這裡的位置編碼採用固定的餘弦公式,實驗證明有效,但是合理性值得考量。

self-head-Attention-自注意力機制:簡單的可以理解為提取詞與詞之間的關係,返回新的詞向量。對輸入的數據進行Q、K、V三個變量的數據計算,同時學習三個矩陣,入參向量,得到相等數量的向量,目的是得到輸入之間的注意力關係,由於計算過程比較複雜在這裡就不做過多的展開。

Multi-head-Attention-多頭注意力機制:多頭注意力機制是由多個自注意力機制組成,經過一個Embedding得到輸出。其實和卷積神經網絡裡多個卷積核去提取特徵是同一個道理。

Add&Norm-歸一化輸入和殘差:歸一化操作是為了消除奇異樣本,導致的不良影響。殘差則是解決梯度衰減引起的性能問題

Feed-Forward:簡單的全連接層得到輸出:兩次線性變化加上一個relu激活函數,將值映射到(-1,1)區間,這裡的relu可以說是給整個模型提供非線性變化的關鍵.

以上介紹屬於TransFormer的左半部分,稱為TransFormer-Encoder,而右半部份為TransFormer-Decoder。兩者的區別和不同之處在於Encoder是基於全部輸入進行計算,也就是雙向的,可以理解句子的上下文信息。而Bert使用的就是Encoder.像是GPT網絡採用了Decoder,使用遮罩的模式讓預測的時候只有單詞前的輸入信息。

從機器學習到深度學習

自編碼-mask預測

小故事:GPT2.0的時候,OpenAI對外宣稱GPT2.0效果過於強大,可能會對人類產生威脅,不願意將它開源。那麼人們就疑惑了:“你OpenAI不開源了,那你到底o不open呢?“最終GPT2.0開源,其實相比於GPT1.0也就是更深的層,更多的訓練數據,依舊採用單向預測。

其實在這裡需要補充說明的是,並不是說GPT採用單向預測的做法就是不對的。這是一種叫做自迴歸(AR)的語言模型


從機器學習到深度學習

右自迴歸


從機器學習到深度學習

左自迴歸

可以看到要麼從前往後,要麼從後往前預測。這種自迴歸的機制雖然不能同時使用前後文去預測,但是他的優勢在於他有一種生成的理念。而Bert採用mask機制通過上下文去預測中間詞,這叫做自動編碼(AE)語言模型。所以這也是為什麼GPT在生成類任務表現良好,而Bert卻是個雷區。在xlnet模型中就提出了一種方法結合兩種語言模型的優勢。


(2).Bert的兩個預訓練任務(pre-train)

Masked LM

採用15%隨機的形式將我們要預測的詞進行Mask替換,同時為了避免下游任務沒有Mask輸入的尷尬場景做出了替換單詞

•80%Mask替換•10%隨機token替換•10%不變

Next Sentence Prediction(NSP)

通過當前句子預測其下一個句子,這個任務飽受學術界的爭議,很多人認為這是一個沒有意義的任務,所以之後基於Bert改進的任務有一些做了此任務的替換。

(3).Bert的下游任務


從機器學習到深度學習

bert分類下游任務

Bert接下游任務只需要對輸入和輸出做一些調整就可以兼容不同的任務,如問答質量評估,本質上是一個二分類,輸入sentenceA和sentenceB,取[cls]位置的輸出,過一個Dense層,然後對整個模型進行梯度更新就可以了。

(4).對比


從機器學習到深度學習

架構對比

Bert對比elmo,同樣是基於上下文進行預訓練任務,一個採用lstm一個採用TransFormer,但是兩個模型有本質的不同。

1.首先基於兩個LSTM的正逆向輸出拼接去理解上下文,這種拼接的形式效果遠不如TransFormer+Postion-Encoding。

2.elmo是類似於feature-base的模型,基於上下文特徵動態的訓練出基於單詞特徵、詞法特徵、語法特徵3個embedding進行權重拼接,然後給下游任務作為詞嵌入工具,這其實和word2vec是類似的,區別在於動態和靜態,動態給與了emlo理解一詞多義的能力。而bert是一種fine-tuning的模型,也就是在下游任務進行相關任務的時候會對bert模型的參數進行微調。這種微調的模式效果是十分出色的,並且對下游任務的兼容也做得非常的好。

(5).總結

優點:強大的特徵提取能力,基於微調的訓練模式降低了訓練樣本的要求,對nlp任務進行了大統一。

缺點:像是剛才提到的,預訓練任務的合理性考證,mask機制的隨機性可能導致一個詞被拆成兩個字,以及模型的厚重性對部署的要求很大。Postion-Encoding是否合理?Bert真的需要這麼多參數麼?Bert的每一層為什麼學到了語義或者語法?這其實是我們不能解釋的,只能說這樣效果很好,這也正是深度學習的無奈。

本文只是對Bert做了一個簡單的介紹和對比,很多細節上的東西明沒有做太多描述,並且可能存在一些理解上的不正確,如果想要更加深入的瞭解Bert可以參考Google論文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

三、強化學習(Reinforcement Learning)

無論是機器學習也好還是深度學習,都是數據決定上限,而模型則是去逼近這個上線,但是給我的感覺這是量變,不是質變。而強化學習通過狀態、行為、環境獎勵自我學習,是一種另外的思路。像是我們熟知的 AlphaGo 都是在質的級別上超越了人類。有興趣的同學可以之後深入研究一下,相信又是另一番天地。


分享到:


相關文章: