PRML读书笔记——线性回归模型(下)

CS224N NLP with Deep Learning: Lecture 1 课程笔记

Stanford大学在2015年开设了一门Deep Learning for Natural Language Processing的课程,广受好评。并在2016年春季再次开课。我将开始这门课程的学习,并做好每节课的课程笔记放在博客上。争取做到每周一更吧。
本文是第一篇。


NLP简介

NLP,全名Natural Language Processing(自然语言处理),是一门集计算机科学,人工智能,语言学三者于一身的交叉性学科。她的终极研究目标是让计算机能够处理甚至是“理解”人类的自然语言,进而帮助人类解决一些现实生活中遇到的实际问题。这里的语言“理解”是一个很抽象也很哲学的概念。在NLP中,我们将对语言的“理解”定义为是学习一个能够解决具体问题的复杂函数的过程。

对NLP的研究通常在5个Level上进行:
1. 语音/文本分析:包括语言识别技术、OCR技术、分词技术等
2. 词形分析:例如分析一个word的前后缀、词根等
3. 语法分析:从语法结构上分析一个句子的构成
4. 语义分析:理解一个句子或单词的语义
5. 篇章分析:理解一段篇章的含义

注意,虽然这5个Level在研究的对象和难度上是一种递进的关系,但对这5个Level的研究并不一定是连续的——例如,我们可以跳过对一个句子语法结构的分析而直接去理解句子的语义。

接下来简单列举一些NLP技术的应用,以让大家对NLP能够处理什么样的问题有一个感性的认识:
* 简单的任务:拼写检查,关键词检索,同义词检索等
* 复杂一点的任务:信息提取(比如从网页中提取价格,产地,公司名等信息),情感分析,文本分类等
* 更复杂的任务:机器翻译,人机对话,QA系统

最后讨论一个问题:Why is NLP so HARD?为什么要把NLP从机器学习的任务列表中单独抽取出来做为一门课程甚至是研究的对象?根本原因在于语言用于表达客观世界的内在复杂性和多义性。举一个简单的例子:"Jane hit June and then she [fell/ran]"。当she所伴随的动作不同(fell or ran),其所指代的对象也发生了变化(June or Jane)。这样的例子太多,显然我们无法通过枚举所有的规则来解决语言内在的复杂性。另一个多义性的例子是:"I made her duck"。我们可以理解为:"I cooked her a duck",或是"I curved her a wooden duck",也可以理解为:"I transformed her into a duck with some magic"。

Deep Learning简介

深度学习是机器学习的一个研究子领域。传统机器学习算法面临的一个问题是,模型的优劣往往很大程度上依赖于特征的选取。例如,对于一个NER问题(Named Entity Recognition,命名实体识别),传统的机器学习算法(如CRF)通常需要输入目标词的大小写特征,词性特征,以及其上下文环境里的词性分布等特征。人工挑选一组合适的特征是一件非常琐碎的活。此外,这些特征往往是data-specific,这意味着,在处理一份新的数据集,比方说是另一门语言的语料,你需要再一次坐下来审视这批数据,以挑选新的特征组合。

毫不夸张的说,在传统机器学习领域,90%的时间被用于数据的处理。算法和模型只是简单的权重优化。

而深度学习的魅力在于,她将特征的提取变成了一个自动化的学习过程。

深度学习是一类特征学习(Representation Learning)。她可以从原始数据(比如原始的像素点,原始的单词甚至是字符)中自动学习到多个层次上的特征表达,并完成最终的分类或翻译的任务。(这里的“深度”一词可能会带来歧义:例如对于我们下一节课将要学习到的word2vec模型。她其实是一个非常浅层的网络模型。)

神经网络家族是深度学习算法的主流模型。我们的课程也主要以介绍不同种类的神经网络及其在NLP领域中的应用为主。也许有人会问,神经网络不过是一组logistic regression单元的堆砌,为什么会有如此优异的特征学习的能力呢?原因在于,我们同时引入了一些基本的建模原则,比如端对端的训练机制。这些指导性原则可以帮助神经元更好地从最终结果中学习到原始输入的特征。此外,人工神经网络模型和神经科学里的脑模型也有着千丝万缕的联系。这些联系在NLP问题中不是那么明显,但在计算机视觉领域(卷积神经网络,CNN)扮演着很重要的角色。

为什么我们要采用深度学习模型对NLP问题进行建模?这是因为,与传统的机器学习算法相比,深度学习模型通常不需要特定领域的先验知识,因此可以快速高效地进行特征的学习。与此同时,深度学习提供了一套灵活通用的特征学习框架(适用于包括语音、文字、视觉信息在内的多种数据的学习)。最后,深度学习可以有监督或无监督地从大量原始语料中学习到有用的特征。

