深度學(xué)習(xí):神經(jīng)網(wǎng)絡(luò):線性代數(shù)與深度學(xué)習(xí)_第1頁
深度學(xué)習(xí):神經(jīng)網(wǎng)絡(luò):線性代數(shù)與深度學(xué)習(xí)_第2頁
深度學(xué)習(xí):神經(jīng)網(wǎng)絡(luò):線性代數(shù)與深度學(xué)習(xí)_第3頁
深度學(xué)習(xí):神經(jīng)網(wǎng)絡(luò):線性代數(shù)與深度學(xué)習(xí)_第4頁
深度學(xué)習(xí):神經(jīng)網(wǎng)絡(luò):線性代數(shù)與深度學(xué)習(xí)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

深度學(xué)習(xí):神經(jīng)網(wǎng)絡(luò):線性代數(shù)與深度學(xué)習(xí)1深度學(xué)習(xí)基礎(chǔ)1.1深度學(xué)習(xí)簡介深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)分支,它模仿人腦的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),通過多層非線性變換來學(xué)習(xí)數(shù)據(jù)的復(fù)雜表示。深度學(xué)習(xí)模型能夠自動(dòng)從原始數(shù)據(jù)中提取特征,這使得它在圖像識(shí)別、自然語言處理、語音識(shí)別等領(lǐng)域取得了顯著的成果。1.2神經(jīng)網(wǎng)絡(luò)的基本概念1.2.1神經(jīng)元神經(jīng)網(wǎng)絡(luò)的基本單元是神經(jīng)元,它接收輸入信號(hào),通過加權(quán)求和后,經(jīng)過激活函數(shù)產(chǎn)生輸出。一個(gè)神經(jīng)元可以表示為:y其中,xi是輸入,wi是權(quán)重,b是偏置,1.2.2層神經(jīng)網(wǎng)絡(luò)由多層神經(jīng)元組成,包括輸入層、隱藏層和輸出層。輸入層接收原始數(shù)據(jù),輸出層產(chǎn)生最終預(yù)測(cè),而隱藏層則負(fù)責(zé)學(xué)習(xí)數(shù)據(jù)的抽象表示。1.2.3前向傳播前向傳播是神經(jīng)網(wǎng)絡(luò)中數(shù)據(jù)從輸入層到輸出層的流動(dòng)過程。每一層的輸出作為下一層的輸入,直到產(chǎn)生最終預(yù)測(cè)。1.2.4反向傳播反向傳播是深度學(xué)習(xí)中用于調(diào)整神經(jīng)網(wǎng)絡(luò)權(quán)重和偏置的過程。它基于梯度下降算法,通過計(jì)算損失函數(shù)關(guān)于每個(gè)權(quán)重和偏置的梯度,然后更新這些參數(shù)以最小化損失。1.3激活函數(shù)詳解激活函數(shù)在神經(jīng)網(wǎng)絡(luò)中引入非線性,使得網(wǎng)絡(luò)能夠?qū)W習(xí)和表示復(fù)雜的函數(shù)。常見的激活函數(shù)包括:1.3.1Sigmoid函數(shù)Sigmoid函數(shù)將輸入映射到0到1之間,常用于二分類問題。fimportnumpyasnp

defsigmoid(x):

"""

Sigmoid激活函數(shù)

:paramx:輸入數(shù)據(jù)

:return:Sigmoid函數(shù)的輸出

"""

return1/(1+np.exp(-x))

#示例

input_data=np.array([1.0,2.0,3.0])

output=sigmoid(input_data)

print(output)1.3.2ReLU函數(shù)ReLU(RectifiedLinearUnit)函數(shù)在正數(shù)區(qū)域保持線性,而在負(fù)數(shù)區(qū)域輸出0,這有助于解決梯度消失問題。fdefrelu(x):

"""

ReLU激活函數(shù)

:paramx:輸入數(shù)據(jù)

:return:ReLU函數(shù)的輸出

"""

returnnp.maximum(0,x)

#示例

input_data=np.array([-1.0,2.0,-3.0,4.0])

output=relu(input_data)

