神經(jīng)網(wǎng)絡(luò)原來(lái)這么簡(jiǎn)單,機(jī)器學(xué)習(xí)入門貼送給你 | 干貨

發(fā)布時(shí)間:2024-07-30
本文經(jīng)ai新媒體量子位(公眾號(hào)id:qbitai)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。
你想學(xué)機(jī)器學(xué)習(xí)嗎?這里有一個(gè)入門貼適合你。
什么神經(jīng)網(wǎng)絡(luò)、隨機(jī)森林、計(jì)算機(jī)視覺通通一網(wǎng)打盡。
這個(gè)facebook軟件工程師做了一個(gè)入門貼。
專為基礎(chǔ)為零的初學(xué)者打造。
有基礎(chǔ)的同學(xué),也可以來(lái)看看加深一下理解。
我們就以神經(jīng)網(wǎng)絡(luò)為例先來(lái)一睹為快吧!
神經(jīng)網(wǎng)絡(luò)概論
作者說(shuō),神經(jīng)網(wǎng)絡(luò)并不復(fù)雜!
“神經(jīng)網(wǎng)絡(luò)”一詞很流行,人們通常認(rèn)為它很難,但其實(shí)要簡(jiǎn)單得多。
是不是這樣呢?先看再說(shuō)。
神經(jīng)網(wǎng)絡(luò)的理解主要分為三個(gè)部分,神經(jīng)元、神經(jīng)網(wǎng)絡(luò)的構(gòu)建、訓(xùn)練神經(jīng)網(wǎng)絡(luò)。
神經(jīng)元——神經(jīng)網(wǎng)絡(luò)的基本單元
這是2-input神經(jīng)元的樣子。
首先神經(jīng)元接受輸入x1、x2,進(jìn)行一些數(shù)學(xué)運(yùn)算以后,然后產(chǎn)生一個(gè)輸出y。
在神經(jīng)元里,通常會(huì)發(fā)生三件事:
1、每個(gè)輸入乘以相應(yīng)的權(quán)重;
2、將所有加權(quán)輸入加在一起,在加上一個(gè)偏差b;
3、導(dǎo)入一個(gè)激活函數(shù),得到輸出y。
通常來(lái)說(shuō),激活函數(shù)使用sigmoid函數(shù),也就是常說(shuō)的s型函數(shù),輸入任意值(-∞, ∞),最后輸出都能停留在0-1之間。
對(duì)此,他還舉了一個(gè)簡(jiǎn)單的例子。
以激活函數(shù)是s型函數(shù)、2輸入神經(jīng)元為例,設(shè)置參數(shù) w=[0,1] (w1=0,w2=1),b=4。
input:x=[2,3]
output:y=0.999
這也就是最為樸素的神經(jīng)網(wǎng)絡(luò)——前饋神經(jīng)網(wǎng)絡(luò)。
對(duì)此,作者還用python實(shí)現(xiàn)了整個(gè)過(guò)程。
importnumpyasnpdefsigmoid(x):#ouractivationfunction:f(x)=1/(1 e^(-x))return1/(1 np.exp(-x))classneuron:def__init__(self,weights,bias):self.weights=weightsself.bias=biasdeffeedforward(self,inputs):#weightinputs,addbias,thenusetheactivationfunctiontotal=np.dot(self.weights,inputs) self.biasreturnsigmoid(total)weights=np.array([0,1])#w1=0,w2=1bias=4#b=4n=neuron(weights,bias)x=np.array([2,3])#x1=2,x2=3print(n.feedforward(x))#0.9990889488055994 構(gòu)建神經(jīng)網(wǎng)絡(luò)
神經(jīng)元連接在一起就是神經(jīng)網(wǎng)絡(luò)。
兩個(gè)輸入,一個(gè)含有兩個(gè)神經(jīng)元的隱藏層,一個(gè)含有1個(gè)神經(jīng)元的輸出層就構(gòu)建了一個(gè)神經(jīng)網(wǎng)絡(luò)。
需要注意的是,可以用多層隱藏層。就比如,像這樣:
我們?nèi)砸陨蟼€(gè)示例的條件為例。
一個(gè)神經(jīng)網(wǎng)絡(luò)可以包含任意數(shù)量的層和任意數(shù)量的神經(jīng)元。
以python代碼示例如下:
importnumpyasnp#…codefromprevioussectionhereclassourneuralnetwork:\\\’\\\’\\\’aneuralnetworkwith:-2inputs-ahiddenlayerwith2neurons(h1,h2)-anoutputlayerwith1neuron(o1)eachneuronhasthesameweightsandbias:-w=[0,1]-b=0\\\’\\\’\\\’def__init__(self):weights=np.array([0,1])bias=0#theneuronclasshereisfromtheprevioussectionself.h1=neuron(weights,bias)self.h2=neuron(weights,bias)self.o1=neuron(weights,bias)deffeedforward(self,x):out_h1=self.h1.feedforward(x)out_h2=self.h2.feedforward(x)#theinputsforo1aretheoutputsfromh1andh2out_o1=self.o1.feedforward(np.array([out_h1,out_h2]))returnout_o1network=ourneuralnetwork()x=np.array([2,3])print(network.feedforward(x))#0.7216325609518421 訓(xùn)練神經(jīng)網(wǎng)路——計(jì)算損失函數(shù)
假設(shè),我們正在處理以下這個(gè)項(xiàng)目。通過(guò)人員的體重和身高來(lái)判斷性別。
以weight、height作為輸入,以gender作為輸出。
將male設(shè)置為0,female設(shè)置為1,還對(duì)其余數(shù)據(jù)進(jìn)行了簡(jiǎn)化。
在訓(xùn)練神經(jīng)網(wǎng)絡(luò)之前,首先需要一個(gè)方法來(lái)量化它做得有多“好”,是否能夠做得“更好”,那就是損失函數(shù)(loss)。
這里,我們將使用損失函數(shù)的一種——均方誤差來(lái)計(jì)算。
預(yù)測(cè)結(jié)果越好,說(shuō)明損失也就會(huì)越低。而訓(xùn)練神經(jīng)網(wǎng)絡(luò)的目的,就在于盡可能的減少損失。
如果我們確信所有的人都是male,也就是說(shuō)預(yù)測(cè)值為0,會(huì)出現(xiàn)什么樣的結(jié)果?
python示例:
importnumpyasnpdefmse_loss(y_true,y_pred):#y_trueandy_predarenumpyarraysofthesamelength.return((y_true-y_pred)2).mean()y_true=np.array([1,0,0,1])y_pred=np.array([0,0,0,0])print(mse_loss(y_true,y_pred))#0.5 訓(xùn)練神經(jīng)網(wǎng)絡(luò)——最小化損失
計(jì)算了損失函數(shù)之后,就需要將損失最小化,這也是訓(xùn)練神經(jīng)網(wǎng)絡(luò)的最終目的所在。
接下來(lái)帖子有一段多變量演算,涉及微積分。
作者表示,
如果對(duì)微積分不滿意,可隨時(shí)跳過(guò)。
簡(jiǎn)單起見,我們就假設(shè)這個(gè)數(shù)據(jù)集中只有alice。
那么,它的損失函數(shù)就是這樣。
那么它的權(quán)重w跟偏差b,在圖上標(biāo)示,那么就有6個(gè)權(quán)重變量,3個(gè)偏差變量。
于是,便將損失函數(shù)寫為多變量函數(shù)。
想象一下,我們只要調(diào)整w1,就可能導(dǎo)致l的變化。那具體是如何變化的呢?這就需要計(jì)算偏導(dǎo)數(shù)了。
利用鏈?zhǔn)角髮?dǎo)法則進(jìn)行反向求導(dǎo),而這一過(guò)程就叫做反向傳播。
詳細(xì)計(jì)算過(guò)程就不放在這里了,大家去他個(gè)人網(wǎng)站去看哦~(鏈接已附文末)
作者溫馨提示,看這個(gè)過(guò)程的時(shí)候不要著急,拿出手中的筆和紙,能夠幫助你理解。
接下來(lái),使用隨機(jī)梯度下降的優(yōu)化算法,公式表示如下(以w1為例):
其中的“學(xué)習(xí)速率”控制著訓(xùn)練速度,過(guò)大或者過(guò)小都不合適。
如果我們將所有的變量都進(jìn)行這樣的優(yōu)化,那么損失函數(shù)將逐漸減少,神經(jīng)網(wǎng)絡(luò)就能夠得到改善。
簡(jiǎn)單來(lái)說(shuō),整個(gè)訓(xùn)練過(guò)程是這樣的:
1、數(shù)據(jù)集中選擇一個(gè)樣本,就如alice。
2、利用反向傳播計(jì)算所有變量的偏導(dǎo)數(shù)。
3、使用隨機(jī)梯度下降來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò),更新變量。
4、返回步驟1。
神經(jīng)網(wǎng)絡(luò)的部分就介紹到這里,怎么樣?看完之后,有什么感想?
是不是覺得神經(jīng)網(wǎng)絡(luò)也還好了。還有其他概念等著你來(lái)學(xué)習(xí)呢!
上一個(gè):555定時(shí)器構(gòu)成的施密特觸發(fā)器
下一個(gè):平時(shí)生活中水培豆瓣綠如何養(yǎng)護(hù)

小米電飯煲推薦哪一款(小米電飯煲哪款煮飯好吃)
10噸餐館食物垃圾粉碎處理設(shè)備制造廠家
液相色譜柱的有關(guān)原理
撞車后逃逸怎么賠償呢
功率因數(shù)校正的幾個(gè)小知識(shí)
你知道什么是凍干機(jī)技術(shù)嗎
香港到汕頭物流清關(guān)費(fèi)用
新式定壓補(bǔ)水裝置性能怎樣
茶庵
安全閥的常見故障分析及解決方法
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos