斯坦福大学在三月份开设了一门“深度学习与自然语言处理”的课程:CS224d: Deep Learning for Natural Language Processing,授课老师是青年才俊 Richard Socher,以下为相关的课程笔记。

第四讲:词窗口分类和神经网络(Word Window Classification and Neural Networks)

推荐阅读材料:

  1. [UFLDL tutorial]
  2. [Learning Representations by Backpropogating Errors]
  3. 第四讲Slides [slides]
  4. 第四讲视频 [video]

以下是第四讲的相关笔记,主要参考自课程的slides,视频和其他相关资料。

本讲概览

  • 分类问题背景
  • 在分类任务中融入词向量
  • 窗口分类和交叉熵误差推导技巧
  • 一个单层的神经网络
  • 最大间隔损失和反向传播

分类问题定义

  • 一般情况下我们会有一个训练模型用的样本数据集
{xi,yi}Ni=1
  • 其中xi是输入,例如单词(标识或者向量),窗口内容,句子,文档等
  • yi是我们希望预测的分类标签,例如情绪指标,命名实体,买卖决定等

分类问题直窥

  • 训练集:{xi,yi}Ni=1
  • 一个简单的例子
    • 一个固定的2维词向量分类
    • 使用逻辑回归
    • ->线性决策边界->

屏幕快照 2015-09-07 上午8.04.30

  • 从机器学习的角度来看:假设x是固定的,仅仅更新的是逻辑回归的权重W意味着仅仅修改的是决策边界

屏幕快照 2015-09-07 上午8.10.00

分类问题符号定义

  • 一般的机器学习问题: 仅仅更新逻辑回归的权重意味着仅仅更新的是决策边界
  • 数据集{xi,yi}Ni=1的损失函数

屏幕快照 2015-09-07 上午8.19.38

  • 其中对于每一个数据对(xi,yi):

屏幕快照 2015-09-07 上午8.21.15

  • 我们可以将f写成矩阵符号形式: f=Wx

分类问题:正则化

  • 通常情况下任何一个数据集上完整的损失函数都会包含一个针对所有参数的正则化因子

屏幕快照 2015-09-07 上午10.58.50

  • 正则化可以防止过多的特征导致的过拟合问题(另一种解决方案是一个强有力/深度模型)

屏幕快照 2015-09-07 上午11.01.08

  • 上图中x轴代表了更强有力的模型后者更多的模型迭代次数
  • 蓝色代表训练集误差,红色代表测试集误差

机器学习优化问题

  • 对于一般的机器学习问题θ常常只包含了W的列数:

屏幕快照 2015-09-07 下午5.40.24

  • 所以我们仅仅更新决策边界

屏幕快照 2015-09-07 下午5.40.59

引入词向量

  • 在深度学习中既要学习W也要学习词向量x:

屏幕快照 2015-09-07 下午5.48.41

重新训练词向量会丧失泛化能力

  • 例子:针对电影评价情感数据(movie review sentiment)训练逻辑回归模型,在训练集里我们有单词”TV”和”telly”
  • 在测试集里我们有单词“television”
  • 原本它们是相似的单词(来自于已经训练的词向量模型)
  • 当我们重新训练的时候会发生什么?

屏幕快照 2015-09-07 下午6.27.45

重新训练词向量会丧失泛化能力续

  • 当我们重新训练词向量模型的时候会发生什么?

    • 在训练集中的单词会被重新安排到合适的位置
    • 在已经训练的词向量模型中但是不在训练集中的单词将保留在原来的位置
  • 对于上例, “TV”和”telly”会被重新安排,而”television”则保留在原位,尴尬的事情就发生了:

屏幕快照 2015-09-07 下午6.32.10

  • 总之:

    • 如果你只有一个很小的训练集,不要训练词向量模型
    • 如果你有一个足够大的训练集,那么对于相应的任务来说训练词向量模型是有益的

词向量概念回顾

  • 词向量矩阵L也被称为查询表
  • Word vectors(词向量)= word embeddings(词嵌入) = word representations(mostly)
  • 类似于word2vec或者GloVe的方法得到:

