03 NLP-神经网络基础常识复习3-梯度的推导和反向传播的实现

news/2024/5/2 10:27:01/文章来源:https://blog.csdn.net/fuxun222/article/details/127147255

        计算图的介绍结束了,下面我们来实现一些实用的层。这里,我们将实现Sigmoid层、全连接层,Affine层和Softmax with Loss层。

1.Sigmoid层

        sigmoid函数由

y=\frac{1}{1+e^{-x}}表示,

sigmoid函数的导数由下式表示

\frac{\partial y}{\partial x}=y(1-y)

Sigmoid层的计算图可以绘制成如下图。这里,将输出侧的层传来的梯度(\frac{\partial L}{\partial y})乘以sigmoid函数的导数(\frac{\partial L}{\partial x}),然后将这个值传递给输入侧的层。

 接下来,我们使用Python来实现Sigmoid层。

class Sigmoid:def __init__(self):self.params,self.grads=[],[]self.out=Nonepassdef forward(self,x):out = 1/(1+np.exp(-x))self.out=outreturn outdef backward(self,dout):dx = dout*(1.0-self.out)*self.outreturn dx

        这里将正向传播的输出保存在实例变量out中。然后,在反向传播中,使用这个out变量进行计算。

2.Affine层

        如前所示,我们通过y = np.dot(x, W) + b实现了Affine层的正向传播。此时,在偏置的加法中,使用了NumPy的广播功能。如果明示这一点,则Affine层的计算图如图.

         通过MatMul节点进行矩阵乘积的计算。偏置被Repeat节点复制,然后进行加法运算(可以认为NumPy的广播功能在内部进行了Repeat节点的计算)。下面是Affine层的实现.

class Affine:def __init__(self,W,b):self.params = [W,b]self.grads = [np.zeros_like(W),np.zeros_like(b)]self.x =Nonepassdef forward(self,x):W,b =self.paramsout =np.dot(x,W)+bself.x =xreturn outdef backward(self,dout):W,b = self.paramsdx = np.dot(dout,W.T)dW = np.dot(self.x.T,dout)db = np.sum(dout,axis=0)self.grads[0][...]=dWself.grads[1][...]=dbreturn dx

     根据本书的代码规范,Affine层将参数保存在实例变量params中,将梯度保存在实例变量grads中。它的反向传播可以通过执行MatMul节点和Repeat节点的反向传播来实现。Repeat节点的反向传播可以通过np.sum()计算出来,此时注意矩阵的形状,就可以清楚地知道应该对哪个轴(axis)求和。最后,将权重参数的梯度设置给实例变量grads。以上就是Affine层的实现。  

        使用已经实现的MatMul层,可以更轻松地实现Affine层。这里出于复习的目的,没有使用MatMul层,而是使用NumPy的方法进行了实现。 

3 Softmax with Loss层

        我们将Softmax函数和交叉熵误差一起实现为Softmax with Loss层。此时,计算图如图

         计算图将Softmax函数记为Softmax层,将交叉熵误差记为Cross Entropy Error层。这里假设要执行3类别分类的任务,从前一层(靠近输入的层)接收3个输入。

        Softmax层对输入a1, a2, a3进行正规化,输出y1, y2, y3。Cross Entropy Error层接收Softmax的输出y1, y2,y3和监督标签t1, t2, t3,并基于这些数据输出损失L。

        需要注意的是反向传播的结果。从Softmax层传来的反向传播有y1-t1, y2-t2, y3-t3这样一个很“漂亮”的结果。因为y1, y2, y3是Softmax层的输出,t1, t2, t3是监督标签,所以y1-t1, y2-t2, y3-t3是Softmax层的输出和监督标签的差分。神经网络的反向传播将这个差分(误差)传给前面的层。这是神经网络的学习中的一个重要性质。

class SoftmaxWithLoss:def __init__(self):self.params, self.grads = [], []self.y = None  # softmax的输出self.t = None  # 监督标签def forward(self, x, t):self.t = tself.y = softmax(x)# 在监督标签为one-hot向量的情况下,转换为正确解标签的索引if self.t.size == self.y.size:self.t = self.t.argmax(axis=1)loss = cross_entropy_error(self.y, self.t)return lossdef backward(self, dout=1):batch_size = self.t.shape[0]dx = self.y.copy()dx[np.arange(batch_size), self.t] -= 1dx *= doutdx = dx / batch_sizereturn dx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_206636.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PWM实验(控制蜂鸣器,风扇,马达)

cortex-A7核实现PWM对蜂鸣器,风扇,马达的控制 1.PWM概念 PWM为一种对模拟信号电平进行数字编码的方法,通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。 A7核的芯片有控制PWM的脉冲宽度调制定…

【设计模式】-创建型模式-第2章第4讲-【原型模式】

目录 1、原型模式(Prototype Pattern)概念 2、浅拷贝与深拷贝 2.1、概念 2.2、Java 中的深浅拷贝 浅拷贝: 深拷贝: 实例 浅拷贝 深拷贝的两种实现方式 方式一 方式二 3、原型模式的优缺点 4、 结尾 1、原型模式&#…

带你一步步分析webpack是如何执行打包产物的

引入关系如图所示: 圈出来文件d是异步导入的文件。 wepback版本如图所示: 执行打包命令,产物如下图: 会生成两个js文件,一个是入口文件打包的testxx.js,还有一个是异步文件d生成的src_d_js.js。 打包后的…

CSS学习298~355(品优购+Web服务器)

1 品优购项目规划 1.1 网站制作流程 我们主要做前台页面设计 1.2 品优购项目整体介绍 项目名称: 品优购项目描述:品优购是一个电商网站,我们要完成PC端首页、列表页、注册页面的制作 1.3 品优购项目的学习目的 电商类网站比较综合,里面需要大量的布局技术,包括布局方式、…

