雷哥的博客


  • 首页

  • 分类

  • 归档

  • 标签

强化学习基础

发表于 2019-01-18 | 分类于 机器学习 , 强化学习

强化学习基础

强化学习特点

  • 强化学习是机器学习的一个分支:监督学习、无监督学习、强化学习

  • 强化学习的特点:

    • 没有监督数据、只有奖励信号
    • 奖励信号不一定是实时的,而很可能是延后的,有时甚至延后很多。
    • 时间(序列)是一个重要因素
    • 当前的行为影响后续接收到的数据
  • 强化学习有广泛的应用:像直升机特技飞行、经典游戏、投资管理、发电站控制、让机器人模仿人类行走等

强化学习问题的提出

奖励Reward

  • 是信号的反馈,是一个标量,它反映个体在t时刻做得怎么样。个体的工作就是最大化累计奖励。

  • $R_t$强化学习主要基于这样的”奖励假设”:所有问题解决的目标都可以被描述成最大化累积奖励

序列决策 Sequential Decision Making

  • 目标:选择一定的行为序列以最大化未来的总体奖励
  • 这些行为可能是一个长期的序列
  • 奖励可能而且通常是延迟的
  • 有时候宁愿牺牲即时(短期)的奖励以获取更多的长期奖励

个体和环境 Agent & Environment

可以从个体和环境两方面来描述强化学习问题。

  • 在 t 时刻,个体可以:

    • 有一个对于环境的观察评估 $O_{t}$
    • 做出一个行为 $A_{t}$
    • 从环境得到一个奖励信号 $R_{t+1}$
  • 环境可以:

    • 接收个体的动作 $A_{t}$
    • 更新环境信息,同时使得个体可以得到下一个观测 $O_{t+1}$
    • 给个体一个奖励信号 $R_{t+1} $

历史和状态 History & State

  • 历史

    • 历史是观测、行为、奖励的序列:$ H_{t} = O_{1}, R_{1}, A_{1},…, O_{t-1}, R_{t-1}, A_{t-1}, O_{t}, R_{t}, A_{t}$
  • 状态

    • 状态是所有决定将来的已有的信息,是关于历史的一个函数:$S_{t} = f(H_{t})$
  • 环境状态

    • 是环境的私有呈现,包括环境用来决定下一个观测/奖励的所有数据,通常对个体并不完全可见,也就是个体有时候并不知道环境状态的所有细节。即使有时候环境状态对个体可以是完全可见的,这些信息也可能包含着一些无关信息。
  • 个体状态

    • 是个体的内部呈现,包括个体可以使用的、决定未来动作的所有信息。个体状态是强化学习算法可以利用的信息,它可以是历史的一个函数: $S^{a}{t} = f(H{t})$
  • 信息状态

    • 包括历史上所有有用的信息,又称Markov状态
    • 马儿可夫属性 Markov Property
      • 一个状态St是马尔可夫的,当且仅当:$P[S_{t+1} | S_{t}] = P[S_{t+1} | S_{1}, S_{2},…, S_{t}]$
      • 也就是说,如果信息状态是可知的,那么所有历史信息都可以丢掉,仅需要 t 时刻的信息状态就可以了
        • 例如:环境状态是Markov的,因为环境状态是环境包含了环境决定下一个观测/奖励的所有信息

完全可观测的环境 Fully Observable Environments

  • 个体能够直接观测到环境状态。在这种条件下:
  • 个体对环境的观测 = 个体状态 = 环境状态
  • 正式地说,这种问题是一个马儿可夫决定过程(Markov Decision Process, MDP)

部分可观测的环境 Partially Observable Environments

  • 个体间接观测环境。举了几个例子:
    • 一个可拍照的机器人个体对于其周围环境的观测并不能说明其绝度位置,它必须自己去估计自己的绝对位置,而绝对位置则是非常重要的环境状态特征之一;
    • 一个交易员只能看到当前的交易价格;
    • 一个扑克牌玩家只能看到自己的牌和其他已经出过的牌,而不知道整个环境(包括对手的牌)状态。
    • 在这种条件下:
      • 个体状态 ≠ 环境状态

强化学习个体的主要组成部分

强化学习中的个体可以由以下三个组成部分中的一个或多个组成

策略 Policy

  • 策略是决定个体行为的机制。是从状态到行为的一个映射,可以是确定性的,也可以是不确定性的。

价值函数 Value Function

  • 是一个未来奖励的预测,用来评价当前状态的好坏程度
    • 当面对两个不同的状态时,个体可以用一个Value值来评估这两个状态可能获得的最终奖励区别,继而指导选择不同的行为,即制定不同的策略。
    • 一个价值函数是基于某一个特定策略的,不同的策略下同一状态的价值并不相同。某一策略下的价值函数用下式表示:

模型 Model

个体对环境的一个建模,它体现了个体是如何思考环境运行机制的(how the agent think what the environment was.),个体希望模型能模拟环境与个体的交互机制。

  • 模型至少要解决两个问题:

    • 一是状态转化概率,即预测下一个可能状态发生的概率:

    • 另一项工作是预测可能获得的即时奖励:

  • 模型并不是构建一个个体所必需的,很多强化学习算法中个体并不试图(依赖)构建一个模型。

注:模型仅针对个体而言,环境实际运行机制不称为模型,而称为环境动力学(dynamics of environment),它能够明确确定个体下一个状态和所得的即时奖励

强化学习个体的分类

解决强化学习问题,个体可以有多种工具组合,比如通过建立对状态的价值的估计来解决问题,或者通过直接建立对策略的估计来解决问题。这些都是个体可以使用的工具箱里的工具。因此,根据个体内包含的“工具”进行分类,可以把个体分为如下三类:

  • 仅基于价值函数的 Value Based:在这样的个体中,有对状态的价值估计函数,但是没有直接的策略函数,策略函数由价值函数间接得到。

  • 仅直接基于策略的 Policy Based:这样的个体中行为直接由策略函数产生,个体并不维护一个对各状态价值的估计函数。

  • 演员-评判家形式 Actor-Critic:个体既有价值函数、也有策略函数。两者相互结合解决问题。
    此外,根据个体在解决强化学习问题时是否建立一个对环境动力学的模型,将其分为两大类:

不基于模型的个体: 这类个体并不视图了解环境如何工作,而仅聚焦于价值和/或策略函数。
基于模型的个体:个体尝试建立一个描述环境运作过程的模型,以此来指导价值或策略函数的更新。

学习和规划

  • 学习:环境初始时是未知的,个体不知道环境如何工作,个体通过与环境进行交互,逐渐改善其行为策略。
  • 规划: 环境如何工作对于个体是已知或近似已知的,个体并不与环境发生实际的交互,而是利用其构建的模型进行计算,在此基础上改善其行为策略。
  • 一个常用的强化学习问题解决思路是,先学习环境如何工作,也就是了解环境工作的方式,即学习得到一个模型,然后利用这个模型进行规划

预测和控制 Prediction & Control

  • 在强化学习里,我们经常需要先解决关于预测(prediction)的问题,而后在此基础上解决关于控制(Control)的问题。
  • 预测:给定一个策略,评价未来。可以看成是求解在给定策略下的价值函数(value function)的过程。How well will I(an agent) do if I(the agent) follow a specific policy?
  • 控制:找到一个好的策略来最大化未来的奖励。
    举了一个例子来说明预测和控制的区别

Conditional GAN

发表于 2019-01-16 | 分类于 机器学习 , GAN

Conditional GAN介绍

背景

  • Traditional supervised approach

    • 正面火车和侧面火车都是好的结果,这会导致最后图片很模糊,因为是多张图片的平均
  • GAN

    • G其实可以很容易忽略D,从而可以无视G的输入(这里是c:train)
      • 比如如果G发现每次输出猫都能得到高分,那么不管G的输入,只要我我每次都输出是清晰的猫就好了
      • 输出低分基本上有下面三种场景
    • 后面的Conditional GAN可以解决这个问题

Conditional GAN

  • 输入
    • G的输出x:图片
    • G的输入c:train
  • 目标
    • x is realistic or not
    • c ans x are matched or not
  • 演算法
    • 核心思想:找到Loss(上面三种情况集合),然后用梯度提升方法去优化

Contitional GAN(D网络架构)

  • 分别将x是否是真实图片和c and x是否match分别输出会比较好一点