print(output)1.3.3Softmax函數(shù)Softmax函數(shù)將輸入轉(zhuǎn)換為概率分布,常用于多分類問題。fdefsoftmax(x):

"""

Softmax激活函數(shù)

:paramx:輸入數(shù)據(jù)

:return:Softmax函數(shù)的輸出

"""

e_x=np.exp(x-np.max(x))

returne_x/e_x.sum(axis=0)

#示例

input_data=np.array([1.0,2.0,3.0])

output=softmax(input_data)

print(output)1.4損失函數(shù)與優(yōu)化算法1.4.1損失函數(shù)損失函數(shù)衡量模型預(yù)測(cè)與實(shí)際值之間的差距。常見的損失函數(shù)有:1.4.1.1均方誤差(MSE)適用于回歸問題。Mdefmse_loss(y_true,y_pred):

"""

均方誤差損失函數(shù)

:paramy_true:真實(shí)值

:paramy_pred:預(yù)測(cè)值

:return:損失值

"""

returnnp.mean(np.power(y_true-y_pred,2))

#示例

y_true=np.array([1.0,2.0,3.0])

y_pred=np.array([1.2,1.9,3.1])

loss=mse_loss(y_true,y_pred)

print(loss)1.4.1.2交叉熵?fù)p失適用于分類問題。Cdefcross_entropy_loss(y_true,y_pred):

"""

交叉熵?fù)p失函數(shù)

:paramy_true:真實(shí)值

:paramy_pred:預(yù)測(cè)值

:return:損失值

"""

return-np.sum(y_true*np.log(y_pred))

#示例

y_true=np.array([1.0,0.0,0.0])

y_pred=np.array([0.7,0.2,0.1])

loss=cross_entropy_loss(y_true,y_pred)

print(loss)1.4.2優(yōu)化算法優(yōu)化算法用于更新神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置,以最小化損失函數(shù)。常見的優(yōu)化算法有:1.4.2.1梯度下降梯度下降是最基本的優(yōu)化算法,它沿著損失函數(shù)的梯度方向更新參數(shù)。w其中,α是學(xué)習(xí)率,L是損失函數(shù)。1.4.2.2隨機(jī)梯度下降(SGD)隨機(jī)梯度下降在每次更新時(shí)只使用一個(gè)樣本,這使得更新過程更快,但可能更不穩(wěn)定。1.4.2.3Adam優(yōu)化器Adam優(yōu)化器結(jié)合了動(dòng)量(Momentum)和自適應(yīng)學(xué)習(xí)率(Adagrad)的優(yōu)點(diǎn),是目前深度學(xué)習(xí)中最常用的優(yōu)化算法之一。classAdamOptimizer:

"""

Adam優(yōu)化器類

"""

def__init__(self,learning_rate=0.001,beta1=0.9,beta2=0.999,epsilon=1e-8):

self.learning_rate=learning_rate

self.beta1=beta1

self.beta2=beta2

self.epsilon=epsilon

self.t=0

self.m=None

self.v=None

defupdate(self,w,grad_w):

"""

更新權(quán)重

:paramw:當(dāng)前權(quán)重

:paramgrad_w:權(quán)重的梯度

:return:更新后的權(quán)重

"""

self.t+=1

ifself.misNone:

self.m=np.zeros_like(w)

self.v=np.zeros_like(w)

self.m=self.beta1*self.m+(1-self.beta1)*grad_w

self.v=self.beta2*self.v+(1-self.beta2)*np.power(grad_w,2)

m_hat=self.m/(1-self.beta1**self.t)

v_hat=self.v/(1-self.beta2**self.t)

w-=self.learning_rate*m_hat/(np.sqrt(v_hat)+self.epsilon)

returnw

#示例

w=np.array([0.5,0.5])

grad_w=np.array([0.1,0.2])

optimizer=AdamOptimizer()

w=optimizer.update(w,grad_w)

