作者 | 李垠桥
编辑 | 丛 末
随着深度学习技术的广泛使用,人们对于如何自动对神经网络结构进行设计产生了浓厚的兴趣,研究人员希望能够通过数据驱动的方式对模型结构进行搜索,更加自动地找到能够拟合当前任务的最佳网络结构。
具体来说,网络结构搜索的目标在于能够根据含有n个训练样本的数据集
(其中
和
为第i个样本中的观察数据和目标标签值)中找到最佳的拟合模型â ,这个过程可以被描述为如下形式:
其中
为向模型 a 中输入观察数据
后,模型对于标签的预测概率。而神经网络模型本质上可以看作是对数据进行拟合的函数,因此预测概率的过程可以表示为
。
从模型 a 的计算公式中我们可以看到,对于最佳模型结构的搜索,实际上可以看作是对
中 a 所进行的优化过程。但正如前文所提到的,网络结构作为一个函数,本身是离散的,它很难通过最优化方法直接对其进行处理。
不过,反观网络结构本身,我们不难发现其具有两个非常重要的特点:无穷不可枚举和离散不可微分。而从这两个特点出发,我们很容易发现其实在之前的其他任务中,我们已经有很多对这类变量进行优化的经验,比如说自然语言处理中对词汇的建模。
词汇从语言学的角度出发,实际上也是无穷无尽的,同时词汇和词汇之间本身不存在直接的关联。而在通过深度学习的方式对其进行处理的时候,已经对这两个问题进行了解决。
我们通过诸如BPE等编码方式将词汇建模为子词模型,这种方法对词汇一级的建模颗粒度进行了调整,使得计算机仅需处理有限个语言片段即可对词汇本身进行表示。而针对离散化的问题,研究人员则采用将其映射到高维空间的方法,使得原本彼此独立的词汇能够通过语境学习到彼此之间的关联,同时为模型使用梯度下降等最优化方法进行优化提供了可能。
与自然语言处理任务中词汇的表示相比,如何对网络结构本身进行建模,使得其能够利用已有的优化算法找到最佳的模型结构,我们同样可以从与词汇类似的角度对其进行思考。
针对模型结构数量繁多、无法一一列举的问题,研究人员对网络结构表示的颗粒度进行探索,希望能够找到合理的搜索单元来对模型空间进行表征。由于网络结构本身实际上可以看作是一个比较复杂的函数映射,而对于向量空间中的函数而言,其最小的颗粒度无外乎就是矩阵的基本操作,如加(减)法、线性变换、矩阵乘法、转置以及各类非线性变换等。
理论上我们完全可以使用这些操作作为网络结构表示中的最小单元,但由于其颗粒度过于微小,每个网络结构均将被表示为非常细小的局部操作,在现有算力条件下,很难直接对其进行优化。因此,目前网络结构搜索的方法中,往往会选取上述操作中的部分操作(如非线性变换等)作为搜索对象,或者根据经验将部分操作捏合成局部结构进行搜索(如注意力网络、前馈神经网络等)。
这些操作实际上很难如向量空间中的基本操作那样完整地表示所有可能的结构,因此这种“有损”的方式仅仅是现阶段受算力限制下的折中策略,这种有损环境下网络结构空间往往被称作搜索空间,是全体结构空间的一个子集。
另外,对于模型结构离散化的问题,在网络结构搜索任务中同样需要对其进行重新表示,这部分所要表示的内容实际上就是我们上一步中所选择的最小搜索单元,而具体来说,如何对这些局部操作(或结构)进行代数化的表示,目前依旧没有一个固定的策略,主流的方法往往会将这些结构通过标量或向量的方式进行建模。
NLP任务中词汇的处理 | NAS任务中结构的处理 | |
---|---|---|
无穷不可枚举 | 调整词汇表示的颗粒度(如子词模型) | 调整网络结构表示的颗粒度(如注意力操作) |
离散不可微分 | 使用高维向量进行表示(如词嵌入) | 使用标量或高维向量进行表示(如结构嵌入) |
自然语言处理任务中词汇的处理与网络结构搜索任务中结构的处理的对比。
虽然对于最小搜索单元的建模我们可以将其完全以可微分的代数形式进行表示,但是网络结构搜索任务的目标依旧是对整个模型结构进行优化,因此整体结构的拼装方式同样也是一个值得探讨的话题。起初的很多方法中往往会采取离散的方案对结构进行组装,它们将整个模型结构看作是搜索单元
的有序组合
通过人为规定方式
组织后的结果,即模型结构
,而我们整体的优化目标为
。
可以看到其中由于离散化有序集合的存在,我们依旧很难直接对其进行优化。针对该问题,一些研究人员思考,既然不能直接优化,那就不妨将模型结构看作是一个的序列生成问题,引入独立的优化器对操作序列进行建模,这个过程被称为网络结构的搜索策略。
具体来说,搜索策略相当于是定义了一个新的任务,我们希望能够通过迭代的方式不断地对模型结构进行优化。具体来说,搜索策略为一个优化器函数
,我们可以选择神经网络,当然也可以使用其他机器学习算法(如进化算法),其目标在于根据已经搜索到的模型结构找到下一个最有潜力的结构:
由于这种方法中并非根据训练数据直接对模型结构进行优化(它的直接训练目标是“生成”一个结构,而非直接根据训练数据对结构进行优化),因此中间过程中生成的结构并不一定会呈现持续向好的状态,因此需要在搜索过程中对结构性能进行验证。而我们都知道神经网络本身的训练同样需要大量的时间代价,因此如何快速地验证找到的结构性能优劣同样成为一个非常重要的研究课题——结构评价方法。
此外,离散的结构组装方式很难直接对结构进行优化,因此近些年来,一些研究人员也开始尝试通过连续的方式对搜索到的局部结构进行组装,这样的话模型可以通过梯度下降法等方式直接对模型结构进行优化,优化目标更加明确。
上述内容对于网络结构搜索的任务以及整体的解决方案进行了介绍,实际上我们可以将其分为三个子任务(子过程):
- 搜索空间的定义
- 搜索策略的选择
- 评价指标的确定
流程如下图所示,有机会我们会对每部分近些年的主要研究工作进行更加详尽地介绍。
网络结构搜索的过程
作者:李垠桥,东北大学自然语言处理实验室 2018级博士生,研究方向:神经网络结构搜索、机器翻译、模型加速等,在ijcai、nlpcc、中文信息学报等会议、杂志发表学术论文若干。
团队介绍:小牛翻译,核心成员来自东北大学自然语言处理实验室,由姚天顺教授创建于1980 年,现由朱靖波教授、肖桐博士领导,长期从事计算语言学的相关研究工作,主要包括机器翻译、语言分析、文本挖掘等。团队研发的小牛翻译系统已经得到广泛应用,目前支持 304种语言互译,通过小牛翻译开放平台(https://niutrans.com/)让机器翻译技术赋能全球企业。