Stack GAN

  • 思想就是先产生小图,然后产生大图

Image to Image

传统方法(Supervised Learning)

  • 也是一样,最后输出会很模糊
    • 因为一个input对应了多个好图(多张图片),就会把这些图片做平均来输出

GAN方法

  • testing中的close图片,就是supervised learning的结果,比较模糊
  • GAN比较清晰了,但是会产生一些其他的内容
  • GAN+close,再加入一些限制条件,就是让G产生的图片更接近真实图片

Patch GAN

  • 图像太大,容易出现各种问题

GAN用到其他场景

Speech去杂音

  • speech生谱图就当做图片,也使用Conditional GAN思想

Video

  • 判断是否是正确的连续的影片
    • 将影片一张张剪辑,形成图片,然后进行训练

GAN基础

发表于 2019-01-10 | 分类于 机器学习 , GAN

Basic idea of GAN

Generator

Discriminator(辨别者,鉴别器)

  • 产出一个标量

形容关系:猎食者和天敌都在净化

  • 天敌-Discriminator
  • 枯叶蝶-Generator

    • 枯叶蝶为了躲避猎食者的捕猎,不行进化自身
  • 二次元也是一样的

    • Generator,Discriminator不断进化Discriminator2骗过Generator1,Discriminator3骗过Generator2等
    • 看起来Generator,Discriminator像是对抗的样子,所以是adversarial的由来
  • 对抗只是拟人的方法,下面就是和平的比喻

    • 问题:
      • 1.为什么Generator不能自己学,而需要Discriminator驱动
      • 2.为什么Discriminator不自己做

Algorithm

  • step1

    • 训练Discriminator,使database中产生的结果很接近1,Generator产生的结果很接近0
  • step2

    • Fix Discriminator,update Generator
    • Generator,Discriminator合一起,成一个巨大的网络,比如前几层是Generator,后几层是Discriminator
    • 这一步目标就是巨大网络输出scala值要大(Gradient Ascent)
      • 通常情况下,要让最后的输出很大,只需要调整最后一层softmax层就可以了
      • 但是这里固定住后面几层,只让调整Generator
  • 整体算法

    • Learning D
      • sample from database:$x^m$,noise samples:$z^m$
      • $\tilde x^m=G(z^m)$表示Genertor产生的vector
      • 然后通过梯度提升算法,最优化$\tilde V$,含义就是让$D(x^i)尽量大,D(\tilde x^i)$尽量小
    • Learning G
      • 目的就是update G,使其能够骗过D
      • $D(G(z^i))$,理解其含义就是让noise数据经过G处理后,然后通过D(骗过D),得到最大的标量值

GAN as structured learning

Structured Learning

  • 当输出不是一个标量数值或者分类,是更负责的模型的时候,比如seq,matrix,graph等
  • Why structured learning challenging
    • 必须考虑大局观
  • Structured Learning Approach
    • Bottom up方法容易失去大局观
      • 一个componet一个component地生成
      • component与component之间的关系不容易把握
    • Top Down方法不容易train

Can Generator learn by itself

NN Generator和NN Classifier比较类似

  • 只是一个是输入vector,一个输入图像
  • 问题:NN Generator如何产生输入的vector(将图片进行编码)?
    • 不能够随机产生,因为如果随机产生,就无法表示出向量的相似性了(比如图片1有很多种,左斜,右斜等)

Auto Encoder-Decoder

  • 解决上面:NN Generator如何产生输入vector问题
  • 如图:encode模块,对输入和输出图片越接近越好
  • 训练后好的Anto encoder中的NN Decoder其实就可以理解为NN Generator
    • 简单来说就是输入一个vector,然后输出图像
  • 如果训练集数据比较小,当出现0.5a + 0.5b输入时无法判断
    • a,b都能正确判断,但是当各0.5的时候就不好使了
    • 如下使用VAE解决

VAE

  • 如何更好的判断input img和output img相似,如何取舍?
    • 比如我们不能简单的用pixel不同个数来决定,如下图明显6 pixel error更好

单纯的learn Generator困难的地方(Auto encoder可能遇见问题)

  • 邻近的component无法交流
    • 当然如果考虑更加深的NN,多加入些隐层,可能能够解决
  • 例如:
    • 绿色为GAN得到的结论
    • 蓝色为Auto-encoder(单纯Generator)得到的
    • 原因是无法得到邻近的component的关系

Can Discriminator generate

Discriminator复习

  • Discriminator在不同的领域有不同的名字,evaluation function,potential function….

Discriminator容易解决component与component之间的关系

  • 如果已经有了整张图片,来判断图片是否ok,比较好处理
    • 比如下图中,Discriminator就是一个CNN,这个CNN中有一个检测是否有独立的的filter,这样就很容易检测了

Discriminator擅长批评,不擅长生成

  • need some negative example
    • 所以产生negative example是关键
    • 可能需要一个好的程序去产生negative example
      • 并不能随机生成,如果随机生成,那么一些处于中间状态的图片也没有办法处理
      • 而且需要一个Discriminator来判断是否是好的negative example
        • 这样就会有鸡生蛋,蛋生鸡的问题了:我们需要好的negative example来训练Discriminator,同时又需要好的Discriminator来协助产生negative example
  • Iteration方法解决
    • Discriminator Training
      • 只要能够找到$\tilde x=arg maxD(x)$,Discriminator就能够自己train,而不需要Generator
      • 用iteration方法,不断用此轮迭代得到的D去产生negative example(用D去找出自己的弱点),然后迭代训练
    • Discriminator Training实际类似曲线图
      • 第一张图中,可以看见在没有sample区域,D(x)也可能判断出很高的分数
      • 第二张图中,用得到的D(x)生成新的negative example,然后再从新调整D(x)(让随机产生的negative example分数低)
      • 第三张图中,就是第二轮训练后的曲线图
        • 直观感觉:总体说就是用D(x)去生成非real example区域的高分negative example,然后不断调整自己,让其分数变低
  • Graphical model
    • 其实就是用的Discriminator方法,在ml中其他的structure modle其实方法也是类似:
      就是有一些negative和positive的样本,然后产生一个model,然后用此model再生成些negative example,然后再train….

Generator与Discriminator

  • 优缺点
    • Generator容易生成,但不易判断组件与组件直接的关系
    • Discriminator有全局观,但不易做生成
  • 组合
    • Generator就替代了arg maxD(x),解决了Discriminator很难做生成的问题
  • VAE & GAN
    • VAE比较稳,但最终的效果还是没有GAN好
    • 各种GAN其实效果没有太大区别

GAN概要

发表于 2019-01-08 | 分类于 机器学习 , GAN

参考文章

什么是GAN

GAN(Generative adversarial nets),中文是生成对抗网络,他是一种生成式模型,也是一种无监督学习模型。其最大的特点是为深度网络提供了一种对抗训练的方式,此方式有助于解决一些普通训练方式不容易解决的问题

GAN原理

GAN的主要灵感来源于博弈论中零和博弈的思想,应用到深度学习神经网络上来说,就是通过生成网络G(Generator)和判别网络D(Discriminator)不断博弈,进而使G学习到数据的分布

  • 如果用到图片生成上,则训练完成后,G可以从一段随机数中生成逼真的图像。G, D的主要功能是:
    • G是一个生成式的网络,它接收一个随机的噪声z(随机数),通过这个噪声生成图像
    • D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片
  • 训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量辨别出G生成的假图像和真实的图像。这样,G和D构成了一个动态的“博弈过程”,最终的平衡点即纳什均衡点.

GAN特点

  • 相比较传统的模型,他存在两个不同的网络,而不是单一的网络,并且训练方式采用的是对抗训练方式
  • GAN中G的梯度更新信息来自判别器D,而不是来自数据样本

GAN优点

  • GAN是一种生成式模型,相比较其他生成模型(玻尔兹曼机和GSNs)只用到了反向传播,而不需要复杂的马尔科夫链
  • 相比其他所有模型, GAN可以产生更加清晰,真实的样本
  • GAN采用的是一种无监督的学习方式训练,可以被广泛用在无监督学习和半监督学习领域
  • 相比于变分自编码器, GANs没有引入任何决定性偏置( deterministic bias),变分方法引入决定性偏置,因为他们优化对数似然的下界,而不是似然度本身,这看起来导致了VAEs生成的实例比GANs更模糊
  • 相比VAE, GANs没有变分下界,如果鉴别器训练良好,那么生成器可以完美的学习到训练样本的分布.换句话说,GANs是渐进一致的,但是VAE是有偏差的
  • GAN应用到一些场景上,比如图片风格迁移,超分辨率,图像补全,去噪,避免了损失函数设计的困难,不管三七二十一,只要有一个的基准,直接上判别器,剩下的就交给对抗训练了