print(w)通過以上介紹,我們了解了深度學(xué)習(xí)的基礎(chǔ)概念,包括神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)、激活函數(shù)、損失函數(shù)以及優(yōu)化算法。這些是構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型的關(guān)鍵組成部分。2線性代數(shù)在深度學(xué)習(xí)中的應(yīng)用2.1向量與矩陣的基本操作在深度學(xué)習(xí)中,數(shù)據(jù)通常表示為向量或矩陣。向量可以看作是具有方向和大小的量,而矩陣則是一組向量的集合,用于表示線性關(guān)系。向量和矩陣的基本操作包括加法、減法、標(biāo)量乘法、點(diǎn)積和轉(zhuǎn)置。2.1.1向量加法與減法向量加法和減法是按元素進(jìn)行的。例如,兩個(gè)向量相加,就是將它們的對(duì)應(yīng)元素相加。importnumpyasnp

#定義兩個(gè)向量

vector_a=np.array([1,2,3])

vector_b=np.array([4,5,6])

#向量加法

vector_sum=vector_a+vector_b

print("向量加法結(jié)果:",vector_sum)

#向量減法

vector_diff=vector_a-vector_b

print("向量減法結(jié)果:",vector_diff)2.1.2標(biāo)量乘法標(biāo)量乘法是將向量或矩陣的每個(gè)元素乘以一個(gè)標(biāo)量值。#定義一個(gè)向量和一個(gè)標(biāo)量

vector_c=np.array([1,2,3])

scalar=2

#標(biāo)量乘法

vector_scaled=scalar*vector_c

print("標(biāo)量乘法結(jié)果:",vector_scaled)2.1.3點(diǎn)積點(diǎn)積是兩個(gè)向量的乘積,結(jié)果是一個(gè)標(biāo)量。它在計(jì)算向量之間的相似度時(shí)非常有用。#計(jì)算兩個(gè)向量的點(diǎn)積

dot_product=np.dot(vector_a,vector_b)

print("點(diǎn)積結(jié)果:",dot_product)2.1.4矩陣轉(zhuǎn)置矩陣轉(zhuǎn)置是將矩陣的行變?yōu)榱校凶優(yōu)樾械牟僮鳌?定義一個(gè)矩陣

matrix=np.array([[1,2],[3,4]])

#矩陣轉(zhuǎn)置

matrix_transposed=matrix.T

print("矩陣轉(zhuǎn)置結(jié)果:\n",matrix_transposed)2.2線性變換與矩陣乘法線性變換是通過矩陣乘法實(shí)現(xiàn)的,它可以改變向量或矩陣的空間位置、方向和大小。2.2.1矩陣乘法矩陣乘法是兩個(gè)矩陣的乘積,其中第一個(gè)矩陣的列數(shù)必須等于第二個(gè)矩陣的行數(shù)。#定義兩個(gè)矩陣

matrix_a=np.array([[1,2],[3,4]])

matrix_b=np.array([[5,6],[7,8]])

#矩陣乘法

matrix_product=np.dot(matrix_a,matrix_b)

print("矩陣乘法結(jié)果:\n",matrix_product)2.2.2線性變換示例考慮一個(gè)2D空間中的向量,通過一個(gè)變換矩陣,我們可以改變這個(gè)向量的方向和大小。#定義一個(gè)變換矩陣和一個(gè)向量

transformation_matrix=np.array([[0,-1],[1,0]])

vector_d=np.array([1,2])

#應(yīng)用線性變換

transformed_vector=np.dot(transformation_matrix,vector_d)

print("變換后的向量:",transformed_vector)2.3特征值與特征向量特征值和特征向量是矩陣的重要屬性,它們?cè)谏疃葘W(xué)習(xí)中用于理解數(shù)據(jù)的結(jié)構(gòu)和簡化計(jì)算。2.3.1特征值與特征向量的計(jì)算對(duì)于一個(gè)方陣,我們可以找到一組特征值和對(duì)應(yīng)的特征向量,使得矩陣乘以特征向量等于特征值乘以特征向量。#定義一個(gè)方陣

square_matrix=np.array([[1,2],[3,4]])

#計(jì)算特征值和特征向量

eigenvalues,eigenvectors=np.linalg.eig(square_matrix)

print("特征值:",eigenvalues)

