日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

FCNN-全连接神经网络

發(fā)布時(shí)間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FCNN-全连接神经网络 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

FCNN?全連接神經(jīng)網(wǎng)絡(luò)FCNN-全連接神經(jīng)網(wǎng)絡(luò)FCNN?經(jīng)網(wǎng)絡(luò)

實(shí)例公里里
012
124
236

公里和里之間存在著某種線性關(guān)系

公里 = Cx里

假設(shè),開(kāi)始C=1.5
輸入 100公里,得到計(jì)算值是150里,而真實(shí)值是200里
誤差值 = 真實(shí)值 - 計(jì)算值 = 200 - 150 = 50

既然知道錯(cuò)了,有了誤差,我們改如何調(diào)整C的值呢?

這里就是我們希望輸出值從150變得更大,因此增加了C

將C 稍微增大,變?yōu)?1.6 ,誤差就變?yōu)榱?0.

這就是使用誤差值的大小指導(dǎo)如何改變C的值

大誤差意味著大的修正值
小誤差意味著小的修正值


總結(jié):
一個(gè)模型接受一個(gè)輸入,并做出預(yù)測(cè),即輸出一個(gè)結(jié)果,我們根據(jù)結(jié)果和已知的真實(shí)數(shù)據(jù)進(jìn)行比較,得到誤差,從而調(diào)整內(nèi)部參數(shù),使預(yù)測(cè)更加精確。



預(yù)測(cè)模型:y = Ax

實(shí)例寬度長(zhǎng)度類(lèi)型
13.01.0B
21.03.0A

初始,A設(shè)為0.25

y = 0.25x


從圖中可知結(jié)果并不好。

觀察第一個(gè)訓(xùn)練樣本:寬度為3.0,長(zhǎng)度為1.0的B

使用預(yù)測(cè)模型得到的結(jié)果是:y = 0.25*3 = 0.75,而真實(shí)值是1.0,其誤差= 真實(shí)值-預(yù)測(cè)值 = 0.25

有了誤差,就可以用來(lái)調(diào)整參數(shù)A

但是我們也不希望y的輸出正好是1,線直接經(jīng)過(guò)樣本點(diǎn),而是希望線再往上升一點(diǎn)

所以我們的目標(biāo)的期望值可以是:1.1

誤差值 = (期望目標(biāo)值-實(shí)際輸出值)

E = 1.1 - 0.75 = 0.35

我們希望用誤差值E,來(lái)進(jìn)行參數(shù)A的優(yōu)化調(diào)整。要做到,就要找到E和A的關(guān)聯(lián)

我們這里就假設(shè)期望值為t,就是剛剛的1.1

t = (A+▲A)x,▲是一種增量符,可以是增加也可以是減少,表示微小的變化量

誤差值 = (期望目標(biāo)值-實(shí)際輸出值)

即E = t - y = (A+▲A)x - Ax = (▲A)x

即E = (▲A)x ,我們就找到了E和A的關(guān)聯(lián)

然后我們根據(jù)誤差E,我們需要將A調(diào)整多少呢?

改變一下公式,我們就得到了: ▲A=E/x


開(kāi)始更新最初的斜率

誤差值為0.35,x =3.0,根據(jù)公式:▲A=E/x = 0.35/3 = 0.1167

所以就是A=當(dāng)前值+ 變化增量▲A = 0.25 + 0.1167 = 0.3667

使用這個(gè)A( 0.3667),就得到了我們需要的期望值y = 1.1

然后我們用另一個(gè)實(shí)例數(shù)據(jù)(1.0,3.0)來(lái)訓(xùn)練,已知正確值為x=1.0和y=3.0

現(xiàn)在我們知道,進(jìn)過(guò)前一個(gè)實(shí)例數(shù)據(jù)的訓(xùn)練,得出線性模型:y=0.3667x

然后將x=1.0輸入模型,得到y(tǒng)=0.3667,這和y=3的真實(shí)值相差很大,因?yàn)槲覀円话悴粫?huì)希望模型直接過(guò)點(diǎn),而是希望直線再往下一點(diǎn),所以期望值設(shè)為2.9

