Machine learning 反向传播示例

Machine learning 反向传播示例,machine-learning,neural-network,backpropagation,mnist,Machine Learning,Neural Network,Backpropagation,Mnist,我正在尝试实现我自己的神经网络,但我不太相信我的数学是正确的 我在做MNIST数字识别,所以我有10个概率的最大输出。作为输出。然后,我计算我的增量输出,如下所示: delta_output = vector of outputs - one-hot encoded actual label delta_输出是一个尺寸为10 x 1的矩阵 然后我计算最后一个隐藏层权重的增量,因此: delta_hidden = weight_hidden.transpose * delta_output *

我正在尝试实现我自己的神经网络,但我不太相信我的数学是正确的

我在做MNIST数字识别,所以我有10个概率的最大输出。作为输出。然后,我计算我的增量输出,如下所示:

delta_output = vector of outputs - one-hot encoded actual label
delta_输出是一个尺寸为10 x 1的矩阵

然后我计算最后一个隐藏层权重的增量,因此:

delta_hidden = weight_hidden.transpose * delta_output * der_hidden_activation(output_hidden)
假设在最后一个隐藏层中有N个节点,权重_hidden是一个维数为N×10的矩阵,从上面输出的delta_是10x1,而der_hidden激活(输出_hidden)的结果是nx1

现在,我的第一个问题是,delta_输出和der_hidden_激活(output_hidden)的乘积是否应该使用外积返回一个10 x N矩阵?我想我需要对这个矩阵做一个哈达玛积,用未触及的权重使delta_隐藏为nx10

最后,我将这个delta_hidden乘以我的学习率,然后从最后一个隐藏层的原始权重中减去它,得到我的新权重

我的第二个也是最后一个问题是,我错过了什么吗

提前谢谢

假设在最后一个隐藏层中有N个节点,权重_hidden是一个维数为N×10的矩阵,从上面输出的delta_是10x1,而der_hidden激活(输出_hidden)的结果是nx1

当从一层N个神经元(隐藏层)到一层M个神经元(输出层)时,在下,权重矩阵的维数应为M x N。因此,对于反向传播阶段,从一层M个神经元(输出层)到一层N个神经元(隐藏层),使用权重矩阵的值,它将给出一个维数矩阵(N x M)

现在,我的第一个问题是,delta_输出和der_hidden_激活(output_hidden)的乘积是否应该使用外积返回一个10 x N矩阵? 我想我需要对这个矩阵做一个哈达玛积,用未触及的权重使delta_隐藏为nx10

是的,您需要使用,但是您不能将delta_output和der_hidden_activation(output_hidden)相乘,因为它们是不同维度的矩阵(分别为10 x 1和N x 1)。相反,将隐藏的_权重矩阵(nx10)的转置乘以delta_输出(10x1),得到nx1的矩阵,然后使用der_hidden_激活(输出_hidden)执行hadamard乘积

如果我翻译的正确

隐权矩阵=

delta_输出=

delta_隐藏=

der_hidden_激活(输出_hidden)=

将此插入BP公式中

如您所见,首先需要将隐藏权重(nx10)的转置与delta_输出(10x1)相乘,以生成矩阵(nx1),然后使用具有der_隐藏激活(输出_隐藏)的阿达玛积

最后,我将这个delta_hidden乘以我的学习率,然后从最后一个隐藏层的原始权重中减去它,得到我的新权重

你不能用学习率乘以隐藏的delta_。你需要在偏差和增量权重矩阵上使用学习率

增量权重矩阵是一个与(隐藏)权重矩阵尺寸相同的矩阵,使用以下公式计算

然后你可以很容易地应用学习率

假设在最后一个隐藏层中有N个节点,权重_hidden是一个维数为N×10的矩阵,从上面输出的delta_是10x1,而der_hidden激活(输出_hidden)的结果是nx1

当从一层N个神经元(隐藏层)到一层M个神经元(输出层)时,在下,权重矩阵的维数应为M x N。因此,对于反向传播阶段,从一层M个神经元(输出层)到一层N个神经元(隐藏层),使用权重矩阵的值,它将给出一个维数矩阵(N x M)

现在,我的第一个问题是,delta_输出和der_hidden_激活(output_hidden)的乘积是否应该使用外积返回一个10 x N矩阵? 我想我需要对这个矩阵做一个哈达玛积,用未触及的权重使delta_隐藏为nx10

是的,您需要使用,但是您不能将delta_output和der_hidden_activation(output_hidden)相乘,因为它们是不同维度的矩阵(分别为10 x 1和N x 1)。相反,将隐藏的_权重矩阵(nx10)的转置乘以delta_输出(10x1),得到nx1的矩阵,然后使用der_hidden_激活(输出_hidden)执行hadamard乘积

如果我翻译的正确

隐权矩阵=

delta_输出=

delta_隐藏=

der_hidden_激活(输出_hidden)=

将此插入BP公式中

如您所见,首先需要将隐藏权重(nx10)的转置与delta_输出(10x1)相乘,以生成矩阵(nx1),然后使用具有der_隐藏激活(输出_隐藏)的阿达玛积

最后,我将这个delta_hidden乘以我的学习率,然后从最后一个隐藏层的原始权重中减去它,得到我的新权重

你不能用学习率乘以隐藏的delta_。你需要在偏差和增量权重矩阵上使用学习率

增量权重矩阵是一个与(隐藏)权重矩阵尺寸相同的矩阵,使用以下公式计算

然后你可以很容易地应用学习率