Python機器學(xué)習(xí)與項目實踐- 課件 chap4-前饋神經(jīng)網(wǎng)絡(luò)_第1頁
Python機器學(xué)習(xí)與項目實踐- 課件 chap4-前饋神經(jīng)網(wǎng)絡(luò)_第2頁
Python機器學(xué)習(xí)與項目實踐- 課件 chap4-前饋神經(jīng)網(wǎng)絡(luò)_第3頁
Python機器學(xué)習(xí)與項目實踐- 課件 chap4-前饋神經(jīng)網(wǎng)絡(luò)_第4頁
Python機器學(xué)習(xí)與項目實踐- 課件 chap4-前饋神經(jīng)網(wǎng)絡(luò)_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

前饋神經(jīng)網(wǎng)絡(luò)《Python機器學(xué)習(xí)與項目實踐》XXX大學(xué)教學(xué)內(nèi)容概念基本特征網(wǎng)絡(luò)模型應(yīng)用分析機器學(xué)習(xí)≈構(gòu)建一個映射函數(shù)“貓”“你好”“5-5”“今天天氣真不錯”“你好”用戶輸入機器(落子位置)語音識別圖像識別圍棋對話系統(tǒng)神經(jīng)元與感知機一個生物的神經(jīng)元的結(jié)構(gòu)分為細(xì)胞體和突起兩部分,具有聯(lián)絡(luò)和整合輸入信息并輸出信息的作用。突起包含樹突和軸突,樹突用來接收其他的神經(jīng)元傳遞過來的信號,其一端連接軸突用來給其他的神經(jīng)元傳遞信號,軸突的末端連接到其他神經(jīng)元的樹突或軸突上。神經(jīng)元結(jié)構(gòu)圖感知機的工作原理激活函數(shù)激活函數(shù)(ActivationFunction)是在神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元上運行的函數(shù),負(fù)責(zé)將神經(jīng)元的輸入映射到輸出端。激活函數(shù)在神經(jīng)元中是非常重要的。為了增強神經(jīng)網(wǎng)絡(luò)的表示能力和學(xué)習(xí)能力,激活函數(shù)需要具備以下幾點性質(zhì)。(1)連續(xù)可導(dǎo)(允許少數(shù)點上不可導(dǎo))的非線性函數(shù)??蓪?dǎo)的激活函數(shù)可以直接利用數(shù)值優(yōu)化的方法來學(xué)習(xí)網(wǎng)絡(luò)參數(shù)。(2)激活函數(shù)及其導(dǎo)數(shù)要盡可能的簡單,這樣有利于提高網(wǎng)絡(luò)計算效率。(3)激活函數(shù)的導(dǎo)數(shù)的值域要在一個合適的區(qū)間內(nèi),不能太大也不能太小,否則會影響訓(xùn)練的效率和穩(wěn)定性。Sigmoid函數(shù)Sigmoid函數(shù)連續(xù)且光滑,嚴(yán)格單調(diào),關(guān)于(0,0.5)中心對稱,可以將變量映射到(0,1)之間,是一個非常良好的閾值函數(shù)。Sigmoid函數(shù)作為激活函數(shù)有以下優(yōu)缺點。優(yōu)點:平滑、易于求導(dǎo)。缺點:①Sigmoid函數(shù)極容易導(dǎo)致梯度消失問題。假設(shè)神經(jīng)元輸入Sigmoid函數(shù)的值特別大或特別小,那么對應(yīng)的梯度約等于0,即使從上一步傳導(dǎo)來的梯度較大,該神經(jīng)元權(quán)重和偏置的梯度也會趨近0,導(dǎo)致參數(shù)無法得到有效更新。②計算費時。在神經(jīng)網(wǎng)絡(luò)訓(xùn)練中,常常要計算Sigmoid函數(shù)的值,進(jìn)行冪計算會導(dǎo)致耗時增加。③Sigmoid函數(shù)不是關(guān)于原點中心對稱的(Zero-centered)。

