NLP - 神经网络与反向传播

使用神经网络进行命名实体识别(二值词窗分类)

根据上下文窗口 建立词向量
通过一个神经网络层,通过一个逻辑分类器,得到这个概率是属于特定实体词的预测概率。
另一个分类器来比较说明 这个词是哪个实体类型(比较概率)

在这里插入图片描述
在这里插入图片描述

手工实现梯度下降

基础知识

雅可比矩阵:梯度的推广

  • 给定一个具有 m m m 输出和 n n n 输入的函数:
    f ( x ) = [ f 1 ( x 1 , x 2 , . . . , x n ) , . . . , f m ( x 1 , x 2 , . . . , x n ) ] \boldsymbol{f}(\boldsymbol{x})=[f_1(x_1,x_2,...,x_n),...,f_m(x_1,x_2,...,x_n)] f(x)=[f1(x1,x2,...,xn),...,fm(x1,x2,...,xn)]
  • 它的雅可比矩阵是一个 m × n m\times n m×n 偏导数矩阵:
    ∂ f ∂ x = [ ∂ f 1 ∂ x 1 … ∂ f 1 ∂ x n ⋮ ⋱ ⋮ ∂ f m ∂ x 1 … ∂ f m ∂ x n ] ( ∂ f ∂ x ) i j = ∂ f i ∂ x j \dfrac{\partial\boldsymbol{f}}{\partial\boldsymbol{x}}=\begin{bmatrix}\frac{\partial f_1}{\partial x_1}&\dots&\frac{\partial f_1}{\partial x_n}\\\vdots&\ddots&\vdots\\\frac{\partial f_m}{\partial x_1}&\dots&\frac{\partial f_m}{\partial x_n}\end{bmatrix} \color{red}{\boxed{\left(\frac{\partial f}{\partial x}\right)_{ij}=\frac{\partial f_i}{\partial x_j}}} xf= x1f1x1fmxnf1xnfm (xf)ij=xjfi

链式法则

  • 对于一变量函数的复合:乘导数
    z = 3 y y = x 2 d z d x = d z d y d y d x = ( 3 ) ( 2 x ) = 6 x \begin{aligned} &z=3y \\ &y=x^{2} \\ &\begin{aligned}\frac{dz}{dx}=\frac{dz}{dy}\frac{dy}{dx}=(3)(2x)=6x\end{aligned} \end{aligned} z=3yy=x2dxdz=dydzdxdy=(3)(2x)=6x
  • 对于同时多个变量:乘以雅可比行列式
    h = f ( z ) z = W x + b ∂ h ∂ x = ∂ h ∂ z ∂ z ∂ x = . . . \begin{aligned} &\boldsymbol{h}=f(\boldsymbol{z}) \\ &z=\boldsymbol{W}\boldsymbol{x}+\boldsymbol{b} \\ &\begin{aligned}\frac{\partial\boldsymbol{h}}{\partial\boldsymbol{x}}=\frac{\partial\boldsymbol{h}}{\partial\boldsymbol{z}}\frac{\partial\boldsymbol{z}}{\partial\boldsymbol{x}}=...\end{aligned} \end{aligned} h=f(z)z=Wx+bxh=zhxz=...

雅可比行列式示例:逐元素激活函数

