深度學習網路已被視為多功能的工具。雖然它最初主要被用來進行影像的分類,不過深度學習網路也漸漸被運用在其他各式各樣的任務。深度學習網路具備精確度以及處理速度—你不見得需要成為相關領域專家,它也能夠幫助你執行龐大資料集的複雜分析。本文將列舉幾種可以考慮使用深度學習網路的任務案例。
文字分析
在這個範例,我們將分析推特(twitter)資料來判斷某一個特定字詞或片語所夾帶的情緒是正面或負面。情緒分析可以被運用在許多實際的應用,比如品牌建立、政治活動、以及廣告。
機器學習從以前到現在被普遍使用在情緒分析。一個機器學習模型能夠分析個別字詞,不過深度學習模型卻可以用來完成句子,大幅地增加了精確度。
訓練集之中包含了數以千計的推特訊息(tweets)範例,這些訊息被歸類為正面或負面。以下為一個訓練推特訊息的範例:
推特訊息(Tweet)
|
情緒(Sentiment)
|
“I LOVE @Health4UandPets u guys r the best!!”
|
正面 Positive
|
“@nicolerichie: your picture is very sweet”
|
正面 Positive
|
“Back to work!”
|
負面 Negative
|
“Just had the worst presentation ever!”
|
負面 Negative
|
我們移除像是”the”和”and”等無法幫助演算法學習的停用詞來清理資料。接下來,我們上傳一個長短期記憶(long short-term memory,LSTM)網路,它是一種能夠隨著時間學習相依性的遞歸神經網絡(recurrent neural network,RNN)。
LSTMs擅長分類順序和時間序列資料。而在分析文字時,LSTM不僅考慮到個別的字詞,也考慮到句子結構和字詞的組合。
該網路的MATLAB程式碼很簡單:
layers = [ sequenceInputLayer(inputSize)
lstmLayer(outputSize,'OutputMode','last')
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer ]
LSTM在GPU執行訓練的速度很快,只需要6分鐘就能處理完30個世代的資料(完整傳遞資料)。
我們所訓練的模型也可以使用在新的資料。舉例來說,我們可以利用模型來判斷在情緒分數和股價之間是否存在相互關係。
語音辨識
在這個範例,我們想要把演說音訊檔分類到相對應的字詞類別。乍看之下,這項任務的問題與影像分類完全不同,不過實際上卻相當類似。光譜圖可以被視為把1D音訊檔案中訊號轉換為2D視覺化(圖1)。我們可以使用它作為卷積神經網路(convolutional neural network,CNN)的輸入,如同我們使用一個「真正」的影像。
spectrogram()函式是可以把音訊檔案轉換為對應的時間定位頻率(time-localized frequency)的一種簡單方法。然而,演說是一種音訊處理的特定格式,它的重要特點被定位在特定頻率。由於想要讓CNN集中在這些定點,所以我們使用被設計來把目標鎖定在與演說最為相關的頻率區域的梅爾頻率倒頻譜(Mel-frequency cepstral)係數。
我們把訓練資料平均地分配到我們想要分類的字詞類別中。
為了降低錯誤的機率,我們加入一個類別來放置可能與期望類別混淆的字詞。比如說,期望的字詞是”on”時,像是”mom”、”dawn”、以及”won”等字詞會被放進”unknown”類別。這個網路並不需要知道這些字詞,因為他們不是要被辨識的單詞。
我們接下來定義一個CNN。由於我們以光譜圖作為輸入,因此我們可以把類似於影像CNN的架構用在這裡。
模型在經過訓練之後,它會將輸入影像(光譜圖)分類到適當的類別(圖2)。確認資料集(validation set)的準確度約為96%。
影像降噪
小波和濾波器一直以來都是常見的降噪方法。在這段範例,我們將看到預訓練(pretrained)影像降噪CNN(DnCNN)如何應用在一組包含高斯雜訊(Gaussian noise)的圖片(圖3)。
我們由下載一張內含高斯雜訊的圖片開始。
imshow(noisyRGB);
由於這是一張彩色的圖片,而網路是以灰階圖片訓練,這項處理唯一比較棘手的地方是要把圖片分離為三個單獨的通道:紅(red,R)、綠(green,G)、藍(blue,B)。
noisyR = noisyRGB(:,:,1);
noisyG = noisyRGB(:,:,2);
noisyB = noisyRGB(:,:,3);
載入預訓練的DnCNN網路。
net = denoisingNetwork('dncnn');
現在我們可以使用它來從每一個顏色通道移除雜訊。
denoisedR = denoiseImage(noisyR,net);
denoisedG = denoiseImage(noisyG,net);
denoisedB = denoiseImage(noisyB,net);
接著重新合併經過降噪的顏色通道來形成經過降噪的RGB圖片。
denoisedRGB = cat(3,denoisedR,denoisedG,denoisedB);
imshow(denoisedRGB);
title('Denoised Image')
快速地看一下來比較原圖(無噪)和經過降噪的圖片,可以得到還算合理的結果。
圖4 : (左)原圖(無噪);(右)經過降噪的圖片。 |
|
我們再來把圖片放大來檢查幾個細節:
rect = [120 440 130 130] ;
cropped_orig = imcrop(RGB,rect);
cropped_denoise = imcrop(denoisedRGB,rect);
imshowpair(cropped_orig,cropped_denoise,'montage');
圖5放大後的影像顯示降噪夾帶了一些副作用—顯然地,原圖的解析度較高,特別是在屋頂和草的地方。接著,可以視圖片的使用目的來決定降噪結果可以被接受,或者需要進一步的處理圖片。
如果你考慮使用DnCNN來進行影像降噪,要記住它只能辨識被訓練過的雜訊類型—在這個範例是高斯雜訊。如需要更大的彈性,你可以使用MATLAB和深度學習工具箱(Deep Learning Toolbox),利用預先定義的層級來訓練自己的網路,或者完全客製一個降噪神經網路。
(本文作者Johanna Pingel任職於MathWorks公司)