我們得到誤差 E = 2.9 - 0.3667 = 2.5333

根據(jù)誤差E,調(diào)整A

▲A=E/x = 2.5333/1=2.5333

A = 0.3667 + 2.5333 = 2.9

得到線性模型:y = 2.9x,符合了(1,2.9)的期望

我們和之前的模型圖比較:

我們發(fā)現(xiàn)都不是我們的理想型(下圖):

這可怎么辦呢?

這里我們就可以思考發(fā)現(xiàn),如果我們一直這樣繼續(xù)操作,使用各個(gè)訓(xùn)練樣本進(jìn)行模型的改進(jìn),那么我們最終得到的直線只與最后一次訓(xùn)練樣本非常匹配,而實(shí)際上,最終改進(jìn)的直線不會(huì)顧及之前訓(xùn)練的所有樣本,是拋棄了所有先前訓(xùn)練樣本的學(xué)習(xí)成果。

由此引進(jìn)了學(xué)習(xí)率L

我們對(duì)于A進(jìn)行變化的時(shí)候,不再是直接加上▲A=E/x,而是對(duì)其加上一個(gè)調(diào)節(jié)系數(shù)L,▲A變成了L(E/x)

L的出現(xiàn),保留住了先前的學(xué)習(xí)成果,這樣有節(jié)制的調(diào)整可以抑制錯(cuò)誤和噪聲的影響

這里假設(shè)L = 0.5

我們?cè)僦貜?fù)上訴過(guò)程:

第一次實(shí)例訓(xùn)練時(shí):初始A = 0.25,使用第一個(gè)訓(xùn)練樣本,得到y(tǒng) = 0.25*3=0.75,期望值1.1,得到誤差值 = 1.1-0.75 = 0.35

這里▲A = L(E/x) = 0.5 *0.35/3.0 = 0.0583

更新后A = A + ▲A = 0.3083

第二次實(shí)例訓(xùn)練時(shí):x=1.0 ,期望y=2.9,使用第二個(gè)樣本訓(xùn)練,得到y(tǒng)=0.3083*1=0.3083,期望值2.9,得到誤差值=2.9-0.3083= 2.5917

這里▲A = L(E/x) = 0.5 *0.2917/1.0 = 1.2958

更新后A = A + ▲A = 0.3083+1.2957=1.6042

由上圖,我們就能看出引進(jìn)學(xué)習(xí)率的重要


神經(jīng)網(wǎng)路神經(jīng)網(wǎng)路經(jīng)網(wǎng)

前向傳播

這里進(jìn)行數(shù)據(jù)的假設(shè)和初始化

激活函數(shù)(Sigmoid):y=1/(1+e^(-x))

輸入1.0 和 0.5

w11 = 0.9

w12 = 0.2

w21 = 0.3

w22 = 0.8


單個(gè)神經(jīng)元的輸入,輸出的激活過(guò)程


第二層的節(jié)點(diǎn)1

x = (第一個(gè)節(jié)點(diǎn)的輸出*鏈接權(quán)重) + (第二個(gè)節(jié)點(diǎn)的輸出*鏈接權(quán)重)

x = 1*0.9 + 0.5+0.3 =1.05

y = 1/(1+e^(-1.05)) = 1/(1+0.3499) = 1/1.3499 = 0.7408


第二層的節(jié)點(diǎn)2

x = (第一個(gè)節(jié)點(diǎn)的輸出*鏈接權(quán)重) + (第二個(gè)節(jié)點(diǎn)的輸出*鏈接權(quán)重)

x = 1*0.2 + 0.5+0.8=0.6

y = 1/(1+e^(-0.6)) = 1/(1+0.5488) = 1/1.5488 = 0.6457


矩陣乘法:

(3,2),第一個(gè)數(shù)字代表行,第二個(gè)數(shù)字代表列,因?yàn)榧s定,我們稱(chēng)為2乘以3的矩陣


