一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

基于矩陣的反向傳播

 昵稱11935121 2018-08-05

反向傳播是神經(jīng)網(wǎng)絡(luò)訓(xùn)練中常用的一種方法,它是通過對每一層的權(quán)值進(jìn)行調(diào)優(yōu)來實(shí)現(xiàn)輸出誤差的反向傳播,從而使損失函數(shù)最小化。

在本文中,我將用小批量表示反向傳播的矩陣方法,以及它如何加強(qiáng)神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí);我還將把這種方法與在小批上循環(huán)進(jìn)行比較,然后解釋小批處理大小如何影響學(xué)習(xí)速度和準(zhǔn)確性。

簡介:

實(shí)際上,小批量梯度下降是梯度下降的一種變體,它在處理(feed-forwarding/back- propagation)一系列訓(xùn)練數(shù)據(jù)后更新權(quán)重。所處理的示例數(shù)量稱為“mini-batch size”,是需要優(yōu)化的神經(jīng)網(wǎng)絡(luò)的超參數(shù)之一,因?yàn)槲覀儗⒖吹?,這個(gè)大小的值會影響學(xué)習(xí)的速度和準(zhǔn)確性。

給定一個(gè)具有多個(gè)示例(n)的mini-batch,循環(huán)方法包括循環(huán)該小批量,通過feed-forwarding然后一次back propagating 一個(gè)示例。因此,我們需要(n)次迭代來處理mini-batch的所有示例。

對于矩陣方法,我們將同時(shí)對所有示例進(jìn)行 feed-forward/back-propagate。因此,只有一次迭代就足以處理所有的小批處理示例。

基于矩陣的反向傳播

符號:

在進(jìn)一步討論之前,我們將指定一個(gè)符號來幫助我們引用神經(jīng)網(wǎng)絡(luò)的組件。我們以這個(gè)包含4個(gè)神經(jīng)元的隱藏層、3個(gè)神經(jīng)元的輸入層和2個(gè)神經(jīng)元的輸出層的網(wǎng)絡(luò)為例:

基于矩陣的反向傳播

我們通過以下方式表示權(quán)重,偏差和激活:

基于矩陣的反向傳播

因此,屬于層(1)的神經(jīng)元(j)的激活可以用以下方式寫入(其中σ是激活函數(shù)):

基于矩陣的反向傳播

方程-1

基于矩陣的Feed-Forwarding:

如果我們指定每層的權(quán)重矩陣(W l ),則等式-1可以以矩陣形式重寫,其中(w jk )是矩陣的行號(j)和列號(k)上的元素。給定層(l)的權(quán)重矩陣乘以前一層(l-1)的激活的向量(A),乘法的結(jié)果被加到屬于該層的偏差(B)的向量中。(l)最后,激活函數(shù)應(yīng)用于結(jié)果向量的每個(gè)元素。通過在我們的神經(jīng)網(wǎng)絡(luò)上應(yīng)用這個(gè)等式(1)等于3的等式,我們得到:

基于矩陣的反向傳播

方程-2

為了簡化方程式,我將插入向量(B)作為權(quán)重矩陣的第一列,并將(1)作為向量(A)的第一個(gè)元素插入,就像偏差正在扮演權(quán)重的角色一樣相應(yīng)的激活總是等于1:

基于矩陣的反向傳播

方程-3

實(shí)際上,我所展示的是前饋傳播,但一次只有一個(gè)例子。我們想要做的是同時(shí)提供大量的例子,以加快學(xué)習(xí)速度。為此,不是將權(quán)重矩陣乘以一個(gè)激活矢量,而是將其乘以矩陣(X),其中每列表示對應(yīng)于一個(gè)示例的激活矢量。后一個(gè)矩陣的列數(shù)是我們想要一次輸入的示例數(shù),換句話說,就是mini-batch size。如果我們選擇一個(gè)等于4的小批量大小作為示例,該方程-3成為:

基于矩陣的反向傳播

基于矩陣的反向傳播:

現(xiàn)在我們已經(jīng)了解矩陣方法如何用于前饋傳播,我們可以以相同的方式攻擊反向傳播:我們通過乘以權(quán)重矩陣一次前饋多個(gè)示例,然后返回 - 傳播誤差,始終遵循矩陣方法。為此,我們必須以矩陣形式重寫反向傳播的四個(gè)基本方程(見下圖):

