神经网络中的矩阵求导及反向传播推导
2018-11-04 10:56
483 查看
两层全连接神经网络的实现, 包括网络的实现、梯度的反向传播计算和权重更新过程:
[code]# -*- coding: utf-8 -*- import numpy as np # N is batch size; D_in is input dimension; # H is hidden dimension; D_out is output dimension. N, D_in, H, D_out = 64, 1000, 100, 10 # Create random input and output data x = np.random.randn(N, D_in) y = np.random.randn(N, D_out) # Randomly initialize weights w1 = np.random.randn(D_in, H) w2 = np.random.randn(H, D_out) learning_rate = 1e-6 for t in range(500): # Forward pass: compute predicted y h = x.dot(w1) h_relu = np.maximum(h, 0) y_pred = h_relu.dot(w2) # Compute and print loss loss = np.square(y_pred - y).sum() print(t, loss) # Backprop to compute gradients of w1 and w2 with respect to 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[h < 0] = 0 grad_w1 = x.T.dot(grad_h) # Update weights w1 -= learning_rate * grad_w1 w2 -= learning_rate * grad_w2
这里解决了我一个错误的认知:以为最速下降法跟各个变量计算的导数无关, 而其实就是每个变量各自按自己的导数下降就可以实现函数最陡的坡进行下降;在图形上可以理解多个向量合并成一个方向;
反向传播 过程,核心代码如下
[code]h = x.dot(w1) h_relu = np.maximum(h, 0) y_pred = h_relu.dot(w2) loss = np.square(y_pred - y).sum() grad_y_pred = 2.0 * (y_pred - y) # 64 x 10 grad_w2 = h_relu.T.dot(grad_y_pred) # 100 x 10 grad_h_relu = grad_y_pred.dot(w2.T) # 64 x 100 grad_h = grad_h_relu.copy() # 64 x 100 grad_h[h < 0] = 0 # 64 x 100 grad_w1 = x.T.dot(grad_h) # 1000 x 100
问题:如何实现relu求导呢?
阅读更多相关文章推荐
- 神经网络中的矩阵求导及反向传播推导
- 神经网络中的反向传播的推导和python实现
- 双层神经网络与逻辑回归正反向传播数学公式简要推导
- 神经网络的反向传播公式推导
- 神经网络反向传播算法公式推导详解
- 全连接神经网络的前向和反向传播推导
- 机器学习:神经网络反向传播推导
- 神经网络中的反向传播法算法推导及matlab代码实现
- 【机器学习】反向传播神经网络推导
- 神经网络基础和反向传播推导
- 神经网络反向传播公式的推导
- 依赖反向传播改进神经网络数据处理的精确度
- 使用反向传播训练神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- 神经网络之梯度下降与反向传播(上)
- 神经网络反向传播方法
- 神经网络反向传播
- 机器学习笔记07:神经网络的反向传播(Backpropagation)
- 一文弄懂神经网络中的反向传播法
- 一文弄懂神经网络中的反向传播——BackPropagation