深度學(xué)習(xí)DL
深度學(xué)習(xí)(deep learning)是機(jī)器學(xué)習(xí)的一個(gè)分支,是伴隨著大數(shù)據(jù)與云計(jì)算技術(shù)的崛起而快速發(fā)展起來的,并在計(jì)算機(jī)視覺、語言等感知領(lǐng)域迅速取得成功。DL源于對人工神經(jīng)網(wǎng)絡(luò)的研究,起源算法是感知機(jī)(perceptron)。深度學(xué)習(xí)網(wǎng)絡(luò)通過神經(jīng)元從輸入數(shù)據(jù)中提取特征,并通過組合低層特征形成更加抽象的高層特征(表示),以發(fā)現(xiàn)數(shù)據(jù)的分布式特征,從而達(dá)到人們對數(shù)據(jù)進(jìn)行分類、回歸的目的。
深度學(xué)習(xí)的幾種基本結(jié)構(gòu):卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)、編碼器-解碼器框架(Encoder-Decoder)、注意力機(jī)制(Attention)。
CNN是一種多層神經(jīng)網(wǎng)絡(luò),擅長處理圖像,特別是大圖像的ML問題,它通過一系列方法使數(shù)據(jù)量龐大的圖像識別問題不斷降維最終將其訓(xùn)練。CNN包含卷積計(jì)算單元,通過不斷滑動卷積核的位置,對相應(yīng)數(shù)據(jù)區(qū)域進(jìn)行加權(quán)求和,常見的卷積計(jì)算單元有一位卷積CNN1D、二維卷積CNN2D,通常CV領(lǐng)域用CNN2D,NLP領(lǐng)域用CNN1D。CNN最早最經(jīng)典的網(wǎng)絡(luò)是LeNet,包含數(shù)據(jù)輸入層、卷積計(jì)算層、激活層、池化層和全連接層。數(shù)據(jù)在進(jìn)入網(wǎng)絡(luò)前要預(yù)處理,一般為去均值、歸一化、PCA/白化等。
卷積層完成特征抽取,池化層降低數(shù)據(jù)維度,抽取最關(guān)鍵或者綜合地特征信息,有平均池化和最大池化。卷積層和池化層通過配合組成多個(gè)卷積組,并逐層提取特征,最終通過若干個(gè)全連接層完成分類。全連接層指層中每個(gè)節(jié)點(diǎn)都會連接它下一層的所有節(jié)點(diǎn),它對提取的特征進(jìn)行線性組合以得到輸出,本身不具備特征提取能力,而是利用現(xiàn)有的高階特征完成學(xué)習(xí)目標(biāo)。激活層主要用于為網(wǎng)絡(luò)層增加非線性變換,一般是非線性函數(shù),對卷積層的輸出進(jìn)行非線性映射,進(jìn)而給CNN非線性映射學(xué)習(xí)能力,進(jìn)行表達(dá)更復(fù)雜的信息特征。
RNN中每一個(gè)循環(huán)單元除了要接收該位置的信息,還要接收將上一個(gè)循環(huán)單元的輸出作為輸入,計(jì)算對應(yīng)當(dāng)前時(shí)刻的預(yù)測概率并將傳遞給下一時(shí)刻的信息作為輸出。這種方式使RNN保持了長距離額上下文信息,天然符合序列任務(wù),很適用于NLP。在訓(xùn)練過程中,由于使用了反向傳播算法(本質(zhì)就是鏈?zhǔn)揭?guī)則,大大簡化了求梯度的過程,因?yàn)樘荻认陆颠^程中需要大量的梯度運(yùn)算),梯度值在不同的時(shí)刻會以乘法的形式進(jìn)行累積,最終會出現(xiàn)梯度爆炸或梯度消失的問題(可以采用梯度裁剪方法緩解)。
針對這些問題,人們提出LSTM(Long Short Term Memory)和GRU(Gate Recurrent Unit)等結(jié)構(gòu)。LSTM在RNN基礎(chǔ)上增加了細(xì)胞狀態(tài)(cell state),來直接傳遞相鄰時(shí)刻之間的信息。
由于細(xì)胞狀態(tài)下反向傳播的梯度不會消失,因此緩解了梯度消失問題,同時(shí)LSTM還引入了采用Sigmoid激活的門控機(jī)制(遺忘門、輸入門與輸出門),來分別控制上一時(shí)刻的細(xì)胞狀態(tài)、輸入信息及輸出信息的進(jìn)一步傳遞,從而實(shí)現(xiàn)長短期記憶。GRU對LSTM進(jìn)行了簡化,將細(xì)胞狀態(tài)和隱藏狀態(tài)合并,將遺忘門與輸入門合二為一,降低了計(jì)算復(fù)雜度,由于LSTM和GRU的門控單元是信息經(jīng)過多次Sigmoid激活(導(dǎo)數(shù)小于1),所以緩解了梯度爆炸問題。RNN還提供了多對一和多對多的任務(wù)結(jié)構(gòu)。但是RNN保持的長距離信息有時(shí)不是我們想要的,如何選擇性地保留信息是進(jìn)一步優(yōu)化的關(guān)鍵。
編碼器-解碼器框架(Encoder-Decoder) 也被稱為Seq2Seq模型,其中編碼器負(fù)責(zé)對輸入序列進(jìn)行編碼,計(jì)算特征張量;解碼器接收特征張量,輸出目標(biāo)序列。兩者通常都使用RNN。
為了選擇性保留信息,注意力機(jī)制(Attention) 應(yīng)運(yùn)而生。它首先將編碼器的全部隱藏狀態(tài)(bs,len,dim)與t時(shí)刻輸入解碼器的詞向量(bs,dim)做矩陣乘法,并在進(jìn)行SoftMax歸一化后,得到注意力權(quán)重(bs,len)。然后,將注意力權(quán)重與編碼器的全部隱藏狀態(tài)(bs,len,dim)再做矩陣乘法,得到上下文向量(bs,dim)。
最后,該向量與t時(shí)刻輸入解碼器的詞向量進(jìn)行拼接,再被輸入解碼器的RNN進(jìn)行訓(xùn)練。通過注意力機(jī)制,解碼器可以選擇性地獲得編碼器的隱藏狀態(tài)信息,提高訓(xùn)練效率。使用稠密向量計(jì)算注意力權(quán)重的稱為軟注意力機(jī)制,使用獨(dú)熱編碼向量的稱為硬注意力機(jī)制。
計(jì)算機(jī)視覺CV
計(jì)算機(jī)視覺即利用計(jì)算機(jī)來模擬人的視覺,是計(jì)算機(jī)的“看”,官方定義是:基于感知圖像做出對客觀對象和場景有用的決策。CV處理的對象是圖像和視頻,本質(zhì)就是圖像,因?yàn)橐曨l就是圖像組成的。CV的主要任務(wù)有5種:圖像分類、目標(biāo)檢測、目標(biāo)跟蹤、語義分割、實(shí)例分割。
現(xiàn)代的CV方法基本都由深度神經(jīng)網(wǎng)絡(luò)組成,尤其是卷積神經(jīng)網(wǎng)絡(luò)。大名鼎鼎的ImageNet數(shù)據(jù)集是CV的重要推動者,改變了AI領(lǐng)域人們對數(shù)據(jù)集的認(rèn)識。以往CV一般采用梯度方向直方圖(HOG)、尺度不變特征變換(SIFT)等傳統(tǒng)的特征提取與淺層模型組合的方法。如今在AI的浪潮下,CV逐漸轉(zhuǎn)向以CNN為代表的端到端DL模型。
一般的視頻處理過程是先分幀得到圖片,對圖片進(jìn)行處理(灰度處理、高清分辨率重建等),再將處理后的圖片合成視頻。小常識,圖片中每個(gè)像素的顏色有紅綠藍(lán)三個(gè)顏色變量來調(diào)節(jié)(RGB),當(dāng)R=G=B時(shí)圖片變成灰度圖片,灰度圖像顯示從最暗的黑色到最亮的白色的灰度,一般有256階(因?yàn)镽BG分別由8位數(shù)表示,所以R=G=B有2的8次方種組合),最簡單的灰度處理方法就是RGB三值都取(R+G+B)/3。超分辨率處理算法傳統(tǒng)使用雙線性插值,即利用目標(biāo)像素周圍的四個(gè)點(diǎn)來做預(yù)測,且離目標(biāo)位置越近的點(diǎn)的權(quán)重越大,為了更加精確,預(yù)測模型會很復(fù)雜,上萬個(gè)模型參數(shù)必須依靠ML方法來優(yōu)化,常用的有SRCNN、FSRCNN、ESPCN。
自然語言處理NLP
自然語言處理主要研究實(shí)驗(yàn)人和計(jì)算機(jī)之間用自然語言進(jìn)行有效通信的各種理論和方法,涉及語言學(xué)、計(jì)算機(jī)科學(xué)、邏輯學(xué)等等,主要任務(wù)包括自然語言理解NLU和自然語言生成NLG。
字和詞是人類語言的基本單位,為了讓計(jì)算機(jī)理解人類語言,就必須考慮如何在計(jì)算機(jī)系統(tǒng)中表示字和詞。通常,將字和詞映射為一組反映其語義特征的實(shí)數(shù)向量,稱為詞向量,有獨(dú)熱表示和分布表示。獨(dú)熱編碼相當(dāng)于給每個(gè)字詞分配一個(gè)唯一的id,這種稀疏編碼不能反映字詞背后蘊(yùn)含的語義信息,而且占用大量內(nèi)存。
分布表示將字詞表示為一個(gè)定長的稠密向量,由于稠密向量之間可以進(jìn)行距離計(jì)算(相似度計(jì)算),因此可以反映字詞背后的語義信息。當(dāng)然,稠密向量不是隨意設(shè)置的,需要從句子、文檔中不斷學(xué)習(xí)得到,因此還需要對句子進(jìn)行建模,即語言模型。
語言模型是對句子進(jìn)行建模,并求解句子的概率分布。
傳統(tǒng)語言模型包括詞袋模型和n-gram模型。詞袋模型中數(shù)值只反映字詞出現(xiàn)的頻數(shù),與字詞的順序無關(guān),通常字詞的頻率反映了其在句子中的重要性。n-gram模型能更好地反映語義。某個(gè)單詞的概率是由其前面所有出現(xiàn)的單詞決定的,馬爾可夫假設(shè)某個(gè)時(shí)刻的狀態(tài)之和其之前的(n-1)個(gè)狀態(tài)有關(guān),這將大大簡化計(jì)算。n-gram模型通常采用極大似然估計(jì)來計(jì)算,只需要統(tǒng)計(jì)每個(gè)n-gram在訓(xùn)練集中的頻數(shù)即可。
神經(jīng)語言模型通過神經(jīng)網(wǎng)絡(luò)訓(xùn)練得到詞的分布,通常稱為詞嵌入。首先網(wǎng)絡(luò)通過SoftMax層輸出每個(gè)位置的全詞表分布,然后取對應(yīng)位置最大的概率輸出,并采用交叉熵作為損失函數(shù)訓(xùn)練。其中常用負(fù)采樣技術(shù),即先不進(jìn)行全詞表上的參數(shù)更新,而只對正樣本隨機(jī)選取的負(fù)樣本進(jìn)行采樣,然后根據(jù)這些采樣負(fù)樣本和正樣本計(jì)算損失函數(shù),從而更新正樣本的參數(shù)。經(jīng)典的神經(jīng)語言模型有Skip-Gram模型和CBOW模型。
Skip-Gram模型通過中心詞預(yù)測上下文窗口中的詞,它接受將處理為單詞索引的句子作為輸入,經(jīng)過Embedding層將索引轉(zhuǎn)換為對應(yīng)的詞向量。假設(shè)中心詞的上下文范圍為C窗口大小,則分別計(jì)算中心詞隱層張量與C個(gè)上下文詞對應(yīng)的損失,最終求和作為該中心詞的損失,并反向傳播回對應(yīng)的詞向量,從而進(jìn)行詞向量的學(xué)習(xí)與更新。
CBOW模型與Skip-Gram模型相反,它通過上下文中全部詞預(yù)測中心詞。計(jì)算上下文求和的隱層張量與中心詞對應(yīng)的?,并反向傳播回對應(yīng)的C個(gè)上下文詞向量,從而進(jìn)行詞向量的學(xué)習(xí)與更新。谷歌發(fā)布了提供Skip-Gram和CBOW訓(xùn)練的word2vec工具,可以高效計(jì)算靜態(tài)詞向量,挖掘詞之間的關(guān)系。