print("特征向量:\n",eigenvectors)2.4奇異值分解與PCA奇異值分解(SVD)和主成分分析(PCA)是線性代數(shù)中用于數(shù)據(jù)降維和特征提取的強(qiáng)大工具。2.4.1奇異值分解SVD可以將任何矩陣分解為三個(gè)矩陣的乘積,這在深度學(xué)習(xí)中用于矩陣的壓縮和特征提取。#定義一個(gè)矩陣

matrix_e=np.array([[1,2],[3,4],[5,6]])

#奇異值分解

U,S,Vt=np.linalg.svd(matrix_e)

print("U矩陣:\n",U)

print("S奇異值向量:",S)

print("Vt矩陣:\n",Vt)2.4.2主成分分析PCA是一種用于數(shù)據(jù)降維的技術(shù),它通過找到數(shù)據(jù)的主成分來減少數(shù)據(jù)的維度,同時(shí)保留盡可能多的信息。#定義一個(gè)數(shù)據(jù)集

data=np.array([[1,2],[3,4],[5,6],[7,8]])

#中心化數(shù)據(jù)

data_centered=data-np.mean(data,axis=0)

#計(jì)算協(xié)方差矩陣

covariance_matrix=np.cov(data_centered,rowvar=False)

#計(jì)算協(xié)方差矩陣的特征值和特征向量

eigenvalues,eigenvectors=np.linalg.eig(covariance_matrix)

#選擇主成分

principal_components=eigenvectors[:,np.argsort(eigenvalues)[::-1][:1]]

#應(yīng)用PCA降維

data_reduced=np.dot(data_centered,principal_components)

print("PCA降維后的數(shù)據(jù):\n",data_reduced)以上示例展示了線性代數(shù)在深度學(xué)習(xí)中的基本應(yīng)用,包括向量和矩陣的操作、線性變換、特征值與特征向量的計(jì)算,以及SVD和PCA的使用。這些操作和分析方法是構(gòu)建和優(yōu)化神經(jīng)網(wǎng)絡(luò)模型的關(guān)鍵。3神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)基礎(chǔ)3.1權(quán)重與偏置的初始化權(quán)重和偏置的初始化是神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中的關(guān)鍵步驟。不恰當(dāng)?shù)某跏蓟赡軐?dǎo)致網(wǎng)絡(luò)訓(xùn)練緩慢或陷入局部最優(yōu)解。以下是一些常見的初始化方法:3.1.1隨機(jī)初始化隨機(jī)初始化是最常用的方法,它通過隨機(jī)生成權(quán)重和偏置來避免所有神經(jīng)元的初始狀態(tài)相同,從而打破對(duì)稱性。importnumpyasnp

#隨機(jī)初始化權(quán)重

defrandom_init(shape):

"""

隨機(jī)初始化權(quán)重矩陣。

參數(shù):

shape--權(quán)重矩陣的形狀,一個(gè)元組(n_l,n_(l-1)),其中n_l是當(dāng)前層的神經(jīng)元數(shù)量,n_(l-1)是前一層的神經(jīng)元數(shù)量。

返回:

W--初始化的權(quán)重矩陣。

"""

W=np.random.randn(*shape)*0.01

returnW

#隨機(jī)初始化偏置

defzero_init(shape):

"""

初始化偏置向量為零。

參數(shù):

shape--偏置向量的形狀,一個(gè)元組(n_l,1),其中n_l是當(dāng)前層的神經(jīng)元數(shù)量。

返回:

b--初始化的偏置向量。

"""

b=np.zeros(shape)

returnb

#示例

W1=random_init((10,5))

b1=zero_init((10,1))

print("W1的形狀:",W1.shape)

print("b1的形狀:",b1.shape)3.1.2Xavier初始化Xavier初始化(或稱為Glorot初始化)通過調(diào)整權(quán)重的方差來保持網(wǎng)絡(luò)各層的激活值和梯度的方差穩(wěn)定。defxavier_init(shape):

"""

使用Xavier初始化方法初始化權(quán)重矩陣。

參數(shù):

shape--權(quán)重矩陣的形狀,一個(gè)元組(n_l,n_(l-1))。

返回:

W--初始化的權(quán)重矩陣。

"""

