深度学习笔记(8课时)

导语

第一课时主要学习了李宏毅视频中的regression算法;
第二课时学习了w2v的算法思想;
第三课时学习了机器翻译、Seq2Seq与Attention;
第四课时在pytorch框架下训练了深度学习模型;
第五课时-第八课时结合了斯坦福cs224n课程,学习了DNN在NLP领域的应用。

第一课时:Regression

记录了李宏毅深度学习regression中局部下降过程

1. Model模型

2. Goodness of function:优化

在这里插入图片描述

3. Grandient Descent


沿梯度低的方向调整参数

learning rate:参数更新大小
梯度下降过程
ps:最下面一行应该是w1减去w1的偏微分,b同理。
梯度:在这里插入图片描述

老生常谈的“局部最优”

在这里插入图片描述
这种情况不会出现local optimal,因为他们的等高线是一样的。
偏微分求解过程:
在这里插入图片描述
EORROR值,和loss不是一回事
如果error值太大,可以换model.但要注意overfitting问题
在这里插入图片描述
error值过大时,redesign function:加入一个平滑项

为了使wi参数更小,即变化幅度小,这样函数曲线平滑,对输入不敏感,可以减少噪声的影响。
输入更接近输出
在这里插入图片描述
λ越大,平滑项考虑越大,曲线越平滑。函数更倾向考虑w本来的数值,减少考虑error;

在这里插入图片描述

第二课:word2vec

语言学家认为,一个单词的含义是由经常和它一起出现的上下文决定的,“You shall know a word by company it keeps.”

w2v模型(google2013)

核心思想:
  1. 基于大量的语料库corpus of text
  2. 固定词汇表中的每个单词都由一个向量表示
  3. 文本中的每个位置 t,其中有一个中心词c,和上下文(“外部”)单词o(用固定窗口扫描文本库的句子,获得center word和context word).
  4. 使用c和o的词向量的相似性 来计算给定c的o的概率 ,反之亦然。
  5. 不断调整word vector,使这个概率最大化。每个单词可以由两个向量表示,一个是它作为center word时的向量Vw,一个是它作为context word时的向量Uw。
过程

选定一个单词,定义一个以该单词为中心,长度为2的窗口。
在这里插入图片描述
如图所示,那么into就是center word,其周围的两个单词就构成了上下文(context word),移动窗口,扫描到下一个单词,banking就成为了center word,context word也随之改变。在这里插入图片描述

  • step1:条件概率
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在word2vec中,条件概率表示为center word 与context word做点乘,在进行softmax函数运算。O表示上下文单词,c表示中心词,Vw为中心词,Uw为上下文单词,

  • 整体似然概率
    在这里插入图片描述
    整体似然概率表示为所有条件概率的连乘积形式。

  • 目标函数(损失函数):
    在这里插入图片描述
    θ是所有需要优化的变量,目标函数J(θ)是(平均)负对数似然,其中log形式是方便将联乘转化为求和,负号是希望将极大化似然率转化为极小化损失函数的等价问题。

根据每个单词的条件概率公式和损失函数,根据梯度下降法就可以求出使目标函数最小的word vector形式了。

Skip-Gram与CBOW

上文中的w2v计算方法是skip-gram方法:求context word相对于center word的概率。CBOW是求center word相对于context word的概率,其他方面基本相同。
cbow模型
在这里插入图片描述
skip-gram模型
在这里插入图片描述

第三课:机器翻译、Seq2Seq与Attention

统计机器翻译

smt的核心思想是从数据中学习出概率模型,假设我们想要从法语翻译成英语,给定输入的法语句子x ,找到对应最好的英语句子y,即找到在这里插入图片描述
对于翻译模型,我们需要大量的平行语料和大量的特征工程,难以维护。NMT解决了这一个问题。

Seq2Seq

基于深度学习的机器翻译依赖于Sequence-to-Sequence的模型架构,即通过一个RNN作为encoder将输入的源语言转化为某表征空间中的向量,再通过另一个RNN作为decoder将其转化为目标语言中的句子(encoder/decoder部分可以是任何模型)。decoder就是预测目标句子y的下一个单词的部分,同时其概率依赖于源句子的输入(encoding),一个将法语翻译成英语的Seq2Seq模型如下图所示:
在这里插入图片描述
训练过程中,损失函数与语言模型中类似,即各步中目标单词的logp的相反数的平均值:
在这里插入图片描述
上例中的损失函数如下图所示,损失函数的梯度可以一直反向传播到encoder部分
在这里插入图片描述
在做最终输出的时候,选择每一步概率最大的单词并将其作为下一步的decoder的input.
在这里插入图片描述

存在问题

