用通俗的話總的來說,就是利用大數(shù)據(jù)抽取規(guī)律,再利用規(guī)律去預(yù)測(cè)(回歸)、分類、聚類未知的輸入,得到輸出(結(jié)果)。 單說圖片識(shí)別: 這里面的大數(shù)據(jù)就是已知的輸入(圖片)和已知的結(jié)果(圖片的標(biāo)簽),抽取規(guī)律也就是相應(yīng)的算法(卷及神經(jīng)網(wǎng)絡(luò)),預(yù)測(cè)、分類、聚類就是得到圖片的結(jié)果(圖片識(shí)別)。 可以分為以下幾步: 第一步:數(shù)據(jù)的預(yù)處理。 圖片是由一個(gè)一個(gè)的像素組成的,就拿入門的案例說吧,MNIST數(shù)據(jù)集,是一個(gè)手寫數(shù)字的數(shù)據(jù)集,每一張圖片都是由28×28個(gè)像素點(diǎn)形成的。 就像這樣: 總共有60000張這樣的圖片,而圖片的標(biāo)簽(也就是結(jié)果)也是已知的(0~9),那么設(shè)輸入為x輸出為y, 計(jì)算機(jī)是無法讀懂圖片的,所以我們要將圖片轉(zhuǎn)換成計(jì)算機(jī)所能認(rèn)識(shí)的東東。 矩陣: x就是一個(gè)28×28的矩陣每一個(gè)點(diǎn)表示圖片中相應(yīng)位置的灰度。有的神經(jīng)網(wǎng)絡(luò)為了更簡化的計(jì)算,將28×28 的矩陣,轉(zhuǎn)換為一個(gè)1×784的向量(一維矩陣)。這里的x是28×28×1,這個(gè)1表示的是單通道,也就是只有一種顏色。如果是彩色圖片的話,那么就應(yīng)該是28×28×3,這個(gè)3表示的是RGB三個(gè)顏色通道。 y就是一個(gè)數(shù)字,0~9。 有些算法還會(huì)降x,y進(jìn)行歸一化,也就是轉(zhuǎn)換為0~1之間的矩陣、數(shù)字。 第二步:抽取特征。 卷積(特征提?。┑木唧w計(jì)算方法: 其中input為輸入,filter叫做卷積核(暫且理解為濾波器),output叫做特征圖,特征圖的個(gè)數(shù)和filter的個(gè)數(shù)是相同的(filter W0、filter W1)。既然是矩陣,那么可以設(shè)中間的參數(shù)是W,于是就有Wx+b = output。這里的W是我們最終要訓(xùn)練出來的。 計(jì)算方法: w0與x藍(lán)色區(qū)域做內(nèi)積(對(duì)應(yīng)位置相乘后相加): f1第1層 = 0×1+ 0×1+ 0×1 + 0×-1+ 1×-1+ 1×0 + 0×-1+1×1+1×0 = 0 f1第2層 = 0×-1+0×-1+0×1 +0×-1+0×1+1×0 +0×-1+2×1+2×0 = 2 f1第3層 = 0×1+0×0+0×-1+ 0×0+2×0+2×0+ 0×1+0×-1+0×-1+ = 0 那么根據(jù)神經(jīng)網(wǎng)絡(luò)得分函數(shù):f(x,w) = wx+b 這里的b =1 那么輸出的得分值就為f1+f2+f3+b = 0+2+0+1 =3 最右邊綠色的矩陣第1行,第1列,就是3 將卷積核在輸入矩陣滑動(dòng), 同理可以計(jì)算 這里的輸出叫做特征圖。 這里就可以看出,經(jīng)過卷積核Filter(濾波器),將圖片濃縮了,濃縮之后,再進(jìn)行一次非線性的處理,用一些非線性的函數(shù)將線性結(jié)果非線性化(叫做激活函數(shù)),這層叫作卷積層。 這里只是一層,大型數(shù)據(jù)集(輸入很多的情況)一層是不夠的,需要很多層,輸入-卷積-輸出-卷積-輸出........。 比如VGG-16,就有16個(gè)卷積層。 進(jìn)一步濃縮叫做池化層。 同樣有一個(gè)filter,將特征圖進(jìn)行MAX(取最大值)或者M(jìn)EAN(取均值),進(jìn)一步濃縮特征。 濃縮完特征之后,接著后面的層叫做全連接層。 就是將權(quán)重參數(shù)W(矩陣),分別乘以池化完成的結(jié)果,得到最終的分類結(jié)果比如前邊所說的0~9的手寫字體,要分10個(gè)類別,如果池化完成的結(jié)果是1×64,那么全連接層就應(yīng)該是64×10,最終得到1×10的矩陣,就是分類0~9的結(jié)果。 以上最重要的就是要求W,也就是最前邊說的,根據(jù)大數(shù)據(jù)找規(guī)律。 第三步:參數(shù)更新 那么還有問題,W是多少誰知道? 沒人知道,這里是根據(jù)計(jì)算機(jī)一步一步的試出來的, 先隨機(jī)的給出一組W,算出結(jié)果Y1,利用已知的x當(dāng)做輸入,用已知的y與y1坐差值,那么Y1-y就會(huì)有一個(gè)差值,就是預(yù)測(cè)值和真實(shí)值的差值。稱作損失函數(shù),有些叫做代價(jià)函數(shù)。當(dāng)代價(jià)函數(shù)最小的時(shí)候,預(yù)測(cè)值Y1和真實(shí)值y的差距越來越小,當(dāng)差距在我們可以接受的范圍內(nèi),那么就可以認(rèn)為,由權(quán)重參數(shù)W生成的Y1可以對(duì)輸入x進(jìn)行預(yù)測(cè)和分類。 那么如何讓損失函數(shù)最小呢?這里并不是求導(dǎo)后求極值點(diǎn),而是對(duì)損失函數(shù)求導(dǎo)數(shù),調(diào)整W,使得差值沿著導(dǎo)數(shù)的方向前進(jìn),最終達(dá)到極小值點(diǎn)。 這時(shí)候得到的W就是我們最終要的結(jié)果了。 第四步:利用參數(shù) 既然得到了W,我們就可以利用這個(gè)W,將一個(gè)未知結(jié)果的x輸入,從而得到通過W計(jì)算出的y,這個(gè)y就是圖片識(shí)別的結(jié)果。 現(xiàn)在有很多的開源深度學(xué)習(xí)框架,是各大著名公司封裝好的函數(shù)(已經(jīng)造好的輪子), 以下是一個(gè)卷積神經(jīng)網(wǎng)絡(luò)識(shí)別MNIST的小例子(基于google深度學(xué)習(xí)框架TensorFlow): 只是經(jīng)過了21次的參數(shù)更新,最終的識(shí)別準(zhǔn)確率在99%以上。 輸出結(jié)果: Extracting MNIST_data/train-images-idx3-ubyte.gz Extracting MNIST_data/train-labels-idx1-ubyte.gz Extracting MNIST_data/t10k-images-idx3-ubyte.gz Extracting MNIST_data/t10k-labels-idx1-ubyte.gz 第0次迭代,測(cè)試集準(zhǔn)確率是0.7688 第1次迭代,測(cè)試集準(zhǔn)確率是0.7831 第2次迭代,測(cè)試集準(zhǔn)確率是0.8829 第3次迭代,測(cè)試集準(zhǔn)確率是0.8883 第4次迭代,測(cè)試集準(zhǔn)確率是0.889 第5次迭代,測(cè)試集準(zhǔn)確率是0.8919 第6次迭代,測(cè)試集準(zhǔn)確率是0.8908 第7次迭代,測(cè)試集準(zhǔn)確率是0.893 第8次迭代,測(cè)試集準(zhǔn)確率是0.894 第9次迭代,測(cè)試集準(zhǔn)確率是0.8949 第10次迭代,測(cè)試集準(zhǔn)確率是0.8927 第11次迭代,測(cè)試集準(zhǔn)確率是0.8935 第12次迭代,測(cè)試集準(zhǔn)確率是0.8948 第13次迭代,測(cè)試集準(zhǔn)確率是0.9873 第14次迭代,測(cè)試集準(zhǔn)確率是0.9881 第15次迭代,測(cè)試集準(zhǔn)確率是0.9864 第16次迭代,測(cè)試集準(zhǔn)確率是0.9885 第17次迭代,測(cè)試集準(zhǔn)確率是0.9906 第18次迭代,測(cè)試集準(zhǔn)確率是0.9876 第19次迭代,測(cè)試集準(zhǔn)確率是0.9884 第20次迭代,測(cè)試集準(zhǔn)確率是0.9902 |
|