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