屏幕快照 2015-09-08 上午10.56.48

  • 这就是词特征xword
  • 通常通过词向量矩阵L和one-hot向量e相乘得到单个的词向量:

屏幕快照 2015-09-08 上午10.59.03

窗口分类

  • 单个单词的分类任务很少
  • 在上下文中解决歧义问题
  • 例子1:

    屏幕快照 2015-09-09 下午2.59.03

  • 例子2:

    屏幕快照 2015-09-09 下午3.00.21

  • 思路:将对一个单词进行分类的问题扩展到对其临近词和上下文窗口进行分类
  • 例如命名实体问题有4个类别:人名,地名,机构名和其他
  • 已经有很多方法在尝试对一个上下文中的单词进行分类,例如将窗口内的单词(向量)进行平均化处理,但是这样会失去位置信息
  • 以下介绍一种常用的对窗口(上下文)中单词进行分类的方法
  • 对于窗口中的单词打上标签同时把它前后的单词向量进行拼接然后训练一个分类器
  • 例子:对于一个句子上下文中的”Paris”进行分类,窗口长度为2

    屏幕快照 2015-09-09 下午6.12.48

  • 结果得到的窗口向量 xwindow=xR5d , 是一个列向量

简单的窗口分类器: Softmax

  • 在得到窗口向量x=xwindow的情况下,我们可以和之前一样使用softmax分类器

    屏幕快照 2015-09-09 下午6.22.21

  • 但是如何更新词向量?
  • 简单的回答:和之前一样进行求导
  • 更长的回答:让我们一起来一步一步进行推导
  • 定义:
    • yˆ: softmax 概率输出向量
    • t: 目标概率分布
    • f=WxRc, 其中fc是f向量的第c个因子
  • 第一次看到是不是觉得很难,下面给出一下提示(tips)