数据结构-复杂度(深入学习版+Java版)

文章目录一、复杂度经典例子分析1、计算时间复杂度分析题1:O(NM),循环题2:O(N^2),冒泡排序题3:O(logN),二分查找题4:O(N),阶乘递归题5:O(2^N),斐波那契递归(满…

ffmpeg、ffplay、ffprobe 常用命令详解(音视频必备)

前言: 😄作者简介:小曾同学.com,小伙伴们也可以叫我小曾,一个致力于测试开发的博主⛽️ 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:…

回溯算法 - 二叉树中和为某一值的路径 字符串的排列

目录 1.二叉树中和为某一值的路径 1.1 题目描述 1.2 回溯算法的一般步骤 1.3 解题思路 1.4 代码实现 2. 字符串的排列 2.1 题目描述 2.2 解题思路 2.3 代码实现 1.二叉树中和为某一值的路径 1.1 题目描述 输入一颗二叉树的根节点root和一个整数expectNumber&#xff…

华为模拟器ensp学习笔记

CSDN话题挑战赛第2期 参赛话题:学习笔记 目录前言1️⃣如何注册eNSP设备?2️⃣如何通过SecureCRT登录eNSP模拟设备?结语前言 记录华为模拟器使用中遇到的问题 1️⃣如何注册eNSP设备? 如何注册eNSP设备 重新注册AR、WLAN设备: 启动AR时&…

模块化:CommonJS规范

目录 CommonJS规范 模块使用环境区分 核心语法 如何使用 CommonJS:服务器端使用 CommonJS:浏览器端使用 CommonJS规范 模块使用环境区分 CommonJS规范中,每一个JS文件都可以作为一个模块。模块的引入,主要区分两个环境&…

基于Java后台(Springboot框架)+前端小程序(MINA框架)+Mysql数据库的医院预约挂号小程序系统设计与实现

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序医院预约挂号系统,前台用户使用小程序,后台管理使用基JavaMySql技术;通过后台设置医院信息、录入医院科室信息、录入医生信息、设置医生排班信息、查看预约…

(附源码)计算机毕业设计SSM毕业设计管理系统

毕设帮助,指导,本源码分享,调试部署(见文末) 3.3功能需求分析 本系统采用从上往下的步骤开发,基本功能如下: 本课题要求实现一套毕业设计管理系统,系统主要包括(管理员,教师和学生&a…

python-pyecharts基础知识

资料来源:2022新版黑马程序员python教程,8天python从入门到精通,学python看这套就够了_哔哩哔哩_bilibili 折线图 地图 动态GDP增长图 补充知识: json 1)JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去…

群晖Docker套件注册Harbor私有镜像仓库,并下载运行自己发布的Docker镜像

[群晖Docker套件注册Harbor私有镜像仓库,并下载运行自己发布的Docker镜像] 在进行微服务开发时,一些基础服务组件(Nacos、Redis、Mysql)的运行以及越来越多的业务服务组件的开发,会导致开发者电脑的内存资源紧张&#…

Android:玩转Jetpack Compose之MVI架构——基类中使用页面UiState

系列文章目录 架构一(MVP):Android:玩转RetrofitOkHttpKotlin协程 网络请求架构 架构二(MVVM):Android:玩转网络请求架构 RetrofitKotlin协程简单使用(MVVM架构模式) 架构三(MVI)&a…

吴恩达machine-learning-specialization2022第1周的optional lab

1. 使用python和numpy实现一个线性回归 要求使用梯度下降法,可视化losslossloss随着迭代次数的变化曲线 2. 说明 2.1 拟合函数 fw,b(x(i))wx(i)bf_{w,b}(x^{(i)})wx^{(i)}bfw,b​(x(i))wx(i)b 2.2 均方误差损失函数 J(w,b)12m∑i0m−1(fw,b(x(i))−y(i))2J(w,b)…

【云原生丨Kubernetes系列15】创建 ConfigMap 资源对象

前言 前⾯我们深入学习了 Servie 的使⽤, Service 是 Kubernetes 系统中⾮常重要的⼀个核⼼概念,这节课我们来学习另外⼀个⾮常重要的资源对象: ConfigMap 文章目录前言引入创建引入 应用部署的一个最佳实践是将应用所需的配置信息与程序进行…

【ML13】overfitting and underfitting 过拟合与欠拟合

过拟合与欠拟合过拟合与欠拟合概念过拟合解决办法解决办法一:在训练集中加入更多数据解决办法二:优化数据集 feature selection解决方法三:正则化 Regularization正则化线性回归Recape of Cost Function of Linear RegressionAdd the regular…

算法刷题:可交换的连续最大和

目录前言1. 题目描述2. 题目分析3. 代码实现4. 运行测试后记前言 好久没有做题了,前两天做了一道题,感觉还比较有意思,来分享一下。想学习,但是自己实在是懒,懒癌怎么治?期待着自己彻底奋发图强那一天。 …

【Ubuntu】常用软件下载与安装汇总

前言 发现很多诸如Detectron2的开源项目官方仅提供Liunx系统的安装方式,于是愤而将工作机系统换成了Ubuntu20.04,下面记录一些常用软件的安装方式,以便再次换机时能快速迁移,后续装新的软件会持续更新。 安装yum 直接安装会报错…

潜伏在ISP网络中数月的新黑客组织“Metador”

研究人员称之为“Metador”的一个以前未知的威胁因素已经入侵电信、互联网服务提供商(ISP)和大学大约两年了。 Metador的目标是中东和非洲的组织,他们的目的似乎是长期坚持间谍活动。该组织使用了两种基于Windows的恶意软件,它们被描述为“极其复杂”&a…