GAN缺点

缺点

  • 训练GAN需要达到纳什均衡,有时候可以用梯度下降法做到,有时候做不到.我们还没有找到很好的达到纳什均衡的方法,所以训练GAN相比VAE或者PixelRNN是不稳定的,但我认为在实践中它还是比训练玻尔兹曼机稳定的多
  • GAN不适合处理离散形式的数据,比如文本
  • GAN存在训练不稳定、梯度消失、模式崩溃的问题(目前已解决)

为什么GAN不适合处理文本数据

  • 文本数据相比较图片数据来说是离散的,因为对于文本来说,通常需要将一个词映射为一个高维的向量,最终预测的输出是一个one-hot向量,假设softmax的输出是(0.2, 0.3, 0.1,0.2,0.15,0.05)那么变为onehot是(0,1,0,0,0,0),如果softmax输出是(0.2, 0.25, 0.2, 0.1,0.15,0.1 ),one-hot仍然是(0, 1, 0, 0, 0, 0),所以对于生成器来说,G输出了不同的结果但是D给出了同样的判别结果,并不能将梯度更新信息很好的传递到G中去,所以D最终输出的判别没有意义。
  • 另外就是GAN的损失函数是JS散度,JS散度不适合衡量不想交分布之间的距离。
    (WGAN虽然使用wassertein距离代替了JS散度,但是在生成文本上能力还是有限,GAN在生成文本上的应用有seq-GAN,和强化学习结合的产物)

GAN的变种

自从GAN出世后,得到了广泛研究,先后几百篇不同的GANpaper横空出世,国外有大神整理了一个GAN zoo(GAN动物园),链接如下,感兴趣的可以参考一下:
GAN zoo
GitHub上已经1200+star了,顺便附上一张GAN的成果图,可见GAN的研究火热程度:

由于GAN的变种实在太多,可以学习下DCGAN,, WGAN, improved-WGAN,BEGAN

GAN的广泛应用

  • GAN本身是一种生成式模型,所以在数据生成上用的是最普遍的,最常见的是图片生成,常用的有DCGAN WGAN,BEGAN,个人感觉在BEGAN的效果最好而且最简单。
  • GAN本身也是一种无监督学习的典范,因此它在无监督学习,半监督学习领域都有广泛的应用,比较好的论文有
    • Improved Techniques for Training GANs
    • Bayesian GAN(最新)
    • Good Semi-supervised Learning
  • 不仅在生成领域,GAN在分类领域也占有一席之地,简单来说,就是替换判别器为一个分类器,做多分类任务,而生成器仍然做生成任务,辅助分类器训练。
  • GAN可以和强化学习结合,目前一个比较好的例子就是seq-GAN
  • 目前比较有意思的应用就是GAN用在图像风格迁移,图像降噪修复,图像超分辨率了,都有比较好的结果,详见pix-2-pix GAN 和cycle GAN。但是GAN目前在视频生成上和预测上还不是很好。
  • 目前也有研究者将GAN用在对抗性攻击上,具体就是训练GAN生成对抗文本,有针对或者无针对的欺骗分类器或者检测系统等等,但是目前没有见到很典范的文章。

BERT模型

发表于 2019-01-06 | 分类于 NLP , 模型理解

首先理解:
Attention模型
Transformer模型

参考文章:
从Word Embedding到Bert模型——自然语言处理预训练技术发展史
谷歌终于开源BERT代码:3 亿参数量,机器之心全面解读

概览

  • 效果:Bert 具备广泛的通用性,就是说绝大部分 NLP 任务都可以采用类似的两阶段模式直接去提升效果

预训练发展史:

ELMO(Embedding from Language Models)

  • 参考图像领域预训练预训练理解
  • 词嵌入Word Embedding,NNLM,Word2Vec(CBOW,Skip-gram),Glove

  • 解决问题:Work Embedding的多义性问题

    • 静态的方式:训练好之后每个单词的表达就固定住了,以后使用的时候,不论新句子上下文单词是什么,这个单词的 Word Embedding 不会跟着上下文场景的变化而改变,所以对于比如 Bank 这个词
  • 本质思想
    • 用事先用语言模型学好一个单词的 Word Embedding,然后根据当前上下文对 Word Embedding 动态调整的思路
  • 两阶段:
    • 第一个阶段是利用语言模型进行预训练
    • 第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的 Word Embedding 作为新特征补充到下游任务中
      • Feature-based Pre-Training
        因为 ELMO给下游提供的是每个单词的特征形式,所以这一类预训练的方法被称为“Feature-based Pre-Training”
  • ELMO和图像预训练的区别
    • ELMO 代表的这种基于特征融合的预训练方法
    • NLP还有一种:基于 Fine-tuning 的模式,而 GPT 就是这一模式的典型开创者,这种和图像预训练比较像
  • ELMO有什么缺点(GPT和Bert出来之后对比)
    • LSTM抽取特征能力远低于Transformer
    • 拼接方式双向融合特征融合能力偏弱

GPT(Generative Pre-Training)

  • 和ELMO区别

    • 使用的Fine-tuning模式,特征抽取器不是用的 RNN,而是用的 Transformer
    • GPT 的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型
      • 这限制了其在更多应用场景的效果,比如阅读理解这种任务,在做任务的时候是可以允许同时看到上文和下文一起做决策的
    • 下游使用(Fine-tuning)
      • 要向 GPT 的网络结构看齐,把任务的网络结构改造成和 GPT 的网络结构是一样的。然后,在做下游任务的时候,利用第一步预训练好的参数初始化 GPT 的网络结构
  • 下游任务如何改造靠近 GPT 的网络结构呢

  • GPT有什么问题:

    • 最主要的就是那个单向语言模型

Bert

  • 两阶段模型

    • 在预训练阶段采用了类似 ELMO 的双向语言模型,和GPT一样使用Transformer网络
    • Fine-Tuning 阶段,这个阶段的做法和 GPT 是一样的
  • 和GPT,ELMO关系

    • 如果我们把 GPT预训练阶段换成双向语言模型,那么就得到了 Bert
    • 如果我们把 ELMO 的特征抽取器换成Transformer,那么我们也会得到 Bert
  • 输入表征
    BERT 最核心的过程就是同时预测加了 MASK 的缺失词与 A/B 句之间的二元关系,而这些首先都需要体现在模型的输入中

    • 特殊符 [SEP] 是用于分割两个句子的符号
    • 前面半句会加上分割编码 A,后半句会加上分割编码 B,预测 B 句是不是 A 句后面的一句话
    • 为了令 Transformer感知词与词之间的位置关系,我们需要使用位置编码给每个词加上位置信息
  • 预训练过程
    BERT 最核心的就是预训练过程,这也是该论文的亮点所在。简单而言,模型会从数据集抽取两句话,其中B句有 50% 的概率是 A句的下一句,然后将这两句话转化前面所示的输入表征。现在我们随机遮掩(Mask 掉)输入序列中 15% 的词,并要求 Transformer 预测这些被遮掩的词,以及 B 句是 A 句下一句的概率这两个任务

    • 对于二分类任务,在抽取一个序列(A+B)中,B 有 50% 的概率是 A 的下一句。如果是的话就会生成标注「IsNext」,不是的话就会生成标注「NotNext」,这些标注可以作为二元分类任务判断模型预测的凭证
    • 对于 Mask 预测任务,首先整个序列会随机 Mask 掉 15% 的词,这里的 Mask 不只是简单地用「[MASK]」符号代替某些词,因为这会引起预训练与微调两阶段不是太匹配。所以谷歌在确定需要 Mask 掉的词后,80% 的情况下会直接替代为「[MASK]」,10% 的情况会替代为其它任意的词,最后 10% 的情况会保留原词
  • 微调过程

    • 下图展示了 BERT 在 11 种任务中的微调方法,它们都只添加了一个额外的输出层。在下图中,Tok 表示不同的词、E 表示输入的嵌入向量、T_i 表示第 i 个词在经过 BERT 处理后输出的上下文向量

      • (a)中判断问答对是不是包含正确回答的 QNLI、判断两句话有多少相似性的 STS-B 等,它们都用于处理句子之间的关系
      • (b)中判语句中断情感趋向的 SST-2 和判断语法正确性的 CoLA 任务,它们都是处理句子内部的关系
    • NLP四类任务

      • 一类是序列标注,这是最典型的 NLP 任务,比如中文分词,词性标注,命名实体识别,语义角色标注等都可以归入这一类问题,它的特点是句子中每个单词要求模型根据上下文都要给出一个分类类别。
      • 第二类是分类任务,比如我们常见的文本分类,情感计算等都可以归入这一类。它的特点是不管文章有多长,总体给出一个分类类别即可。
      • 第三类任务是句子关系判断,比如 Entailment,QA,语义改写,自然语言推理等任务都是这个模式,它的特点是给定两个句子,模型判断出两个句子是否具备某种语义关系。
      • 第四类是生成式任务,比如机器翻译,文本摘要,写诗造句,看图说话等都属于这一类。它的特点是输入文本内容后,需要自主生成另外一段文字

