2021斯坦福CS224N课程笔记~3

2023-11-15

3. 神经网络学习:手工计算梯度

Lecture 3: Neural net learning: Gradients by hand (matrix calculus)

and algorithmically (the backpropagation algorithm)

参考文档:

https://zhuanlan.zhihu.com/p/527211871

https://zhuanlan.zhihu.com/p/414293072

https://looperxx.github.io/CS224n-2019-03-Word%20Window%20Classification,Neural%20Networks,%20and%20Matrix%20Calculus/#11-a-neuron

https://showmeai.tech/article-detail/234

3.1.1. 命名实体识别(NER)

​ NER 任务:在文本中查找和分类名称(时间-DATA、地点-LOC、人物-PER、组织-ORG),例如:

image-20230312165358773

  • 可能的用途

    • 跟踪文档中提到的特定实体(组织、个人、地点、歌曲名、电影名等)
    • 对于问题回答,答案通常是命名实体
    • 许多需要的信息实际上是命名实体之间的关联
    • 同样的技术可以扩展到其他 slot-filling 槽填充分类
  • 通常后面是命名实体链接/规范化到知识库

3.1.1. 1 spaCy文档

​ 一个被命名的实体是一个“现实世界的对象”,它被赋予一个名字——例如,一个人,一个国家,一个产品或者一个书名。spaCy可以通过询问模型来识别文档中的各种类型的命名实体。因为模型是统计的,并且非常依赖于他们所接受的示例,所以这并不总是完美的,并且可能需要稍后进行一些调整,这取决于您的用例。

​ 命名实体可以doc的ents中获取

doc = nlp(u'Apple is looking at buying U.K. startup for $1 billion')

for ent in doc.ents:
    print(ent.text, ent.start_char, ent.end_char, ent.label_)

3.1.2. 句子中的命名实体识别

image-20230312183838726

3.1.3. NER的难点

  • 很难计算出实体的边界

    • 第一个实体是 “First National Bank” 还是 “National Bank”
  • 很难知道某物是否是一个实体

    • 是一所名为“Future School” 的学校,还是这是一所未来的学校?
  • 很难知道未知/新奇实体的类别

    • “Zig Ziglar” ? 一个人
  • 实体类是模糊的,依赖于上下文

    • 这里的“Charles Schwab” 是 PER 不是 ORG

3.1.4. 基于窗口数据的分类预测

3.1.4.1 词-窗分类
  • 思路:为在上下文中的语言构建分类器

    • 一般来说,很少对单个单词进行分类
  • 例如,上下文中一个单词的命名实体分类

    • 人、地点、组织、没有
  • 在上下文中对单词进行分类的一个简单方法,可能是对窗口中的单词向量进行平均,并对平均向量进行分类

    • 问题:这会丢失位置信息

  • ​ 简单的 NER 通常使用二元逻辑分类器做窗口分类。

  • 主要想法:在相邻词的上下文窗口中对每个词进行分类

  • ​ 主要做法:在手工标记的数据上训练逻辑分类器,以便对每个类别的中心词{yes/no}进行分类(基于窗口中词向量的拼接)。

  • ​ 实际上,我们通常使用多类 softmax,但尽量保持简单。

  • ​ 示例:在**窗口长度为 2** 的句子上下文中,将“Paris”分类为 +/- 地点(LOC):

image-20230312184412237

结果向量 xwindow = x ∈ R5d ,是一个列向量!然后我们会将这个向量提供给一个分类器,分类器最终就会有一个位置的概率【见3.1.5(2)】

​ 目前为止,我们主要探讨了使用单个单词向量 x 预测的外部评估任务。在现实中,因为自然语言处理的性质,这几乎不会有这样的任务。在自然语言处理中,常常存在着一词多义的情况,我们一般要利用词的上下文来判断其不同的意义。例如,如果你要某人解释“to sanction”是什么意思,你会马上意识到根据“to sanction”的上下文其意思可能是“to permit”或者“to punish”。在更多的情况下,我们使用一个单词序列作为模型的输入。这个序列是由中心词向量和上下文词向量组成上下文中的单词数量也被称为上下文窗口大小,并根据解决的问题而变化。一般来说,较窄的窗口大小会导致在句法测试中更好的性能,而更宽的窗口会导致在语义测试中更好的性能

