PyTorch是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得PyTorch代码更易理解,对新手非常友好。
本文主要介绍深度学习领域中自然语言处理与强化学习部分。
自然语言区别于计算机所使用的机器语言和程序语言,是指人类用于日常交流的语言。而自然语言处理的目的是要让计算机来理解和处理人类的语言。
让计算机来理解和处理人类的语言也不是一件容易的事情,因为语言对于感知的抽象很多时候并不是直观的、完整的。我们的视觉感知到一个物体,就是实实在在地接收到了代表这个物体的所有像素。但是,自然语言的一个句子背后往往包含着不直接表述出来的常识和逻辑,这使得计算机在试图处理自然语言的时候不能从字面上获取所有的信息。因此自然语言处理的难度更大,它的发展与应用相比于计算机视觉也往往呈现出滞后的情况。
深度学习在自然语言处理上的应用也是如此。为了将深度学习引入这个领域,我们尝试了许多方法来表示和处理自然语言的表层信息(如词向量、更高层次、带上下文信息的特征表示等),也尝试过许多方法来结合常识与直接感知(如知识图谱、多模态信息等)。这些研究都富有成果,其中的许多都已应用于现实中,甚至用于社会管理、商业、军事的目的。
自然语言处理主要研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法,其主要任务如下。
(1) 语言建模。语言建模即计算一个句子在一种语言中出现的概率。它的一种常见形式是:给出句子的前几个词,预测下一个词是什么。
(2) 词性标注。句子都是由单独的词汇构成的,自然语言处理有时需要标注出句子中每个词的词性。需要注意的是,句子中的词汇并不是独立的,在研究过程中,通常需要考虑词汇的上下文。
(3) 中文分词。中文的最小自然单位是字,但单个字的意义往往不明确或者含义较多,并且在多语言的任务中与其他以词为基本单位的语言不对等。因此不论是从语言学特性还是从模型设计的角度来说,都需要将中文句子恰当地切分为单个的词。
(4) 句法分析。 由于人类表达的时候只能逐词地按顺序说,因此自然语言的句子也是扁平的序列。但这并不代表着一个句子中不相邻的词之间就没有关系,也不代表着整个句子中的词只有前后关系。它们之间的关系是复杂的,需要用树状结构或图才能表示清楚。句法分析中,人们希望通过明确句子内两个或多个词的关系来了解整个句子的结构。句法分析的最终结果是一棵句法树。
(5) 情感分类。给出一个句子,我们希望知道这个句子表达了什么情感:有时候是正面/负面的二元分类,有时候是更细粒度的分类;有时候是仅给出一个句子,有时候是指定对于特定对象的态度/情感。
(6) 机器翻译。最常见的是把源语言的一个句子翻译成目标语言的一个句子。与语言建模相似,给定目标语言一个句子的前几个词,预测下一个词是什么,但最终预测出来的整个目标语言句子必须与给定的源语言句子具有完全相同的含义。
(7) 阅读理解。有许多形式。有时候是输入一个段落或一个问题,生成一个回答(类似问答),或者在原文中标定一个范围作为回答(类似从原文中找对应句子),有时候是输出一个分类(类似选择题)。
从传统方法和神经网络方法的对比中,可以看出自然语言处理的模型和系统构建是向着越来越自动化、模型越来越通用的趋势发展的。
一开始,人们试图减少和去除人类专家知识的参与。因此就有了大量的网络参数、复杂的架构设计,这些都是通过在概率模型中提供潜在变量(latent variable),使得模型具有捕捉和表达复杂规则的能力。这一阶段,人们渐渐地摆脱了人工制定的规则和特征工程,同一种网络架构可以被许多自然语言任务通用。
之后,人们觉得每一次为新的自然语言处理任务设计一个新的模型架构并从头训练的过程过于烦琐,于是试图开发利用这些任务底层所共享的语言特征。在这一背景下,迁移学习逐渐发展,从前神经网络时代的LDA、Brown Clusters,到早期深度学习中的预训练词向量word2vec、Glove等,再到今天家喻户晓的预训练语言模型ELMo、BERT。这使得不仅是模型架构可以通用,连训练好的模型参数也可以通用了。
现在人们希望神经网络的架构都可以不需要设计,而是根据具体的任务和数据来搜索得到。这一新兴领域方兴未艾,可以预见,随着研究的深入,自然语言处理的自动化程度一定会得到极大的提高。
强化学习是机器学习的一个重要分支,它与非监督学习、监督学习并列为机器学习的三类主要学习方法,三者之间的关系如图1所示。强化学习强调如何基于环境行动,以取得最大化的预期利益,所以强化学习可以被理解为决策问题。它是多学科、多领域交叉的产物,其灵感来自心理学的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。强化学习的应用范围非常广泛,各领域对它的研究重点各有不同,本篇中我们只专注于强化学习的通用概念!
■ 图1 强化学习、监督学习、非监督学习关系示意图
在实际应用中,人们常常会把强化学习、监督学习和非监督学习这三者混淆,为了更深刻地理解强化学习和它们之间的区别,首先介绍监督学习和非监督学习的概念。
监督学习是通过带有标签或对应结果的样本训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出,以实现分类。
非监督学习即在样本的标签未知的情况下,根据样本间的相似性对样本集进行聚类,使类内差距最小化,学习出分类器。
上述两种学习方法都会学习到输入到输出的一个映射,它们学习到的是输入和输出之间的关系,可以告诉算法什么样的输入对应着什么样的输出,而强化学习得到的是反馈,它是在没有任何标签的情况下,通过先尝试做出一些行为、得到一个结果,通过这个结果是对还是错的反馈,调整之前的行为。在不断的尝试和调整中,算法学习到在什么样的情况下选择什么样的行为可以得到最好的结果。此外,监督学习的反馈是即时的,而强化学习的结果反馈有延时,很可能需要走了很多步以后才知道之前某一步的选择是好还是坏。
强化学习主要包含4个元素:智能体(agent)、环境状态(state)、行动(action)、反馈(reward),它们之间的关系如图2所示,详细定义如下。
agent: 智能体是执行任务的客体,只能通过与环境互动来提升策略。
state: 在每个时间节点,agent所处的环境的表示即为环境状态。
action: 在每个环境状态中,agent可以采取的动作即为行动。
reward: 每到一个环境状态,agent就有可能会收到一个反馈。
强化学习算法的目标就是获得最多的累计奖励(正反馈)。以“幼童学习走路”为例,幼童需要自主学习走路,没有人指导他应该如何完成“走路”,他需要通过不断的尝试和获取外界对他的反馈来学习走路。
在此例中,如图2所示,幼童即为agent,“走路”这个任务实际上包含以下几个阶段:站起来,保持平衡,迈出左腿,迈出右腿……幼童采取行动做出尝试,当他成功完成了某个子任务时(如站起来等),他就会获得一个巧克力(正反馈);当他做出了错误的动作时,他会被轻轻拍打一下(负反馈)。幼童通过不断地尝试和调整,找出了一套最佳的策略,这套策略能使他获得最多的巧克力。显然,他学习到的这套策略能使他顺利完成“走路”这个任务。
■ 图2 强化学习的4个元素
(1) 没有监督者,只有一个反馈信号。
(2) 反馈是延迟的,不是立即生成的。
(3) 强化学习是序列学习,时间在强化学习中具有重要的意义。
(4) agent的行为会影响以后所有的决策。
强化学习主要可以分为Model-Free(无模型的)和Model-Based(有模型的)两大类。Model-Free算法又分成基于概率的和基于价值的。
如果agent不需要去理解或计算出环境模型,算法就是Model-Free的;相应地,如果需要计算出环境模型,那么算法就是Model-Based的。实际应用中,我们通常用如下方法进行判断:在agent执行它的动作之前,它是否能对下一步的状态和反馈做出预测?如果可以,那么就是Model-Based方法;如果不能,即为Model-Free方法。
两种方法各有优劣。Model-Based方法中,agent可以根据模型预测下一步的结果,并提前规划行动路径。但真实模型和学习到的模型是有误差的,这种误差会导致agent虽然在模型中表现很好,但是在真实环境中可能达不到预期结果。Model-Free的算法看似随意,但这恰好更易于我们去实现和调整。
基于概率的算法是指直接输出下一步要采取的各种动作的概率, 然后根据概率采取行动。每种动作都有可能被选中, 只是可能性不同。基于概率的算法的代表算法为policy-gradient,而基于价值的算法输出的则是所有动作的价值, 然后根据最高价值来选择动作。相比基于概率的方法, 基于价值的决策部分更为死板——只选价值最高的,而基于概率的, 即使某个动作的概率最高, 但是还是不一定会选到它。基于价值的算法的代表算法为Q-Learning。
交互性检索是在检索用户不能构建良好的检索式(关键词)的情况下,通过与检索平台交流互动并不断修改检索式,从而获得较准确检索结果的过程。
当用户想要搜索一个竞选演讲(Wu & Lee,INTERSPEECH 16)时,他不能提供直接的关键词,其交互性搜索过程如图3所示。在交互性检索中,机器作为agent,在不断的尝试中(提供给用户可能的问题答案)接受来自用户的反馈(对答案的判断),最终找到符合要求的结果。
新闻推荐,如图4所示。一次完整的推荐过程包含以下过程:一个用户单击 App 底部刷新或者下拉,后台获取到用户请求,并根据用户的标签召回候选新闻,推荐引擎则对候选新闻进行排序,最终给用户推出 10 条新闻。如此往复,直到用户关闭 App,停止浏览新闻。将用户持续浏览新闻的推荐过程看成一个决策过程,就可以通过强化学习学习每一次推荐的最佳策略,从而使得用户从开始打开 App 到关闭 App 这段时间内的点击量最高。
■ 图3 交互性检索
■ 图4 新闻推荐
在此例中,推荐引擎作为agent,通过连续的行动即推送10篇新闻,获取来自用户的反馈,即单击:如果用户浏览了新闻,则为正反馈,否则为负反馈,从中学习出奖励最高(点击量最高)的策略。