分类目录归档:深度学习

动手学习深度学习系列笔记——BERT预训练


BERT预训练

1.目录:

2.BERT:

2.1 NLP里的迁移学习

  • 使用预训练好的模型来抽取词,句子的特征

    • 例如word2vec或语言模型
  • 不更新预训练好的

Read more

GlobalPointer:用统一的方式处理嵌套和非嵌套NER


本文将介绍一个称为GlobalPointer的设计,它利用全局归一化的思路来进行命名实体识别(NER),可以无差别地识别嵌套实体和非嵌套实体,在非嵌套(Flat NER)的情形下它能取得媲美CRF的效果,而在嵌套(Nested NER)情形它也有不错的效果。还有,在理论上,GlobalPointer的设计思想就比CRF更合理;而在实践上,它训练的时候不需要像CRF那样递归计算分母,预测的时候也不需要动态规划,是完全并行的,理想情况下时间复杂度是O(1)! 简单来说,就是更漂亮、更快速、更强大!真有那么好的设计吗?不妨继续看看。

GlobalPoniter多头识别嵌套实体示意图

GlobalP

Read more

动手学习深度学习系列笔记——Transformer


68-Transformer

目录

2.多头注意力

  • 对同一key,value,query,希望抽取不同的信息

    • 例如短距离关系和长距离关系
  • 多头注意力使用h个独立的注意力池化

    • 合并各个头(head)输出得到最终输出

  • 数学表

Read more

动手学习深度学习系列笔记——注意力分数


- 65 注意力分数

- 掩蔽softmax操作

- 加性注意力

- 缩放点积注意力

- 小结

65 注意力分数

  • 在上一节中,我们使用高斯核来对查询和键之间的关系建模。我们可以将上一节中的高斯核函数部分视为注意力评分函数,简称评分函数,然后把这个函数的输出结果输入到softmax函数中进行运算。 通过上述步骤,我们将得到与键对应的值的概率分布(即注意力权重)。 最后,注意力汇聚的输出就是基于这些注意力权重的值的加权和。
import math
import torch
from torch import nn
from d2l import torch as d2l

掩蔽softmax操

Read more

动手学习深度学习系列笔记——束搜索


束搜索

在序列生成问题中,常用的方法是一个个词元地进行生成,但是先前步生成的词元会影响之后词元的概率分布,为此,我们需要使用搜索算法来得到一个较好的序列

贪心搜索

贪心搜索即每个时间步都选择具有最高条件概率的词元。 $$ y{t'} = \operatorname*{argmax}{y \in \mathcal{Y}} P(y \mid y1, \ldots, y{t'-1}, \mathbf{c}) $$ 我们的目标是找到一个最有序列,他的联合概率,也就是每步之间的条件概率的乘积,最大。 $$ \prod{t'=1}^{T'} P(y{t'} \mid y1, \ldots, y{t'-1}

Read more

动手学习深度学习系列笔记——序列到序列学习


62-序列到序列学习

1. 应用举例:机器翻译

  • 给定一个源语言的句子,自动翻译成目标语言
  • 这两个句子可以有不同的长度

2. 模型架构:Seq2seq

  • 序列到序列模型由编码器-解码器构成。

  • 编码器RNN可以是双向,由于输入的句子是完整地,可以正着看,也可以反着看;而解码器只能是单向,由于预测时,只能正着去预测。

  • 编码器,解码器采用不同的RNN,此RNN也可以是GRU,LSTM等。

3. 编码器-解码器细节

  • 编码器的RNN没有连接输出层

  • 编码器最后时间步的隐状态用作解码器初始隐状态(图中箭头的传递)

4. 训练和推理

  • 第3节中提到编码器没有输出层,只有解码器有,于是

Read more

动手学习深度学习系列笔记——编码器-解码器架构


编码器-解码器架构

CNN中的解释

考虑一个CNN模型:

整个CNN实际上可以看作一个编码器,解码器两部分。

  • 底层的神经网络,也就是编码器将输入编码成能被模型识别的中间表达形式,也就是特征
  • 解码器将中间结果解码为输出

RNN中的解释

对于RNN而言,同样有着类似的划分

  • 编码器将输入文本表示为向量
  • 解码器将向量表示为输出

抽象的编码器-解码器架构

指一个模型被分为两块:

  • 一块是编码器,也叫encoder,用于将输入处理为一个中间状态
  • 一块是解码器,也叫decoder,用于将中间状态表示为输出
  • 解码器也可以有额外的输入提供信息

Read more

动手学习深度学习系列笔记——深层循环神经网络


58 深层循环神经网络

目录

1.深层循环神经网络

之前讲的RNN都只有一个隐藏层(序列变长不算是深度),而一个隐藏层的RNN一旦做的很宽就容易出现过拟合。因此我们考虑将网络做的更深而非更宽,每层都只做一点非线性,靠层数叠加得到更加非线性的模型。

浅RNN:输入-隐层-输出

深RNN:输入-隐层-隐层-...-输出

(课程视频中的图片有错误,最后输出层后一时间步是不受前一步影响的,即没有箭头)

2.公式

![](http://latex.codecogs.com/svg.latex?\mathbf{H}_t^1=f_1(\mathb

Read more

动手学习深度学习系列笔记——长短期记忆网络LSTM


长短期记忆网络

1.目录

2.长短期记忆网络:

  • 忘记门:将值朝0减少
  • 输入门:决定是不是忽略掉输入数据
  • 输出门:决定是不是使用隐状态

可以说,长短期记忆网络的设计灵感来自于计算机的逻辑门。 长短期记忆网络引入了记忆元(memory cell),或简称为单元(cell)。 有些文献认为记忆元是隐状态的一种特殊类型, 它们与隐状态具有相同的形状,其设计目的是用于记录附加的信息。 为了控制记忆元,我们需要许多门。 其中一个门用来从单元中输出条目,我们将其称为输出门(output gate)。 另外一个门用来决定何时将数据读入单元,我们将其称为输入门(input gate)。 我们还需要一种机制来

Read more

动手学习深度学习系列笔记——门控循环单元(GRU)


56-门控循环单元(GRU)

1. 动机:如何关注一个序列

  • 不是每个观察值都是同等重要

比如上图中的序列,若干个猫中出现了一个鼠,那么我们应该重点关注这个鼠,而中间重复出现的猫则减少关注。文本序列同理,通常长文本我们需要关注的是几个关键词,关键句。

  • 想只记住相关的观察需要:
    • 关注的机制(更新门):顾名思义,是否需要根据我的输入,更新隐藏状态
    • 遗忘的机制(重置门):更新候选项时,是否要考虑前一隐藏状态。

2. 门的概念

  • 更新门Zt,重置门Rt的公式大体相同,唯一不同的是学习到的参数。

  • 需要注意的是,计算门的方式和原来RNN的实现中计算新的隐状态相似,只是激活函数改成了sig

Read more