Transformer模型

发表于 2019-01-06 | 分类于 NLP , 模型理解

参考文章:
神经机器翻译 之 谷歌 transformer 模型
Self-attention and Transformer
大数据文摘-BERT大火却不懂Transformer&version=11020201&lang=zh_CN&pass_ticket=sLCET0Y%2BZTkYDsKSej3nfbOS885niL2%2Bt2ffNlFmQw3FszFuawe4q3nwl02gUnCe)
从头开始了解Transformer

背景

  • 首先理解Attention模型,个人理解Transformer本质其实就是对selt-attention的包装
  • 论文《Attention is all you need》特点:
    重点关注了复杂度,并行度,长距离依赖学习三个问题
    • 现在做神经翻译里最好的BLUE结果
    • 没有采取大热的RNN/LSTM/GRU的结构,而是使用attention layer 和全连接层,达到了较好的效果,并且解决了 RNN/LSTM/GRU 里的long dependency problem
    • 解决了传统RNN 训练并行度的问题,并降低了计算复杂度

Encoder-Decoder架构

  • Encoder-Decoder架构整体

    • 在编码器的一个网络块中,由一个多头attention子层和一个前馈神经网络子层组成,整个编码器栈式搭建了N个块
    • 解码器的一个网络块中多了一个多头attention层。为了更好的优化深度网络,整个网络使用了残差连接和对层进行了规范化(Add&Norm)
      • 这里有个特别点就是masking, masking 的作用就是防止在训练的时候 使用未来的输出的单词。 比如训练时, 第一个单词是不能参考第二个单词的生成结果的。 Masking就会把这个信息变成0, 用来保证预测位置 i 的信息只能基于比 i 小的输出
  • Encode组件

  • Decode组件

    • 编码器通过处理输入序列开启工作。顶端编码器的输出之后会变转化为一个包含向量K(键向量)和V(值向量)的注意力向量集 。这些向量将被每个解码器用于自身的“编码-解码注意力层”,而这些层可以帮助解码器关注输入序列哪些位置合适
    • 接下来的步骤重复了这个过程,直到到达一个特殊的终止符号, - 它表示transformer的解码器已经完成了它的输出。每个步骤的输出在下一个时间步被提供给底端解码器,并且就像编码器之前做的那样,这些解码器会输出它们的解码结果
    • 这个“编码-解码注意力层”工作方式基本就像多头自注意力层一样,只不过它是通过在它下面的层来创造查询矩阵,并且从编码器的输出中取得键/值矩阵

  • 最终的线性变换和Softmax层
    解码组件最后会输出一个实数向量。我们如何把浮点数变成一个单词?这便是线性变换层要做的工作,它之后就是Softmax层

    • 线性变换层是一个简单的全连接神经网络,它可以把解码组件产生的向量投射到一个比它大得多的、被称作对数几率(logits)的向量里
    • 接下来的Softmax 层便会把那些分数变成概率(都为正数、上限1.0)。概率最高的单元格被选中,并且它对应的单词被作为这个时间步的输出

scaled dot-Product attention

  • 核心理解
    点积表示输入序列中两个向量的由学习任务定义的“相关”程度,并且输出向量是整个输入序列的加权和,其权重由这些点积确定
  • 本质:其实scaled dot-Product attention就是我们常用的使用点积进行相似度计算的attention,只是多除了一个(为K的维度)起到调节作用,使得内积不至于太大
  • 操作步骤
    • 每个query-key 会做出一个点乘的运算过程
    • 最后会使用soft max 把他们归一
    • 再到最后会乘以V (values) 用来当做attention vector.
  • 详细理解

Multi-head attention

  • 核心:
    我们必须考虑到一个词对不同的邻居有不同的意思,按照上面所描述,一个词对对应的输出也只是一个vector,只对应一种情况,但有些场景相同的语言,句子表达的含义完全不同,所以有了Multi head

Multi-head attention(1)

  • 它扩展了模型专注于不同位置的能力
    • 我理解就是不同的每个注意力头都会对会有不同的关注点,就是丰富了一个词的注意点
  • 它给出了注意力层的多个“表示子空间”(representation subspaces)

    • 接下来我们将看到,对于“多头”注意机制,我们有多个查询/键/值权重矩阵集(Transformer使用八个注意力头,因此我们对于每个编码器/解码器有八个矩阵集合)。这些集合中的每一个都是随机初始化的
    • 在训练之后,每个集合都被用来将输入词嵌入(或来自较低编码器/解码器的向量)投影到不同的表示子空间中
  • 如果我们做与上述相同的自注意力计算,只需八次不同的权重矩阵运算,我们就会得到八个不同的Z矩阵

  • 前馈层不需要8个矩阵,它只需要一个矩阵(由每一个单词的表示向量组成)

    • 所以我们需要一种方法把这八个矩阵压缩成一个矩阵。那该怎么做?其实可以直接把这些矩阵拼接在一起,然后用一个附加的权重矩阵WO与它们相乘

Multi-head attention(2)

  • Query,Key,Value首先进过一个线性变换
  • 然后输入到放缩点积attention
    • 注意这里要做h次,其实也就是所谓的多头,每一次算一个头
    • 每次Q,K,V进行线性变换的参数W是不一样的,所以每个头都计算自己的特征
    • 进行h个头计算好处:好处是可以允许模型在不同的表示子空间里学习到相关的信息
  • 然后将h次的放缩点积attention结果进行拼接(concat)
  • 再进行一次线性变换得到的值作为多头attention的结果

如何使用attention

  • 首先在编码器到解码器的地方使用了多头attention进行连接,编码器的层输出(这里K=V)和解码器中都头attention的输入。其实就和主流的机器翻译模型中的attention一样
  • 在Encoder,Decoder中都使用的self-attention
    • 例如输入一个句子,那么里面的每个词都要和该句子中的所有词进行attention计算。目的是学习句子内部的词依赖关系,捕获句子的内部结构

构建Transformer

  • Transformer不只是一个self-attention层,它是一个架构。目前Transformer的定义还不清楚,但在这里我们将使用以下定义:
    • 任何用于处理连接单元集 (connected units) 的体系结构——例如序列中的标记或图像中的像素——单元之间的唯一交互是通过self-attention
  • 如何构建:大致的结构如下
    • 各种组件的顺序不是一成不变的;重要的是将self-attention与本地前馈相结合,并添加归一化和残差连接
    • 归一化和残差连接是用于帮助深度神经网络训练更快,更准确的标准技巧。归一化层仅作用于嵌入维度。
  • 为什么这么设计?
    结合了RNN和CNN的优势,改善他们的缺点:Transformer试图吸收两者的优点。它们可以对输入序列的整个范围建立依赖关系,就像它们彼此相邻的单词一样容易(事实上,没有位置向量,它们甚至无法区分) 。然而,这里没有循环连接
    • RNN问题
      这里最大的弱点是循环连接,串行,并且时间步相隔较远的单元相互影响较小了
    • CNN问题
      在该模型中,每个输出向量可以与其他每个输出向量并行计算。这使得卷积更快。然而,卷积的缺点在于它们在模拟远程依赖方面受到严重限制。在一个卷积层中,只有相距比卷积核大小更小的单词才能相互交互。为了更长的依赖性,我们需要堆叠许多卷积