在做最终输出的时候,选择每一步概率最大的单词并将其作为下一步的decoder的input,这就无法保证当前贪心算法的选择是最终整体最优的选择,因此,一个常用的方法是:在每一步decoder时,不仅保留其当前最大概率,也保留K个最可能的翻译假设。K通常在5-10之间。
因此,对于一个长度为K的句子,其翻译分数是:
在这里插入图片描述
求和中的每一项都是负数,这会导致长的翻译分数更低,所以最终的要进行分数归一化:
在这里插入图片描述

第四课:pytorch编写代码基本思想

在这里插入图片描述
一张好玩的图,基本可以概括深度学习模型的训练思想。
分为四大步骤:

1、输入处理模块 (X 输入数据,变成网络能够处理的Tensor类型)
2、模型构建模块 (主要负责从输入的数据,得到预测的y^, 这就是我们经常说的前向过程)
3、定义代价函数和优化器模块 (注意,前向过程只会得到模型预测的结果,并不会自动求导和更新,是由这个模块进行处理)
4、构建训练过程 (迭代训练过程,就是上图表情包的训练迭代过程)

1. 数据处理

对于数据处理,最为简单的方式就是将数据组织成为tensor 。但许多训练需要用到mini-batch,直 接组织成Tensor不便于我们操作。pytorch为我们提供了Dataset和Dataloader两个类来方便的构建。
torch.utils.data.Dataset
继承Dataset 类需要override 以下方法:
在这里插入图片描述
torch.utils.data.DataLoader

torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False)

DataLoader Batch。如果选择shuffle = True,每个epoch 后,mini-Batch batch_size使用方法如下:
在这里插入图片描述

2. 模型构建

所有的模型都需要继承torch.nn.Module , 需要实现以下方法:
在这里插入图片描述
其中forward() 是前向传播的过程。在实现模型时,我们不需要考虑反向传播。

3. 定义代价函数和优化器

在这里插入图片描述

4. 构建训练过程

pytorch的训练循环如下:
在这里插入图片描述

第五课时:DNN与NER(命名实体识别)

CS224N第三、四讲主要在讲深度神经网络的基础知识并以命名实体识别Named Entity Recognition(以下简称NER)来讲DNN在NLP领域内的应用。

NER问题定义

NER主要是要找到文本中的名字并对其进行分类,如下例中
在这里插入图片描述
找到地点类的名词France, Britain以及人名Fischler。
NER的应用场景较多,比如可以追踪文本中特定的entity,问答系统中很多回答是named entity,通过named entity之间的关联构建知识图谱等等。
NER的难点是有的时候很难区分Named Entity的边界,有的时候很难判断一个词是不是Named Entity,而且Named Entity依赖于上下文,同一个名词可能在某些语境中是机构名,在其他语境中又是人名。

Window Classification

鉴于同一个词在不同上下文可能是不同的Named Entity,一个思路是通过对该词在某一窗口内附近的词来对其进行分类(这里的类别是人名,地点,机构名等等)。
例如对于museums in Paris are amazing, 我们希望探测到地点名Paris。假设窗口大小为2,并且通过词向量方法如word2vec得到窗口内5个单词的词向量,则我们可以将这5个向量连在一起得到更大的向量,再对该向量进行classification。
在这里插入图片描述
对于具有多个class的分类问题,我们通常用softmax classifier来解决,假设用x来表示输入的词向量,y表示对应的class,总共有k个class,则x对应类别为y的概率为:
在这里插入图片描述

损失函数为交叉熵:

在这里插入图片描述
为了处理输入的元素间的非线性关系,我们可以利用Neural Network,并且输出层是计算每一个class的概率的softmax layer。
在这里插入图片描述
之后我们可以利用随机梯度下降算法SGD来更新网络并利用反向传播算法来有效的计算梯度。

第6课时:Dependency Parsing

对于句法结构(syntactic structure)分析,主要有两种方式:Constituency Parsing与Dependency Parsing。

Constituency Parsing基本概念

Constituency Parsing主要用phrase structure grammer即短语语法来不断的将词语整理成嵌套的组成成分,又被称为context-free grammers,简写做CFG。
其主要步骤是先对每个词做词性分析part of speech, 简称POS,然后再将其组成短语,再将短语不断递归构成更大的短语。
例如,对于 the cuddly cat by the door, 先做POS分析,the是限定词,用Det(Determiner)表示,cuddly是形容词,用Adj(Adjective)代表,cat和door是名词,用N(Noun)表示, by是介词,用P(Preposition)表示。
然后the cuddly cat构成名词短语NP(Noun Phrase),这里由Det(the)+Adj(cuddly)+N(cat)构成,by the door构成介词短语PP(Preposition Phrase), 这里由P(by)+NP(the door)构成。
最后,整个短语the cuddly cat by the door 是NP,由NP(the cuddly cat)+ PP(by the door)构成。

Dependency Parsing基本概念

