神经网络八度实现
有人能给我解释一下这个吗:
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
本身相乘的,而不是和梯度相乘。