更新拼接的词向量:Tips

  • 提示1:仔细定义变量和跟踪它们的维度

    屏幕快照 2015-09-10 下午2.11.04

  • 提示2:懂得链式法则(chain rule)并且记住在哪些变量中含有其他变量

    屏幕快照 2015-09-10 下午2.12.40

  • 提示3:对于softmax中求导的部分:首先对fc当c=y(正确的类别)求导,然后对fccy(其他所有非正确类别)求导
  • 提示4:当你尝试对f中的一个元素求导时,试试能不能在最后获得一个梯度包含的所有的偏导数

    屏幕快照 2015-09-11 上午10.29.19

  • 提示5:为了你之后的处理不会发疯,想象你所有的结果处理都是向量之间的操作,所以你应该定义一些新的,单索引结构的向量

    屏幕快照 2015-09-11 下午2.44.23

  • 提示6:当你开始使用链式法则时,首先进行显示的求和(符号),然后再考虑偏导数,例如xi or Wij的偏导数

    屏幕快照 2015-09-11 下午3.04.50

  • 提示7:为了避免之后更复杂的函数(形式),确保知道变量的维度,同时将其简化为矩阵符号运算形式

    屏幕快照 2015-09-11 下午3.36.23

  • 提示8:如果你觉得公式不清晰的话,把它写成完整的加和形式

    更新拼接的词向量

    • 窗口向量梯度的维度是多少?

      屏幕快照 2015-09-13 下午5.55.41

    • X是整个拼接的词向量窗口,5倍的d维度向量,所以对于x的求导后依然有相同的向量维度(5d)

      屏幕快照 2015-09-13 下午6.01.33

    • 对整个窗口向量的更新和梯度推导可以简单的分解到对每一个词向量的推导:

      屏幕快照 2015-09-13 下午6.03.05

    • 这将保留词向量的原始位置信息有助于一些NLP任务,例如命名实体识别
    • 例如,模型将会学习到出现在中心词前面的xin常常表示中心词是一个地名(location)

    在训练窗口向量时丢失了什么信息?

    • 梯度J相对于softmax权重W
    • 步骤相似,但是先写出偏导数Wij
    • 然后我们就有了完整的:

      屏幕快照 2015-09-13 下午9.57.49

    矩阵实现的一些注解

    • 在softmax中有两个代价昂贵的运算: 矩阵运算 f = Wx 和 exp指数运算
    • 在做同样的数学运算时for循环永远没有矩阵运算有效
    • 样例代码 –>
    • 遍历词向量 VS 将它们拼接为一个大的矩阵 然后分别和softmax的权重矩阵相乘

      屏幕快照 2015-09-13 下午10.32.19

    • 运行结果:

      屏幕快照 2015-09-13 下午10.33.18

    • 结果证明矩阵相乘C×X更有效
    • 矩阵运算更优雅更棒
    • 应该更多的去测试你的代码速度

    softmax(=逻辑回归)并不是强有力的

    • softmax仅仅在原有的空间上给出线性决策边界
    • 在少量的数据上(正则化)效果会不错
    • 在大量的数据上效果会有限
    • softmax仅仅给出线性决策边界举例:

      屏幕快照 2015-09-14 上午8.06.29

    神经网络更胜一筹

    • 神经网络可以学习更复杂的函数和非线性决策边界

      屏幕快照 2015-09-14 上午8.09.51

    从逻辑回归到神经网络–神经网络解密

    • 神经网络有自己的术语定义集,就像SVM一样
    • 但是如果你了解softmax的运行机制,那你就已经了解了一个基本的神经元的运行机制
    • 例子:一个神经元就是一个基础的运算单位,拥有n(3)个输入和一个输出,参数是W, b

      屏幕快照 2015-09-14 上午10.32.49

    一个神经元本质上是一个二元逻辑回归单元

    • 屏幕快照 2015-09-14 上午10.35.53

    一个神经网络等价于同时运行了很多逻辑回归单元

    • 如果我们给一批逻辑回归函数一堆输入向量,我们就得到了一批输出向量…

      屏幕快照 2015-09-14 上午10.51.23

    • 这些输出又可以作为其他逻辑回归函数的输入

      屏幕快照 2015-09-14 上午10.55.49

    • 然后我们就有了多层神经网络

      屏幕快照 2015-09-14 上午10.56.32

    神经网络中单层的矩阵符号表示

    • 我们有:

      屏幕快照 2015-09-14 上午11.05.22

    • 表示成矩阵符号形式:

      屏幕快照 2015-09-14 上午11.06.49

    • 其中f应用的是element-wise规则:

      屏幕快照 2015-09-14 上午11.07.18 1
      屏幕快照 2015-09-14 上午11.09.55

    为什么需要非线性的f

    • 例子:函数逼近,例如回归或者分类问题

      屏幕快照 2015-09-14 上午11.16.08

    • 没有非线性函数,深度神经网络相对于线性变换价值不大
    • 其他的层次会被编译压缩为单个的线性变换: W1W2X=WX
    • 有了更多的层次,它们可以逼近更复杂的函数

      屏幕快照 2015-09-14 上午11.20.07

    一个更牛的窗口分类器

    • 基于神经网络进行修正

      屏幕快照 2015-09-14 上午11.22.45

    • 单个(神经网络)层是一个线性层(函数)和非线性函数的组合

      屏幕快照 2015-09-14 上午11.25.06

    • 神经网络激活函数α可以用来计算一些函数
    • 例如,一个softmax概率分布或者一个没有归一化的打分函数可以是这样的:

      屏幕快照 2015-09-14 上午11.27.32

    总结:前馈网络计算

    • 通过一个三层神经网络计算这个窗口向量的得分:s = score(museums in Paris are amazing)

      屏幕快照 2015-09-14 上午11.29.05

    下一讲

    • 训练一个基于窗口(向量)的神经网络模型
    • 进行更复杂的深度推导–>反向传播算法
    • 这样我们就有了所有的基础工具去学习一个更复杂的深度模型:)

    注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:http://www.52nlp.cn

    本文链接地址:斯坦福大学深度学习与自然语言处理第四讲:词窗口分类和神经网络:http://www.52nlp.cn/?p=8694

