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