前言:本文介绍神经网络中通过反向传播计算梯度的原理,并通过代码演示计算正向和反向传播中的矩阵相乘得出梯度。
反向传播中的梯度
反向传播(backpropagation)中的梯度
神经网络的基本结构有三层,输入、中间层和输出层。正向传播计算出来的结果,误差较大,因此通过反向传播不断迭代修改参数,使得误差降低。
反向传播从输出层传到输入层,逐层自顶向下计算损失函数,计算神经元权值的梯度,作为修改神经元的依据。当误差达到期望值时,或者迭代次数超过预设的阈值时学习结束。
梯度的简单解释
计算误差时,对于复杂的函数无法直接求得误差最小时的参数取值,采用梯度下降的办法更新梯度计算。在梯度的简单解释例2中,af/ax = 1, 这里的1是逻辑判断,即右边括号里的条件(x >= y)成立时为1,否则为0。
举例:反向传播中的梯度传播和计算-使用链规则对复合表达式求导
复合表达式f(u,v,w)表示为神经网络的损失函数,u和v是输入的训练数据,w是权重参数,是机器学习算法需要通过学习来调节。链式法则是对复合函数求导的一种方法。
正向传播中 q = u + v =3 ;f = qw = 3* -3 = -9
每个变量的导数的含义是表示整个表达式对预期值的敏感性,反向传播中为红色字体,从右往左看,f 梯度为 1, af/aq = w =-3 q 梯度=-3 ....... 传到最左边,求得三个变量的梯度。
Sigmoid 门的反向传播
Sigmoid的作用是对变量进行规范化处理,使其值落在[0,1],反向传播计算梯度,分别对变量w和x求导。
矩阵‐矩阵相乘的梯度
反向传播中的梯度计算不仅使用于单个变量,也适用于矩阵和向量。
矩阵D= 矩阵 W 点乘dot 矩阵 X,W 通常为权值矩阵,X 为样本的特征向量矩阵。随机产生 W 和 X,矩阵相乘时,X 的列数必须和 W 的行数相同,都设置为10。
反向传播过程中,首先随机初始化模拟dD梯度,dD与D 的shape相同;然后分别计算矩阵D对 W 和 X 的偏导,注意矩阵的相乘时的维度和转置即可求得表达式的对参数的偏导数,也就是梯度。
代码演示-正向传播和反向传播
# 演示内容: 正向传播和反向传播 -矩阵的相乘:D = W dot X
import numpy as np
# 正向传播
# X 10 行数 与 W 列数相同,2 两行意味着分类为两类
D = W.dot(X)
print(D) # D也是分类的结果
'''
'''
# 反向传播
dDdW = dD.dot(X.T) # D 对参数 W 求偏导也就是梯度;D是五行两列, X是十行两列,矩阵相乘行列数要相等,X.T 转置
dDdX= W.T.dot(dD)
print(dDdW)
print(dDdX)
领取专属 10元无门槛券
私享最新 技术干货