Dependency Structure展示了词语之前的依赖关系,通常用箭头表示其依存关系,有时也会在箭头上标出其具体的语法关系,如是主语还是宾语关系等。
Dependency Structure有两种表现形式,一种是直接在句子上标出依存关系箭头及语法关系,如:
在这里插入图片描述
另一种是将其做成树状机构(Dependency Tree Graph)
在这里插入图片描述
Dependency Parsing可以看做是给定输入句子 在这里插入图片描述(其中 在这里插入图片描述常常是fake ROOT,使得句子中每一个词都依赖于另一个节点)构建对应的Dependency Tree Graph的任务。构建这样的树,一个有效的方法是Transition-based Dependency Parsing。
Transition-based Dependency Parsing可以看做是state machine,对于 [公式] ,state由三部分构成
中若干 在这里插入图片描述构成的stack。

中若干在这里插入图片描述构成的buffer。
A是dependency arc 构成的集合,每一条边的形式是在这里插入图片描述 ,其中r描述了节点的依存关系如动宾关系等。
初始状态时, 在这里插入图片描述仅包含ROOT在这里插入图片描述在这里插入图片描述包含了所有的单词在这里插入图片描述,而在这里插入图片描述是空集 在这里插入图片描述。最终的目标是在这里插入图片描述包含ROOT在这里插入图片描述在这里插入图片描述清空,而在这里插入图片描述包含了所有的dependency arc, 在这里插入图片描述就是我们想要的描述Dependency的结果。

Evaluation

当我们有了Dependency Parsing的模型后,我们如何对其准确性进行评估呢?

我们有两个metric,一个是LAS(labeled attachment score)即只有arc的箭头方向以及语法关系均正确时才算正确,以及UAS(unlabeled attachment score)即只要arc的箭头方向正确即可。
一个具体的例子如下图所示:
在这里插入图片描述

Neural Dependency Parsing

传统的Transition-based Dependency Parsing对feature engineering要求较高,我们可以用神经网络来减少human labor。
对于Neural Dependency Parser,其输入特征通常包含三种:
stack和buffer中的单词及其dependent word。
单词的Part-of-Speech tag。
描述语法关系的arc label。
在这里插入图片描述
我们将其转换为embedding vector并将它们联结起来作为输入层,再经过若干非线性的隐藏层,最后加入softmax layer得到每个class的概率。
在这里插入图片描述
利用这样简单的前置神经网络,我们就可以减少feature engineering并提高准确度,RNN模型也可以应用到Dependency Parsing任务中。

第七课时:三种语言模型

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

Capsnet胶囊网络

1.capsnet与cnn的区别

1.组件的朝向和空间上的相对关系对它来说不重要,它只在乎有没有特征。
2.卷积神经网络(CNN)的问题部分源于其对图像感知的泛化能力,例如一个训练好的图像识别网络可能会对同一图像的旋转版本识别错误,这就是为什么在训练时经常使用数据增强和平均/最大池(Average / Max Pooling)。 池化通过随机选择下一层的神经元子集建立一个新的层。这可以有效降低上层的计算需求,而且也使得网络减小对特征出现的原始位置的依赖性。这一简化的依据在于:假设特征出现的确切位置对目标识别而言影响不大。

和CNN一样,上层的胶囊可以覆盖更大的图像区域,但是与最大化池不同,胶囊网络不会丢弃该区域内目标物体的准确位置信息。这使得模型对图像中的细微变化可以保持不变的输出。另一方面,模型有可能忽视图像发生的位移变化。不变意味着无论检测到的字符的顺序和位置是否改变,网络的输出总是相同的。因此该模型能够理解图像中的特征的旋转和位移,并产生适当的输出。这对于使用池化来说是不可能的。这就是启发我们发明这个新架构的原因。

胶囊网络的特点在于胶囊网络赋予了模型理解图像中所发生变化的能力,胶囊是一组神经元,其激活向量表示某种特定类型的实体(如对象或对象部分)的实例化参数。

2.胶囊网络模型

所谓胶囊,就是一个向量,它可包含任意个值,每个值代表了当前需要识别的物体(比如图片)的一个特征。在cnn中,卷积层的每个值,都是上一层某一块区域和卷积核完成卷积操作,即线性加权求和的结果,它只有一个值,所以是标量。在胶囊网络,它的每一个值都是向量,也就是说,这个向量不仅可表示物体的特征、还可以包括物体的方向、状态等等。

