为什么我们在神经网络反向传播中 "unroll" thetas?
Why do we "unroll" thetas in neural network back propagation?
在反向传播实现中,展开(将 thetas 作为一维向量)thetas 然后将它们作为参数传递给成本函数似乎是一种规范。
为了说明(我假设3层NN的情况):
def NNCostFunction(unrolled_thetas, input_layer_size, hidden_layer_size, num_labels, X, y):
# **ROLL AGAIN** unrolled_thetas to theta1, theta2 (3 layer assumption)
# Forward propagate to calculate the cost
# Then Back propagate to calculate the delta
return cost, gradient_theta1, gradient_theta2
让我疑惑的是:
为什么我们将展开的 thetas 传递给函数,然后在函数内部再次滚动它(形成 thetas 的原始形状)?为什么我们不直接将原始 thetas 传递给成本函数?
我想我没有抓住这里重要的东西。我们这样做一定是有原因的。是不是大多数语言的优化实现只把theta作为一个向量?请阐明我的理解!
谢谢。
我想通了。展开不是特定于反向传播的。
为了使用现成的最小化器,例如 fmincg,成本函数已设置为将参数展开为单个向量参数!
我可能错了,但据我了解,我们用于梯度下降的许多函数,例如 fminuc 等高级优化函数,确实需要展开的向量才能更好地计算。
其他矩阵计算也是如此,它使这些事情变得容易得多。这就是我所知道的......可能还有更好的理由。
在反向传播实现中,展开(将 thetas 作为一维向量)thetas 然后将它们作为参数传递给成本函数似乎是一种规范。
为了说明(我假设3层NN的情况):
def NNCostFunction(unrolled_thetas, input_layer_size, hidden_layer_size, num_labels, X, y):
# **ROLL AGAIN** unrolled_thetas to theta1, theta2 (3 layer assumption)
# Forward propagate to calculate the cost
# Then Back propagate to calculate the delta
return cost, gradient_theta1, gradient_theta2
让我疑惑的是: 为什么我们将展开的 thetas 传递给函数,然后在函数内部再次滚动它(形成 thetas 的原始形状)?为什么我们不直接将原始 thetas 传递给成本函数?
我想我没有抓住这里重要的东西。我们这样做一定是有原因的。是不是大多数语言的优化实现只把theta作为一个向量?请阐明我的理解! 谢谢。
我想通了。展开不是特定于反向传播的。
为了使用现成的最小化器,例如 fmincg,成本函数已设置为将参数展开为单个向量参数!
我可能错了,但据我了解,我们用于梯度下降的许多函数,例如 fminuc 等高级优化函数,确实需要展开的向量才能更好地计算。
其他矩阵计算也是如此,它使这些事情变得容易得多。这就是我所知道的......可能还有更好的理由。