任何人都可以解释一下:
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)
没关系,我认为它试图不修改第一列。
答案 0 :(得分:3)
Theta1_grad(:, 1)
获取矩阵Theta1_grad
的第一列,然后将此向量的每个元素除以m
Theta1_grad(:, 2:end)
获取矩阵的其余部分从第2列开始到结尾(基本上除了第一列之外的所有列)
通常,第一列设置为1
以允许估计模型截距
通常,在Octave中算术运算之前使用.
意味着逐个元素操作,例如,A * B
是正常的矩阵乘法,但A .* B
是逐个元素乘法{ p>
阅读a quick Octave,会对你有帮助。
修改强>
该等式用于正则化神经网络(以降低过度拟合风险)
Theta1_grad(:, 2:end) = Theta1_grad(:, 2:end) ./ m + ((lambda/m) * Theta1(:, 2:end));
我没有看到整个代码,但我相信lambda 不学习率,它是正则化参数(或惩罚),它乘以Theta1
本身不渐变。