這里總結(jié)了李宏毅老師的機(jī)器學(xué)習(xí)的課程诊笤。首先我們將會(huì)了解到機(jī)器學(xué)習(xí)的概念,但是課程的主要觀點(diǎn)將會(huì)聚焦到Deep Learning产舞。進(jìn)行了解之后我們會(huì)學(xué)習(xí)到監(jiān)督學(xué)習(xí)( supervised learning )的相關(guān)網(wǎng)絡(luò)魂奥,還有自監(jiān)督學(xué)習(xí)(self- supervised learning)的相關(guān)知識(shí),包括生成對(duì)抗網(wǎng)絡(luò)(GAN)易猫,BERT耻煤,Tansformer等。后面還會(huì)講到強(qiáng)化學(xué)習(xí)(Reinforcement learning)擦囊、可解釋化的AI违霞、模型攻擊(model attack)、領(lǐng)域自適應(yīng)(domain adaption)瞬场、模型壓縮(network compression)买鸽、機(jī)器終身學(xué)習(xí)(long-life learning )和元學(xué)習(xí)(meata learning)
(一)機(jī)器學(xué)習(xí)或者是深度學(xué)習(xí)的介紹
(1)什么是機(jī)器學(xué)習(xí)ML?
尋找一個(gè)函數(shù)贯被,解決一個(gè)問(wèn)題眼五。
(2)是什么樣的函數(shù)呢?
- Regression(回歸): the function outputs a scalar.也就是一個(gè)回歸問(wèn)題彤灶,它可以預(yù)測(cè)一個(gè)數(shù)值看幼。例如預(yù)測(cè)PM2.5
- Classification(分類(lèi)):given the computer some options or classes, the function outputs the correct one. 例如:郵件是否為垃圾郵件?阿爾法go的預(yù)測(cè)問(wèn)題幌陕。
- Structured learning(結(jié)構(gòu)的學(xué)習(xí)):create something with structure(image, document)讓機(jī)器學(xué)會(huì)一個(gè)結(jié)構(gòu)化問(wèn)題诵姜。例如寫(xiě)郵件,寫(xiě)新聞搏熄,畫(huà)畫(huà)棚唆,編曲等
(3)尋找函數(shù)的步驟是怎么樣的呢暇赤?
第一步:設(shè)計(jì)一個(gè)帶有未知參數(shù)的函數(shù)
第二步:定義一個(gè)Loss函數(shù)
- loss函數(shù)的輸出證明了函數(shù)的好壞
- 常用的損失函數(shù)有平方差,絕對(duì)值差宵凌,交叉熵等(所謂交叉熵鞋囊,就是說(shuō)明兩個(gè)分布之間的差距(距離))
第三步:不斷優(yōu)化更新函數(shù)
- 優(yōu)化的意思是找出合適的參數(shù)(w,b)
- 隨機(jī)選取參數(shù)瞎惫、梯度下降溜腐、更新參數(shù)
- 目的是讓loss最小,也就是讓函數(shù)越來(lái)越好
這里有一個(gè)小知識(shí)點(diǎn)瓜喇,局部最優(yōu)解往往不是神經(jīng)網(wǎng)絡(luò)常遇到的問(wèn)題挺益。
(4)如何讓網(wǎng)絡(luò)解決非線性問(wèn)題?
線性的神經(jīng)網(wǎng)絡(luò)能解決的問(wèn)題往往是有限的欠橘,例如只能解決簡(jiǎn)單的回歸問(wèn)題矩肩,和二分類(lèi)的問(wèn)題现恼。但是像 XOR 異或問(wèn)題卻無(wú)法解決肃续。然而我們遇到的問(wèn)題大多數(shù)是非線性的。
那么我們?nèi)绾巫屔窠?jīng)網(wǎng)絡(luò)變成非線性的呢叉袍?
這就是我們經(jīng)常提到的激活函數(shù)了始锚。
我們都知道常用的是sigmoid, tanh喳逛,relu瞧捌。
那我們?yōu)槭裁醇せ詈瘮?shù)不是線性的呢?當(dāng)我們把線性函數(shù)帶進(jìn)去的時(shí)候會(huì)發(fā)現(xiàn)润文,神經(jīng)網(wǎng)絡(luò)仍是線性的姐呐。所以激活函數(shù)都是非線性的。
關(guān)于激活函數(shù)的內(nèi)容可參考:
【1】https://zhuanlan.zhihu.com/p/260970955
【2】http://www.reibang.com/p/1dfe5e05a75c
【3】https://zhuanlan.zhihu.com/p/61616349
【4】http://www.reibang.com/p/aad9deccbc27
(5)什么是深度學(xué)習(xí)DL典蝌?
深度學(xué)習(xí)和是在機(jī)器學(xué)習(xí)的基礎(chǔ)上曙砂,將神經(jīng)網(wǎng)絡(luò)不斷地堆疊,讓網(wǎng)絡(luò)變得像一條深深得通道骏掀。這便是深度學(xué)習(xí)鸠澈。
- 發(fā)展歷史
i. 1958: perception (linear model)
ii. 1969: perceptron has limitation
iii. 1980s: multi-layer perveptron
Do not have any significant difference from DNN today.
iv. 1986: backpropagation (反向傳播)
Usually more than 3hidden layers is not helpful
v. 1989:1 hidden layer is “good enough”, why deep?
vi. 2006: RBM initialization ( breakthrough )
vii. 2009: GPU
viii. 2011: start to be used in speech recognition
ix. 2012 win ILVRC image competition
(6)為什么神經(jīng)網(wǎng)絡(luò)是一個(gè)Fat network,而是一個(gè)Deep network截驮?
理論上來(lái)說(shuō)神經(jīng)網(wǎng)絡(luò)就是一個(gè)巨型的函數(shù)笑陈,將輸入輸進(jìn)去,通過(guò)計(jì)算就能得出結(jié)果葵袭。與其把神經(jīng)網(wǎng)絡(luò)做的那么深入涵妥,為何不直接把神經(jīng)網(wǎng)絡(luò)設(shè)置成一個(gè)只有一層的有很多參數(shù)的網(wǎng)絡(luò)呢?
因?yàn)橥ㄟ^(guò)實(shí)踐發(fā)現(xiàn)坡锡,深層的網(wǎng)絡(luò)往往能學(xué)習(xí)到時(shí)間或者空間上的更深層次的信息蓬网,這是單層神經(jīng)網(wǎng)絡(luò)無(wú)法學(xué)習(xí)得到的块请。
(二) 機(jī)器學(xué)習(xí)任務(wù)的攻略
這里需要解決的問(wèn)題是在我們訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時(shí)候,會(huì)遇到很多的問(wèn)題使得神經(jīng)網(wǎng)絡(luò)的訓(xùn)練效果并不好拳缠。這里是具體分析其原因墩新。
(1)損失值很大
這種情況出現(xiàn)主要是兩個(gè)原因:
- (1)模型太小
這里有可能是模型的容量太小,也就是說(shuō)模型不夠復(fù)雜所導(dǎo)致的loss無(wú)法收斂窟坐。需要做的是 - (2)優(yōu)化器優(yōu)化問(wèn)題
例如可能會(huì)進(jìn)入到一個(gè)非常平坦的地方海渊,讓梯度無(wú)法更新。
如何區(qū)分這兩種情況呢哲鸳?
構(gòu)建深的model臣疑,但是loss更加大了,那就是優(yōu)化器的問(wèn)題所在了徙菠,如果loss變小了讯沈,那就是網(wǎng)絡(luò)不夠復(fù)雜的問(wèn)題。
(2)損失值很小婿奔,但是在測(cè)試集上表現(xiàn)不好缺狠。
這里極有可能是過(guò)擬合( overfitting)了。也就是說(shuō)神經(jīng)網(wǎng)絡(luò)的模型足夠復(fù)雜萍摊,直接把訓(xùn)練集里面的樣本直接記下來(lái)了挤茄。但是遇到新的問(wèn)題就不會(huì)解決了。
解決方案:
- (1)擴(kuò)充數(shù)據(jù)集冰木,不推薦說(shuō)是自己去擴(kuò)充數(shù)據(jù)集穷劈,但是可以使用一些數(shù)據(jù)增強(qiáng)技術(shù)data augmentation 例如:平移、反轉(zhuǎn)踊沸、截取等
- (2)減少參數(shù)[設(shè)計(jì)一個(gè)更小的模型歇终,dropout,權(quán)重衰退]逼龟,或者共享參數(shù)[Resnet等]
參考:
【1】http://www.reibang.com/p/995516301b0a
【2】http://www.reibang.com/p/2155e59d14a4
【3】http://www.reibang.com/p/ad00cf171353
(3)如何加速loss收斂评凝?
使用更好的優(yōu)化器,例如Adam等审轮,也可以通過(guò)設(shè)置learning rate肥哎,加速其學(xué)習(xí)的步伐。還可以使用batch疾渣,批量訓(xùn)練篡诽。
(4)神經(jīng)網(wǎng)絡(luò)收斂不起來(lái)怎么辦?
極有可能是遇到了局部最優(yōu)解和鞍點(diǎn)榴捡,他倆的共同特征就是導(dǎo)數(shù)為0杈女,也就使得梯度卡住了,這樣的點(diǎn)叫做:critical point。其實(shí)實(shí)際訓(xùn)練中l(wèi)ocal minima 是不常見(jiàn)的达椰,我們往往卡在鞍點(diǎn)(saddle point)翰蠢。通常是通過(guò)計(jì)算H的值,就能判斷是什么情況:
(5)學(xué)習(xí)率(learning rate)始終用一個(gè)值好嗎啰劲?
答案肯定是否定的梁沧,learning rate的大小需要隨著訓(xùn)練不斷變化。例如蝇裤,loss function一開(kāi)始的坡度很大廷支,我們要使用學(xué)習(xí)率控制跨步小一點(diǎn),別直接飛出天際栓辜。當(dāng)坡度非常小的時(shí)候恋拍,我們要給它一點(diǎn)步伐,別卡住了藕甩。這便能夠一定程度上解決critical point的問(wèn)題施敢。
我們通常遇到的問(wèn)題就是,訓(xùn)練著狭莱,結(jié)果loss卡住不下降了僵娃,難道真的是遇到critical point了嘛?在實(shí)際情況中上面說(shuō)的critical point往往不是問(wèn)題贩毕。它能通過(guò)好的優(yōu)化器很大程度上解決悯许。
那么都有怎么樣的解決方案呢?
- SGD:隨機(jī)梯度下降辉阶,學(xué)習(xí)率固定
- SGD with momentum:動(dòng)量,也就是加入前面梯度的影響瘩扼。就像是慣性一樣谆甜≡奘可以直接沖過(guò)平坦的地方闺鲸,學(xué)習(xí)率固定
- Adagrad:讓學(xué)習(xí)率不在震蕩,斜率大的地方疚沐,分母大栽燕,從而學(xué)習(xí)率小罕袋,步子小。但學(xué)習(xí)率隨著時(shí)間越來(lái)越小碍岔,會(huì)讓收斂減速浴讯。
- RMSProp:Adagrad是考慮前面所有的梯度對(duì)后面造成的影響,RMSProp蔼啦,更注重的是前一次的梯度影響榆纽,類(lèi)似于momentum。但后期容易在小范圍內(nèi)產(chǎn)生震蕩,原因是可能會(huì)導(dǎo)致分母過(guò)小奈籽。
- Adam = RMSProp + momentum
(6)數(shù)據(jù)集怎么劃分的饥侵?
我們通常將總數(shù)居分成三份:訓(xùn)練集,驗(yàn)證集衣屏,測(cè)試集躏升。我們分別用不同的網(wǎng)絡(luò)對(duì)training set進(jìn)行訓(xùn)練,在驗(yàn)證集上選出最優(yōu)秀的那一個(gè)狼忱,那樣的話就比較科學(xué)煮甥。
當(dāng)遇到數(shù)據(jù)集不夠的時(shí)候可以使用K折交叉驗(yàn)證。
可參考:
【1】http://www.reibang.com/p/2155e59d14a4
【2】http://www.reibang.com/p/26b57b25c56d
(三)卷積神經(jīng)網(wǎng)絡(luò) CNN
卷積神經(jīng)網(wǎng)絡(luò)主要處理的是圖片相關(guān)的問(wèn)題藕赞,例如圖片分類(lèi)成肘,如圖片分割等。最大的特點(diǎn)是斧蜕,將權(quán)重變成了卷積核這樣的形式双霍。卷積核 == 權(quán)重矩陣。
可以將其看作是一種特殊的全連接層的網(wǎng)絡(luò)批销。其原理是利用一個(gè)個(gè)的卷積核掃描去探測(cè)圖片中的重要特征信息洒闸。卷積核的個(gè)數(shù)決定了該層輸出的通道數(shù)。
(1)通常將卷積核設(shè)置成3*3均芽,足夠嗎丘逸?
雖然一個(gè)33的卷積核看起來(lái)很小,但是當(dāng)網(wǎng)絡(luò)變深的時(shí)候掀宋,33的區(qū)域可能映射到前面的區(qū)域是很大的深纲。例如,第一層的時(shí)候我們確實(shí)檢測(cè)的范圍是3x3劲妙,但是在第二個(gè)卷積層中湃鹊,其實(shí)3x3的格子在原來(lái)的圖片中對(duì)應(yīng)的是5x5。
(2)CNN無(wú)法很好的解決縮放旋轉(zhuǎn)镣奋,裁剪等問(wèn)題币呵。
可以通過(guò)增加一層:special transformer layer
通過(guò)矩陣乘法,將圖片旋轉(zhuǎn)侨颈,縮放余赢,平移。但是有一個(gè)缺點(diǎn)是無(wú)法進(jìn)行梯度下降哈垢。
(3)常見(jiàn)的CNN模型
VGG妻柒、GoogLeNet、ResNet温赔、ResNet各種變種蛤奢、DenseNet等
GoogLeNet文章中提出優(yōu)化模型有兩種途徑:提高深度或是寬度鬼癣。但是這兩種方法都存在局限性:1.參數(shù)太多,容易過(guò)擬合啤贩,若訓(xùn)練數(shù)據(jù)集有限待秃;2.網(wǎng)絡(luò)越大計(jì)算復(fù)雜度越大,難以應(yīng)用痹屹;3.網(wǎng)絡(luò)越深章郁,梯度越往后穿越容易消失,難以優(yōu)化模型志衍。
GoogLeNet正是圍繞著這兩個(gè)思路提出的暖庄,其通過(guò)構(gòu)建密集的塊結(jié)構(gòu)——Inception(如下圖)來(lái)近似最優(yōu)的稀疏結(jié)構(gòu),從而達(dá)到提高性能而又不大量增加計(jì)算量的目的楼肪。
ResNet解決模型深培廓,易造成梯度消失,繼續(xù)訓(xùn)練時(shí)春叫,很難再更新參數(shù)肩钠,很難學(xué)到特征
可參考:
【1】https://blog.csdn.net/lianghe77/article/details/104486543
【2】https://blog.csdn.net/wangzi11111111/article/details/88945699
(四)注意力機(jī)制(self-attention)
注意力機(jī)制主要解決的是多輸入的問(wèn)題,例如句子的翻譯暂殖,每個(gè)句子的長(zhǎng)度并不是固定的价匠,那么該怎么樣操作使得神經(jīng)網(wǎng)絡(luò)能夠接收,序列信息呛每。
(1)輸入數(shù)目和輸出數(shù)目相同(N to N)
我們認(rèn)為序列內(nèi)部是有相關(guān)性的踩窖,例如I LOVE YOU。主語(yǔ)和謂語(yǔ)之間是有聯(lián)系的晨横。再比如說(shuō)洋腮,30號(hào)上午,北京到天津的航班颓遏。這里面的地面也是有聯(lián)系的徐矩。所以主要問(wèn)題變成了,如何確定這種相關(guān)系數(shù)叁幢?
注意力機(jī)制提出了三個(gè)注意力的系數(shù):q、k坪稽、v
I: input, O:ouput, Q={q1,q2,...qn}, K={k1,k2...kn}, V={v1,v2...vn}
進(jìn)階版的注意力機(jī)制:multi-head self-attention曼玩,多head,就是用多個(gè)wq矩陣wk窒百,wv矩陣黍判。理解一下就是說(shuō),有不同的關(guān)系和理解篙梢。
在語(yǔ)音辨識(shí)中可能一句語(yǔ)音非常長(zhǎng)顷帖,如使用self-attention的話輸入就會(huì)及其大,我們或許不需要看到很遠(yuǎn)的距離,我們只系要看臨近之間的關(guān)系贬墩。
self-attention 和CNN的關(guān)系:
- CNN是簡(jiǎn)單版的自注意力機(jī)制
可參考:
【1】https://www.csdn.net/tags/NtTacgxsMTAxODMtYmxvZwO0O0OO0O0O.html
自注意力機(jī)制和RNN的比較:
自注意力機(jī)制還可以用在圖神經(jīng)網(wǎng)絡(luò)中:
(五)RNN 循環(huán)神經(jīng)網(wǎng)絡(luò)
解決的也是輸入輸出不確定的應(yīng)用場(chǎng)景榴嗅。與self-attention不同,他不是一次性輸出N個(gè)結(jié)果陶舞,而是每次輸入一個(gè)x嗽测,輸出一個(gè)y。
有一個(gè)中間結(jié)果會(huì)被保存下來(lái)肿孵,一起作為下一層的輸入唠粥。
演化出了Elman NN和Jordan NN,其不同點(diǎn)僅在于a的取值停做。其他結(jié)構(gòu)基本沒(méi)有變化晤愧。還有一種雙向的RNN叫做:Bidirectional RNN,他設(shè)計(jì)了正反兩個(gè)神經(jīng)網(wǎng)絡(luò)蛉腌,共同輸出一個(gè)結(jié)果官份。其解釋為,能夠?qū)⒄麄€(gè)序列了解的更好眉抬。
(1)LSTM (long short-term memory)長(zhǎng)短期記憶網(wǎng)絡(luò)
這個(gè)網(wǎng)絡(luò)是一種特殊的RNN贯吓。不難發(fā)現(xiàn)RNN希望神經(jīng)網(wǎng)絡(luò)能夠記住一些內(nèi)容,但是根據(jù)RNN網(wǎng)絡(luò)結(jié)構(gòu)可以發(fā)現(xiàn)蜀变,它只對(duì)上一個(gè)輸入有考慮悄谐。而且關(guān)于存儲(chǔ)邏輯設(shè)計(jì)的不是很合理。LSTM重新設(shè)計(jì)了關(guān)于memory的設(shè)計(jì)库北。
LSTM設(shè)計(jì)了三個(gè)門(mén)來(lái)控制爬舰,存儲(chǔ)單元的存儲(chǔ)與否以及怎么樣存儲(chǔ),將這三個(gè)們封裝成一個(gè)special Neuron, 已擁有四個(gè)輸入和一個(gè)輸出寒瓦。下面是他的結(jié)構(gòu):
他的核心結(jié)構(gòu)是長(zhǎng)這樣的情屹,其具體是怎么運(yùn)行的呢?
每一個(gè)輸入不僅是考慮x杂腰,還會(huì)考慮記憶和上一個(gè)單詞的輸出垃你。也可以堆疊出多層的LSTM神經(jīng)網(wǎng)絡(luò)。
可參考:
【1】https://www.freesion.com/article/68911223173/
(六)transformer 變形金剛
依然致力于解決seq to seq的問(wèn)題喂很。多用于文本和自然語(yǔ)言的處理惜颇。例如語(yǔ)音翻譯,多l(xiāng)abel分類(lèi)少辣,目標(biāo)檢測(cè)等
transformer的整體結(jié)構(gòu)可分為encoder 和 decoder兩個(gè)部分凌摄,這兩個(gè)部分都是前面所說(shuō)的self-attention機(jī)制的一個(gè)堆疊。
(1)encoder
inputs輸入過(guò)后有一個(gè)positional encoding漓帅,就是為了確保位置信息锨亏。然后輸入到多head的自注意力機(jī)制里面痴怨,與上面說(shuō)到的self-attention不同,他多了一個(gè)Feed Forward器予,是一個(gè)兩層的全連接浪藻,第一層的激活函數(shù)為ReLU,第二層不適用激活函數(shù)劣摇。
還有一個(gè)區(qū)別是多了一個(gè)add&norm
珠移,這是類(lèi)似于ResNet的一個(gè)殘差的設(shè)計(jì)。
(2)decoder
decoder的輸入與以往的神經(jīng)網(wǎng)絡(luò)不一樣末融,他不是一次性將答案輸給他钧惧,而是第一次輸入START,機(jī)器預(yù)測(cè)出“機(jī)”勾习。然后把預(yù)測(cè)出來(lái)的“S+機(jī)”作為輸入浓瞪,預(yù)測(cè)出下一個(gè)字“器”一直這樣執(zhí)行下去。但是我們也不難看出缺點(diǎn)巧婶,有可能就會(huì)一步錯(cuò)乾颁,步步錯(cuò)。
Masked Multi-Head Attention的結(jié)構(gòu)和Multi-Head Attention的結(jié)構(gòu)是一樣的艺栈,只是輸入時(shí)被掩蓋的數(shù)據(jù)英岭。
Encoder 的 Multi-Head Attention 的結(jié)構(gòu)和 Decoder 的 Multi-Head Attention 的結(jié)構(gòu)也是一樣的,只是 Decoder 的 Multi-Head Attention 的輸入來(lái)自兩部分湿右,K诅妹,V 矩陣來(lái)自Encoder的輸出,Q 矩陣來(lái)自 Masked Multi-Head Attention 的輸出毅人。
可參考:
【1】https://blog.csdn.net/qq_48314528/article/details/122160800
【2】http://www.reibang.com/p/6ced23376003
【3】https://zhuanlan.zhihu.com/p/403433120
李宏毅老師還介紹了很多transformer的變種吭狡,那就已經(jīng)聽(tīng)不懂了。
(3)各式各樣的attention
前面說(shuō)過(guò)self-attention會(huì)將序列長(zhǎng)度為N 的輸入輸出為一個(gè)N*N的矩陣丈莺。但是我們的輸入極有可能是一個(gè)非常非常長(zhǎng)的向量划煮,這樣的話,這個(gè)輸出的矩陣將會(huì)是非常大的缔俄,如果在用多個(gè)head的話弛秋,那計(jì)算量又將翻倍。這里講述了一些方法加速訓(xùn)練俐载。
第一種方式:Local Attention / Truncated Attention / Global Attention铐懊。就是說(shuō),可能我并不需要看到整個(gè)句子之間的關(guān)系瞎疼,我可以選擇性的去跳過(guò)一些計(jì)算點(diǎn)”诨或者說(shuō)贼急,不同的head茅茂,我們關(guān)注的點(diǎn)有不一樣。
第二種方法叫做:Clustering(分類(lèi)歸并)太抓。先把sequence的原始向量們計(jì)算出的query和key拿出來(lái), 進(jìn)行聚類(lèi), 把比較近的分類(lèi)在一起, 比較遠(yuǎn)的則分別屬于不同的clustering.然后在計(jì)算attention matrix的時(shí)候, 只有在query和key被歸類(lèi)到同一個(gè)clustering種類(lèi)里才會(huì)去計(jì)算他們的attention, 否則直接設(shè)置為0.這樣就可以加快attention matrix的計(jì)算.
但是即使是clustering也是基于人類(lèi)的理解來(lái)判斷的.
第三種:利用線性代數(shù)的方法空闲,加速運(yùn)算。
計(jì)算結(jié)果一樣走敌,計(jì)算量不一樣碴倾。
可參考:
【1】https://blog.csdn.net/q1347688324/article/details/123778585