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

时间:2019-02-11 05:44:02

标签: python neural-network deep-learning

我的问题是隐藏单元数大于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),发现两者{{ 1}}和A_h1的形状为Z_h1。如果我的输出单位数为(n, h1),则使用权重矩阵t,其尺寸为w_out和{形状为(h1, t)的{​​1}}得到输出b_out,从这里我可以得到(t,1)  形状为Z_out = (A_h1 * w_h1) + b_h1如果我在第一个隐藏层之后和输出层之前有第二个隐藏层(单位为h2),那么我必须在正向传播中添加哪些步骤,应该修改哪些步骤? < / p>

我也对在单个隐藏层神经网络的情况下如何解决反向传播问题有所了解。对于上一段中的单个隐藏层示例,我知道在第一个反向传播步骤A_out = sigmoid(Z_out)中,我应该做(n, t)(这里(output layer -> hidden layer1)Step1_BP1: Err_out = A_out - y_train_onehot的一个单图表示。 。y_train_onehot的形状为y_train,后跟Err_out(n,t),符号Step2_BP1: delta_w_out = (A_h1)^T * Err_out表示矩阵的转置。对于第二个反向传播步骤{{ 1}},我们执行以下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如果在第二个隐藏层(单位为h2的单位)之后有第二个隐藏层,应该添加哪些反向传播步骤第一隐藏层和输出层之前?我应该针对这里描述的一个隐藏层情况修改反向传播步骤吗?

2 个答案:

答案 0 :(得分:1)

对于正向传播,第一个隐藏层的输出尺寸必须与第二个输入层的尺寸相适应。

如上所述,您的输入的维度为(n,d)。隐藏层1的输出的尺寸为(n,h1)。因此,第二个隐藏层的权重和偏差必须分别为(h1,h2)(h1,h2)

因此w_h2的尺寸为(h1,h2),而b_h2的尺寸为(h1,h2)

输出层的权重和偏差的尺寸将为w_output,尺寸为(h2,1)b_output将为(h2,1)

在反向传播中必须重复的步骤。

答案 1 :(得分:1)

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

●假设 w h1 是权重矩阵-形状为(d, h1),并且

●假设 b h1 为形状(1, h1)的偏差矢量。

对于前进后退传播,您需要执行以下步骤:

正向传播:

第1步:

Z h1 = [[X•w h1 ] + + b h1

↓↓↓↓↓↓

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

在这里,符号•表示矩阵相乘,(1,h1)表示第一个隐藏层中的隐藏单元数。

第2步:

Φ()为激活功能。我们得到。

a h1 =Φ(Z h1

↓↓

h1

第3步:

获取新的权重和偏见:

形状为(n,h1)

w h2

b h2 形状为(n,h1)

第4步:

Z h2 = = [a h1 •w h2 ] + b h2

↓↓↓↓↓↓

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

这里(n,h1)是第二个隐藏层中的隐藏单元数。

第5步:

a h2 =Φ(Z h2

↓↓

(h1,h2)

第6步:

获取新的权重和偏见:

形状为(1,h2)

w ,并且

b 形状为h2

在这里,(n,h2)是类的数量。

第7步:

Z out = [[a h2 ]•w out ] + b out

↓↓↓↓↓↓

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

步骤8:

a out =Φ(Z out

↓↓

t

向后传播:

第1步:

构造唯一输出类( y one-hot )的一键编码矩阵。

错误 out = = a out -y one-hot

↓↓↓↓

(n,t)

(n,h2)

第2步:

Δw out =η(a h2 T •错误 out

↓↓↓↓

(h2,t)

(1,t)

Δb out =η[∑ i = 1 n (错误 out,i ) ]

↓↓↓

(n,t)

这里η是学习率。

w out = w out -Δw out (权重更新)

b out = b out -Δb out (偏差更新。)

第3步:

错误 2 = = [错误 out •w out T / (a h2

↓↓↓↓↓↓↓

(n,t) (n,t) {p {1}}

在这里,符号✴表示元素明智的矩阵乘法。符号Φ / 表示S型函数的导数。

第4步:

Δw h2 =η(a h1 T •错误 2

↓↓↓↓

(n,t)

(n,t)

Δb h2 =η[∑ i = 1 n (错误 2,i ) ]

↓↓↓

(h2,t)

w h2 = w h2 -Δw h2 (权重更新)

b h2 = b h2 -Δb h2 (偏差更新。)

第5步:

错误 3 = [错误 2 ••w h2 T / (a h1

↓↓↓↓↓↓

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

第6步:

Δw h1 =η(X T •错误 3

↓↓↓↓

(1,t)

(n,h2)

Δb h1 =η[∑ i = 1 n (错误 3,i ) ]

↓↓↓

(n,t)

w h1 = w h1 -Δw h1 (权重更新)

b h1 = b h1 -Δb h1 (偏差更新)