Transformer解决问题

  • 并行问题
    • 首先each head, 是可以并行计算的, 然后每个head 都有自己对应的weight, 实现不同的线性转换, 这样每个head 也就有了自己特别的表达信息
    • 多头attention和CNN一样不依赖于前一时刻的计算,可以很好的并行,优于RNN
  • 长距离依赖学习
    • self-attention是每个词和所有词都要计算attention,所以不管他们中间有多长距离,最大的路径长度也都只是1。可以捕获长距离依赖关系
  • RNN,CNN计算复杂度的比较
    • 如果输入序列n小于表示维度d的话,每一层的时间复杂度self-attention是比较有优势的。当n比较大时,作者也给出了一种解决方案self-attention(restricted)即每个词不是和所有词计算attention,而是只与限制的r个词去计算attention

训练部分&损失函数

Transformer只是一个encode-decode框架架构,后面的,训练&损失函数&优化算法就也能共用其他了,比如BP,集束搜索(beam search)…

  • 既然我们已经过了一遍完整的transformer的前向传播过程,那我们就可以直观感受一下它的训练过程。
  • 在训练过程中,一个未经训练的模型会通过一个完全一样的前向传播。但因为我们用有标记的训练集来训练它,所以我们可以用它的输出去与真实的输出做比较

Transformer应用

  • transformer本身并不能识别单词直接次序,句子前后次序等,bert是对transformer很成功的应用,在输入上增加了其他的信息:比如位置嵌入,句子次序,mask等的预训练模型

Attention模型

发表于 2019-01-05 | 分类于 NLP , 模型理解

吴恩达课程-Attention实现
参考文章:深度学习中的注意力模型

Encoder-Decoder框架

  • 可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型
  • Encoder顾名思义就是对输入句子X进行编码,将输入句子通过非线性变换转化为中间语义表示C:$C=F(X_1,X_2,…X_m)$
  • 解码器Decoder来说,其任务是根据句子X的中间语义表示C和之前已经生成的历史信息y1,y2….yi-1来生成i时刻要生成的单词yi $y_i=g(c,y_1,y_2,…y_{i-1})$
  • 总结:
    • Encoder-Decoder是个非常通用的计算框架,常见的比如CNN/RNN/BiRNN/GRU/LSTM/Deep LSTM等,这里的变化组合非常多
    • 框架很多应用场景:
      • 机器翻译来说,<X,Y>就是对应不同语言的句子,比如X是英语句子,Y是对应的中文句子翻译
      • 对于文本摘要来说,X就是一篇文章,Y就是对应的摘要
      • 对话机器人来说,X就是某人的一句话,Y就是对话机器人的应答

Attention模型

  • 分心模型:在生成目标句子的单词时,不论生成哪个单词,是y1,y2也好,还是y3也好,他们使用的句子X的语义编码C都是一样的,没有任何区别。
  • 添加注意力:$y_i的输出对应不同的输入c_i$
  • 例如生成$y_3$:汤姆这个词的对应输入词的权重:
  • 如何确定这些权重?(可以看下面的三阶段计算Attention过程)

    • 通过函数F(hj,Hi)来获得目标单词Yi和每个输入单词对应的对齐可能性(其实也是通过一个函数获取各个单词的权重)
      • 对于采用RNN的Decoder来说,如果要生成yi单词,在时刻i,我们是可以知道在生成Yi之前的隐层节点i时刻的输出值Hi的,而我们的目的是要计算生成Yi时的输入句子单词“Tom”、“Chase”、“Jerry”对Yi来说的注意力分配概率分布。那么可以用i时刻的隐层节点状态Hi去一一和输入句子中每个单词对应的RNN隐层节点状态hj进行对比,即通过函数F(hj,Hi)来获得目标单词Yi和每个输入单词对应的对齐可能性
    • 这个F函数在不同论文里可能会采取不同的方法,然后函数F的输出经过Softmax进行归一化就得到了符合概率分布取值区间的注意力分配概率分布数值
  • 直观理解

    • 目标句子生成的每个单词对应输入句子单词的概率分布可以理解为输入句子单词和这个目标生成单词的对齐概率,这在机器翻译语境下是非常直观的:传统的统计机器翻译一般在做的过程中会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的作用
    • 从概念上理解的话,把AM模型理解成影响力模型也是合理的,就是说生成目标单词的时候,输入句子每个单词对于生成这个单词有多大的影响程度
      • 例子:矩阵中每一列代表生成的目标单词对应输入句子每个单词的AM分配概率,颜色越深代表分配到的概率越大
  • Attention机制的本质思想
    我们可以这样来看待Attention机制(参考图9):将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:

  • 三阶段计算Attention过程

    • 第一个阶段根据Query和Key计算两者的相似性或者相关性
      • 可以引入不同的函数和计算机制,根据Query和某个Key_i,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值
    • 第二个阶段对第一阶段的原始分值进行归一化处理
      • 引入类似SoftMax的计算方式对第一阶段的得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布
      • 另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重
    • 第三个阶段根据权重系数对Value进行加权求和
      • 计算结果a_i即为value_i对应的权重系数,然后进行加权求和即可得到Attention数值
    • 总结:通过如上三个阶段的计算,即可求出针对Query的Attention数值,目前绝大多数具体的注意力机制计算方法都符合上述的三阶段抽象计算过程

从微观视角看自注意力机制

  • 第一步就是从每个编码器的输入向量(每个单词的词向量)中生成三个向量
    • 我们创造一个查询向量、一个键向量和一个值向量。这三个向量是通过词嵌入与三个权重矩阵后相乘创建的
    • 这些新向量在维度上比词嵌入向量更低。他们的维度是64,而词嵌入和编码器的输入/输出向量的维度是512
  • 第二步是计算得分
    • 假设我们在为这个例子中的第一个词“Thinking”计算自注意力向量,我们需要拿输入句子中的每个单词对“Thinking”打分。这些分数决定了在编码单词“Thinking”的过程中有多重视句子的其它部分
      • 这些分数是通过打分单词(所有输入句子的单词)的键向量与“Thinking”的查询向量相点积来计算的
      • 所以如果我们是处理位置最靠前的词的自注意力的话,第一个分数是q1和k1的点积,第二个分数是q1和k2的点积
  • 第三步第四步
    • 将分数除以8(8是论文中使用的键向量的维数64的平方根,这会让梯度更稳定。这里也可以使用其它值,8只是默认值)
    • 然后通过softmax传递结果。softmax的作用是使所有单词的分数归一化,得到的分数都是正值且和为1
      • 这个softmax分数决定了每个单词对编码当下位置(“Thinking”)的贡献。显然,已经在这个位置上的单词将获得最高的softmax分数
  • 第五步是将每个值向量乘以softmax分数(这是为了准备之后将它们求和)。
    • 这里的直觉是希望关注语义上相关的单词,并弱化不相关的单词(例如,让它们乘以0.001这样的小数)
  • 第六步是对加权值向量求和,然后即得到自注意力层在该位置的输出(在我们的例子中是对于第一个单词)
    • 译注:自注意力的另一种解释就是在编码某个单词时,就是将所有单词的表示(值向量)进行加权求和,而权重是通过该词的表示(键向量)与被编码词表示(查询向量)的点积并通过softmax得到。

Self Attention模型

  • 一般任务中的情况
    在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素Query和Source中的所有元素之间
  • Self Attention
    Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。其具体计算过程是一样的,只是计算对象发生了变化而已,所以此处不再赘述其计算过程细节
  • 例子
  • 优点:
    • 更擅长捕获句子中长距离特征
      引入Self Attention后会更容易捕获句子中长距离的相互依赖的特征,因为如果是RNN或者LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小
      • 但是SelfAttention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短
    • 增加计算的并行性

Attention机制的应用

