深度学习网路已被视为多功能的工具。虽然它最初主要被用来进行影像的分类,不过深度学习网路也渐渐被运用在其他各式各样的任务。深度学习网路具备精确度以及处理速度—你不见得需要成为相关领域专家,它也能够帮助你执行庞大资料集的复杂分析。本文将列举几种可以考虑使用深度学习网路的任务案例。
文字分析
在这个范例,我们将分析推特(twitter)资料来判断某一个特定字词或片语所夹带的情绪是正面或负面。情绪分析可以被运用在许多实际的应用,比如品牌建立、政治活动、以及广告。
机器学习从以前到现在被普遍使用在情绪分析。一个机器学习模型能够分析个别字词,不过深度学习模型却可以用来完成句子,大幅地增加了精确度。
训练集之中包含了数以千计的推特讯息(tweets)范例,这些讯息被归类为正面或负面。以下为一个训练推特讯息的范例:
推特讯息(Tweet)
|
情绪(Sentiment)
|
“我喜欢@ health4uandpets你们最好!!”
|
正面 Positive
|
“@nicolerichie:你的照片非常甜蜜”
|
正面 Positive
|
“回去工作!”
|
负面 Negative
|
“刚刚有了最糟糕的演讲!”
|
负面 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 =猫(3,denoisedr,denoisedg,denoosedb);
imshow(denoisedrgb);
标题('denoised image')
快速地看一下来比较原图(无噪)和经过降噪的图片,可以得到还算合理的结果。
图4 : (左)原图(无噪);(右)经过降噪的图片。 |
|
我们再来把图片放大来检查几个细节:
rect = [120 440 130 130] ;
cropped_orig = imcrop(RGB,Rect);
cropped_denoise = incrop(denoisedrgb,rect);
imshowpair(cropped_orig,cropped_denoise,'montage');
图5放大后的影像显示降噪夹带了一些副作用—显然地,原图的解析度较高,特别是在屋顶和草的地方。接着,可以视图片的使用目的来决定降噪结果可以被接受,或者需要进一步的处理图片。
如果你考虑使用DnCNN来进行影像降噪,要记住它只能辨识被训练过的杂讯类型—在这个范例是高斯杂讯。如需要更大的弹性,你可以使用MATLAB和深度学习工具箱(Deep Learning Toolbox),利用预先定义的层级来训练自己的网路,或者完全客制一个降噪神经网路。
(本文作者Johanna Pingel任职于MathWorks公司)