基于矩陣的反向傳播

對于所表示的輸出層(L) ,我們寫出方程BP1中,如下圖,其中該矩陣的每個(gè)元素(G)是成本函數(shù)的導(dǎo)數(shù)(C)相對于所述激活(a)中,在這里我們正利用二次代價(jià)函數(shù),因此導(dǎo)數(shù)等于(aji-yji),其中(yji)是對應(yīng)于輸出神經(jīng)元(j)和示例(i)的標(biāo)簽。

對于矩陣(S),每個(gè)元素是相對于(Zij)的激活函數(shù)的導(dǎo)數(shù)。

得到的矩陣(D)的每個(gè)元素對應(yīng)于 輸出神經(jīng)元(j)和示例(i)的Δ 。

基于矩陣的反向傳播

BP1:矩陣形式

現(xiàn)在,對于表示為(l)的隱藏層,我們將來自于層(l + 1)的加權(quán)矩陣的轉(zhuǎn)數(shù)乘以來自相同層的矩陣(D),得到的結(jié)果是使用Hadamard乘積乘以層(l)的矩陣(S)。BP2的方程是

基于矩陣的反向傳播

BP2

考慮到所有這些,方程式BP3和BP4很容易導(dǎo)出

Matrix VS Loop方法:

為了測試循環(huán)方法,我將運(yùn)行數(shù)字識別程序,并 計(jì)算程序完成每個(gè)epoch所經(jīng)過的秒數(shù),以及測試的準(zhǔn)確性數(shù)據(jù)。至于矩陣方法,我將運(yùn)行相同代碼的修改版本,其中我已經(jīng)實(shí)現(xiàn)了矩陣形式(https://github.com/hindkls/Matrix-Based-Backpropagation/blob/master/Network1.py)。

神經(jīng)網(wǎng)絡(luò)從MNIST的訓(xùn)練數(shù)據(jù)中學(xué)習(xí),它有784個(gè)輸入神經(jīng)元,10個(gè)輸出神經(jīng)元和30個(gè)神經(jīng)元的隱藏層。通過將我們的程序設(shè)置為運(yùn)行超過30個(gè)epochs,學(xué)習(xí)率為η= 3.0且小批量大小為10,我們得到以下結(jié)果:

循環(huán)方法:

Looping over a mini-batch of size 10

--- 34.2879998684 seconds elapsed ---

Epoch 0: 9114 / 10000

--- 27.7209999561 seconds elapsed ---

Epoch 1: 9192 / 10000

--- 33.2569999695 seconds elapsed ---

Epoch 2: 9289 / 10000

...

--- 36.6579999924 seconds elapsed ---

Epoch 28: 9496 / 10000

--- 34.5559999943 seconds elapsed ---

Epoch 29: 9486 / 10000

矩陣方法:

Matrix approach with a mini-batch of size 10

--- 11.6560001373 seconds elapsed---

Epoch 0: 9090 / 10000

--- 11.375 seconds elapsed---

Epoch 1: 9273 / 10000

--- 11.4839999676 seconds elapsed---

Epoch 2: 9322 / 10000

...

--- 12.0789999962 seconds elapsed---

Epoch 28: 9486 / 10000

--- 11.3129999638 seconds elapsed---

Epoch 29: 9503 / 10000

通過比較結(jié)果,我們可以看到,使用矩陣方法處理每個(gè)epoch所經(jīng)過的平均秒數(shù)遠(yuǎn)小于使用循環(huán)方法所花費(fèi)的時(shí)間。這是因?yàn)榫仃嚪椒ɡ肅PU和GPU中的并行性來加速計(jì)算。實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的庫使用相同的方法,因?yàn)榫€性代數(shù)庫現(xiàn)在針對快速硬件進(jìn)行了優(yōu)化。

Mini-batch size

在本節(jié)中,我們將使用不同的Mini-batch size的值來看一下,看看它如何影響學(xué)習(xí)。為此,我們運(yùn)行我們的程序(具有矩陣形式的程序)進(jìn)行兩次試驗(yàn),第一次使用Mini-batch size等于1,第二次使用Mini-batch size等于600。