Attention机制不仅在NLP有广泛应用,在图像和语言领域也有很多的应用

  • 图片描述
    • 很明显这种应用场景也可以使用Encoder-Decoder框架来解决任务目标,此时Encoder输入部分是一张图片,一般会用CNN来对图片进行特征抽取,Decoder部分使用RNN或者LSTM来输出自然语言句子
    • 此时如果加入Attention机制能够明显改善系统输出效果,Attention模型在这里起到了类似人类视觉选择性注意的机制,在输出某个实体单词的时候会将注意力焦点聚焦在图片中相应的区域上
  • Attention让每个单词对应图片中的注意力聚焦区域
  • 语音识别中音频序列和输出字符之间的Attention
    • 展示了在Encoder-Decoder框架中加入Attention机制后,当用户用语音说句子how much would a woodchuck chuck 时,输入部分的声音特征信号和输出字符之间的注意力分配概率分布情况,颜色越深代表分配到的注意力概率越高。从图中可以看出,在这个场景下,Attention机制起到了将输出字符和输入语音信号进行对齐的功能
  • 总结:Encoder-Decoder加Attention架构由于其卓越的实际效果,目前在深度学习领域里得到了广泛的使用,了解并熟练使用这一架构对于解决实际问题会有极大帮助

强化学习(简介)

发表于 2018-12-23 | 分类于 机器学习 , 强化学习

Reforcement Learning

  • 什么叫RL
    和监督学习的区别是,Agent会通过观察(Observation)当前环境(Environment),获得当前的State,接着Action后能够得到Environment的反馈:Reward,然后Agent根据Reward再调整做出正确的Action去改变Environment

    • Agent:学习主体,可以是一个NN或者其它,作用:Learns to take actions maximizing expected reward
    • Environment:外部环境,比如下围棋就是对手,玩电玩的时候,就是主机
    • State:Agent通过观察获取到的当前环境的输入状态
    • Action:根据当前状态做出的动作,当然此动作会影响Environment,比如下围棋的时候会影响对手下一步落棋
    • Reward:做出action,当前Environment给予的评价
  • Look for a function

  • 举例

    • state:输入为当前画面(像素值)
    • action:左移,右移或者开火
    • reward:Score
  • outline

Policy-based Approach(Learining an Actor)

  • 总体分三步

    • First step:

    • Second step:

    • Third step(pick the best function):

  • Policy Gradient作用
    如果Actor,Env,Reward都看做是DNN,那么本质上就是一个NN网络,求极值就很容易。但实际上Env,Reward不是一个NN网络,所以就不能进行微分,不能求出极值,解决办法就是用policy gradient进行处理

Value-based Approach(Learning a critic)

  • 是评价一个agent(actor)的好坏,$V^{\pi}(s)$表示给定一个Agent(Actor:$\pi$),并给定一个State:s,到最后游戏完成后,得到最后的reward expects的值
    • 比如下面坐标的图,有很多怪,到游戏结束期望分数就容易获得比较高的值,右边图就比较小(因为这个图看到到最后游戏结束,能杀的怪已经很少了)
    • 同一个state,不同的actor,那么$V^{\pi}(s)$值也会不一样
  • How to estimate $V^{\pi}(s)$

    • Monte-Carlo,观察到两个state,$S_a,S_b$,并且最后episode结束,Greed为$G_a,G_b$,这个时候,只需要让$V^{\pi}(s_a)\approx G_a,V^{\pi}(s_b)\approx G_b$

    • Temporal-difference,不会等到episode才开始计算(不用等到游戏结束就可以更新参数),原理是$V^{\pi}(s_t),V^{\pi}(s_{t+1})$中间是相差的$r_t$,所以只需要$V^{\pi}(s_t)-V^{\pi}(s_{t+1})\approx r_t$

  • Q Learning

    • Another Critic

      • 输入为state和action,可以对所有action做穷举(如果不能穷举,其实还有其他的方法的),看哪一个reward得分最高(得到Q function)
    • 每一次都找最大的Qfunction数值的action a

Actor+Critic

  • 核心原理:不会像Actor那样跟着环境去学习,因为环境变化是比较多的,所以Actor-Critic是跟着critic去学习
  • A3C

Inverse Reforcement learning

  • 背景:其实生活中的大多数场景,都不好找reward的,不像围棋或者是电玩,有很明确的规则.
    • 比如如果交通违规,如何处罚等。还比如说让机器人放盘子,之前并没有告诉摔坏盘子会扣分,机器人就不知道
  • 原来的方案:
  • Inverse Reforcement learning方案:
    • 正好相反,并不知道Reward Function,是通过学习学习到Reward Function后,然后使用它选择出最好的actor
  • 步骤:

    • expert和IRL都会自己学习,获得最终Reward,我们假设专家的Reward总数比学习到的好
    • 然后从中我们找到一个最好的Reward Function R
    • 再通过R去得到Actor $\pi$
    • 要注意下是,如果规则变化了,那么下面的循环圈需要不断的重新循环取学习
  • 发现和GAN比较像

第五门课-第三周

发表于 2018-12-06 | 分类于 深度学习 , 吴恩达课程总结

习题代码:Machine-Translation
习题代码:Trigger-word-detection

序列结构的各种序列

  • seq2seq
    分为编码网络的解码网络

  • 应用场景

    • 机器翻译,比如英文和法文的互相翻译
    • Image-to-seq
      例子中使用的AlexNet网络,将最后的softmax输出替换为RNN网络,输出为一个序列
  • 选择最可能的句子

    • 语言模型和翻译模型比较
      • 语言模型总是以零向量开始$(P(y^{< 1 >},y^{< 2 >},y^{< 3 >}…y^{< n >}))$
      • 而翻译模型输入是法语的encoder,可以理解为条件模型:$P(y^{< 1 >},y^{< 2 >},y^{< 3 >}…y^{< n >}|x^{< 1 >},x^{< 2 >},x^{< 3 >}…x^{< n >})$
      • 所以一个是随机输出seq,另一个是需要概率最大的seq
      • 如何保证翻译模型中的条件概率最大
        • 贪心算法:没一个输出都保证当前一个term($y^{< i >}$)概率最大,但是并不能保证整个序列概率最大,所以一次挑选一个词并不是最佳的选择
        • 穷举法:将所有句子进行穷举测试,但由单词生成的句子量太大,无法穷举
        • 集束算法

集束算法(Beam Search)

  • 集束算法

    • 贪婪算法只会挑出最可能的那一个单词,然后继续。而集束搜索则会考虑多个选择,选择数量就是集束宽(Beam width)
    • 第一步:
      需要 输入法语句子到编码网络,然后会解码这个网络,这个 softmax 层(上图编号 3 所示)会输 出 10,000 个概率值,得到这 10,000 个输出的概率值,取前三个存起来
    • 第二步:
      • 选择第一步中的一个词$P(y^{<2>}|x, y^{<1>})$如下图3,输入为第一步的输出和x
      • 不仅仅 是第二个单词有最大的概率,而是第一个、第二个单词对有最大的概率
      • $P(y^{<1>},y^{<2>}|x)=P(y^{<1>}|x)P(y^{<2>}|x, y^{<1>})$
    • 后面的步骤也是模仿第二步进行计算
    • 重复第二步,选择第一步中的其他词进行计算
    • 可以看见,如果集束宽为1,那么其实就是贪心算法
  • 改进集束搜索

    • 问题1:$P(y^{<1>}|x)P(y^{<2>}|x, y^{<1>})$…..由于每一步概率值都小于0,所以比容易造成数值下溢,也就是导致电脑的浮点表示不能精确的存储

      • 解决方案:
        我们总是记录概率的对数和,而不是概率的乘积,就用到了对数函数乘积的性质
    • 问题2:由于每一项乘积都小于1,并且目标函数是最大概率的输出,所以一般会偏向于比较短的句子,这样乘积项就比较少

      • 解决方案:
        通过除以翻译结果的单词数量。这样就是取每个单词的概率对数值的平均了,这样很明显地 减少了对输出长的结果的惩罚
    • 更柔和的方法:并不直接除以单词数,而是会乘上一个超参数a,比如a=0.7,如果a=1那么就相当于完全用长度来做归一化

    • 集束宽选择
      集束宽越大效果当然越好,但是计算也越复杂。在产品中,经常可以看到把束宽设到 10

集束搜索误差分析

Bleu得分

  • 背景:比如机器翻译会得到很多都不错的答案,那么如何选择呢?Bleu得分算法,就是解决这个问题,它做的是;给定一个机器生成的翻译,能够自动地计算一个分数来衡量好坏

