? ? 請關(guān)注公眾號AI Engine
????好久不見!由于工作原因很久沒有更新文章了,希望不要掉粉哦~
?? ?小G同學(xué)最近利用工作之余還是學(xué)習(xí)了一下深度學(xué)習(xí)方面的知識,今天就把最近的學(xué)習(xí)心得分享給大家,也當是做一次總結(jié),可以說這也是我與深度學(xué)習(xí)的初見。
? ? 深度學(xué)習(xí)在近年來作為人工智能領(lǐng)域最重要的進展,在很多方面也作出了卓越的貢獻。尤其在這個DT時代,深度學(xué)習(xí)的能力顯得越發(fā)的重要。本文還是秉著一貫的作風:實事求是,只嘮干貨。所以下面解答幾個問題,為我解答,也希望可以為您解答:
?? ??? ?1.機器學(xué)習(xí)和深度學(xué)習(xí)的關(guān)系和區(qū)別是什么?
?? ??? ?答:在回答這個問題之前,大家請先看一幅圖片。
在這幅圖片中我們似乎是可以粗略的看到二者之間的關(guān)系的,深度學(xué)習(xí)應(yīng)該是屬于機器學(xué)習(xí)的范疇內(nèi)的。對機器學(xué)習(xí)有所了解的同學(xué)應(yīng)該已經(jīng)清楚監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)了(當然也有半監(jiān)督學(xué)習(xí),這里先暫時不提),那么深度學(xué)習(xí)與它們之間到底有什么區(qū)別呢?別著急,我們來高度概括一下機器學(xué)習(xí)。我們將機器學(xué)習(xí)領(lǐng)域分為四個象限,同時將’知識’這個事物從統(tǒng)計和推理這兩個維度出發(fā),分成4類。我們從第一象限出發(fā)到第二象限,這一過程是將一些無法統(tǒng)計的知識推理出來,那么推理的依據(jù)就是根據(jù)既可以統(tǒng)計又可以推理的知識進行經(jīng)驗學(xué)習(xí)(建模),然后面對不可統(tǒng)計的新數(shù)據(jù)時進行成功的推理。這個流程就可以利用很多機器學(xué)習(xí)的方法,比如決策樹、隨機森林、支持向量機等等。在縱向方面,我們從第一象限來到第三象限,也就是將一些可以統(tǒng)計但是無法推理的知識成果的表達出來,而我們利用的技術(shù)就可以是神經(jīng)網(wǎng)絡(luò)。比較經(jīng)典的例子就是阿爾法狗、計算機視覺、無人駕駛等。這就是傳統(tǒng)機器學(xué)習(xí)和深度學(xué)習(xí)的一個區(qū)別:解釋的方向有所不同
既然深度學(xué)習(xí)也屬于可統(tǒng)計的范疇,那么他和機器學(xué)習(xí)還差別在哪里呢?答案就是特征自尋。傳統(tǒng)機器學(xué)習(xí)通過人類分析、先驗知識等將數(shù)據(jù)預(yù)處理成n個特征,再基于特征工程的思想將n個特征進行精心篩選。所以算法工程師很辛苦,將絕大部分的時間花費在了選定特征上,但是好處就是無論結(jié)果好壞,我們處于在一個相對白盒之中,可以進行有效的調(diào)整,用一句雞湯話就叫做:冷暖自知。后來科學(xué)家們發(fā)現(xiàn)讓神經(jīng)網(wǎng)絡(luò)自己去選拔特征似乎算法效果更佳,于是特征表示學(xué)習(xí)逐漸興起,但是人類從此陷入了黑盒世界,可謂是 “有多少智能,就有多少人工!” 再后來表示學(xué)習(xí)的層次逐漸增加,套路越來越深,最終變成了深度學(xué)習(xí)!好了第一個問題我就算回答完了,我們來看看第二個問題~
?? ?? ? 2.神經(jīng)網(wǎng)絡(luò)究竟是什么?它長什么樣?
?? ?? ? 答:神經(jīng)網(wǎng)絡(luò)也可稱為多層感知機。剛下生(最基本)的神經(jīng)網(wǎng)絡(luò)就長這樣嬸兒的。隨著它逐漸長大,中間的隱藏層會逐漸增多,神經(jīng)網(wǎng)絡(luò)通過組合低層的特征,然后形成高層的表示,這些表示就可以描述被識別對象的高級屬性或者高級特征。這種生成數(shù)據(jù)的中間表示能力也是其他傳統(tǒng)機器學(xué)習(xí)所辦不到的。
文章的最后還是給大家一份簡單的神經(jīng)網(wǎng)絡(luò)demo,就叫做first_MLP吧:
# coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
#設(shè)定隨機種子
np.random.seed(7)
#導(dǎo)入并定義x,y數(shù)據(jù)
dataset = np.loadtxt('../../pima_data.csv',delimiter=',')
x = dataset[:,0:8]
y = dataset[:,8]
#創(chuàng)建模型
model = Sequential()
model.add(Dense(12,input_dim=8,activation='relu'))
model.add(Dense(8,activation='relu'))
model.add(Dense(1,activation='sigmoid'))
#編譯模型
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
#訓(xùn)練模型
model.fit(x,y,epochs=150,batch_size=20)
#評估模型
score = model.evaluate(x=x,y=y,verbose=1)
print('%s : %.2f%%'%(model.metrics_names[0],score[0]*100))
print('%s : %.2f%%'%(model.metrics_names[1],score[1]*100))