網(wǎng)絡(luò)上深度學(xué)習(xí)相關(guān)博客教程質(zhì)量參差不齊杠输,很多細(xì)節(jié)很少有文章提到,所以本著夯實(shí)深度學(xué)習(xí)基礎(chǔ)的想法寫(xiě)下此系列博文。
本文會(huì)從神經(jīng)網(wǎng)絡(luò)的概述碘勉、不同框架的公式推導(dǎo)和對(duì)應(yīng)的基于numpy的Python代碼實(shí)現(xiàn)等方面進(jìn)行干貨的講解。如有不懂之處歡迎在評(píng)論留言奇瘦,本人也初學(xué)機(jī)器學(xué)習(xí)與深度學(xué)習(xí)不久棘催,有不足之處也請(qǐng)歡迎我聯(lián)系。:)
歡迎到我的個(gè)人博客
推薦書(shū)籍與視頻教程:
《機(jī)器學(xué)習(xí)》--周志華
《Deep learning》--Ian Goodfellow耳标、Yoshua Bengio 和 Aaron Courville
李宏毅深度學(xué)習(xí)視頻課程-youtube Bilibili
神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)是由具有適應(yīng)性的簡(jiǎn)單單元組成的廣泛并行互連的網(wǎng)絡(luò)醇坝,它的組織能夠模擬生物神經(jīng)系統(tǒng)對(duì)真實(shí)世界物體所作出的交互反應(yīng)。
神經(jīng)網(wǎng)絡(luò)最基本的組成是神經(jīng)元模型次坡,每個(gè)神經(jīng)元與其他神經(jīng)元相連呼猪,神經(jīng)元接受到來(lái)自 個(gè)其他神經(jīng)元傳遞過(guò)來(lái)的輸入信號(hào),這些信號(hào)通過(guò)帶有權(quán)重的連接進(jìn)行傳遞贸毕,神經(jīng)元接收到的總輸入值將于閾值進(jìn)行比較郑叠,然后通過(guò)“激活函數(shù)”處理產(chǎn)生輸出。把許多神經(jīng)元按一定層次結(jié)構(gòu)連接起來(lái)就得到了神經(jīng)網(wǎng)絡(luò)明棍。
感知機(jī)模型
感知機(jī)模型(Perceptron)由兩層神經(jīng)元組成乡革,分別是輸入層與輸出層。
感知機(jī)模型是最為基礎(chǔ)的網(wǎng)絡(luò)結(jié)構(gòu)摊腋,其計(jì)算形式如下
其中 為激活函數(shù)沸版。我們先假設(shè)
是階躍函數(shù)(Step function)。
def sign(out):
"""
y = sign(w·x + b)
:param out - the result of w·x + b
:return: y
"""
if out >= 0:
return 1
else:
return -1
感知機(jī)的學(xué)習(xí)規(guī)則非常簡(jiǎn)單兴蒸,對(duì)于訓(xùn)練樣本 视粮,若當(dāng)前感知機(jī)的輸出為
,則感知機(jī)參數(shù)更新方式如下
其中 稱為學(xué)習(xí)率(learning rate)
下面我們使用Python來(lái)實(shí)現(xiàn)感知機(jī)進(jìn)行分類(lèi):
# 初始化變量w,b
w = np.zeros(shape=data[0].shape)
b = np.zeros(shape=label[0].shape)
def update(x, y, learning_rate):
"""
當(dāng)發(fā)現(xiàn)誤分類(lèi)點(diǎn)時(shí)橙凳,更新參數(shù)w,b.
更新方法:
w = w + learning_rate * x * y
b = b + learning_rate * y
:param x: 誤分類(lèi)點(diǎn)坐標(biāo)
:param y: 誤分類(lèi)點(diǎn)正確分類(lèi)標(biāo)簽
:return: None
"""
global w, b
w = w + learning_rate * x * y
b = b + learning_rate * y
假設(shè)訓(xùn)練集是線性可分的蕾殴。更新過(guò)程便是,遍歷全部的訓(xùn)練實(shí)例岛啸,通過(guò)感知機(jī)的計(jì)算方式計(jì)算出結(jié)果 與對(duì)應(yīng)標(biāo)簽進(jìn)行比較(感知機(jī)標(biāo)簽一般為 1 和 -1)钓觉,如果誤分便使用
updata()
進(jìn)行參數(shù)更新。下圖是感知機(jī)線性分類(lèi)的擬合過(guò)程坚踩。
隨意寫(xiě)的訓(xùn)練數(shù)據(jù)
# x
[[3.2, 0.8], [5, 5], [3, 3], [4, 3], [1, 1], [2, 2], [1, 4]]
# y
[-1, 1, 1, 1, -1, -1, -1]
感知機(jī)只有輸入層和輸出層荡灾,且只有輸出層神經(jīng)元進(jìn)行激活處理,即只有一層功能神經(jīng)元瞬铸,其學(xué)習(xí)能力非常有限批幌。如果問(wèn)題是非線性可分問(wèn)題,那么感知機(jī)會(huì)發(fā)生振蕩嗓节,無(wú)法收斂荧缘。
多層網(wǎng)絡(luò)
為了解決非線性可分問(wèn)題,那么便需要采用多層功能神經(jīng)元拦宣,如簡(jiǎn)單的兩層感知機(jī)胜宇。如圖
其中輸入層與輸出層之間一層被稱為隱藏層(隱含層)耀怜,隱藏層和輸出層都是擁有激活函數(shù)的功能神經(jīng)元。一般情況下桐愉,隱藏層可以有多層财破,同層神經(jīng)元之間不存在連接,也不存在跨層連接从诲。這樣的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)被稱為多層前饋神經(jīng)網(wǎng)絡(luò)(multi-layer feedforward neural networks)
因多層功能神經(jīng)元的存在左痢,多層網(wǎng)絡(luò)的學(xué)習(xí)能力要強(qiáng)得多,同時(shí)簡(jiǎn)單的感知機(jī)學(xué)習(xí)規(guī)則顯然已經(jīng)無(wú)法滿足要求系洛。更強(qiáng)大的學(xué)習(xí)算法俊性,誤差逆?zhèn)鞑?error BackPropagation)算法,即BP算法便是最成功的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法描扯。
TODO
在下一篇博文中定页,我們將使用BP算法來(lái)實(shí)現(xiàn)“全連接網(wǎng)絡(luò)”。