第一次:

Mini-Batch size = 1

--- 78.3759999275 seconds elapsed---

Epoch 0: 7669 / 10000

--- 81.4859998226 seconds elapsed---

Epoch 1: 8382 / 10000

--- 85.0969998837 seconds elapsed---

Epoch 2: 8311 / 10000

...

第二次:

Mini-Batch size = 600

--- 63.4069998264 seconds elapsed---

Epoch 0: 4206 / 10000

--- 67.6930000782 seconds elapsed---

Epoch 1: 5712 / 10000

--- 68.2200000286 seconds elapsed---

Epoch 2: 6570 / 10000

...

正如我們在這里看到的,當(dāng)我們運(yùn)行一個(gè)小批量大小為600的程序時(shí),學(xué)習(xí)速度要比當(dāng)大小為1時(shí)快一些,但是準(zhǔn)確度較低。這種行為背后的原因是,在第一次試驗(yàn)中,權(quán)重的更新比第二次試驗(yàn)要頻繁得多,因?yàn)樗鼈兪窃谔幚硗昝總€(gè)例子之后更新的,而在第二個(gè)試驗(yàn)中,直到所有600個(gè)例子都被處理后,權(quán)重才會更新。那么我們該怎么做呢?我們是否應(yīng)該選擇一個(gè)小的小批量尺寸并贏得準(zhǔn)確性?還是用一個(gè)大的小批量生產(chǎn),贏得速度卻失去精度?

我們需要做的,是找到一個(gè)速度和精度之間的折中的mini-batch size值,太小,我們不利用快速矩陣乘法,太大,我們不經(jīng)常更新我們的權(quán)重。

現(xiàn)在,您可能認(rèn)為學(xué)習(xí)速度與準(zhǔn)確性并不重要,因?yàn)樽罱K我們將達(dá)到良好的準(zhǔn)確度,但請看一下我們運(yùn)行的程序的結(jié)果是mini-batch size為10,你可以看到只要在第一個(gè)epoch,精度達(dá)到了90%,即權(quán)重沒有比大小等于1時(shí)更新很多。這與我們早先得出的結(jié)論并不矛盾。原因在于,當(dāng)我們選擇一個(gè)小型批次大小等于1時(shí),由于它對每個(gè)示例的影響都作出了響應(yīng),因此這種學(xué)習(xí)是最不明顯的。這就是為什么選擇一個(gè)優(yōu)化良好的mini-batch size,一方面可以幫助我們快速地收斂到一個(gè)好的最小值,因?yàn)槲覀兇_信權(quán)重是經(jīng)常更新的,但是是以一種合理的方式更新的,另一方面可以利用快速矩陣庫。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    2019年国产最新视频| 这里只有九九热精品视频| 国产性情片一区二区三区| 91超精品碰国产在线观看| 亚洲精品高清国产一线久久| 国产成人av在线免播放观看av | 国内欲色一区二区三区| 午夜福利网午夜福利网| 又色又爽又黄的三级视频| 香港国产三级久久精品三级| 欧美国产极品一区二区| 国产一级内射麻豆91| 国产精品香蕉免费手机视频| 欧美日韩亚洲国产综合网| 黄色国产一区二区三区| 亚洲男人的天堂色偷偷| 国产伦精品一区二区三区精品视频| 激情丁香激情五月婷婷| 欧美老太太性生活大片| 欧美小黄片在线一级观看| 国产一区二区三区四区中文| 午夜色午夜视频之日本| 国产欧美一区二区久久| 国产日韩中文视频一区| 中文字幕中文字幕在线十八区 | 日本人妻丰满熟妇久久| 夫妻性生活黄色录像视频| 欧美亚洲国产日韩一区二区| 微拍一区二区三区福利| 国产精品一区二区视频大全| 丝袜诱惑一区二区三区| 少妇淫真视频一区二区| 蜜桃传媒在线正在播放| 国产主播精品福利午夜二区| 亚洲精品一区三区三区| 国产一区二区精品高清免费| 日本一本在线免费福利| 超薄丝袜足一区二区三区| 九九热视频网在线观看| 国产欧美高清精品一区| 免费播放一区二区三区四区|