image-20230312185433702

对所有单词进行分类:在以句子中每个单词为中心的向量上,为每个类别运行分类器

3.1.4.2 最简单的窗口分类器:Softmax

在这里插入图片描述

3.1.5. NER:中心词作为地点的二元分类

(1)多层感知器

  • 假设我们要对中心词是否为一个地点,进行分类

  • 与word2vec类似,我们将遍历语料库中的所有位置。但这一次,它将**受到监督,只有一些位置能够得到高分**。

    • 例如,在他们的中心有一个实际的NER Location的位置是“真实的”位置会获得高分

(2)神经网络前馈计算

image-20230312190613772

3.1.6. 本章计划

我们将介绍两种方法:

(1) 手工矩阵演算(40 分钟);

(2) 反向传播算法(35 分钟)。

3.2.手工矩阵演算

​ 本节的主要目的是手工计算梯度,通过矩阵演算,得到完全矢量化的梯度

​ 首先,要认识到“如果你使用矩阵,多变量微积分就像单变量微积分”这个观念的重要性。矩阵计算比非矢量化梯度更快、更有用,但是做一个非矢量化的梯度可以有利于直觉(回忆第一章)。

​ 然后,您要多学习讲义和矩阵演算笔记,其中有详细的介绍资料。您还可以复习 Math 51,它有一本新的在线教科书:http://web.stanford.edu/class/math51/textbook.html;或者,如果您做了 Engr108,那么您可能会更幸运。

3.2.1. 梯度

​ 在向量微积分中,标量场的梯度是一个向量场标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。

​ 在单变量的实值函数的情况,梯度只是导数;或者,对于一个线性函数,梯度就是线的斜率。

image-20230312193819274

3.2.2. 雅可比矩阵

​ 严格地说,梯度是雅可比(Jacobian)矩阵的一个特例。因此,可以从梯度推广到雅可比矩阵。

​ 在向量微积分中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。

​ 雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近。因此,雅可比矩阵类似于多元函数的导数

image-20230312194239131

3.2.3. 链式法则

​ 链式法则是微积分中的求导法则,用以求一个复合函数的导数。所谓的复合函数,是指以一个函数作为另一个函数的自变量。

​ 链式法则用文字描述:由两个函数凑起来的复合函数,其导数等于里边函数代入外边函数的值之导数,乘以里边函数的导数。

​ 链式法则用数学描述:若 f(x)=3x,g(x)=x+3,则 g(f(x))就是一个复合函数,并且 g′(f(x))=3;若 h(x)=f(g(x)),则 h’(x)=f’(g(x))g’(x)。

在这里插入图片描述

image-20230312194817908

3.2.3.1. 计算b对s的偏导