Tanh函數(shù)Tanh函數(shù)作為激活函數(shù)有以下優(yōu)缺點。優(yōu)點:①平滑、易于求導(dǎo)。②解決了Sigmoid函數(shù)收斂變慢的問題,相對于Sigmoid函數(shù)提高了收斂速度。缺點:①梯度消失問題依然存在。②函數(shù)值的計算復(fù)雜度高,是指數(shù)級的。ReLU函數(shù)優(yōu)點:①相比于Sigmoid函數(shù)的兩端飽和,ReLU函數(shù)為左飽和函數(shù),且在x>0時導(dǎo)數(shù)為1,這在一定程度上緩解了神經(jīng)網(wǎng)絡(luò)的梯度消失問題。②沒有復(fù)雜的指數(shù)運算,計算簡單、效率提高。③收斂速度較快,比Sigmoid函數(shù)和Tanh函數(shù)快很多。④單側(cè)抑制、寬興奮邊界使得ReLU函數(shù)比Sigmoid函數(shù)更符合生物學(xué)神經(jīng)激活機制。缺點:①輸出是非零中心化的,給后一層的神經(jīng)網(wǎng)絡(luò)引入偏置偏移,會影響梯度下降的效率。②ReLU神經(jīng)元在訓(xùn)練時比較容易“死亡”。Swish函數(shù)Swish函數(shù)的主要優(yōu)點如下。(1)Swish函數(shù)的無界性有助于防止在慢速訓(xùn)練期間梯度逐漸接近0并導(dǎo)致飽和。(2)Swish函數(shù)的平滑度在優(yōu)化和泛化中起了重要作用。Softmax函數(shù)Softmax函數(shù)常在神經(jīng)網(wǎng)絡(luò)輸出層中充當(dāng)激活函數(shù),將輸出層的值通過激活函數(shù)映射到(0,1)區(qū)間,當(dāng)前輸出可以看作屬于各個分類的概率,從而用來進(jìn)行多分類。Softmax函數(shù)的映射值越大,則真實類別的可能性越大。4.3前饋神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)前饋神經(jīng)網(wǎng)絡(luò)也經(jīng)常稱為多層感知機(Multi-LayerPerceptron,MLP),但多層感知機的叫法并不十分合理。因為前饋神經(jīng)網(wǎng)絡(luò)其實是由多層的邏輯回歸模型(連續(xù)的非線性函數(shù))組成的,而不是由多層的感知機(不連續(xù)的非線性函數(shù))組成的。前饋神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)4.3.1通用近似定理神經(jīng)網(wǎng)絡(luò)最有價值的地方可能在于,它可以在理論上證明:一個包含足夠多隱藏層神經(jīng)元的多層前饋神經(jīng)網(wǎng)絡(luò),能以任意精度逼近任意預(yù)定的連續(xù)函數(shù)。這個定理即通用近似定理(UniversalApproximationTheorem)。這里的Universal也有人將其翻譯成“萬能的”。4.3.2應(yīng)用到機器學(xué)習(xí)根據(jù)通用近似定理,神經(jīng)網(wǎng)絡(luò)在某種程度上可以作為一個“萬能”函數(shù)來使用,可以用來進(jìn)行復(fù)雜的特征轉(zhuǎn)換,或者近似一個復(fù)雜的條件分布。在機器學(xué)習(xí)中,輸入樣本的特征對分類器的影響很大。以監(jiān)督學(xué)習(xí)為例,好的特征可以極大提高分類器的性能。4.3.3參數(shù)學(xué)習(xí)在神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)中,需要尋找最優(yōu)參數(shù)(權(quán)重和偏置),即尋找使損失函數(shù)的值盡可能小的參數(shù)。為了找到使損失函數(shù)的值盡可能小的參數(shù),首先需要計算參數(shù)的梯度(導(dǎo)數(shù)),然后以這個導(dǎo)數(shù)為指引,逐步更新參數(shù)的值。4.4反向傳播算法反向傳播(BackPropagation,BP)算法是目前用來訓(xùn)練神經(jīng)網(wǎng)絡(luò)的常用且有效的算法。反向傳播算法的主要思想是:將訓(xùn)練集數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò)的輸入層,經(jīng)過隱藏層,最后到達(dá)輸出層并輸出結(jié)果,這是神經(jīng)網(wǎng)絡(luò)的前向傳播過程。4.5梯度計算前面已經(jīng)介紹了神經(jīng)網(wǎng)絡(luò)的最終目標(biāo),即使所定義的損失函數(shù)的值達(dá)到最小。為了使損失函數(shù)的值最小,常使用的核心方法是“梯度法”。復(fù)合函數(shù)的計算圖