n_l,n_prev=shape

limit=np.sqrt(6/(n_l+n_prev))

W=np.random.uniform(-limit,limit,shape)

returnW3.2前向傳播與后向傳播前向傳播和后向傳播是神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的核心算法,用于計(jì)算預(yù)測(cè)值和更新權(quán)重。3.2.1前向傳播前向傳播通過網(wǎng)絡(luò)的各層計(jì)算預(yù)測(cè)輸出。defforward_propagation(X,parameters):

"""

實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的前向傳播。

參數(shù):

X--輸入數(shù)據(jù),維度為(n_x,m),其中n_x是輸入層的神經(jīng)元數(shù)量,m是樣本數(shù)量。

parameters--包含權(quán)重和偏置的字典。

返回:

A--最終的輸出,維度為(n_y,m),其中n_y是輸出層的神經(jīng)元數(shù)量。

cache--包含中間結(jié)果的字典,用于后向傳播。

"""

W1,b1,W2,b2=parameters['W1'],parameters['b1'],parameters['W2'],parameters['b2']

Z1=np.dot(W1,X)+b1

A1=np.tanh(Z1)

Z2=np.dot(W2,A1)+b2

A2=1/(1+np.exp(-Z2))#Sigmoid激活函數(shù)

cache={'Z1':Z1,'A1':A1,'Z2':Z2,'A2':A2}

returnA2,cache3.2.2后向傳播后向傳播計(jì)算損失函數(shù)關(guān)于權(quán)重和偏置的梯度,用于更新參數(shù)。defbackward_propagation(X,Y,cache,parameters):

"""

實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的后向傳播。

參數(shù):

X--輸入數(shù)據(jù),維度為(n_x,m)。

Y--真實(shí)標(biāo)簽,維度為(n_y,m)。

cache--包含前向傳播中間結(jié)果的字典。

parameters--包含權(quán)重和偏置的字典。

返回:

grads--包含權(quán)重和偏置梯度的字典。

"""

m=X.shape[1]

W1,W2=parameters['W1'],parameters['W2']

A1,A2=cache['A1'],cache['A2']

dZ2=A2-Y

dW2=(1/m)*np.dot(dZ2,A1.T)

db2=(1/m)*np.sum(dZ2,axis=1,keepdims=True)

dZ1=np.dot(W2.T,dZ2)*(1-np.power(A1,2))

dW1=(1/m)*np.dot(dZ1,X.T)

db1=(1/m)*np.sum(dZ1,axis=1,keepdims=True)

grads={'dW1':dW1,'db1':db1,'dW2':dW2,'db2':db2}

returngrads3.3梯度下降法的數(shù)學(xué)原理梯度下降法是一種優(yōu)化算法,用于最小化損失函數(shù)。它通過迭代更新權(quán)重和偏置,使損失函數(shù)逐漸減小。defupdate_parameters(parameters,grads,learning_rate):

"""

使用梯度下降法更新參數(shù)。

參數(shù):

parameters--包含權(quán)重和偏置的字典。

grads--包含權(quán)重和偏置梯度的字典。

learning_rate--學(xué)習(xí)率,控制參數(shù)更新的步長。

返回:

parameters--更新后的參數(shù)字典。

"""

W1,b1,W2,b2=parameters['W1'],parameters['b1'],parameters['W2'],parameters['b2']

dW1,db1,dW2,db2=grads['dW1'],grads['db1'],grads['dW2'],grads['db2']

W1=W1-learning_rate*dW1

b1=b1-learning_rate*db1

W2=W2-learning_rate*dW2

b2=b2-learning_rate*db2

parameters={'W1':W1,'b1':b1,'W2':W2,'b2':b2}

returnparameters3.4正則化技術(shù)解析正則化技術(shù)用于防止過擬合,通過在損失函數(shù)中添加一個(gè)懲罰項(xiàng)來限制模型的復(fù)雜度。3.4.1L2正則化L2正則化通過添加權(quán)重的平方和的懲罰項(xiàng)來限制權(quán)重的大小。defcompute_cost_with_regularization(A2,Y,parameters,lambd):

