深度學(xué)習(xí)網(wǎng)路已被視為多功能的工具。雖然它最初主要被用來進(jìn)行影像的分類,不過深度學(xué)習(xí)網(wǎng)路也漸漸被運(yùn)用在其他各式各樣的任務(wù)。深度學(xué)習(xí)網(wǎng)路具備精確度以及處理速度—你不見得需要成為相關(guān)領(lǐng)域?qū)<遥材軌驇椭銏?zhí)行龐大資料集的複雜分析。本文將列舉幾種可以考慮使用深度學(xué)習(xí)網(wǎng)路的任務(wù)案例。
文字分析
在這個範(fàn)例,我們將分析推特(twitter)資料來判斷某一個特定字詞或片語所夾帶的情緒是正面或負(fù)面。情緒分析可以被運(yùn)用在許多實(shí)際的應(yīng)用,比如品牌建立、政治活動、以及廣告。
機(jī)器學(xué)習(xí)從以前到現(xiàn)在被普遍使用在情緒分析。一個機(jī)器學(xué)習(xí)模型能夠分析個別字詞,不過深度學(xué)習(xí)模型卻可以用來完成句子,大幅地增加了精確度。
訓(xùn)練集之中包含了數(shù)以千計(jì)的推特訊息(tweets)範(fàn)例,這些訊息被歸類為正面或負(fù)面。以下為一個訓(xùn)練推特訊息的範(fàn)例:
推特訊息(Tweet)
|
情緒(Sentiment)
|
“I LOVE @Health4UandPets u guys r the best!!”
|
正面 Positive
|
“@nicolerichie: your picture is very sweet”
|
正面 Positive
|
“Back to work!”
|
負(fù)面 Negative
|
“Just had the worst presentation ever!”
|
負(fù)面 Negative
|
我們移除像是”the”和”and”等無法幫助演算法學(xué)習(xí)的停用詞來清理資料。接下來,我們上傳一個長短期記憶(long short-term memory,LSTM)網(wǎng)路,它是一種能夠隨著時間學(xué)習(xí)相依性的遞歸神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)。
LSTMs擅長分類順序和時間序列資料。而在分析文字時,LSTM不僅考慮到個別的字詞,也考慮到句子結(jié)構(gòu)和字詞的組合。
該網(wǎng)路的MATLAB程式碼很簡單:
layers = [ sequenceInputLayer(inputSize)
lstmLayer(outputSize,'OutputMode','last')
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer ]
LSTM在GPU執(zhí)行訓(xùn)練的速度很快,只需要6分鐘就能處理完30個世代的資料(完整傳遞資料)。
我們所訓(xùn)練的模型也可以使用在新的資料。舉例來說,我們可以利用模型來判斷在情緒分?jǐn)?shù)和股價之間是否存在相互關(guān)係。
語音辨識
在這個範(fàn)例,我們想要把演說音訊檔分類到相對應(yīng)的字詞類別。乍看之下,這項(xiàng)任務(wù)的問題與影像分類完全不同,不過實(shí)際上卻相當(dāng)類似。光譜圖可以被視為把1D音訊檔案中訊號轉(zhuǎn)換為2D視覺化(圖1)。我們可以使用它作為卷積神經(jīng)網(wǎng)路(convolutional neural network,CNN)的輸入,如同我們使用一個「真正」的影像。

圖1 : (上)原始聲音訊號;(下)對應(yīng)光譜圖。 |
|
spectrogram()函式是可以把音訊檔案轉(zhuǎn)換為對應(yīng)的時間定位頻率(time-localized frequency)的一種簡單方法。然而,演說是一種音訊處理的特定格式,它的重要特點(diǎn)被定位在特定頻率。由於想要讓CNN集中在這些定點(diǎn),所以我們使用被設(shè)計(jì)來把目標(biāo)鎖定在與演說最為相關(guān)的頻率區(qū)域的梅爾頻率倒頻譜(Mel-frequency cepstral)係數(shù)。
我們把訓(xùn)練資料平均地分配到我們想要分類的字詞類別中。
為了降低錯誤的機(jī)率,我們加入一個類別來放置可能與期望類別混淆的字詞。比如說,期望的字詞是”on”時,像是”mom”、”dawn”、以及”won”等字詞會被放進(jìn)”unknown”類別。這個網(wǎng)路並不需要知道這些字詞,因?yàn)樗麄儾皇且槐孀R的單詞。
我們接下來定義一個CNN。由於我們以光譜圖作為輸入,因此我們可以把類似於影像CNN的架構(gòu)用在這裡。
模型在經(jīng)過訓(xùn)練之後,它會將輸入影像(光譜圖)分類到適當(dāng)?shù)念悇e(圖2)。確認(rèn)資料集(validation set)的準(zhǔn)確度約為96%。
影像降噪
小波和濾波器一直以來都是常見的降噪方法。在這段範(fàn)例,我們將看到預(yù)訓(xùn)練(pretrained)影像降噪CNN(DnCNN)如何應(yīng)用在一組包含高斯雜訊(Gaussian noise)的圖片(圖3)。
我們由下載一張內(nèi)含高斯雜訊的圖片開始。
imshow(noisyRGB);
由於這是一張彩色的圖片,而網(wǎng)路是以灰階圖片訓(xùn)練,這項(xiàng)處理唯一比較棘手的地方是要把圖片分離為三個單獨(dú)的通道:紅(red,R)、綠(green,G)、藍(lán)(blue,B)。
noisyR = noisyRGB(:,:,1);
noisyG = noisyRGB(:,:,2);
noisyB = noisyRGB(:,:,3);
載入預(yù)訓(xùn)練的DnCNN網(wǎng)路。
net = denoisingNetwork('dncnn');
現(xiàn)在我們可以使用它來從每一個顏色通道移除雜訊。
denoisedR = denoiseImage(noisyR,net);
denoisedG = denoiseImage(noisyG,net);
denoisedB = denoiseImage(noisyB,net);
接著重新合併經(jīng)過降噪的顏色通道來形成經(jīng)過降噪的RGB圖片。
denoisedRGB = cat(3,denoisedR,denoisedG,denoisedB);
imshow(denoisedRGB);
title('Denoised Image')
快速地看一下來比較原圖(無噪)和經(jīng)過降噪的圖片,可以得到還算合理的結(jié)果。

圖4 : (左)原圖(無噪);(右)經(jīng)過降噪的圖片。 |
|
我們再來把圖片放大來檢查幾個細(xì)節(jié):
rect = [120 440 130 130] ;
cropped_orig = imcrop(RGB,rect);
cropped_denoise = imcrop(denoisedRGB,rect);
imshowpair(cropped_orig,cropped_denoise,'montage');
圖5放大後的影像顯示降噪夾帶了一些副作用—顯然地,原圖的解析度較高,特別是在屋頂和草的地方。接著,可以視圖片的使用目的來決定降噪結(jié)果可以被接受,或者需要進(jìn)一步的處理圖片。
如果你考慮使用DnCNN來進(jìn)行影像降噪,要記住它只能辨識被訓(xùn)練過的雜訊類型—在這個範(fàn)例是高斯雜訊。如需要更大的彈性,你可以使用MATLAB和深度學(xué)習(xí)工具箱(Deep Learning Toolbox),利用預(yù)先定義的層級來訓(xùn)練自己的網(wǎng)路,或者完全客製一個降噪神經(jīng)網(wǎng)路。
(本文作者Johanna Pingel任職於MathWorks公司)