神經(jīng)網(wǎng)絡(luò)的矩陣乘法

X = W*I ,W是權(quán)重矩陣,I是輸入矩陣,X是組合調(diào)節(jié)后的信號(hào)

最后的輸出O = Sigmoid(X)

使用矩陣乘法進(jìn)行三層神經(jīng)網(wǎng)絡(luò)的展示

輸入矩陣I:

input_hidden之間的權(quán)重矩陣W(input_hidden):



hidden_output之間的權(quán)重矩陣W(hidden_output):



計(jì)算輸入到隱藏層的組合調(diào)節(jié)輸入值X(hidden):

X(hidden) = W(input_hidden) * I


在X(hidden)層中的元素上應(yīng)用Sigmoid激活函數(shù),生成中間隱藏層輸出矩陣O(hidden)


繼續(xù)計(jì)算最終層的組合調(diào)節(jié)輸入X = W*I

X(output) = W(hidden_output) * O(hidden)


X(output):

O(output)


下一步,將神經(jīng)網(wǎng)絡(luò)的輸出值與訓(xùn)練樣本中的真實(shí)值進(jìn)行比較,計(jì)算出誤差,繼而使用這個(gè)誤差值來(lái)調(diào)整神經(jīng)網(wǎng)絡(luò)本身,進(jìn)而改進(jìn)神經(jīng)網(wǎng)絡(luò)的輸出值。

誤差如何反向傳播誤差如何反向傳播

1.使用所有誤差進(jìn)行單權(quán)重更新(無(wú)意義)

2.等分誤差,進(jìn)行權(quán)重更新(不合實(shí)際)

3.根據(jù)權(quán)重對(duì)誤差進(jìn)行不等分,進(jìn)而進(jìn)行權(quán)重更新(較為合理)


多個(gè)輸出節(jié)點(diǎn)反向傳播誤差



神經(jīng)網(wǎng)絡(luò)通過(guò)調(diào)整鏈接權(quán)重進(jìn)行學(xué)習(xí)。

這種方法由誤差引導(dǎo),誤差就是訓(xùn)練數(shù)據(jù)所給出正確答案和實(shí)際輸出之間的差值。

然而與內(nèi)部節(jié)點(diǎn)相關(guān)聯(lián)的誤差并不顯而易見(jiàn)。

一種方法是按照鏈路權(quán)重的比例來(lái)分割輸出層的誤差,然后在每個(gè)內(nèi)部節(jié)點(diǎn)處重組這些誤差。

使用矩陣乘法進(jìn)行反向傳播誤差


使用如下矩陣的方法來(lái)向后傳播誤差

error(hidden) = W^T(hidden_output) * error(output)

如何更新(神經(jīng)網(wǎng)絡(luò)模型)權(quán)重

一個(gè)簡(jiǎn)單的三層,每層三個(gè)節(jié)點(diǎn)的神經(jīng)網(wǎng)絡(luò)的最后單個(gè)輸出節(jié)點(diǎn)的輸出值是上圖的公式:O(k)

能夠表示所有的權(quán)重如何生成神經(jīng)網(wǎng)絡(luò)輸出的數(shù)學(xué)表達(dá)式過(guò)于復(fù)雜,難以求解

解決措施:梯度下降法(gradient decent)


一個(gè)較復(fù)雜困難的函數(shù)

舉實(shí)例:用這個(gè)簡(jiǎn)單的例子來(lái)可視化說(shuō)明什么是梯度下降法

y表示誤差,我們希望能找到x,可以最小化y

我們對(duì)其使用梯度下降的方法

首先隨機(jī)初始化一個(gè)起點(diǎn),如下,當(dāng)前情況下的斜率為負(fù),我們希望沿著向下的方向,即沿著X軸向右,也就是稍微增加x的值,就這樣邁出了第一步

經(jīng)過(guò)一定的訓(xùn)練后,達(dá)到下面的情況

所處之處,斜率為正,因此我們向左移動(dòng),即稍微減少x的值,如圖向真實(shí)的最小值靠近了一些