"""

計(jì)算包含L2正則化的損失函數(shù)。

參數(shù):

A2--神經(jīng)網(wǎng)絡(luò)的輸出,維度為(n_y,m)。

Y--真實(shí)標(biāo)簽,維度為(n_y,m)。

parameters--包含權(quán)重和偏置的字典。

lambd--正則化參數(shù),控制正則化項(xiàng)的強(qiáng)度。

返回:

cost--包含正則化項(xiàng)的損失函數(shù)值。

"""

m=Y.shape[1]

W1,W2=parameters['W1'],parameters['W2']

cross_entropy_cost=-(1/m)*np.sum(Y*np.log(A2)+(1-Y)*np.log(1-A2))

L2_regularization_cost=(lambd/(2*m))*(np.sum(np.square(W1))+np.sum(np.square(W2)))

cost=cross_entropy_cost+L2_regularization_cost

returncost3.4.2Dropout正則化Dropout正則化通過在訓(xùn)練過程中隨機(jī)“丟棄”一些神經(jīng)元,來減少神經(jīng)元之間的相互依賴,提高模型的泛化能力。defforward_propagation_with_dropout(X,parameters,keep_prob):

"""

實(shí)現(xiàn)包含Dropout的前向傳播。

參數(shù):

X--輸入數(shù)據(jù),維度為(n_x,m)。

parameters--包含權(quán)重和偏置的字典。

keep_prob--保留神經(jīng)元的概率。

返回:

A2--最終的輸出,維度為(n_y,m)。

cache--包含中間結(jié)果的字典,用于后向傳播。

"""

W1,b1,W2,b2=parameters['W1'],parameters['b1'],parameters['W2'],parameters['b2']

Z1=np.dot(W1,X)+b1

A1=np.tanh(Z1)

D1=np.random.rand(A1.shape[0],A1.shape[1])<keep_prob

A1=A1*D1

A1=A1/keep_prob

Z2=np.dot(W2,A1)+b2

A2=1/(1+np.exp(-Z2))

cache={'Z1':Z1,'A1':A1,'D1':D1,'Z2':Z2,'A2':A2}

returnA2,cache以上代碼示例展示了神經(jīng)網(wǎng)絡(luò)中權(quán)重與偏置的初始化、前向傳播、后向傳播、梯度下降法以及正則化技術(shù)的實(shí)現(xiàn)。通過這些基本組件,可以構(gòu)建和訓(xùn)練復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型。4深度學(xué)習(xí)中的高級(jí)線性代數(shù)4.1卷積神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)基礎(chǔ)4.1.1卷積運(yùn)算卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetworks,CNNs)的核心在于卷積層,它通過卷積運(yùn)算來提取輸入數(shù)據(jù)的局部特征。卷積運(yùn)算可以視為一種特殊的矩陣乘法,其中卷積核(或?yàn)V波器)在輸入數(shù)據(jù)上滑動(dòng),與局部區(qū)域進(jìn)行點(diǎn)積運(yùn)算。4.1.1.1示例代碼importnumpyasnp

#定義輸入圖像和卷積核

image=np.array([[1,2,1,2],

[2,1,2,1],

[1,2,1,2],

[2,1,2,1]])

kernel=np.array([[1,0],

[0,1]])

#卷積運(yùn)算

defconv2d(image,kernel):

"""

2D卷積運(yùn)算

:paramimage:輸入圖像,二維數(shù)組

:paramkernel:卷積核,二維數(shù)組

:return:卷積結(jié)果

"""

output=np.zeros((image.shape[0]-kernel.shape[0]+1,image.shape[1]-kernel.shape[1]+1))

foriinrange(output.shape[0]):

forjinrange(output.shape[1]):

output[i,j]=np.sum(image[i:i+kernel.shape[0],j:j+kernel.shape[1]]*kernel)

returnoutput

result=conv2d(image,kernel)

