0

谁能给我解释一下:

Theta1_grad(:, 1) = Theta1_grad(:, 1) ./ m;

Theta1_grad(:, 2:end) = Theta1_grad(:, 2:end) ./ m + ((lambda/m) * Theta1(:, 2:end));

我正在用python实现,我不知道Octave,我只是找到了这个神经网络实现,但我不明白这是在做什么。

参考: http: //feature-space.com/en/document49.pdf - 第 12 页 (2.5)

编辑:

没关系,我认为它试图不修改第一列。

4

1 回答 1

3

Theta1_grad(:, 1)获取矩阵的第一列,Theta1_grad然后将此向量的每个元素除以m

Theta1_grad(:, 2:end)获取从第 2 列到最后的矩阵的其余部分(基本上除了第一列之外的所有列)

通常,第一列设置为1允许估计模型截距

一般来说,.Octave中的算术运算之前的意思是逐个元素的运算,例如,A * B是普通的矩阵乘法,但是A .* B是逐个元素的乘法

快速阅读Octave会对您有所帮助。

编辑:

此方程适用于正则化神经网络(以降低过拟合风险)

 Theta1_grad(:, 2:end) = Theta1_grad(:, 2:end) ./ m + ((lambda/m) * Theta1(:, 2:end));

我没有看到完整的代码,但我相信 lambda不是学习率,它是正则化参数(或惩罚),它Theta1自身相乘而不是梯度。

于 2013-02-08T03:55:07.123 回答