回到我们的神经网络(见例 3.1 ) , 让我们来求解 ∂ s ∂ b 回到我们的神经网络(见例 3.1),让我们来求解\frac{\partial s}{\partial b} 回到我们的神经网络(见例3.1,让我们来求解bs

实际上,我们关心的是损失 Jt的梯度。但为了简单起见,我们将计算分数 s 的梯度。

我们把图 3.1 的第四层去掉,变成三层神经网络模型,见图 3.2:

image-20230312201750168

将方程h=f(Wx+b)分解为简单的两个部分h=f(z)和z=Wx+b,最终形成如下方程组:

image-20230312202015801

image-20230312202451028

3.2.3.2. 计算w对s的偏导

假设我们现在要计算 ∂ s ∂ w ,再次使用链式法则,则可得: 假设我们现在要计算\frac{\partial s}{\partial w},再次使用链式法则,则可得: 假设我们现在要计算ws,再次使用链式法则,则可得:

image-20230312203106662

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

image-20230312203451437

方程 3.23 右边是转置矩阵相乘的原因是:为了在矩阵运算时保持矩阵维度的匹配!(详见3.2.3.5)

3.2.3.4. 在反向传播中推导本地输入梯度

image-20230312203732065

3.2.3.5. 为什么是转置矩阵?

image-20230312203901075

3.2.3.6. 导数应该是什么形状?

image-20230312204314736

3.3.反向传播算法

我们几乎已经向您展示了反向传播,它采用导数并使用(广义、多元或矩阵)链式法则。

还展示了其他技巧:我们在计算较低层的导数时重用为较高层计算的导数以最小化计算。

3.3.1. 计算图

image-20230312204657625

3.3.2. 反向传播:单个节点的表示

在反向传播链上,每个节点接收“上游梯度”,它的目标是传递正确的“下游梯度”

而且,每个节点都有“本地梯度”,即输出相对于输入的梯度,见图 3.7(a)。

image-20230312205151672

3.3.3. 反向传播:单个节点多输入

image-20230312205415611

3.3.4. 一个例子

image-20230312205710020

image-20230312205722897

image-20230312210243302

image-20230312205829343

3.3.5. 效率:一次计算所有梯度

image-20230312210435067

那么,什么是正确的方法呢?

在实际应用中,正确方法是:一次性计算所有梯度(类似我们手动计算梯度时使用的δ,见方程 3.21)。image-20230312210527071

3.3.5.1. 一般计算图中的反向传播

在这里插入图片描述

3.3.5.2. 自动微分

image-20230312211735549

本地梯度见:3.3.2. 反向传播:单个节点的表示

3.3.5.3. 正向/反向传播的实现

一般地,实现正向/反向传播的代码,见图 3.14:

image-20230312212218322

特别地,实现正向/反向传播有专用的 API,见图 3.15:

image-20230312212242633

为了计算反向传播,我们需要在前向传播时存储一些变量的值

3.3.6. 手工检查数字梯度

在这里插入图片描述

3.4.总结

我们掌握了神经网络的核心技术!

​ 前向传递:计算操作的结果并保存中间值

​ 反向传播:沿计算图递归地(因此有效地)应用链式法则,即:下游梯度=上游梯度 x 本地梯度

我们为什么要了解有关梯度的所有这些细节?

​ 因为,虽然现代深度学习框架为您计算梯度(本周五参加 PyTorch 介绍),即编译器或系统为您自动实现正向/反向传播,但是反向传播并不总是完美的;所以,这门课可以使您了解底层工作原理,这对调试和改进模型至关重要

参见 Karpathy 文章(在教学大纲中):

https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b

后续课程中的示例:梯度爆炸和消失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2021斯坦福CS224N课程笔记~3 的相关文章

随机推荐

  • IPV6工作手册

    1 监测当前是否是IPV6网络环境 浏览器访问 http test ipv6 com 2 切换当前电脑到IPV6网络 Mac电脑 3 监测目标网站是否支持IPV6 可使用 国家IPV6发展监测平台 的检测工具 https www china
  • python爬虫学习笔记-SQL学习

    Sql概述 先来看一个例子 小王第一次使用数据库 然后跟数据库来了个隔空对话 其实 我们想一想 mysql是一个软件 它有它自己一套的管理规则 我们想要跟它打交道 就必须遵守它的规则 如果我想获取数据 它自己有一套规则 这个规则就是SQL
  • 【预测 - 00】概述:时间序列、特征设计+回归模型(持续更新...)

    前言 预测 一个很神秘的词语 根据历史信息并按照一定的方法对未来进行测算 时间序列 特征设计 回归 等是预测领域的常用方法 我是预测领域的一名新手 6月份因实习需求 刚接触领域领域 以 边学边实践 的方式推动着进度 8月底实习期结束 返校后
  • 【JAVA】 String 方法附件

    个人主页 个人主页 系列专栏 初识JAVA 文章目录 String 方法 String 方法 char charAt int index 返回指定索引处的 char 值 int compareTo Object o 把这个字符串和另一个对象
  • 详解ReentrantLock---可重入锁(小白易懂)

    详解ReentrantLock 小白易懂 初识ReentrantLock ReentrantLock是可重入的互斥锁 虽然具有与synchronized相同功能 但是会比synchronized更加灵活 具有更多的方法 ReentrantL
  • linux网卡bond模式检查,linux 查看bond状态

    SCC 超级计算集群 简介 SCC概述 超级计算集群 Super Computing Cluster SCC 使用高速RDMA网络互联的CPU以及GPU等异构加速设备 面向高性能计算 人工智能 机器学习 科学 工程计算 数据分析 音视频处理
  • Keil MDK5勾选Reset and Run下载固件仍然不自动运行的解决办法

    解决方法 把pack里面的ENABLE 取消掉就好了
  • 一个测试工程师的七年感悟——致在一路独行的你(别放弃)

    前言 不知不觉在软件测试行业 摸爬滚打了7年之久 这一路上也留下了许许多多令我难以忘记的故事 有刚入行时的迷茫 有学习技术路上踩过的坑 有做项目连夜敲代码的悲情也有迎来项目成功上线的欢愉 有太多太多值得铭记的瞬间 这一切只源于我走了测试这条
  • Open Judge 1.4 09

    09 判断能否被3 5 7整除 总时间限制 1000ms 内存限制 65536kB 描述 给定一个整数 判断它能否被3 5 7整除 并输出以下信息 1 能同时被3 5 7整除 直接输出3 5 7 每个数中间一个空格 2 只能被其中两个数整除
  • ​金蝶云星空管理中心反序列化RCE漏洞复现 附POC

    文章目录 金蝶云星空管理中心反序列化RCE漏洞复现 0x01 前言 0x02 漏洞描述 0x03 影响范围 0x04 漏洞环境 0x05 漏洞复现 1 访问漏洞环境 2 构造POC 3 复现 4 进行ipconfig命令测试 0x06修复建
  • 一些好的博客或者论坛,可以经常浏览

    1 博客 果冻想 常用一些技术的总结和系列化的学习 http www jellythink com 2 类似博客 mikewootc的分享空间 首页 http www mikewootc com wiki net protocol rtsp
  • UVa 11464 Even Parity 题解

    这是一道白书17页的题目 题目大意 输入一个n n的01矩阵 1
  • java 远程调试 端口_JAVA远程调试

    1 远程端启动必须添加jvm参数 Xdebug Xrunjdwp transport dt socket suspend n server y address debug port 其中debug port为自定义的调试端口 2 本地连接远
  • 短沟道效应 & 窄宽度效应 short channel effects & narrow width effects

    文章目录 1 概念 Narrow Width Effect 窄宽度效应 Short Channel effects 短沟道效应 阈值电压 Threshold voltage 2 阈值电压与沟道长和沟道宽的关系 Narrow channel
  • ATT&CK实战系列——红队实战(一)完整版

    前言 今天有大佬位推荐了这个靶场 然后就去了解了一下非常贴近实战 下载开干 靶场的描述 红队实战系列 主要以真实企业环境为实例搭建一系列靶场 通过练习 视频教程 博客三位一体学习 另外本次实战完全模拟ATT CK攻击链路进行搭建 开成完整闭
  • linux的jstack,jmap命令的正确安装附详细教程

    先执行命令 yum list showduplicate su root yum list showduplicate grep i java yum install java 11 openjdk devel x86 64 y jstac
  • 吃货联盟订餐系统项目----面向对象思路

    吃货联盟订餐系统项目 面向对象思路 思路 首先可以划分出四个类 菜单类 订单类 饭店类 测试类 菜单类中 需要用到菜单编号 菜单名称 菜单价格 点赞数四个属性 并根据这些属性创建一个带参构造以及getter setter方法 订单类中 需要
  • 生命在于折腾——SQL注入的实操(三)less11-15

    一 实操环境 1 操作系统 VMware虚拟机创建的win10系统 内存8GB 硬盘255GB 处理器AMD Ryzen 9 5900HX 2 操作项目 sql lib项目 本篇文章介绍关卡11 15 3 工具版本 phpstudy 8 1
  • 什么是node,node怎么用?

    Node js 是一个基于Chrome V8 引擎的JavaScript运行环境 Node js使用了一个事件驱动 非阻塞式I O的模型 使其轻量又高效 事件驱动 任务执行 发布者 订阅者 事件驱动 on emit 非阻塞 执行某一个任务的
  • 2021斯坦福CS224N课程笔记~3

    3 神经网络学习 手工计算梯度 Lecture 3 Neural net learning Gradients by hand matrix calculus and algorithmically the backpropagation