链式法则

简单的说链式法则就是原本y对x求偏导,但是由于过程较为复杂,我们需要将函数进行拆分,通过链式进行分别求导,这样会使整个计算更为简单。

假设f = k ( a + b c ) f = k(a + bc)f=k(a+bc)

通俗来说,链式法则表明,知道z相对于y的瞬时变化率和y相对于x的瞬时变化率,就可以计算z相对于x的瞬时变化率作为这两个变化率的乘积。其实就是求复合函数导数的过程。

用链式法则(将这些梯度表达式链接起来相乘。)分别对变量a、b、c进行求导:

前向传播

前向传播(forward propagation或forward pass) 指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。

对于中间变量:

W为参数权重,b为函数偏置,函数结果经过激活函数C(常见的激活函数有Sigmoid、tanh、ReLU)

假设损失函数为l,真实值为h,我们可以计算单个数据样本的损失项,

在不考虑优化函数,单个神经元从输入到输出结束,后面需要对误差进行反向传播,更新权值,重新计算输出。

反向传播

反向传播(backward propagation或backpropagation)指的是计算神经网络参数梯度的方法。 简言之,该方法根据微积分中的链式规则,按相反的顺序从输出层到输入层遍历网络。 该算法存储了计算某些参数梯度时所需的任何中间变量(偏导数)。

(1)梯度下降
在说反向传播算法前,先简单了解一些梯度下降,对于损失函数(这里假设损失是MSE,即均方误差损失)


除此以外还有一些再次基础上优化的其他梯度下降方法: 小批量样本梯度下降(Mini Batch GD)、随机梯度下降(Stochastic GD)等。
(2)反向传播
反向传播计算损失函数相对于单个输入-输出示例的网络权重的梯度,为了说明这个过程,使用了具有2个输入和1个输出的2层神经网络,如下图所示:

不考虑优化算法,单个神经结构如下图所示,第一个单元将权重系数和输入信号的乘积相加。第二单元为神经元激活函数(反向传播需要在网络设计时激活函数可微的),如下图所示:






根据链式法则求出所有的更新后的权重W WW梯度,偏值使用同样的方法。通过反向传播,计算损失函数与当前神经元权重的最陡下降方向。然后,可以沿最陡下降方向修改权重,并以有效的方式降低损失。
(3)反向传播代码

def optimize(w, b, X, Y, num_iterations, learning_rate):costs = []for i in range(num_iterations):# 梯度更新计算函数grads, cost = propagate(w, b, X, Y)# 取出两个部分参数的梯度dw = grads['dw']db = grads['db']# 按照梯度下降公式去计算w = w - learning_rate * dwb = b - learning_rate * dbif i % 100 == 0:costs.append(cost)if i % 100 == 0:print("损失结果 %i: %f" % (i, cost))print(b)params = {"w": w,"b": b}grads = {"dw": dw,"db": db}return params, grads, costsdef propagate(w, b, X, Y):m = X.shape[1]# 前向传播A = basic_sigmoid(np.dot(w.T, X) + b)cost = -1 / m * np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))# 反向传播dz = A - Ydw = 1 / m * np.dot(X, dz.T)db = 1 / m * np.sum(dz)grads = {"dw": dw,"db": db}return grads, cost

参考

https://blog.csdn.net/Peyzhang/article/details/125479563

【深度学习数学基础之线性代数】研究使用链式法则进行反向传播的求导算法相关推荐

  1. 深度学习与自然语言处理教程(3) - 神经网络与反向传播(NLP通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...

  2. 深度学习入门笔记(六):误差反向传播算法

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  3. 【人工智能深度学习】人工智能中的梯度下降算法和反向传播教程

    [人工智能深度学习]人工智能中的梯度下降算法和反向传播教程 梯度下降优化算法 参数化模型 用方块图表达参数模型的计算图 损失函数 梯度下降 在传统神经网络中随机梯度下降和反向传播算法的优势 随机梯度下 ...

  4. 深度学习数学基础之线性代数

    深度学习中的基本数据结构,基本上都是用向量或矩阵表示的,因此: 深度学习的基础学科之一:就是线性代数. 深度学习中的线性代数知识主要包括以下部分: 1.标量.向量.矩阵和张量: 这4个变量很好理解: ...

  5. 深度学习第三次课-梯度下降与反向传播

    梯度下降 损失函数可视化 得分函数   f=W*X 损失函数   c=W*X-y 目标    损失函数最小    最优化过程 可视化 一维 二维   热力图 如果损失函数是一个凸函数,例如SVM. 凸 ...

  6. 深度学习与神经网络(三)——多层感知机 反向传播 优化实战

    介绍一个完完整整的,与我们实际使用一摸一样的多层感知机的反向传播方式 多层感知机MLP & 反向传播 与多输出感知机相比 有多层节点(绿色的) δkk是由Okk和tk得到的 所以δ一共有k个 ...

  7. 《速通深度学习数学基础》

    目录 序 前言 第1章 线性代数的基本概念 1.1 向量和深度学习 1.2 向量距离计算 1.3 向量的基本性质 1.4 矩阵的基本概念 1.5 一些特殊的矩阵 第2章 线性代数在深度学习中的应用 2 ...

  8. 深度学习--数学基础(1)

    深度学习–数学基础(1) *2021-04-21 22:56 在学习深度学习之前,需具备良好的数学基础,主要包括线性代数.微积分.概率论三个数学分支. 目录 深度学习--数学基础(1) 1.数据表示- ...

  9. 万字长文概览深度学习的可解释性研究

    ↑ 点击蓝字 关注视学算法 作者丨王小贱@知乎 来源丨https://www.zhihu.com/column/buaabigcity 编辑丨极市平台 本文仅用于学术分享,如有侵权,请联系后台作删文处 ...

最新文章

  1. 程序员的工资VS普通人的工资...
  2. 解决“cannot open git-receive-pack”错误
  3. Linux 修改目录下所有文件权限
  4. Git 教程学习--第三篇
  5. java怎么通过字段去获取对象_通过java反射获取任意对象的字段名及字段值
  6. ADO.NET Entity Framework如何:使用实体数据模型向导(实体框架)
  7. jira7.3.6添加导出excel的按钮
  8. 巧用G6FTPServer账号***台湾某图书服务器
  9. 读书笔记:《人工智能》
  10. 制作Win7多合一原版系统光盘镜像
  11. 可编译易用的模块化nf-HiPAC移植成功
  12. 母羊奶粉的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. 学习游戏要学习编程语言吗?十大主流编程语言解析
  14. 台式机安装centos7系统
  15. 秘密secret的安全性以及解决哪些痛点
  16. 指尖检测的新方法几种
  17. 浪潮sa5112m5和sam5212m5服务器配置管理口和raid方法
  18. c语言余弦函数,C语言编写余弦函数曲线
  19. pureftp部署和优化
  20. python绘制太阳系模型_制作一个太阳系模型

热门文章

  1. Blender遇到的一些莫名其妙的问题
  2. 系统架构师考试-案例
  3. 冯诺依曼结构与哈佛结构的区别
  4. UITextField默认输入法不是简体拼音的问题的解决方法
  5. 红旗linux如何开远程桌面,红旗Linux开启_ftp_telnet_远程桌面
  6. g华清远见基于linux和Qt,【华清远见】QT编程实例集
  7. 通过一个网络错误简述DNS
  8. Go--Redis快速入门指南
  9. 计算机网络进阶 ---- 网络类型 ---- 二层封装协议 ---- HDLC ---- PPP ---- pap认证 ---- chap认证 ---- 详解
  10. Rasa 3.x 学习系列-Rasa X 社区版(免费版) 更改