我們往梯度相反的方向增加x值,正梯度意味著減少x,負(fù)梯度意味著增加x

我們?nèi)绱艘恢辈僮?#xff0c;直到幾乎不能改進(jìn)為止,這樣我們就確信到了最小值

最后我們也會(huì)遇見(jiàn)一個(gè)問(wèn)題,如果每次移動(dòng)的步幅太大,就會(huì)在最小值的地方來(lái)回反彈,所以到后期,我們需要逐漸減小步幅。


使用梯度下降法,我們一般不會(huì)使用代數(shù)計(jì)算出最小值

對(duì)于一元二次函數(shù)y=ax2+bx+c(a≠0)來(lái)說(shuō):

當(dāng) x=-b/2a 時(shí),有最值;且最值公式為:(4ac—b^2)/4a

當(dāng)a>0時(shí), 為最小值, 當(dāng)a<0時(shí), 為最大值。

當(dāng)函數(shù)有很多參數(shù)時(shí),這種方法才真正地顯示出它的亮點(diǎn)。y也許不單單取決于x,y也可能取決于a,b,c,d,e,f…

神經(jīng)網(wǎng)絡(luò)本身的輸出函數(shù)不是一個(gè)誤差函數(shù),但是由于誤差是真實(shí)值與實(shí)際輸出之間的差值,因此我們很容易可以把輸出函數(shù)變成誤差函數(shù)

觀察下表中的3種誤差

第一種誤差函數(shù)(目標(biāo)值-實(shí)際值),看似合理,卻顯然存在大問(wèn)題,因?yàn)檎?fù)誤差都是誤差,卻可以抵消

y = (a-b),a是實(shí)際值,b是目標(biāo)值

第二種誤差函數(shù)|目標(biāo)值-實(shí)際值|,這樣正負(fù)誤差就不能抵消,可能行得通,但是斜率在最小值附近不連續(xù),這樣梯度下降法就不能很好的發(fā)揮作用了,會(huì)在V型山谷附近來(lái)回跳動(dòng)

y = |a-b|,a是實(shí)際值,b是目標(biāo)值