另一个有趣的问题是:考虑到神经网络并不是近些年才提出的新技术,为什么直到现在深度学习才突然被人们所关注呢?这主要得益于近些年大数据的兴起和高速CPU/GPU的发展。数据是深度学习的食物。而高性能的计算资源可以帮助深度学习更好地消化这些食物。当然,深度学习的发展也离不开一些新的模型算法的提出(比如end-to-end的模型框架,机器翻译中的attention机制等)。

最后,对深度学习的发展历史感兴趣的同学,可以进一步阅读这篇文献:Deep Learning in Neural Networks: An Overview

Deep Learning + NLP = Deep NLP

Deep Learning的技术首先是在语音识别和计算机视觉的领域里取得了重大突破,直到近些年才被广泛地应用于NLP领域中。接下来,我们简单看下深度学习模型是如何帮助解决NLP难题的 。

  1. 语音Phonology: 传统的语音识别模型是通过人工建立一张语音词表,将相似发音的字母划分为一类;并借助一个分类模型实现语音到字母的转译。而深度学习模型将语音表达为一个embedding向量,可以直接从语音的向量特征中预测相应的单词。
  2. 词形Morphology: 传统的词形学将一个单词拆分为前缀、词干、后缀的表达,这些前后缀和词干统称为Morpheme。而深度学习将每一个Morpheme都处理成一个向量的表达,并借助于一个Recursive Neural Network将不同的Morpheme向量拼接成一个向量——这个向量代表了相应的Morpheme拼接后得到的单词。 这种将word表达成向量的思想在Deep NLP中十分基础。如果我们将这些词向量投影到一个二维平面上,会发现一些有趣的pattern。例如,相似的动词集中出现在平面的同一片区域内。
  3. 句法分析Syntax 在得到了词的表达后,接下来我们讨论句子的结构。 传统的句法分析将一个完整的句子解析成一棵语法树——每一个节点对应着一个特定的语法单元(例如,NP或VP)。而在深度学习中,我们可以对词向量进行计算,得到短语乃至整个句子的向量表达。并基于这些向量完成后续的分类预测等任务。
  4. 语义分析Semantics 传统的语义分析借助于一种叫做Lambda Calculus的技术。基本思想是在一棵句法树上递归地调用人工事先设定的Lambda函数进行语义的计算。而在深度学习中,同样地,我们对每一个单词,每一个短语,乃至每一个逻辑关系(比如\(A \in B\))都用一个向量去表达。借助于神经网络的计算,我们可以准确地预测两个句子之间的逻辑关系(例如,if "all reptiles walk" then "some turtles move")。有趣的是,在深度学习中,我们并不需要事先指定"reptiles"和"turtles","walk"和"move"之间的逻辑关系。

可以看出,与传统的NLP技术相比,Deep NLP核心思想在于 :everything can be a vector。无论是low level的音频,还是high level的短语。深度神经网络模型将低level的vector组装成更高level的vector,进一步完成分类、翻译等高级任务。


本节课的内容不多,主要是对NLP和深度学习技术的一个概要性介绍。下一节课,我们将开始学习计算word vector的几种常用模型。

2017/5/14 posted in  CS224n

PRML读书笔记——线性回归模型(上)

本章开始学习第一个有监督学习模型——线性回归模型。"线性"在这里的含义仅限定了模型必须是参数的线性函数。而正如我们接下来要看到的,线性回归模型可以是输入变量\(x\)的非线性函数。

书中首先对回归问题给出了一个简短的不那么正式的定义:

Given a training data set comprising \(N\) observations \(\{x_n\}\), where \(n = 1, ... , N\), together with corresponding target values \(\{t_n\}\), the goal is to predict the value of \(t\) for a new value of \(x\).

而解决这个问题有两种思路:一种是直接对\(x \rightarrow t\)的映射\(y(x)\)进行建模,类似判别式模型的建模思路;另一种则从概率的角度出发,首先建模预测变量\(t\)的条件概率分布\(p(t|x)\),然后通过最小化一个损失函数——对于实数变量通常是均方误差(squared loss)——给出\(t\)的一个最优估计:\(y(x)=E_t[t|x]\)。(注意区分这里的损失函数和用于参数回归的损失函数。)

五月份目标规划

四月份给自己制定了四个学习任务:阅读Deep Learning的第一部分;学习Nielson的Online Book Neural Network and Deep Learning;调研1-2篇深度学习的综述性文献;以及学习fast.ai上的深度学习实践课程。目前来看,只有第一个任务顺利完成。第二个任务正在进行中,而后两个任务甚至还未启动。

