gpt4 book ai didi

python - 2个隐藏层的反向传播和正向传播

转载 作者:行者123 更新时间:2023-11-30 21:59:18 24 4
gpt4 key购买 nike

我的问题是当隐藏单元数大于1时深度神经网络的正向传播和反向传播。

我知道如果我有一个隐藏层,该怎么办。对于单个隐藏层,如果我的输入数据X_train具有n个样本,且具有d个特征(即X_train(n, d)维度矩阵,y_train(n,1)维度向量),如果在我的第一个隐藏层中有h1个隐藏单位,则我使用Z_h1 = (X_train * w_h1) + b_h1(其中w_h1是权重矩阵,其中包含形状为(d, h1)b_h1的随机数条目为形状为(h1,1)的偏置单元。我使用S型激活A_h1 = sigmoid(Z_h1),并且发现A_h1Z_h1的形状均为(n, h1)。如果输出单元数为t,则使用权重矩阵尺寸为w_out(h1, t)和形状为b_out(t,1)以获得输出Z_out = (A_h1 * w_h1) + b_h1从这里我可以得到A_out = sigmoid(Z_out)
 形状为(n, t)。如果在第一个隐藏层之后和输出层之前有第二个隐藏层(单位为h2),那么必须在正向传播中添加哪些步骤,并且应该修改哪些步骤?

我也对在单个隐藏层神经网络的情况下如何解决反向传播问题有所了解。对于上一段中的单个隐藏层示例,我知道在第一个反向传播步骤(output layer -> hidden layer1)中,我应该做Step1_BP1: Err_out = A_out - y_train_onehot(这里y_train_onehoty_train的一个热表示。Err_out具有形状 。后跟 (n,t)Step2_BP1: delta_w_out = (A_h1)^T * Err_out。符号 delta_b_out = sum(Err_out)表示矩阵的转置。对于第二个反向传播步骤 (.)^T,我们执行以下 (hidden layer1 -> input layer)。在这里 Step1_BP2: sig_deriv_h1 = (A_h1) * (1-A_h1)具有形状 。在下一步中,我执行 sig_deriv_h1]。在这里, (n,h1)具有形状 Step2_BP2: Err_h1 = \Sum_i \Sum_j [ ( Err_out * w_out.T)_{i,j} * sig_deriv_h1__{i,j} )。在最后一步中,我执行 Err_h1(n,h1)。如果我有一个在第一个隐藏层之后和输出层之前的第二个隐藏层(单位为h2数量),我是否应该针对在此描述的一个隐藏层情况修改反向传播步骤?

最佳答案

●令X为形状为(n, d)的样本矩阵,其中n表示样本数,而d表示特征数。

●令wh1为权重矩阵-形状为(d, h1),并且

●令bh1为形状(1, h1)的偏差矢量。

对于向前和向后传播,需要执行以下步骤:

►正向传播:

⛶步骤1:

Zh1 = [[X•wh1] + bh1

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

(n,h1) (n,d) (d,h1) (1,h1)

此处,符号•表示矩阵乘法,h1表示第一个隐藏层中的隐藏单元数。

⛶步骤2:

令Φ()为激活函数。我们得到。

ah1 =Φ(Zh1)

↓↓↓

(n,h1) (n,h1)

⛶步骤3:

获得新的权重和偏见:

●形状为(h1, h2)的wh2,以及

●形状为(1, h2)的bh2。

⛶步骤4:

Zh2 = [[ah1•wh2] + bh2

↓↓↓↓↓↓↓↓↓↓↓↓↓↓

(n,h2) (n,h1) (h1,h2) (1,h2)

在这里,h2是第二个隐藏层中的隐藏单元数。

⛶步骤5:

ah2 =Φ(Zh2)

↓↓↓

(n,h2) (n,h2)

⛶步骤6:

获得新的权重和偏见:

●形状为(h2, t),并且

●形状为(1, t)

在这里,t是类数。

⛶步骤7:

Zout = [[ah2•wout] + bout

↓↓↓↓↓↓↓↓

(n,t) (n,h2) (h2,t) (1,t)

⛶步骤8:

aout =Φ(Zout)

↓↓↓

(n,t) (n,t)

►向后传播:

⛶步骤1:

构造唯一输出类的单次编码矩阵(yone-hot)。

错误输出=不存在-泛滥

↓↓↓↓↓↓↓↓↓↓

(n,t) (n,t) (n,t)

⛶步骤2:

Δwout=η(ah2T•错误输出)

↓↓↓↓↓↓↓↓

(h2,t) (h2,n)

Δbout=η[∑ i = 1n(Errorout,i)]

↓↓↓↓↓

(n,t) (1,t)

此处η是学习率。

wout = wout-Δwout(重量更新)

bout = bout-Δbout(偏差更新。)

⛶步骤3:

Error2 = [Errorout•woutT]Φ/(ah2)

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

(1,t) (n,h2) (n,t) (t,h2)

在此,符号✴表示逐元素矩阵乘法。符号Φ/表示S形函数的导数。

⛶步骤4:

Δwh2=η(ah1T•错误2)

↓↓↓↓↓↓↓↓

(n,h2) (h1,h2)

Δbh2=η[∑ i = 1n(Error2,i)]

↓↓↓↓↓

(h1,n) (n,h2)

wh2 = wh2-Δwh2(重量更新)

bh2 = bh2-Δbh2(偏差更新。)

⛶步骤5:

Error3 = [Error2•wh2T]✴Φ/(ah1)

↓↓↓↓↓↓↓↓↓↓

(1,h2) (1,h2) (n,h1) (n,h2)

⛶步骤6:

Δwh1=η(XT•Error3)

↓↓↓↓↓↓↓↓

(h2,h1) (n,h1)

Δbh1=η[∑ i = 1n(Error3,i)]

↓↓↓↓↓

(d,h1) (d,n)

wh1 = wh1-Δwh1(重量更新)

bh1 = bh1-Δbh1(偏差更新。)

关于python - 2个隐藏层的反向传播和正向传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54624562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com