【发布时间】:2017-03-30 03:25:19
【问题描述】:
我正在尝试实现 ANN,并且我还为反向传播编写了一个数值梯度检查。
当我使用 sigmoid 函数时,数值梯度检查工作正常。
但是,当我使用 relu 激活时,梯度检查失败。
我得到的渐变是这样写的:
switch opts.act_function
case 'relu'
d_act = a{i} > 0;
case 'sigmoid'
d_act = a{i} * (1 - a{i});
end
我的问题是0处没有梯度。如果我将0的次梯度设置为0,这样是否正确?
【问题讨论】:
-
究竟是什么失败了?或者问题只是关于
x=0的渐变应该是什么? -
权重梯度检查失败。我使用
dw = f(w + epsilon) - f(w - epsilon) / (2 * epsilon)来检查渐变。当我使用 sigmoid 激活时,这是正确的,但是当我使用 relu 激活时,它会失败。那么,x = 0时我应该设置的正确渐变是什么。
标签: matlab machine-learning neural-network deep-learning