然而,2017年的四月终究还是毫不留情地离去,这堆未完成的任务只好留给了如期而至的五月。

Read more   2017/5/4 posted in  生活日志

深度学习开发环境搭建教程(Mac篇)

本文将指导你如何在自己的Mac上部署Theano + Keras的深度学习开发环境。

如果你的Mac不自带NVIDIA的独立显卡(例如15寸以下或者17年新款的Macbook。具体可以在“关于本机->系统报告->图形卡/显示器”里查看),那么你可能无法在这台Mac上使用GPU训练深度学习模型。不过这并不遗憾。事实上,我在自己的Macbook上(15-inch,Early 2013,NVIDIA GeForce GT 650M 1024 MB)做了一个简单的测试:在mnist数据集上训练CNN模型时,使用GPU仅比使用CPU快了1.7倍——在更专业的Tesla K80显卡上,这个数字是5倍。因此,我更推荐购买一台有着强劲性能的显卡的PC本(比如某些游戏本)来搭建深度学习的开发环境,或者是直接租赁AWS的Instance服务。

下面步入正题。

Read more   2017/4/16 posted in  Geek心得

四月份目标规划

Allen在他的GTD小册子里提出了“人生六个高度”理论。这六个高度分别是:原则(五万米),愿景(四万米),目标(三万米),责任范围(两万米),任务(一万米),下一步行动(跑道)。大部分的GTD实践软件(例如OmniFocus)仅仅覆盖了两万米以下的高度(也就是短期的任务和行动)。因此,我打算在博客中记录下自己中长期的目标和规划,这样才不会在日常的行动中舍本逐末,迷失了自我。

Read more   2017/4/13 posted in  生活日志

我的时间管理系统:OmniFocus与GTD实践之路

受小时候上学的影响,在相当长的一段时间里,我一直是用课程表的方式来管理我的时间:每天24小时从早到晚划分成N个坑,每到一个时间点该做什么事都是事先计划好的。这种时间管理方式的弊端也是极其明显的:缺乏灵活性。如果计划被临时的任务打断了怎么办?如果在预期的时间内计划没有完成或是提前完成了又怎么办?凡此种种,导致课程表式的时间管理方式总是在坚持了一两周后不了了之。

所以,我开始寻求新的时间管理方式。

Read more   2017/4/12 posted in  Geek心得

我的碎片化信息管理系统:印象笔记

信息即知识。一个完整的知识管理系统至少要满足两个需求:首先,它需要有一条收集原始信息的输入流,并能够对原始信息进行处理和归档;其次,它需要有一条加工原始信息的输出流,并能够对加工后的信息进行整理和存储。在我的知识管理体系里,后者藉由MWeb搭建的笔记博客系统完成。前者则分为了两部分:一部分是论文书籍等非碎片化信息的管理,采用Zotero搭建的文献管理系统完成;另一部分就是这里提到的用印象笔记实现的碎片化信息管理。

Read more   2017/4/12 posted in  Geek心得

我的笔记&博客管理系统:MWeb + Github

俗话说,不动笔墨不读书。我的记性不好,更需要笔记来辅助我消化和吸收书本上的知识。最早在大学读书的时候,一直是用的纸质的笔记本。然而在后来某一次搬家的时候这些笔记本不慎丢失,甚是可惜。这也是纸质笔记的弊端,不易保管。因此,我开始寻找一款可靠的电子版的笔记系统。

Read more   2017/4/11 posted in  Geek心得

我的文献管理系统:Zotero + DPT S1

前两天狠了狠心花高价买了一个二手DPT S1。在学校的时候就对这款神器心水许久,一直未舍得也无力购买。工作后有了点闲钱,考虑到自己的工作性质需要阅读大量的文献,有一款电纸书不仅携带方便不伤眼,笔记什么的也更易于保存,便打算除一除草。孰料去年年底Sony宣布DPT无限期停产,S1的价格更是不降反升,全新品的价格涨幅直接飙过了100%!(Sony大法果然是最佳的理财神器。)然而架不住心里欲求不得的碎碎念,只好在一家淘宝店铺花了9000大洋购入一台二手机器。所幸机器成色较好,几乎看不出使用的痕迹。

既然入了这台“Paper”神器,便要善于利用,尽最大可能发挥它的便捷和长处。这篇博客就是介绍如何用DPT S1结合文献管理软件Zotero打造自己阅读文献的WorkFlow。

Read more   2017/4/4 posted in  Geek心得