【发布时间】:2019-07-04 14:14:34
【问题描述】:
我的问题是关于当隐藏单元的数量大于 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) 的偏置单元。我使用sigmoid 激活A_h1 = sigmoid(Z_h1) 并发现A_h1 和Z_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_onehot 是y_train 的onehot 表示。Err_out 具有形状@987654352 @.紧随其后的是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的形状为@987654359 @. 在下一步中,我执行Step2_BP2: Err_h1 = \Sum_i \Sum_j [ ( Err_out * w_out.T)_{i,j} * sig_deriv_h1__{i,j} )]。这里,Err_h1 的形状为 (n,h1)。在最后一步中,我执行 Step3_BP2: delta_w_h1 = (X_train)^T * Err_h1 和 delta_b_h1 = sum(Err_h1)。如果我应该添加哪些反向传播步骤我在第一个隐藏层之后和输出层之前有一个第二个隐藏层(h2 个单元)?我应该修改我在这里描述的一个隐藏层案例的反向传播步骤吗?
【问题讨论】:
-
你在做什么? TensorFlow/numpy 还是别的什么?
-
我正在尝试以 ab initio 方式编写前向和后向传播步骤(即不使用 tensorflow 或任何包。)
-
这是 coursera 的深度学习模块中的内容,根据 Coursera 协议中的行为准则,我不允许上传其中的部分代码,但很多人已经上传到了 GitHub,这里是同一github.com/enggen/Deep-Learning-Coursera/blob/master/…上的一个链接
标签: python neural-network deep-learning