注意力模型

  • 背景:从Bleu评分可以看出,长句的效果比较差
  • 原理:模仿人工翻译,不会一次性把整个文章都读完再翻译,会读一部分内容,翻译一部分
    • 下层的双向LSTM就是先跑所有的法语单词,然后形成context,看具体时间步的注意力需要多少前后关注做准备
  • 理解:在计算当前时间步的时候,会花多少精力去关注多少当前词附近的词语
    • 这些是注意力权重,即$a^{<t,t’>}$告诉你,当你尝试生成第𝑡个英文词,它应该花多少注意力在第𝑡个法语词上面。当生成一个 特定的英文词时,这允许它在每个时间步去看周围词距内的法语词要花多少注意力
  • 编程练习:

    • 将人工理解(Tuesday 09 Oct 1993)的日期翻译为机器理解的日期(1993-10-09)
    • 这里前一个时间步的输出不用喂给后一个输入,并不像前面练习的恐龙名字一样,前后两个单词是有关联的
    • 在训练过程中,每一个时间步的注意力长度是不一样的
    • model:
      总体分为2步,1:右边,one “Attention”如何计算,2:左边,整体的attention模型
      In this part, you will implement the attention mechanism presented in the lecture videos. Here is a figure to remind you how the model works. The diagram on the left shows the attention model. The diagram on the right shows what one “Attention” step does to calculate the attention variables $\alpha^{\langle t, t’ \rangle}$, which are used to compute the context variable $context^{\langle t \rangle}$ for each timestep in the output ($t=1, \ldots, T_y$).

      Here are some properties of the model that you may notice:

      • 模型分两个LSTM层,下面一个双向LSTM根据前向后向计算的激活值a,然后匹配上各个时间步的注意力的长度,产出context,第二层LSTM是用context和前一个时间步的输出$S^{< t-1 >}$输出最终值
        There are two separate LSTMs in this model (see diagram on the left). Because the one at the bottom of the picture is a Bi-directional LSTM and comes before the attention mechanism, we will call it pre-attention Bi-LSTM. The LSTM at the top of the diagram comes after the attention mechanism, so we will call it the post-attention LSTM. The pre-attention Bi-LSTM goes through $T_x$ time steps; the post-attention LSTM goes through $T_y$ time steps.

      • The post-attention LSTM passes $s^{\langle t \rangle}, c^{\langle t \rangle}$ from one time step to the next. In the lecture videos, we were using only a basic RNN for the post-activation sequence model, so the state captured by the RNN output activations $s^{\langle t\rangle}$. But since we are using an LSTM here, the LSTM has both the output activation $s^{\langle t\rangle}$ and the hidden cell state $c^{\langle t\rangle}$. However, unlike previous text generation examples (such as Dinosaurus in week 1), in this model the post-activation LSTM at time $t$ does will not take the specific generated $y^{\langle t-1 \rangle}$ as input; it only takes $s^{\langle t\rangle}$ and $c^{\langle t\rangle}$ as input. We have designed the model this way, because (unlike language generation where adjacent characters are highly correlated) there isn’t as strong a dependency between the previous character and the next character in a YYYY-MM-DD date.

      • We use $a^{\langle t \rangle} = [\overrightarrow{a}^{\langle t \rangle}; \overleftarrow{a}^{\langle t \rangle}]$ to represent the concatenation of the activations of both the forward-direction and backward-directions of the pre-attention Bi-LSTM.

      • The diagram on the right uses a RepeatVector node to copy $s^{\langle t-1 \rangle}$’s value $T_x$ times, and then Concatenation to concatenate $s^{\langle t-1 \rangle}$ and $a^{\langle t \rangle}$ to compute $e^{\langle t, t’}$, which is then passed through a softmax to compute $\alpha^{\langle t, t’ \rangle}$. We’ll explain how to use RepeatVector and Concatenation in Keras below.

语音模型

  • CTC cost
    • 背景:很多时候语音输入比输出会多很多,如何在RNN中相同输入输出的模型中使用呢?
    • CTC 损失函数的一个基本规则是 将空白符之间的重复的字符折叠起来,再说清楚一些,我这里用下划线来表示这个特殊的空 白符(a special blank character),这样就可以让输出和输入相同数量了

触发字检测

  • 生谱图特征得到特征向量$x^{<1>},x^{<2>,…}$
  • 训练集如何标注:检测到关键词的以后就标注为1,未检测到就标注为0
  • 问题:这样导致0和1的数量很不平衡,简单的处理方式:比 起只在一个时间步上去输出 1,其实你可以在输出变回 0 之前,多次输出 1,或说在固定的 一段时间内输出多个 1
  • 练习题:
    • 网络架构
    • 首先通过生谱图将声音转换为特征向量
    • 然后开始使用了CNN,使5511时间步减小到1375,这个在RNN中大量减小了复杂大
    • 然后用两层RNN,进行0,1预测输出,注意并没有使用双向RNN,因为语音说完就要快速给出结果,并不是等10s说完后才给
    • Here’s what you should remember:
      • Data synthesis is an effective way to create a large training set for speech problems, specifically trigger word detection.
      • Using a spectrogram and optionally a 1D conv layer is a common pre-processing step prior to passing audio data to an RNN, GRU or LSTM.
      • An end-to-end deep learning approach can be used to built a very effective trigger word detection system.

第五门课-第二周

发表于 2018-12-01 | 分类于 深度学习 , 吴恩达课程总结

习题代码:Operations-on-word- vectors

词嵌入

  • 背景:one-hot的方式不能表示相近词之间的相似度,比如用语言模型得到 i want a glass of orange juice,如果换成 i want a glass of apple …, 如果是one-hot就不能得到好的结果
  • 原因:one-hot向量通常只有一位为非0,所以它们之间的内积为0,多维空间表示就是垂直的,没有相关性
  • 词嵌入:把之前的10000+维度的one-hot转换为300维的相关特征,把该词嵌入300维的空间中
  • t-SNE算法,将多维空间映射到2为空间中,如上图左图

使用词嵌入(命名实体识别)

  • 背景:Robert Lin is an apple farmer 与 Robert Lin is a durian cultivator(Robert Lin 是一个榴莲培育家)榴莲培育家训练样本很少包含该词,很可能不能做到命名实体的识别
  • 词嵌入做迁移学习优点及步骤
    • 泛化性比较好
    • 先从大量的文本集中学习词嵌入。一个非常大的文本集,这个可以解决你的训练样本比较少,比如根本没有durian(榴莲)这个词汇的训练样本
    • 你可以用这些词嵌入模型把它迁移到你的新的只有少量标注训练集的任务中,比如说用这个300维的词嵌入来表示你的单词,比one-hot更低维
    • 是否进行微调?如果你有大量的训练数据集可以考虑微调已有的嵌入词
    • 通常迁移任务 A->B,通常是A中有大量数据集,B中只有少量数据集这种情况效果比较好
      • 比如在机器翻译领域词嵌入用得比较少,原因就是我们有大量的翻译样本
  • 词嵌入和人脸编码类比
    • 相同点,都是通俗理解都是通过编码,得到标识一个物体的唯一向量
    • 不同点,词嵌入是固定的词汇,而人脸编码是给定任意的图片都可以进行编码

词嵌入的特性

  • 类比推理
    • 解决问题:man对应woman,那么king对应什么?
    • 目标函数:$e_{man}-e_{woman}\approx e_{king}-e_?$,也就是Find work w:argmax sim($e_w, e_{king}-e_{man}+e_{woman}$)
    • 实现算法:
      • 该场景的四个词如果映射为二维空间,一般会是平行四边形,通常只有一维数据有一定差异
      • 余弦相识度:
        • 公式:sim(u,v)=$\frac{u^T*v}{||u||_2||v||_2}$=cos($\theta$)
        • 理解:两个向量之间的角度的余弦是衡量它们有多相似的指标,这里就是衡量两个词嵌入向量的相似度

嵌入矩阵(Embedding Matrix)

  • 当你应用算法来学习词嵌入时,实际上是学习一个嵌入矩阵,我们的目标就是学习一个嵌入矩阵E
  • 有了嵌入矩阵,然后乘以one-hot向量,就能够得到$E*o_j=e_j$,$e_j$就是表示我们想要的词嵌入
  • 但实践中一般不会$E*o_j=e_j$,$e_j$这样计算,一般会有一个专门的函数来单独查找矩阵E的某列

学习词嵌入