print(result)4.1.2代碼解釋上述代碼中,image和kernel分別表示輸入圖像和卷積核。conv2d函數(shù)實(shí)現(xiàn)了2D卷積運(yùn)算,通過在輸入圖像上滑動(dòng)卷積核并進(jìn)行點(diǎn)積運(yùn)算,得到卷積結(jié)果。輸出的大小取決于輸入圖像和卷積核的大小。4.2循環(huán)神經(jīng)網(wǎng)絡(luò)的矩陣表示循環(huán)神經(jīng)網(wǎng)絡(luò)(RecurrentNeuralNetworks,RNNs)通過循環(huán)連接來處理序列數(shù)據(jù),其中每個(gè)時(shí)間步的輸出不僅取決于當(dāng)前輸入,還取決于前一時(shí)間步的隱藏狀態(tài)。這種依賴關(guān)系可以通過矩陣運(yùn)算來表示,使得RNN的計(jì)算過程更加高效。4.2.1RNN的數(shù)學(xué)模型RNN的計(jì)算可以表示為以下矩陣運(yùn)算:隱藏狀態(tài)更新:h輸出計(jì)算:y其中,Wxh、Whh和Why分別是輸入到隱藏狀態(tài)、隱藏狀態(tài)到隱藏狀態(tài)、隱藏狀態(tài)到輸出的權(quán)重矩陣,bh和4.2.1.1示例代碼importnumpyasnp

#定義RNN參數(shù)

W_xh=np.random.randn(100,100)*0.01

W_hh=np.random.randn(100,100)*0.01

W_hy=np.random.randn(100,10)*0.01

b_h=np.zeros((100,1))

b_y=np.zeros((10,1))

#定義激活函數(shù)

defsigmoid(x):

return1/(1+np.exp(-x))

#RNN前向傳播

defrnn_forward(x,h_prev):

"""

RNN前向傳播

:paramx:當(dāng)前時(shí)間步的輸入,二維數(shù)組

:paramh_prev:前一時(shí)間步的隱藏狀態(tài),二維數(shù)組

:return:當(dāng)前時(shí)間步的隱藏狀態(tài)和輸出

"""

h=sigmoid(np.dot(W_xh,x)+np.dot(W_hh,h_prev)+b_h)

y=np.dot(W_hy,h)+b_y

returnh,y

#輸入序列和初始隱藏狀態(tài)

x=np.random.randn(100,1)

h_prev=np.zeros((100,1))

#計(jì)算隱藏狀態(tài)和輸出

h,y=rnn_forward(x,h_prev)

print(h)

print(y)4.2.2代碼解釋在RNN的前向傳播中,rnn_forward函數(shù)接收當(dāng)前時(shí)間步的輸入x和前一時(shí)間步的隱藏狀態(tài)h_prev,通過矩陣乘法和激活函數(shù)計(jì)算當(dāng)前時(shí)間步的隱藏狀態(tài)h和輸出y。權(quán)重矩陣和偏置向量是RNN的參數(shù),需要通過訓(xùn)練來學(xué)習(xí)。4.3自注意力機(jī)制的線性代數(shù)視角自注意力機(jī)制(Self-AttentionMechanism)在處理序列數(shù)據(jù)時(shí),允許模型在不同位置之間建立聯(lián)系,從而捕捉到長距離依賴關(guān)系。這種機(jī)制通常通過查詢、鍵和值的矩陣運(yùn)算來實(shí)現(xiàn)。4.3.1自注意力的計(jì)算自注意力機(jī)制的計(jì)算可以表示為以下矩陣運(yùn)算:計(jì)算查詢、鍵和值:Q=XWQ計(jì)算注意力權(quán)重:A計(jì)算加權(quán)和:Y其中,X是輸入序列,WQ、WK和WV是權(quán)重矩陣,dk是鍵向量的維度,A4.3.1.1示例代碼importnumpyasnp

#定義輸入序列和權(quán)重矩陣

X=np.random.randn(10,50)

W_Q=np.random.randn(50,50)

W_K=np.random.randn(50,50)

W_V=np.random.randn(50,50)

#計(jì)算查詢、鍵和值

Q=np.dot(X,W_Q

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論