前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >知识卡片 反向传播中的梯度

知识卡片 反向传播中的梯度

作者头像
DataScience
发布2020-08-13 10:46:53
6090
发布2020-08-13 10:46:53
举报
文章被收录于专栏:A2DataA2Data

前言:本文介绍神经网络中通过反向传播计算梯度的原理,并通过代码演示计算正向和反向传播中的矩阵相乘得出梯度。

反向传播中的梯度

反向传播(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

# 正向传播

W = np.random.randn(5,10)

X = np.random.randn(10,2)

# X 10 行数 与 W 列数相同,2 两行意味着分类为两类

D = W.dot(X)

print(D) # D也是分类的结果

'''

代码语言:javascript
复制
[[ 4.76515005  0.95056964]
 [-1.20699003  2.54451633]
 [-0.04728757 -4.10740612]
 [-1.27330882 -1.57704856]
 [-1.75583338 -6.60507729]]

'''

# 反向传播

dD = np.random.randn(*D.shape) # *的作用是向函数传递参数

dDdW = dD.dot(X.T) # D 对参数 W 求偏导也就是梯度;D是五行两列, X是十行两列,矩阵相乘行列数要相等,X.T 转置

dDdX= W.T.dot(dD)

print(dDdW)

print(dDdX)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档