1.算法描述
深度學習(DL, Deep Learning)是機器學習(ML, Machine Learning)領域中一個新的研究方向澎灸,它被引入機器學習使其更接近于最初的目標——人工智能(AI, Artificial Intelligence)检碗。深度學習是學習樣本數(shù)據(jù)的內(nèi)在規(guī)律和表示層次,這些學習過程中獲得的信息對諸如文字辕近,圖像和聲音等數(shù)據(jù)的解釋有很大的幫助。它的最終目標是讓機器能夠像人一樣具有分析學習能力略号,能夠識別文字摇展、圖像和聲音等數(shù)據(jù)。 深度學習是一個復雜的機器學習算法瓤球,在語音和圖像識別方面取得的效果融欧,遠遠超過先前相關(guān)技術(shù)。深度學習在搜索技術(shù)卦羡,數(shù)據(jù)挖掘噪馏,機器學習,機器翻譯绿饵,自然語言處理欠肾,多媒體學習,語音拟赊,推薦和個性化技術(shù)刺桃,以及其他相關(guān)領域都取得了很多成果。深度學習使機器模仿視聽和思考等人類的活動吸祟,解決了很多復雜的模式識別難題瑟慈,使得人工智能相關(guān)技術(shù)取得了很大進步。
深度學習是一類模式分析方法的統(tǒng)稱欢搜,就具體研究內(nèi)容而言封豪,主要涉及三類方法:
(1)基于卷積運算的神經(jīng)網(wǎng)絡系統(tǒng),即卷積神經(jīng)網(wǎng)絡(CNN)炒瘟。
(2)基于多層神經(jīng)元的自編碼神經(jīng)網(wǎng)絡吹埠,包括自編碼( Auto encoder)以及近年來受到廣泛關(guān)注的稀疏編碼兩類( Sparse Coding)。
(3)以多層自編碼神經(jīng)網(wǎng)絡的方式進行預訓練疮装,進而結(jié)合鑒別信息進一步優(yōu)化神經(jīng)網(wǎng)絡權(quán)值的深度置信網(wǎng)絡(DBN)缘琅。
通過多層處理,逐漸將初始的“低層”特征表示轉(zhuǎn)化為“高層”特征表示后廓推,用“簡單模型”即可完成復雜的分類等學習任務刷袍。由此可將深度學習理解為進行“特征學習”(feature learning)或“表示學習”(representation learning)。
以往在機器學習用于現(xiàn)實任務時樊展,描述樣本的特征通常需由人類專家來設計呻纹,這成為“特征工程”(feature engineering)。眾所周知专缠,特征的好壞對泛化性能有至關(guān)重要的影響雷酪,人類專家設計出好特征也并非易事;特征學習(表征學習)則通過機器學習技術(shù)自身來產(chǎn)生好特征涝婉,這使機器學習向“全自動數(shù)據(jù)分析”又前進了一步哥力。
近年來,研究人員也逐漸將這幾類方法結(jié)合起來,如對原本是以有監(jiān)督學習為基礎的卷積神經(jīng)網(wǎng)絡結(jié)合自編碼神經(jīng)網(wǎng)絡進行無監(jiān)督的預訓練吩跋,進而利用鑒別信息微調(diào)網(wǎng)絡參數(shù)形成的卷積深度置信網(wǎng)絡寞射。與傳統(tǒng)的學習方法相比,深度學習方法預設了更多的模型參數(shù)锌钮,因此模型訓練難度更大桥温,根據(jù)統(tǒng)計學習的一般規(guī)律知道,模型參數(shù)越多轧粟,需要參與訓練的數(shù)據(jù)量也越大策治。
在無監(jiān)督預訓練出現(xiàn)之前,訓練深度神經(jīng)網(wǎng)絡通常非常困難兰吟,而其中一個特例是卷積神經(jīng)網(wǎng)絡通惫。卷積神經(jīng)網(wǎng)絡受視覺系統(tǒng)的結(jié)構(gòu)啟發(fā)而產(chǎn)生。第一個卷積神經(jīng)網(wǎng)絡計算模型是在Fukushima(D的神經(jīng)認知機中提出的混蔼,基于神經(jīng)元之間的局部連接和分層組織圖像轉(zhuǎn)換履腋,將有相同參數(shù)的神經(jīng)元應用于前一層神經(jīng)網(wǎng)絡的不同位置,得到一種平移不變神經(jīng)網(wǎng)絡結(jié)構(gòu)形式惭嚣。后來遵湖,Le Cun等人在該思想的基礎上,用誤差梯度設計并訓練卷積神經(jīng)網(wǎng)絡晚吞,在一些模式識別任務上得到優(yōu)越的性能延旧。至今,基于卷積神經(jīng)網(wǎng)絡的模式識別系統(tǒng)是最好的實現(xiàn)系統(tǒng)之一槽地,尤其在手寫體字符識別任務上表現(xiàn)出非凡的性能迁沫。
————————————————
MNIST是在機器學習領域中的一個經(jīng)典問題。該問題解決的是把28x28像素的灰度手寫數(shù)字圖片識別為相應的數(shù)字捌蚊,其中數(shù)字的范圍從0到9.下載后得到四個文件:
train-images-idx3-ubyte.gz集畅,訓練集,共 60,000 幅(28*28)的圖像數(shù)據(jù)缅糟;
train-labels-idx1-ubyte.gz挺智,訓練集的標簽信息(取值為 0-9),60,000*1
t10k-images-idx3-ubyte.gz窗宦,測試集(t: test, 10k: 10,000)赦颇,共 10,000 副(28*28)的圖像數(shù)據(jù)
t10k-labels-idx1-ubyte.gz,測試集的標簽呢信息(取值為 0-9)赴涵,10,000*1
2.仿真效果預覽
matlab2022a仿真結(jié)果如下:
3.MATLAB核心程序
load mnist_uint8;
%該模型采用的數(shù)據(jù)為mnist_uint8.mat沐扳,?
%含有70000個手寫數(shù)字樣本其中60000作為訓練樣本,10000作為測試樣本句占。?把數(shù)據(jù)轉(zhuǎn)成相應的格式,并歸一化躯嫉。
train_x = double(reshape(train_x',28,28,60000))/255;
test_x = double(reshape(test_x',28,28,10000))/255;
train_y = double(train_y');
test_y = double(test_y');
%% ex1 Train a 6c-2s-12c-2s Convolutional neural network
%will run 1 epoch in about 200 second and get around 11% error.
%With 100 epochs you'll get around 1.2% error
%設置網(wǎng)絡結(jié)構(gòu)及訓練參數(shù)
rand('state',0)
cnn.layers = {
struct('type', 'i') %input layer
struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer
struct('type', 's', 'scale', 2) %sub sampling layer
struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer
struct('type', 's', 'scale', 2) %subsampling layer
};
%訓練選項纱烘,alpha學習率(不用)杨拐,batchsize批訓練中樣本的數(shù)量,numepochs迭代次數(shù)擂啥。
opts.alpha = 1;
opts.batchsize = 50;
opts.numepochs = 5;
%初始化網(wǎng)絡哄陶,對數(shù)據(jù)進行批訓練,驗證模型準確率
cnn = cnnsetup(cnn, train_x, train_y);
cnn = cnntrain(cnn, train_x, train_y, opts);
[er, bad] = cnntest(cnn, test_x, test_y)
1-er