建立一个语言模型是学习词嵌入的好方法

  • 方法1:
    $Eo_j=e_j$使用这种方法来学习词嵌入矩阵,训练集中有很多序列语句,然后放入神经网络中,来学习E,这种方法比较复杂,最后会有1800维300*6的向量进入隐藏层,然后进入10000维的softmax层
  • 方法2(采用固定窗口):
    只取前4个词(作为一个窗口)来训练,用一个固定的历史窗口就意味着你可以处理任意长度的句子,因为输入的维度(1200)总是固定的
  • 方法3(前后数量不固定)
    可以前后个4个词,
    或者就附件一个词等(Skip-Gram思想)…
  • 总结:
    如果你真想建立一个语言模型,用目标词的前几个单词作为上下文是常见做法(上图编号9所示)。但如果你的目标是学习词嵌入,那么你就可以用这些其他类型的上下文(上图编号10所示),它们也能得到很好的词嵌入

Word2Vec

上面都是讲的通过学习一个神经语言模型来得到更好的词嵌入,而
Word2Vec是更简单高效的方式来学习这种类型的嵌入

  • Skip-Gram

    • 在 Skip-Gram模型中,我们要做的是抽取上下文和目标词配对,来构造一个监督学习问题
      • 但是构造这个监督学习问题的目标并不是想要解决这个监督学习问题本身,而是想要使用这个学习问题来学到一个好的词嵌入模型(构建一个监督学习问题,实际想解决学习嵌入词模型)
    • 步骤:我们随机选择一个词作为上下文c,然后在随机抽取一个词作为target y(随机选择y,我理解只是重点强调这个算法本身,实际情况如果要训练得到一个好的词嵌入,必然是不能随机的,是需要选真实的y),然后就是建立x(c)–>y的映射
      • c和E相乘,得到c的词嵌入向量,然后此向量通过softmax进行预测,最后和target建立Loss function来达到学习E的目的
    • softmax模型,预测不同目标词的概率:softmax:p(t|c)=$\frac{e^{\theta^{T}_{t}e_c}}{\sum^{10,000}_{j=1}e^{\theta{^T_je_c}}}$输出是10000(词典中单词数量)为的向量
      • $\theta_t$是一个与输出t有关的参数,即某个词t和标签相符的概率是多少
    • softmax损失函数:$L(\hat y,y)=-\sum^{10,000}_{i=1}y_ilog\hat y_i$ 其中y是one-hot向量,$\hat y$是10.000维的各个词的预测输出概率
      • 这是softmax常有的损失模型,$\hat y$是各个分类的概率,可以画一下log函数图形来理解该损失函数,如果$\hat y_i$为1,也就是第i个分类为概率为1,这个时候$L(\hat y,y)$就为0,损失值最小
      • 直观理解损失函数:就是y和$\hat y$都是10000维的,Loss计算就是分别将这两个向量做”内积”,要使”内积”最小,假设第i维,$y_i=1$这个时候softmax的输出$\hat y_i=1$->$\log\hat y_i=0$(就是所第i维也正是softmax输出最大的分类的概率)->$y_i\log\hat y_i=0$->Loss最小
    • 缺点(problem):
      在 softmax 模型中,每次你想要计算这个概率,你需要对你词汇表中的所有 10,000 个词做求和计算
    • 优化方案:
      • 分级softmax分类器:不用一下子告诉属于10,000类中的哪一类,可以先告诉属于左边的5000中的一类还是右边5000中的,然后是2500….,这样来构造一颗分类树
  • CBOW模型

    • 不同版本的 Word2Vec模型,Skip-Gram只是其中的一个,另一个叫做 CBOW,即连续词袋模型(Continuous Bag-Of-Words Model),它获得中间词两边的的上下 文,然后用周围的词去预测中间的词
    • CBOW 是从原始语句推测目标字词;而Skip-Gram正好相反,是从目标字词推 测出原始语句
    • CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好
  • 负采样(Negative Sampling)

    • 背景:之前的softmax分类器中,解决每次都要计算所有样本的问题
    • Model:选择一个正样本和K个负样本,将softmax的分类转化为一系列二分类问题,只计算其中的正负样本的二分类问题
      • 正负样本作为输入x,然后用$P(y=1|c,t)=sigmoid(\theta^T_te_c)$进行二分类计算
    • 负样本k的选取
      • 语库中的经验频率进行采样,这种会有很多like,the等高频词出现
      • 另一个极端就是1除以词汇表总词数,均匀的抽取样本,但这样对英语单词的分布是没有代表性的
      • 采用一种处于完全独立分布和训练集的观测分布两个极端之间

Glove(Glove word vectors)

  • 定义:定义上下文和目标词为任意两个位置相近的单词,假设是左右各 10 词的距离,那么$X_{ij}$就是一个能够获取单词𝑖和单词𝑗出现位置相近时或是彼此接近的频率的计数器。
  • Glove模型就是进行优化,将他们之间的差距最小化处理
    • 就是通过一种优化方法,对目前方程进行优化,从而间接学习到词嵌入矩阵
  • 函数f选择原则:对加权函数f的选择有着启发性的原则,就是既不给这些词(this,is,of,a)过分的权重,也不给这些不常用词(durion)太小的权值
  • 问题:
    • 你不能保证嵌入向量的独立组成部分是能够理解的
    • 你不能保证这些用来表示特征的轴能够等同于人类可能简单理解的轴,具体而言,第一个特征 可能是个Gender、Roya、Age、Food Cost 和 Size的组合(并不是我们所理解的单纯的Gender维),它也许是名词或是一个行为动词 和其他所有特征的组合,所以很难看出独立组成部分

情感分类

  • 定义:情感分类任务就是看一段文本,然后分辨这个人是否喜欢他们在讨论的这个东西
  • 简单模型:采用的是平均值单元,适合任意长度的评论
    • 重点理解词嵌入应用的思想:将单词通过词嵌入矩阵得到词嵌入,简单理解为将字符或者是单词映射为数值的一种方法,然后使用End-to-End思想,通过softmax就直接预测输出
    • 问题:没有考虑词序,因为均值模型就是把各个单词各个维数值相加然后再平均
      • 比如not good,或者 good…not ,就不能区分了
  • RNN模型解决词序问题
    • 此模型是一个one-many的模型
      • 直观理解就是,RNN本身就是有一个词一个词有顺序的输入,上一个词对下一个词有影响,所以就能够反映词序问题

词嵌入除偏

  • 定义:比如通过词嵌入,Man:Computer Programmer, 同时输出 Woman:Homemaker
  • 解决方法:主要是在词向量中寻找出哪些维度的偏见相关的维度(bias axis),然后在这些维度上进行调整
  • 重点理解:单词到词向量的映射,实际上就是映射到n维空间(n为词向量矩阵)中的一个点,然后看点与点之间的距离来判断词与词之间的相似度
  • 达到目的:让无性别的词到有性别的词的点的距离是相等的,比如Computer Programmer,doctor分别到man,woman的距离是相等的

    • 找出偏见趋势
      • 确定哪些轴(哪些维度),对于性别歧视这种情况来说,我们能做的是$e_{he} − e_{she}$,因为它们的性别不同,然后 将$e_{male}−e_{female}$,然后将这些值取平均(上图编号2所示),将这些差简单地求平均。这个趋势(上图编号3所示)看起来就是性别趋势或说是偏见趋势
        • non bias就是垂直于偏见轴的方向
    • 中和步骤:某些无性别歧视的词语,让他们在non bias轴上进行靠拢,尽量减少映射在bias轴上的距离来减少性别歧视问题

      • 比如Computer Programmer,doctor应该是无性别关系的,所以应该尽量靠近non bias轴,这样的理想效果就是到达空间中man和woman的点距离是相等的
    • 均衡步:
      让有偏见的词进行,移动与中轴线等距的一些点上,这样让它们在bias轴上都有一致的相似度,图中由1移到图2的两点

      • 直观理解:也是为了让无偏见词,比如上面说的Computer Programmer,doctor达到分性别关系的词man,woman距离相等
        • 经过统计这种偏见词实际上是很少的,需要均衡的词是很少的
1…345…7
雷哥

雷哥

不积跬步无以至千里

66 日志
18 分类
16 标签
GitHub
© 2019 雷哥
由 Hexo 强力驱动
主题 - NexT.Gemini