第三種誤差函數(shù)是差的平方:(目標(biāo)值-實(shí)際值)^2,其優(yōu)點(diǎn)有三

  • 容易使用代數(shù)計(jì)算出梯度下降的斜率。·
  • 誤差函數(shù)平滑連續(xù),這使得梯度下降法很好地發(fā)揮作用——沒(méi)有間斷,也沒(méi)有突然的跳躍。
  • 越接近最小值,梯度越小,這意味著,如果我們使用這個(gè)函數(shù)調(diào)節(jié)步長(zhǎng),超調(diào)的風(fēng)險(xiǎn)就會(huì)變得較小。
  • 誤差函數(shù)是如何依賴(lài)于神經(jīng)網(wǎng)絡(luò)中的權(quán)重的

    下圖演示了一個(gè)權(quán)重對(duì)于神經(jīng)網(wǎng)絡(luò)誤差Error的影響

    下圖顯示了兩個(gè)鏈接權(quán)重

    目標(biāo)公式

    這個(gè)表達(dá)式表示了權(quán)重W(j,k)改變時(shí),誤差E是如何改變的。也就是誤差函數(shù)的斜率,也就是使用梯度下降法到達(dá)最小值的方向

    這里和一開(kāi)始的y=Ax,差就差在上面的是輸出和真實(shí)值的誤差函數(shù),而y=Ax就是輸出y


    首先,讓我們展開(kāi)誤差函數(shù),這是對(duì)目標(biāo)值和實(shí)際值之差的平方進(jìn)行求和,這是針對(duì)所有n個(gè)輸出節(jié)點(diǎn)的和。

    誤差函數(shù)根本就不需要對(duì)所有輸出節(jié)點(diǎn)求和。原因是節(jié)點(diǎn)的輸出只取決于所連 接的鏈接,就是取決于鏈接權(quán)重。

    現(xiàn)在有了一個(gè)相對(duì)簡(jiǎn)單的表達(dá)式



    把在前面的2 去掉。我們只對(duì)誤差函 數(shù)的斜率方向感興趣,這樣我們就可以使用梯度下降的方法,因此可以去 掉2。

    最后的神奇表達(dá)式,訓(xùn)練神經(jīng)網(wǎng)絡(luò)的關(guān)鍵

    我們還需要做最后一件事情。我們所得到的這個(gè)表達(dá)式,是為了優(yōu)化 隱藏層和輸出層之間的權(quán)重。現(xiàn)在,我們需要完成工作,為輸入層和隱藏 層之間的權(quán)重找到類(lèi)似的誤差斜率。

    Step1.第一部分的(目標(biāo)值-實(shí)際值)誤差,現(xiàn)在變成了隱藏層節(jié)點(diǎn)中重組的向后傳播誤差,正如在前面所看到的那樣。我們稱(chēng)之為e(j) 。

    Step2.sigmoid部分可以保持不變,但是內(nèi)部的求和表達(dá)式指的是前一層,因此求和的范圍是所有由權(quán)重調(diào)節(jié)的進(jìn)入隱藏層節(jié)點(diǎn)j的輸入。我們可以 稱(chēng)之為I(j) 。

    Step3.現(xiàn)在,最后一部分是第一層節(jié)點(diǎn)的輸出O(i) ,這碰巧是輸入信號(hào)。

    這種巧妙的方法,簡(jiǎn)單利用問(wèn)題中的對(duì)稱(chēng)性構(gòu)建了一個(gè)新的表達(dá)式, 避免了大量的工作。

    一直在努力達(dá)成的最終答案的第二部分如下所示,這是我們所得到誤差函數(shù)斜率,用于輸入層和隱藏層之間權(quán)重調(diào)整

    這樣我們就得出了誤差函數(shù)所有鏈接權(quán)重的斜率

    權(quán)重更新

    首先介紹一下學(xué)習(xí)因子α,作用就是避免被錯(cuò)誤的訓(xùn)練樣本拉得太遠(yuǎn)的一種方式,同時(shí)也為了保證權(quán)重不會(huì)由于持續(xù)的超調(diào)而在最小值附近來(lái)回?cái)[動(dòng)

    如果我們?cè)噲D按照矩陣乘法的形式進(jìn)行運(yùn)算,那么我們需要看看計(jì)算 的過(guò)程。為了有助于理解,我們將按照以前那樣寫(xiě)出權(quán)重變化矩陣的每個(gè) 元素。

    權(quán)重更新矩陣有如下的矩陣形式,這種形式可以讓我們通過(guò)計(jì) 算機(jī)編程語(yǔ)言高效地實(shí)現(xiàn)矩陣運(yùn)算

    權(quán)重更新實(shí)例



    1.第一項(xiàng)(t(k) -o(k) )得到誤差e1 = 0.8

    2.S函數(shù)內(nèi)的求和Σ(j) w(j,k) o(j) 為(2.0×0.4)+(3.0×0.5)= 2.3。

    3.sigmoid 1/(1 + e^-2.3 ) 為0.909。中間的表達(dá)式為0.909 *(1-0.909)= 0.083。

    4.由于我們感興趣的是權(quán)重w(1,1) ,其中j=1,因此最后一項(xiàng)o(j)也很簡(jiǎn)單, 也就是o(j) = 1 。此處,o(j) 值就是0.4。

    5.將這三項(xiàng)相乘,同時(shí)不要忘記表達(dá)式前的負(fù)號(hào),最后我們得 到-0.0265。

    6.如果學(xué)習(xí)率為0.1,那么得出的改變量為- (0.1 * -0.02650)= + 0.002650。因此,新的w(1,1) 就是原來(lái)的2.0加上0.00265等于2.00265。

    參考了《python實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)編程》

    總結(jié)

    以上是生活随笔為你收集整理的FCNN-全连接神经网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。