h = f ( z ) ,     ∂ h ∂ z 是什么 ?          h , z ∈ R n \boldsymbol{h}= f( \boldsymbol{z}) ,\ \, \frac {\partial\boldsymbol{h}}{\partial\boldsymbol{z}}是什么? \ \ \ \ \ \ \ \ h,z\in\mathbb{R}^n h=f(z), zh是什么?        h,zRn h i = f ( z i ) h_i=f(z_i) hi=f(zi)
( ∂ h ∂ z ) i j = ∂ h i ∂ z j = ∂ ∂ z j f ( z i )       雅可比行列式的定义 = { f ′ ( z i ) if  i = j 0 if otherwise      常规的一个变量的导数 \begin{aligned} \left(\frac{\partial\boldsymbol{h}}{\partial\boldsymbol{z}}\right)_{ij}& =\frac{\partial h_{i}}{\partial z_{j}}=\frac{\partial}{\partial z_{j}}f(z_{i}) \ \ \ \ \ \ 雅可比行列式的定义 \\ &=\begin{cases}f'(z_i)\quad\text{if }i=j\\0\quad \text{if otherwise}\end{cases} \ \ \ \ \ 常规的一个变量的导数 \end{aligned} (zh)ij=zjhi=zjf(zi)      雅可比行列式的定义={f(zi)if i=j0if otherwise     常规的一个变量的导数
∂ h ∂ z = ( f ′ ( z 1 ) 0 ⋱ 0 f ′ ( z n ) ) = diag ⁡ ( f ′ ( z ) ) \left.\frac{\partial\boldsymbol{h}}{\partial\boldsymbol{z}}=\left(\begin{array}{ccc}f'(z_1)&&0\\&\ddots&\\0&&f'(z_n)\end{array}\right.\right)=\operatorname{diag}(\boldsymbol{f'}(\boldsymbol{z})) zh= f(z1)00f(zn) =diag(f(z))

其他雅可比行列式

∂ ∂ x ( W x + b ) = W ∂ ∂ b ( W x + b ) = I (单位矩阵) ∂ ∂ u ( u T h ) = h T \begin{aligned} &\begin{aligned}\frac{\partial}{\partial\boldsymbol{x}}(\boldsymbol{W}\boldsymbol{x}+\boldsymbol{b})=\boldsymbol{W}\end{aligned} \\ &\begin{aligned}\frac{\partial}{\partial\boldsymbol{b}}(\boldsymbol{W}\boldsymbol{x}+\boldsymbol{b})&=\boldsymbol{I}&\text{(单位矩阵)}\end{aligned} \\ &\begin{aligned}\frac{\partial}{\partial\boldsymbol{u}}(\boldsymbol{u}^T\boldsymbol{h})=\boldsymbol{h}^T\end{aligned} \end{aligned} x(Wx+b)=Wb(Wx+b)=I(单位矩阵)u(uTh)=hT

回到神经网络

在这里插入图片描述

怎么计算 ∂ s ∂ b \frac{\partial s}{\partial b} bs

  1. 把等式拆解成简单的几个分块
    在这里插入图片描述
  2. 应用链式法则
  3. 写下雅各比表达式
    在这里插入图片描述

怎么计算 ∂ s ∂ w \frac{\partial s}{\partial w} ws

在这里插入图片描述
δ \delta δ 是局部误差符号,是固定的。

关于矩阵的导数:输出形状

雅可比公式表达: 如果有一个函数 y = f ( x ) ,其中 x 是一个向量, y 是一个向量, 则雅可比矩阵  J  的元素  J i j  表示  y i  对  x j  的偏导数。 雅可比公式表达:\\ 如果有一个函数 y = f(x),其中 x 是一个向量,y 是一个向量,\\ 则雅可比矩阵\ J\ 的元素\ J_{ij}\ 表示\ y_i\ 对\ x_j\ 的偏导数。 雅可比公式表达:如果有一个函数y=f(x),其中x是一个向量,y是一个向量,则雅可比矩阵 J 的元素 Jij 表示 yi  xj 的偏导数。

W ∈ R n × m W\in\mathbb{R}^{n\times m} WRn×m , ∂ s ∂ W \frac{\partial s}{\partial W} Ws 的形状是:

  • “ 给定一个具有 m m m 输出和 n n n 输入的函数,它的雅可比矩阵是一个 m × n m\times n m×n 偏导数矩阵。”
  • 1个输出, n × m n\times m n×m 个输入,得到的应该是 1 × n m 1\times nm 1×nm 的雅可比矩阵?一个很长的低向量
    • 问题: 这样不方便更新参数 θ n e w = θ o l d − α ∇ θ J ( θ ) \theta^{new}=\theta^{old}-\alpha\nabla_\theta J(\theta) θnew=θoldαθJ(θ),都应该是 n × m n\times m n×m
    • 解决: 脱离数学,使用形状约定:导数的矩阵形状等于参数的矩阵形状
      • ∂ s ∂ W \frac{\partial s}{\partial W} Ws 的形状是 n × m n\times m n×m
      • [ ∂ s ∂ W 11 ⋯ ∂ s ∂ W 1 m ⋮ ⋱ ⋮ ∂ s ∂ W n 1 ⋯ ∂ s ∂ W n m ] \left.\left[\begin{matrix}\frac{\partial s}{\partial W_{11}}&\cdots&\frac{\partial s}{\partial W_{1m}}\\\vdots&\ddots&\vdots\\\frac{\partial s}{\partial W_{n1}}&\cdots&\frac{\partial s}{\partial W_{nm}}\end{matrix}\right.\right] W11sWn1sW1msWnms

b ∈ R n × 1 b\in\mathbb{R}^{n\times 1} bRn×1 , ∂ s ∂ b \frac{\partial s}{\partial b} bs 的形状是:

  • ∂ s ∂ b = h T ∘ f ′ ( z ) \frac{\partial s}{\partial\boldsymbol{b}}=\boldsymbol{h}^T\circ f^{\prime}(z) bs=hTf(z) 是行向量
  • 但是习惯上 梯度应该是一个列向量 因为 b b b 是一个列向量

雅可比矩阵形式(这使得链式法则很容易,对计算微积分很有意义) 和 形状约定(这使得SGD很容易实现)之间的分歧。

  • 解决:两个选择
    • 尽量使用雅可比矩阵形式(不完全使用),最后按照形状约定进行整形
      • 最后转置 ∂ s ∂ b \frac{\partial s}{\partial b} bs 使导数成为列向量(而不是按照雅各比矩阵形式的行向量),
      • 通过 δ T \delta^T δT 来实现,这样始终遵循形状约定。
    • 一直遵循形状约定
      • 查看维度,找出何时转置 和/或 重新排序项。

关于矩阵的导数(按照雅各比矩阵形式)

∂ s ∂ W = δ ∂ z ∂ W \quad\frac{\partial s}{\partial W}=\boldsymbol{\delta}\frac{\partial z}{\partial W} Ws=δWz

δ \delta δ 将出现在我们的答案中。
另一项应该是 x x x ,因为 z = W x + b z=Wx+b z=Wx+b

∂ s ∂ b = δ ∂ z ∂ b \quad\frac{\partial s}{\partial b}=\boldsymbol{\delta}\frac{\partial z}{\partial b} bs=δbz

δ \delta δ 将出现在我们的答案中。
另一项应该是 1 1 1 ,因为 z = W x + b z=Wx+b z=Wx+b

这表明 ∂ s ∂ W = δ T x T \frac{\partial s}{\partial W}=\boldsymbol{\delta}^T\boldsymbol{x}^T Ws=δTxT ∂ s ∂ b = δ T \frac{\partial s}{\partial b}=\boldsymbol{\delta}^T bs=δT

δ \delta δ 是 z 处的局部误差信号
x 是本地输入信号

总结

在这里插入图片描述

反向传播

求导,使用链式法则

构建计算图

  • 前向传播阶段
    在这里插入图片描述

神经网络的基本附加元素是 发回梯度,告诉我们怎么更新模型的参数,使得模型在 获得损失函数后进行学习(最小化损失)。

  • 反向传播阶段
    在这里插入图片描述
  • 反向传播:单个节点
    在这里插入图片描述
    在这里插入图片描述
  • 反向传播:多个节点
    在这里插入图片描述
  • 一个例子
    反向传播最后的结果体现 改变输入对输出的影响,上涨/减少这个变量的多少倍
    在这里插入图片描述

开始计算

在这里插入图片描述
在这里插入图片描述

就像前面手动计算梯度下降那样

在一般的计算图中进行反向传播计算的流程

在这里插入图片描述

现在的深度学习神经网络框架(Tensorflow, PyTorch, etc…)可以自动做反向传播,但是主要让层/节点编写器手动计算局部导数。我们需要为图中的特定节点或层添加内容。

反向传播的具体实现

class ComputationalGraph(object):
	#..... 
	def forward(inputs):
		# 1.[pass inputs to input gates...] 
		# 2. forward the computational graph: 
		# 根据节点在计算图中的依赖关系对节点进行拓扑排序
		for gate in self .graph.nodes_topologically_sorted(): 
			gate.forward()
		return loss # the final gate in the graph outputs the loss 
	def backward():
		# 反转图的拓扑排序
		for gate in reversed(self.graph.nodes_topologically_sorted()):
			gate.backward() # little piece of backprop (chain rule applied) 
		return inputs_gradients
		
手动实现前向/后向API

在这里插入图片描述

总结

  • 反向传播:下游梯度 = 上游梯度 * 局部梯度
  • 前向传播计算出当前参数的值,然后进行反向传播以计算出损失的梯度(当前参数的损失)。
  • 现在的深度学习神经网络框架(Tensorflow, PyTorch, etc…)可以自动做反向传播,我们不用知道具体是怎么操作的,就像我们使用gcc来编译c代码,但是我们不需要具体知道gcc是怎么操作的。

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

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

相关文章

基于Python3的数据结构与算法 - 07 归并排序

一、归并 引入 假设现在的列表分两段有序,如何将其合并成为一个有序列表。 这种操作成为一次归并。 归并的思路 分别对两个列表进行遍历,比较两个列表中的最小值,将更小的取出来。取出后一次进行上操作,直到其中一个列表中的元…

Servlet 新手村引入-编写一个简单的servlet项目

Servlet 新手村引入-编写一个简单的servlet项目 文章目录 Servlet 新手村引入-编写一个简单的servlet项目一、编写一个 Hello world 项目1.创建项目2.引入依赖3.手动创建一些必要的目录/文件4.编写代码5.打包程序6.部署7.验证程序 二、更方便的处理方案(插件引入&am…

vue3编写H5适配横竖屏

具体思路如下&#xff1a; 1、监听浏览器屏幕变化&#xff0c;通过监听屏幕宽高&#xff0c;辨别出是横屏&#xff0c;还是竖屏状态 在项目的起始根页面进行监听&#xff0c;我就是在App.vue文件下进行监听 代码如下&#xff1a; <template><RouterView /> <…

Redis 存储原理和数据模型

redis 是不是单线程 redis 单线程指的是命令处理在一个单线程中。主线程 redis-server&#xff1a;命令处理、网络事件的监听。 辅助线程 bio_close_file&#xff1a;异步关闭大文件。bio_aof_fsync&#xff1a;异步 aof 刷盘。bio_lazy_free&#xff1a;异步清理大块内存。io_…

【前端素材】推荐优质在线高端家具电商网页Classi平台模板(附源码)

一、需求分析 1、系统定义 在线高端家具商城是一个专门销售高端家具产品的电子商务平台&#xff0c;旨在为消费者提供购买高品质家具的便捷渠道。 2、功能需求 在线高端家具商城是一个专门销售高端家具产品的电子商务平台&#xff0c;旨在为消费者提供购买高品质家具的便捷…

springboot-基础-thymeleaf配置+YAML语法

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 目录 配置thymeleafthymeleaf举例参数设置yaml基础知识YAML语法报错&#xff1a;Expecting a Mapping node but got 其他语法 spring boot不推荐使用jsp。thymeleaf是一个XML/XHTML/HTM…

react 使用 craco库 配置 @ 路径,以及 jsconfig.json或者tsconfig.json 配置智能提示

使用 craco库 来自定义CRA配置 1、概述 Craco&#xff08;Create React App Configuration Override&#xff09;是一个用于扩展 Create React App&#xff08;CRA&#xff09;配置的工具。通过 Craco&#xff0c;你可以在不弹出 Create React App 的内部配置的情况下&#x…

Entry First Day 入职恩孚第一天

入职第一天&#xff0c;电脑还没配置好就去了工厂。 熟悉了一下设备&#xff0c;切了几个小玩意&#xff0c; hello world 一下。 了解了串行端口的Nodejs的库 https://github.com/serialport/node-serialport&#xff0c;以后要用这个东西和硬件通讯&#xff0c;安装&#…

CleanMyMac X2024免费Mac电脑清理和优化工具

CleanMyMac X是一款专业的 Mac 清理和优化工具&#xff0c;它具备一系列强大的功能&#xff0c;可以帮助用户轻松管理和维护他们的 Mac 电脑。以下是一些关于 CleanMyMac X 的主要功能和特点&#xff1a; 智能清理&#xff1a;CleanMyMac X 能够智能识别并清理 Mac 上的无用文件…

mybatis原理图,我拿到了梦寐以求的字节跳动和腾讯双offer

Kafka 如何做到支持百万级 TPS &#xff1f; 先用一张思维导图直接告诉你答案&#xff1a; 顺序读写磁盘 生产者写入数据和消费者读取数据都是顺序读写的&#xff0c;先来一张图直观感受一下顺序读写和随机读写的速度&#xff1a; 从图中可以看出传统硬盘或者SSD的顺序读写甚…

map和set例题应用

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 第一题 第二题 第三题 第一题 随机链表的复制https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 思路 首先遍历旧链表&#xff0c;并创建新节点&#xff0c;同时用map将旧节点与新节点…

3,设备无关位图显示

建立了一个类Dib Dib.h #pragma once #include “afx.h” class CDib :public CObject { public: CDib(); ~CDib(); char* GetFileName(); BOOL IsValid(); DWORD GetSize(); UINT GetWidth(); UINT GetHeight(); UINT GetNumberOfColors(); RGBQUAD* GetRGB(); BYTE* GetDat…

MySQL:使用聚合函数查询

提醒&#xff1a; 设定下面的语句是在数据库名为 db_book里执行的。 创建t_grade表 USE db_book; CREATE TABLE t_grade(id INT,stuName VARCHAR(20),course VARCHAR(40),score INT );为t_grade表里添加多条数据 INSERT INTO t_grade(id,stuName,course,score)VALUES(1,测试0…

一线互联网大厂中高级Android面试真题收录,记一次字节跳动Android社招面试

在开始回答前&#xff0c;先简单概括性地说说Linux现有的所有进程间IPC方式&#xff1a; 1. **管道&#xff1a;**在创建时分配一个page大小的内存&#xff0c;缓存区大小比较有限&#xff1b; 2. 消息队列&#xff1a;信息复制两次&#xff0c;额外的CPU消耗&#xff1b;不合…

今年Android面试必问的这些技术面,2024Android常见面试题

都说程序员是在吃青春饭&#xff0c;这一点的确有一点对的成分&#xff0c;以前我不这么认为&#xff0c;但随着年龄的增长&#xff0c;事实告诉我的确是这样的&#xff0c;过了30以后&#xff0c;就会发现身体各方面指标下降&#xff0c;体力和身心上都多少有点跟不上了&#…

请查收:2024年腾讯云服务器优惠价格表_租用配置报价

一张表看懂腾讯云服务器租用优惠价格表&#xff0c;一目了然&#xff0c;腾讯云服务器分为轻量应用服务器和云服务器CVM&#xff0c;CPU内存配置从2核2G、2核4G、4核8G、8核16G、4核16G、8核32G、16核32G、16核64等配置可选&#xff0c;公网带宽1M、3M、5M、12M、18M、22M、28M…

RTSP协议

1 简介 RTSP 英文全称 Real Time Streaming Protocol&#xff0c;RFC2326&#xff0c;实时流传输协议&#xff0c;是TCP/IP协议体系中的一个应用层协议&#xff01;协议主要规定定了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP体系结位于RTP和RTCP之上&#xff08…

【Langchain多Agent实践】一个有推销功能的旅游聊天机器人

【LangchainStreamlit】旅游聊天机器人_langchain streamlit-CSDN博客 视频讲解地址&#xff1a;【Langchain Agent】带推销功能的旅游聊天机器人_哔哩哔哩_bilibili 体验地址&#xff1a; http://101.33.225.241:8503/ github地址&#xff1a;GitHub - jerry1900/langcha…

C/C++基础语法

C/C基础语法 文章目录 C/C基础语法头文件经典问题链表链表基础操作 秒数转换闰年斐波那契数列打印n阶菱形曼哈顿距离菱形图案的定义大数计算 输入输出格式化输入输出getline()函数解决cin只读入一个单词的问题fgets读入整行输出字符数组&#xff08;两种方式puts和printf&#…

#单片机(TB6600驱动42步进电机)

1.IDE:keil 2.设备:保密 3.实验&#xff1a;使用单片机通过普通IO口控制TB6600驱动42步进电机 4.时序图&#xff1a; TB6600 ENA、ENA-DIR-、DIRPUL-、PULB-、BA、A-VCC、GND使能电机&#xff08;直接悬空不接&#xff09;方向脉冲输入&#xff08;普通IO口模拟即可&#xff…