深度学习中使用relu激活函数怎样进行训练这时候bp算法怎样计算梯度

和使用sigmoid, tanh作为激活函数基本没有区别吧,除了更加简单,权重更新的公式都是:
深度学习中使用relu激活函数怎样进行训练这时候bp算法怎样计算梯度
【深度学习中使用relu激活函数怎样进行训练这时候bp算法怎样计算梯度】
其中miu为learning rate, O为input,E为Error = (Real Value - Predicted Value), 后面的就是激活函数的derivative.
具体地,对于不同的激活函数就是:
深度学习中使用relu激活函数怎样进行训练这时候bp算法怎样计算梯度

具体实现,用numpy写一个两层的简单神经网络:
import numpy as npN, D_in, H, D_out = 64, 1000, 100, 10x = np.random.randn(N, D_in)y = np.random.randn(N, D_out)w1 = np.random.randn(D_in, H)w2 = np.random.randn(N, D_out)learning_rate = 1e-6for t in range(500): h = x.dot(w1) h_relu = np.maximum(h, 0) y_pred = h_relu.dot(w2) loss = np.square*(y_pred - y).sum() print(t, loss) grad_y_pred = 2.0 * (y_pred - y) grad_w2 = h_relu.T.dot(grad_y_pred) grad_h_relu = grad_y_pred.dot(w2.T) grad_h = grad_h_relu.copy() grad_h = 0 grad_w1 = x.T.dot(grad_h) w1 -= learning_rate * grad_w1 w2 -= learning_rate * grad_w2代码来自PyTorch Tutorial
以上。

■网友
我简单描述一下向量化的表示,如果正向传递是:f(行向量X1 乘 系数矩阵w2) 等于 行向量X2。那么,反向传递时候先计算X2层对应的残差行向量Delta2,然后用行向量X1的转置 乘 Delta2就是W2的梯度了。至于Delta2是怎么计算的呢,只需要 Delta3 乘 W3的转置再阿达马乘积来乘“f(行向量X1 乘 系数矩阵w2)”的导数就能得到Delta2。至于Delta3怎么来的呢,用同样的方法从Delta4推过来
■网友
还是让我帮你顶上去?


    推荐阅读