斯坦福大学深度学习与自然语言处理第四讲:词窗口分类和神经网络相关推荐

  1. 斯坦福大学深度学习与自然语言处理第二讲:词向量

    斯坦福大学在三月份开设了一门"深度学习与自然语言处理"的课程:CS224d: Deep Learning for Natural Language Processing,授课老师是 ...

  2. 斯坦福大学深度学习与自然语言处理第三讲:高级的词向量表示

    斯坦福大学在三月份开设了一门"深度学习与自然语言处理"的课程:CS224d: Deep Learning for Natural Language Processing,授课老师是 ...

  3. 斯坦福大学深度学习与自然语言处理第一讲:引言

    斯坦福大学在三月份开设了一门"深度学习与自然语言处理"的课程:CS224d: Deep Learning for Natural Language Processing,授课老师是 ...

  4. 斯坦福大学深度学习与自然语言处理第一讲引言

    http://www.52nlp.cn/%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A ...

  5. 【CS224n】2斯坦福大学深度学习自然语言处理课程笔记——词向量、词义和神经分类器

    Natural Language Processing with Deep Learning 课程笔记2 1. 词向量和word2vec 2. 优化基础知识 3. 我们能否通过计数更有效地抓住词义的本 ...

  6. Deep Learning 9_深度学习UFLDL教程:linear decoder_exercise(斯坦福大学深度学习教程)...

    前言 实验内容:Exercise:Learning color features with Sparse Autoencoders.即:利用线性解码器,从100000张8*8的RGB图像块中提取颜色特 ...

  7. Deep Learning 10_深度学习UFLDL教程:Convolution and Pooling_exercise(斯坦福大学深度学习教程)...

    前言 理论知识:UFLDL教程和http://www.cnblogs.com/tornadomeet/archive/2013/04/09/3009830.html 实验环境:win7, matlab ...

  8. 深度学习与自然语言处理第四次大作业

    文章目录 问题提出 一.Word2Vec模型简介 二.模型原理 1.词的独热表示-One-hot 2.词的分布式表示 三.实验过程 1.预处理 2.模型训练 3.聚类分析 1.倚天屠龙记: 2.天龙八 ...

  9. 【双语字幕】斯坦福大学-深度学习分析

    课程描述 深度学习是一种变革性的技术,在图像分类和语音识别方面取得了令人印象深刻的进步.许多研究人员正试图更好地理解如何提高预测性能,以及如何改进训练方法.有些研究人员使用实验技术,有人则使用理论方法 ...

最新文章

  1. 如何安装“散装版”(如自己开发的)插件到VSCode
  2. mysql范式与反范式_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”...
  3. php的const,php中const入门
  4. Node.js 入门教程 (三):API-准备知识
  5. C++学习之路 | PTA乙级—— 1023 组个最小数 (20分)(精简)
  6. 柒上支付个人免签支付系统源码
  7. 让系统在内存中高速运行
  8. linux 配置远程日志服务器配置,配置远程日志服务器—实现日志的集中管理
  9. 学以致用六---Centos7.2+python3.6.2+django2.1.1 --搭建一个网站
  10. UGUI的Canvas Scaler
  11. f5 系统损坏,重新安全系统
  12. 什么是HTML? 看这一篇就够了(附带主流IDE推荐)
  13. 麻雀虽小五脏俱全 现代C++思想 值得推敲
  14. OCR识别缺点_常用的OCR文字识别软件有哪些_软件动态论坛
  15. 一键式统计6.0季报测试
  16. Excel 2010 VBA 入门 028 向单元格输入公式
  17. CISCO 服务器配置 RAID 指南及安装操作系统
  18. Linux_计划任务
  19. 【通信】链路预算(Link Budget)
  20. js中onchange事件举例用法

热门文章

  1. springboot高级——消息队列相关
  2. 这六段代码隐藏着深度学习的前世今生!
  3. SpringBoot - 构建监控体系03_使用 Admin Server 管理 Spring 应用程序
  4. jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
  5. 深入理解分布式技术 - 消息队列知识点回顾总结
  6. Spring Boot2.x-15 整合RabbitMQ 及RabbitMQ的基本使用
  7. Redis-10Redis的事务回滚
  8. Spring-data-jpa和mybatis的比较及两者的优缺点?
  9. Android程序App开机自启动
  10. ap的ht模式_AP6256 STA模式操作示例