我的问题是隐藏单元数大于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的单位)之后有第二个隐藏层,应该添加哪些反向传播步骤第一隐藏层和输出层之前?我应该针对这里描述的一个隐藏层情况修改反向传播步骤吗?
答案 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 (偏差更新)