在这里插入图片描述
1.首先对这张图片做了常规的卷积操作,得到ReLU Conv1;图中输入为9×9的交通标志,经过256个9×9步长为1的卷积核得到20×20×256的特征图,这一层就是普通的卷积神经网络。
2.然后再对Conv1做卷积操作,并将其调整成适用于CapsNet的向量神经元层PrimaryCaps主胶囊,具体做法是:上一层得到的是20×20×256的特征图,接下来用8组9×9×32的卷积核进行步长为2的卷积操作,得到如下图所示的8组6×6×32的特征图,这里与普通卷积神经网络有了区别。然后将8组特征图都展成一维,然后对应位置合并,即可得到1152个胶囊,每个胶囊是一个8维向量。这样就有了向量特征,而不是以往的标量神经元,包含状态方向等信息。
在这里插入图片描述
3.PrimaryCaps到DigitCaps层的传播也就是CapsNet和以往CNN操作的最大区别:动态路由算法,具体计算会在下面讲到。(具体如何传播)
4.最后,DigitCaps中一共43个向量,每个向量中元素的个数为16。对这43个向量求模,求得模值最大的那个向量代表的就是图片概率最大的那个分类。
注意:CapsNets不同于之前的神经网络,其输出概率和为1。因为CapsNets能够同时识别多个对象。

3.动态路由算法:

在这里插入图片描述
其中u是上一层胶囊网络的输出,W是每个输出要乘的权值,可以看作上一层每一个胶囊神经元以不同强弱的连接输出到后一层的某一个神经元。

数字胶囊网络的输入S公式为:
在这里插入图片描述
Ci为耦合系数,公式为:
在这里插入图片描述
在这里插入图片描述
U_ji相当于单个胶囊的个人预测,最后结果V是所有胶囊共同作用的结果。
胶囊网络中添加了耦合系数c,通过耦合系数c不断作用于更新后的S。
所以最终结果V向量积的大小代表了该所有胶囊对最终结果的一致程度,也就是耦合程度。如果向量积为负,耦合程度应该变小,如果向量积为正,耦合程度应该变大。
可以参考这张图想象一下。
在这里插入图片描述
在这里插入图片描述

4.激活函数

在这里插入图片描述
该激活函数前一部分是输入向量S的缩放尺度,后一部分是S的单位向量。激活函数既保留了输入向量的方向,又将输入向量的模压缩到[0, 1)之间。这也符合了我们前面说的:用向量模的大小衡量某个实体出现的概率,模值越大,概率越大。

5.损失函数

在这里插入图片描述
vc为输出输出。Tc =1表示正确的输出,Tc =0表示不正确的输出。这里有两个校准点m+=0.9和m−=0.1,损失预计阳性样本m+将预测在0.9。如果超过0.9,就没有继续改善的必要;负样本m−预计为0.1,如果小于0.1,则没有必要继续下降。λ的值是固定在0.5和用于数值稳定性训练开始时防止过度损耗,导致收缩的输出值。公式中的两项都有一个平方,因为损失函数有L2范数,总损失是所有类别损失的总和。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《鲁伟深度学习笔记》是一本关于深度学习的资料,提供了对深度学习的深入理解和实践指导。这本笔记以简明扼要的方式介绍了深度学习的基本原理和常用算法,并结合实例讲解了如何使用深度学习解决实际问题。 首先,笔记从深度学习的基础概念入手,包括神经网络、激活函数、损失函数等,为读者打下坚实的理论基础。然后,笔记详细介绍了深度学习中常用的模型结构,如卷积神经网络、循环神经网络等,并对它们的原理和应用进行了剖析。 此外,笔记还重点介绍了深度学习中的优化算法和正则化方法,如梯度下降、随机梯度下降、批量归一化等,帮助读者了解如何提高模型的性能和减少过拟合。 在实践部分,笔记提供了丰富的代码示例和数据集,通过实际操作,读者可以学到如何使用深度学习框架搭建模型、训练和评估模型,并解决真实世界的问题。 总的来说,《鲁伟深度学习笔记》是一本深度学习入门的好资料,通过阅读笔记,读者可以初步掌握深度学习的基本原理和应用方法,为进一步深入学习和研究打下基础。 ### 回答2: 《鲁伟深度学习笔记》pdf可以在网络上找到,它是对深度学习领域的一本权威教材。这本书由知名的教育家鲁伟撰写,详细介绍了深度学习所涉及的各个方面和应用。该pdf经过了精心编辑和排版,使读者能够很方便地阅读。 这本笔记的内容包括深度学习的基本概念、神经网络的原理、常用的深度学习模型以及它们的应用领域等。书中详细介绍了卷积神经网络、循环神经网络和生成对抗网络等常用模型,并给出了它们的实际案例和代码实现。 阅读《鲁伟深度学习笔记》pdf对于深度学习初学者和从业者来说都是很有价值的。对于初学者来说,它提供了一个很好的入门教材,帮助他们快速了解深度学习的基本概念和应用。对于从业者来说,它提供了详细的技术指导和实践案例,帮助他们提高自己的技术水平和解决实际问题。 总而言之,《鲁伟深度学习笔记》pdf是一本权威且实用的深度学习教材,适合各个层次的读者参考学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值