神经网络八度实现

0 投票
1 回答
1571 浏览
提问于 2025-04-17 15:10

有人能给我解释一下这个吗:

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)

编辑:

没事了,我想它是试图不修改第一列。

1 个回答

3

Theta1_grad(:, 1) 这段代码是从矩阵 Theta1_grad 中取出第一列,然后把这个向量里的每一个元素都除以 m 的值。

Theta1_grad(:, 2:end) 这段代码是从第二列开始取出矩阵的剩余部分,一直到最后一列(也就是除了第一列之外的所有列)。

通常情况下,第一列会被设置为 1,这样可以用来估算模型的截距。

在Octave中,如果在数学运算前面加上 .,就表示是逐个元素进行操作。例如,A * B 是普通的矩阵乘法,而 A .* B 是逐个元素相乘。

阅读 这份快速Octave指南 会对你有帮助。

编辑:

这个公式是用于正则化神经网络的(目的是减少过拟合的风险)。

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

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

撰写回答