4.5梯度計算4.6網(wǎng)絡(luò)優(yōu)化神經(jīng)網(wǎng)絡(luò)的參數(shù)學(xué)習(xí)比線性模型更加困難,當(dāng)前神經(jīng)網(wǎng)絡(luò)模型的難點主要如下。(1)優(yōu)化問題。神經(jīng)網(wǎng)絡(luò)模型是一個非凸函數(shù),再加上在深度神經(jīng)網(wǎng)絡(luò)中的梯度消失問題,很難進(jìn)行優(yōu)化。另外,深層神經(jīng)網(wǎng)絡(luò)一般參數(shù)比較多,訓(xùn)練數(shù)據(jù)也比較多,這會導(dǎo)致訓(xùn)練的效率比較低。(2)泛化問題。因為神經(jīng)網(wǎng)絡(luò)的擬合能力強,反而容易在訓(xùn)練集上產(chǎn)生過擬合。因此在訓(xùn)練深層神經(jīng)網(wǎng)絡(luò)時,需要通過一定的正則化方法來改善網(wǎng)絡(luò)的泛化能力。優(yōu)化算法1.批量梯度下降(BatchGradientDescent,BGD)2.隨機梯度下降(SGD)3.小批量梯度下降4.7應(yīng)用實例向讀者介紹前饋神經(jīng)網(wǎng)絡(luò)模型在PyTorch中的簡單構(gòu)建。關(guān)于數(shù)據(jù)集的準(zhǔn)備,本節(jié)的示例中使用手寫數(shù)字的MINIST數(shù)據(jù)集。該數(shù)據(jù)集包含60000個用于訓(xùn)練的示例和10000個用于測試的示例。這些數(shù)字已經(jīng)過尺寸標(biāo)準(zhǔn)化并位于圖像中心,圖像是固定大小的(28像素×28像素),其值為0~10。為簡單起見,每個圖像都被展平并轉(zhuǎn)換為784(28×28)個特征的一維NumPy數(shù)組4.7應(yīng)用實例代碼實現(xiàn)如下。1.import

torch

2.import

torch.nn

as

nn

3.import

torchvision

4.import

torchvision.transforms

as

transforms

5.#

配置

6.device=torch.device('cuda'

if

torch.cuda.is_available()

else

'cpu')

7.#

超參數(shù)

8.input_size=784

9.hidden_size=500

10.num_classes=10

11.num_epochs=5

12.batch_size=100

13.learning_rate=0.001

14.

15.#

數(shù)據(jù)集

16.train_dataset=torchvision.datasets.MNIST(root='../../data',

17.

train=True,

18.

transform=transforms.ToTensor(),

19.

download=True)

20.

21.test_dataset=torchvision.datasets.MNIST(root='../../data',

4.7應(yīng)用實例22.

train=False,

23.

transform=transforms.ToTensor())

24.

25.#

引入數(shù)據(jù)集26.train_loader=torch.utils.data.DataLoader(dataset=train_dataset,

27.

batch_size=batch_size,

28.

shuffle=True)

29.

30.test_loader=torch.utils.data.DataLoader(dataset=test_dataset,

31.

batch_size=batch_size,

32.

shuffle=False)

33.

34.#

全連接層35.class

NeuralNet(nn.Module):

36.

def

__init__(self,input_size,hidden_size,num_classes):

37.

super(NeuralNet,self).__init__()

38.

self.fc1=nn.Linear(input_size,hidden_size)

39.

self.relu=nn.ReLU()

40.

self.fc2=nn.Linear(hidden_size,num_classes)

4.7應(yīng)用實例41.

42.

def

forward(self,x):

43.

out=self.fc1(x)

44.

out=self.relu(out)

45.

out=self.fc2(out)

46.

return

out

47.

48.model=NeuralNet(input_size,hidden_size,num_classes).to(device)

49.

50.#

損失與優(yōu)化51.criterion=nn.CrossEntropyLoss()

52.optimizer=torch.optim.Adam(model.parameters(),lr=learning_rate)

53.

54.#

訓(xùn)練模型55.total_step=len(train_loader)

56.for

epoch

in

range(num_epochs):

57.

for

i,(images,labels)

in

enumerate(train_loader):

58.

#

Move

tensors

to

the

configured

device

59.

images=images.reshape(-1,28

*

28).to(device)

60.

labels=labels.to(device)

4.7應(yīng)用實例61.

62.

#

前向傳播和計算損失63.

outputs=model(images)

64.

loss=criterion(outputs,labels)

65.

66.

#

反向優(yōu)化67.

optimizer.zero_grad()

68.

loss.backward()

69.

optimizer.step()

70.

71.

if

(i

+

1)

%

100

==

0:

72.

print('Epoch

[{}/{}],Step

[{}/{}],Loss:

{:.4f}'

73.

.format(epoch

+

1,num_epochs,i

+

1,total_step,loss.item()))

74.

4.7應(yīng)用實例75.#

測試76.#

In

test

phase,we

don't

need

to

compu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論