Tuesday, January 23, 2018

Doing a Concurrent Masters at Brown

This is intended as a reference for students who are interested in the Concurrent Bachelor's/Masters programIf you are not a current or prospective undergraduate student at Brown University, the following post won't be relevant to you. 

A few Brown University students have been emailing me about the Concurrent Bachelor's/Masters (CM) degree and whether it would make sense for them to apply for this program. Brown doesn't offer a whole lot of information or resources on this topic (very few students do this), so I'd like to share my perspective as someone who went through the process (I graduated in May 2016 with a ScB in APMA-CS and a MSc in CS). This is not official advice - rules for the CM program may have changed since I graduated.

Background


Universities like UC Berkeley allow undergraduates to graduate early, provided that they have satisfied all their degree requirements. Some students who complete their undergrad in 3 years (6 semesters) use the leftover year to do their "5th-year" Masters degree at the school, thus getting a Bachelors and Masters degree in 4 years.

Brown has 5th-year Masters programs too (CS dept has a popular one), but undergraduates cannot graduate earlier (it's possible to graduate in 7 semesters but this is rarely granted).

The Concurrent Masters degree does permit one to graduate with a Masters in 8 or 9 semesters though.

Strangely, CM doesn't seem to be advertised much at Brown - there weren't any guides or resources or other students to talk to for planning my schedule around CM (guidance counselors and Meiklejohns don't really encourage or know about unorthodox paths like these).

How to plan for CM


The CM application requirements can be found here
  1. During your First-Year (or beginning of Sophomore year at the latest), draw up your course plan for all 8 semesters to meet CM requirements. It will probably be re-arranged a lot (especially upper-level classes) each semester, but every set of courses you pick should keep you on track to meeting CM requirements.
  2. At the beginning of the Spring semester of Junior Year, bring your partially-completed CM application to your department chair, and show them how you are on track to fulfilling the requirements. Have them examine your application to see that your courses do indeed qualify and you are in good academic standing (i.e. you will also fulfill your intended undergrad degree requirements by graduation).
  3. Get recommendation letters from professors and the dept chair. You will need a lot of them - 3 within concentration, 2 outside concentration.
  4. Bring your packet (with rec letters) to the Dean of the College, who is in charge of CM review process.
  5. The applications are reviewed by the academic standing committee by April of your Junior year. You need to meet the course requirements, have approval of your dept. chair, have good letters of references, and say something fairly reasonable on your letter to the committee. From that point it's approved somewhat automatically.
  6. The CM course schedule is approved Junior year, but is contingent on classes that may not actually be offered your senior year. You will probably submit amendment forms to the application during your Senior year. They should be approved as long as they are reasonable substitutions.
  7. I recommend finishing your capstone requirements and 2nd writing requirement during your junior year. This removes a lot of constraints from the schedule optimization problem. 

What courses did you take?


I had a pretty unorthodox curriculum at Brown and basically stretched the "open curriculum" interpretation as far as I could to (barely) satisfy my degree and concurrent masters requirements. I didn't take many intro-level CS courses and substituted those requirements with upper-div math and CS courses. Towards the end the CS department chair got pretty annoyed with all the substitutions I was making; bless twd@ for being so patient with me. Here was my 4-year course schedule:


Semester
Course
Title
Fall 2012
CLPS005A
Seminar: Computing as done in Brains and Computers

APMA0350
Methods of Applied Math I

ENGN1930N
Intro to MRI and Neuroimaging

CLPS1492
Computational Cognitive Neuroscience

CSCI1450
Intro to Probability and Computing
Spring 2013
LITR1010A
Advanced Fiction

NEUR1680
Computational Neuroscience

CSCI1280
Intermediate Animation

NEUR2160
Neurochemistry and Behavior

APMA1720
Monte Carlo Simulation with Applications to Finance
Fall 2013
CSCI1230
Introduction to Computer Graphics

MATH1530
Abstract Algebra

NEUR1970
Independent Study

ENGN1630
Digital Electronics Systems Design
Spring 2014
CSCI1480
Building Intelligent Robots

CSCI2240
Interactive Computer Graphics

APMA1740
Recent Applications of Probability and Statistics

NEUR1970
Individual Independent Study
Fall 2014
CSCI2420
Probabilistic Graphical Models

CSCI1680
Computer Networks

CSCI2951B
Data-Driven Vision and Graphics

PHYS1410
Quantum Mechanics A

CSCI0081
TA Apprenticeship: Full Credit
Spring 2015
APMA2821V
Neural Dynamics: Theory and Modeling

APMA1360
Topics in Chaotic Dynamics

CSCI1970
Individual Independent Study

ECON1720
Corporate Finance

ILLUS-2028
Painting II (RISD)
Fall 2015
CSCI0510
Models of Computation

MUSC1100
Introduction to Composition

TAPS0220
Persuasive Communication

APMA1170
Introduction to Computational Linear Algebra

CSCI2980-HYS
Reading and Research (Masters Project)
Spring 2016
CSCI2980-JFH
Reading and Research (Masters Project)

POLS1740
The Politics of Food

POLS1824f
Meritocracy

CSCI1670
Operating Systems

CSCI1951G
Optimization Methods in Finance

ScB requirements:

Category
Sub-Category
My courses
Core
Mathematics
MATH1530 instead of MATH0350
MATH0540 waived (AP Test)

Applied Mathematics
APMA0350
APMA1360 in lieu of APMA0360
APMA1170

Core Computer Science
(CSCI2980-HCI, CSCI1670) in lieu of (CSCI15, CSCI16)
CSCI 1450 (math)
CSCI 1680 in lieu of CS33 (systems)
CSCI0510 (math) (f15)
Additional Requirements
3 1000-level CS courses
CSCI1480
ENGN1630
CSCI1970 (approved pair waived via TA credit)

3 1000-level APMA courses
Pair: APMA1720 + APMA1740
APMA2821V

Capstone course
CSCI2980-HUG


And here's how I filled out the CM requirements. Note that degree requirements are subject to change and the courses I filled out may not be valid for current Brown students.

Is it Worth It?

Pros:

  • Some entry-level roles in quantitative finance and Machine Learning strongly prefer candidates with at least a Masters degree.
  • Saves tuition compared to doing a 5-year Masters.
  • In the Bay Area (California), having a Masters Degree negotiates you a better interest rate for mortgages. 

Cons:

  • Way more work compared to doing a 5-year masters. Mostly comes from the 10-course breadth requirements.
  • Being spread pretty thinly across many classes makes retaining information harder. You need to take an average of 4+ classes every semester, and the 10-course breadth requirements have to be completed before you submit your application.
  • Maintaining a social life with this course load is tricky.
I do not recommend doing CM just for the sake of getting a Masters degree - a Masters degree isn't that helpful in the big picture of things and you should only do it if it would require minor changes to the course plan you are already pursuing, or whether it is vital to your career.

Three other students in the CS department (two CS-Math concentrators and one other CS-APMA concentrator) did CM in the class of 2016. We all enjoyed taking hard CS/Math classes and would have probably taken the schedules we had anyway.




Friday, January 19, 2018

机器学习中的表达能力, 训练难度和泛化性能

我非常感谢王家兴 (Jiaxing Wang) 把这个博客文章翻译成中文。

当我在阅读机器学习相关文献的时候, 我经常思考这项工作是否1)提高了模型的表达能力 2)使模型更易于训练 3)提高了模型的泛化性能。这样的分类标准是我从我在Google Brain的同事Jascha Sohl-Dickstein那里借鉴来的,相关的术语在这篇文章有介绍。 我发现这样的区分标准有助于我们确定一项研究工作(特别是理论方面的工作)如是何将人工智能的子领域(如机器人学, 产生式模型, 自然语言处理等)融入到机器学习研究的整个大图景里的[1]。
在这篇博文中, 我们讨论当前(截止到2017年11月)的机器学习研究:监督学习, 无监督学习和强化学习在这些方面的表现。谈到模型的泛化性能的时候, 我把它分为两类:‘‘弱泛化’’ 和 ‘’强泛化’ 。我将会在后面分别讨论它们。 下表总结了我眼中的研究现状:



表达能力

模型可以进行什么样的计算?拟合多么复杂的函数?
训练难度

给定数据训练一个模型的难度?
弱泛化

数据分布发生较小变化时模型的性能?
强泛化

数据分布发生较大改变时模型的性能?
监督学习

使用人工标定的标签。 训练模型预测这些标签
较容易
将要实现
困难
无监督学习

不使用人工标定的标签。 训练模型预测这些标签
较容易
将要实现
困难
强化学习

学习在一个环境中获得最多的奖励
困难
非常困难
非常困难

非常感谢Jascha Sohl-Dickstein 和 Ben Poole 为这篇博文提供反馈和修正。 感谢Marcin Moczulski 关于回馈神经网络(RNN)训练难度的探讨以及Joaquin Ruales对这篇博文的语法进行更正。
这篇博文涵盖了相当宽泛的研究领域,仅表达我个人对相关研究的看法,不反映我的同事和公司的观点。欢迎读者进行讨论以及给出修改的建议, 请在评论中提供反馈或发送电子邮件给我。

表达能力 expressivity

----模型可以进行什么样的计算, 拟合多么复杂的函数?


模型的表达能力用来衡量参数化模型如神经网络的可以拟合的函数的复杂程度。深度神经网络的表达能力随着它的深度指数上升, 这意味着中等规模的神经网络就拥有表达监督, 半监督, 强化学习任务的能力[2]。 深度神经网络可以记住非常大的数据集就是一个很好的佐证。

神经网络几乎可以表达所有的变量,连续的, 离散的,实值的, 复数的,甚至是随机变量。近几年在生成式模型和贝叶斯神经网络的研究中,利用深度神经网络取得了令人难以置信的好的结果。

最近在产生式模型研究上的突破证明了神经网络强大的表达能力:神经网络可以找到几乎与真实数据难以分辨的极为复杂的数据流形(如音频, 图像数据的流形)。下面是NVIDIA研究人员提出的新的基于产生式对抗神经网络的模型的生成结果:



产生的图像仍然不是很完美(注意不自然的背景),但是已经非常好了。同样的, 在音频合成中,最新的WaveNet模型产生的音频也已经非常像人类了。

无监督学习不仅仅限于产生式模型。 一些研究人员比如Yann LeCun 将无监督学习更名为“预测学习”:模型学习过去, 推理当下,或者预测未来。但是, 由于大部分的无监督学习关注于预测极其复杂的联合分布(图像,音频), 我认为产生式模型的能力是一个很好的无监督学习中模型表达能力的评价基准。

在强化学习中神经网络看起来也有足够的表达能力。 很小的网络(2个卷积层2个全连接层)就足够解决 Atari 和MuJoCo 控制问题了(虽然它们的训练还是一个问题,我们将在下一个部分讨论)

模型的表达能力本身并不是一个很有趣的问题-通过增加网络层数,增加连接等手段我们总可以获得更强的表达能力。真正的问题在于我们要让神经网络在训练和测试集上都有足够的表达能力,而训练的难度仍被控制在可接受的范围内。 比如我们常常使用二维卷积来完成图像分类任务, 虽然一个比较深的全连接神经网络也有足够的容量来记住整个训练集。

模型的表达能力问题是最容易的(增加一些层即可), 但同时也是最神秘的:我们无法找到一个很好的方法来度量对于于一个给定的任务我们需要多强的(或什么类型的)表达能力。什么样的问题会需要比我们现在用的神经网络大得多的网络?为什么这些任务需要这么大量的计算?我们现有的神经网络是否有足够的表达能力来表现像人类一样的智能?要解决更加困难的问题的泛化问题会需要表达能力超级强的模型吗?

人的大脑有比我们现在的大网络(Inception-ResNet-V2 有大概25e6 ReLU结点)多很多数量级的“神经节点”(1e11)。 这个结点数量上的差距已经很巨大了, 更别提ReLU单元根本无法比拟生物神经元。 一个生物神经元及它的各种神经递质,树突,轴突可以时变地整合来自多达10000 个其它神经元的信号—它的表达能力之强令人难以置信。 蝗虫只用的一个都要好。这样强大的表达能力究竟是从何而来?又会发展到什么地步?我们还需要多少表达能力?

训练难度 trainability

----给定一个有足够表达能力的模型结构, 我能够训练出一个好的模型吗(找到好的参数)

任何一个从数据中学习到一定功能的计算机程序都可以被称为机器学习模型。在 “学习”过程中, 我们在(可能很大的)模型空间内搜索一个比较好的, 利用数据中的知识学到的模型来做决策。 搜索的过程常常被构造成一个在模型空间上的优化问题。




优化的不同类型


通常, 特别是在深度学习中, 我们会定义一些标量度量来评价模型的好坏, 然后使用数值优化技术来使模型‘’变好’’。

一个具体的例子:最小化平均交叉熵是训练神经网络分类图像的标准方法。我们希望模型在训练集上的交叉熵损失达到最小时, 模型在测试数据上可以以一定精度或召回来正确分类图像。 通常我们不能直接优化模型的评价指标如分类精度(很明显, 我们事先并没有见过测试集), 但训练集上的替代函数比如交叉熵可以。

搜索好的模型(训练)最终会变为一个优化问题—没有别的途径! 但是有时候我们很难去定义优化目标。 在监督学习中的一个经典的例子就是图像下采样--我们无法定义一个 标量可以准确反映出我们人眼感受到的下采样造成的 ‘’视觉损失’’。同样地, 超分辨率图像和图像合成也非常困难,因为我们很难把效果的好坏写成一个标量的最大化目标:想象一下, 如何设计一个函数来判断一张图片有多像一张真实的照片?事实上关于如何去评价一个产生式模型的好坏一直争论现在

近年来最受欢迎的的方法是 “协同适应” (co-adaptation)方法:它把优化问题构造成求解两个相互作用演化的非平稳分布的平衡点求解问题[3]。这种方法比较“自然”, 我们可以将它类比为捕食者和被捕食者之间的生态进化过程。 捕食者会逐渐变得聪明, 这样它可以更有效地捕获猎物。然后被捕食者也逐渐变得更聪明以避免被捕食。两种物种相互促进进化, 最终它们都会变得更加聪明。

产生式对抗神经网络就是这样工作的, 这样可以避免我们直接显式地定义“人感知到的损失”目标。同样地, 强化学习中的竞争性自博弈也运用了这个原则来学习到更丰富的行为方式。虽然现在没有显式定义的优化目标, 这仍然是一个优化问题, 机器学习实践者可以使用熟悉的工具比如深度神经网络, 随机梯度下降来求解这些问题。

演化策略通常把优化看作是仿真。用户对模型群体指定一些动力系统, 在仿真过程中的每个时间步上, 根据动力系统的运行规则来更新模型群体。 这些模型可能会相互作用也可能不会。 随着时间的演变, 系统的动态特性可能会使模型群体最终收敛到好的模型上面。

David Ha所著的 《A Visual Guide to Evolution Strategies》 是一部非常好的演化策略在强化学习中应用的教材(其中的“参考文献和延伸阅读”部分非常棒!)


研究现状:


监督学习中前馈神经网络和有显式目标函数的问题已经基本解决了(经验之谈, 没有理论保障)。2015年发表的一些重要的突破(批归一化(Batch Norm), 残差网络(Resnets), 良好初始化(Good Init))现在被广泛使用, 这使得前馈神经网络的训练变得非常容易。事实上, 数百层的深度网络已经可以把大的分类数据集的训练损失减小到零。关于现代深度神经网络的硬件和算法基础结构,参考这篇综述文章

回馈神经网络相对更加困难一些, 但是研究人员已经取得了重大进展。 现在我们不再把直接将LSTM放到一个复杂的机器人策略中并期望它取得良好效果看作是一件疯狂的事情。这很令人难以置信, 回望2014年,还只有很少人相信可以训出好的RNN模型,而再前些年有很多工作指出RNN极其难以训练。有证据表明很多RNN结构有相同的表达能力 , 模型最终效果的差异仅仅是由于一些结构比另一些更加易于训练[4]。

无监督学习的模型输出常常大很多(并不是总是)—比如, 1024 x 1024像素的图片, 很长的语音和文本序列。很不幸, 这导致模型更加难以训练。

2017年一个比较大的突破是对抗式生成网络的训练难度大大下降了。 现在最受欢迎的改进是在对抗式生成网络原本的Jensen-Shannon 距离目标函数上进行小的修正:

最小二乘(least square), 带间隔的绝对偏差(absolute deviation with magin)和使用Wasserstein距离(1, 2) 。 最近NVIDA的工作改进了Wasserstein GAN 使之对很多超参, 比如BN的参数, 网络结构等不再敏感。模型的稳定性在实践和工业应用中非常重要-稳定性让我们相信它会和我们未来的研究思路和应用相兼容。总的来讲, 这些成果令人振奋, 因为这证明了我们的产生网络有足够的表达能力来产生正确的图像, 效果的瓶颈在于训练的问题--不幸的是对于神经网络来讲我们很难辩别一个模型表现较差仅仅是因为它的表达能力不够还是我们没有训练到位。

基于神经网络的含有离散隐变量的模型之前同样难以训练,因为离散变量的蒙特卡洛梯度估计具有很大的方差。近些年含离散变量的模型在各种结构中都有出现,从对抗式生成网络到语言模型到记忆增强网络到强化学习。从模型的表达能力的角度来看离散的表示是非常有用的,而且我们现在可以非常可靠地训练这些模型。

不幸的是, 即使在仅仅考虑可训练性,不考虑泛化的情况下, 强化学习也远远地落在了后面。在有多于一个时间步的环境中, 我们实际是在首先搜索一个模型, 这个模型在推理阶段会最大化获得的奖励。强化学习比较困难,因为我们要用一个外部的(outer loop),仅仅依赖角色(agent)见过的数据的优化过程来找到最优的模型, 同时用一个内部的(inner loop), 模型引导的最优控制(optimal control)过程来最大化获得的奖励。

最近我在一个连续的机器人控制任务上添加了一维,我的强化学习模型的效果就从超过80% 降到了10%。强化学习不仅难以训练, 而且非常不可靠!强化学习优化目标函数值的大小非常随机, 用不同的随机种子, 我们甚至就不能得到相同的结果。 这样我们只能报告使用不同的随机种子多次试验下奖励曲线的平均值。不同环境下,实现同样的算法我们经常得到不同的结果, 因此强化学习文章中报告的结果我们也不能轻易完全相信。

这很讽刺, 强化学习的训练还是一个很大的问题,因为我们稍微扩大一点问题的规模, 就不能在每次的实验中得到相同的结果。

如果我们把强化学习看作一个单纯的优化问题(先不考虑模型的泛化和复杂的任务), 这个问题同样非常棘手。假设现在有一个环境, 只有在一个场景结束时才会有非常稀疏的奖励(例如:保姆照看孩子, 只有在父母回家时她才会得到酬劳)。动作(action)的数量(和它相应的环境输出)会随着场景的持续呈现指数性的增长, 而实际上这些动作(action)序列中只有极少数的会导致成功。

因此, 要想估计模型优化过程中任意一处的策略梯度, 我们都要采样指数增长的动作空间(action space)中的样本来获得一些对学习有用的信号。这就像是我们想要使用蒙特卡洛方法关于一个分布计算期望(在所有动作序列上), 而这个分布集中于一个狄拉克函数(dirac delta distribution)(密度函数见下图)。在建议分布(proposal distribution)和奖励分布(reward distribution)之间几乎没有重叠时, 基于有限样本的蒙特卡洛估计会失效,不管你采了多少样本。



此外, 如果数据布不是平稳的(比如我们采用带有重放缓存(replay buffer)的离策略(off-policy)算法), 数据中的“坏点”会给外部的优化过程(outer loop)提供不稳定的反馈。

不从蒙特卡洛估计的角度, 而从优化的角度来看的话:在没有关于状态空间的任何先验的情况下(比如对于世界环境的理解或者显式地给角色(agent)一些明确的指示), 优化目标函数的形状(optimization landscape)看起来就像 ‘’瑞士芝士‘’ --一个个凸的极值(看作小孔)周围都是大面积的平地,这样平坦的“地形”上策略梯度信息几乎没用。这意味着整个模型空间几乎不包含信息(非零的区域几乎没有,学习的信号在整个模型空间里是均匀的)。




如果没有更好的表示方法, 我们可以就仅仅是在随机种子附近游走, 随机采样一些策略, 直到我们幸运地找到一个恰好落在‘’芝士的洞里”的模型。 事实上,这样训练出的模型效果其实很好。这说明强化学习的优化目标函数形状很有可能就是这样子的。

我相信像Atari和 MuJoCo这样的强化学习基准模型并没有真正提高机器学习的能力极限, 虽然从一个单纯优化问题来看它们很有趣。这些模型还只是在一个相对简单的环境中去寻找单一的策略来使模型表现得更好, 没有任何的选择性机制让他们可以泛化。 也就是说, 它们还仅仅是单纯的优化问题, 而不是一个复杂的机器学习问题。

考虑强化学习的泛化性(而不仅仅是训练)会让解释和调试变得更加复杂, 但是我认为让角色真正理解环境和任务目标,获得泛化的能力是让强化学习在真实世界的机器人系统中可以工作的唯一途径。

在监督学习和非监督学习中, 不管我们当前在模型空间的什么位置,我们可以很容易地获取到学习的信号。批(batch)数据梯度给出的建议分布和真实的梯度分布总会有重叠。如果我们使用批大小(batch size)为1 的随机梯度下降方法, 那么在最差情况下我们采样到得到有用的训练信号的转移的概率是1/N,N是数据集的大小(这样每一代的训练都会可靠地让模型变好)。为了找到一个较好的模型, 我们可以暴力地送入更多的数据或增加训练代数。此外, 通过在低层特征上的”自举”(bootstrapping), 提高低层的感知泛化很可能还有减小方差的效果。

要想解决更高维,更复杂的强化学习问题, 在解决数值优化问题之前,我们必须先考虑模型的泛化和一般的感性认知能力。反之就会愚蠢地浪费计算力和数据(当然这可能会让我们明白仅仅通过暴力计算我们可以做得多好)。 我们要让每个数据点都给强化学习提供训练信息,也需要能够在不用指数增长的数据时就能通过重要性采样(importance sampling)获得非常复杂的问题的梯度。只有在这样的情况下, 我们才能确保通过暴力计算我们可以获得这个问题的解。

示范学习(learning from demonstration), 模仿学习(imitation learning),逆向强化学习(inverse reinforcement learning)以及用自然语言进行交互学习可能会快速地让初始策略可以得到训练信号(得到一个好的初始化), 或者改变搜索空间的形状使得每个场景片段(episode)都可以提供有效的信息来训练策略(policy) (比如说,不给予奖励,但是角色的观察会提供一些信息来帮助模型进行规划, 使之倾向于做某些有意义的动作)

最后做一个总结:监督学习的训练比较容易。 无监督学习的训练相对困难但是已经取得了很大的进展。但是对于强化学习,训练还是一个很大的问题。

泛化性能

在这三个问题中, 泛化性能是最深刻的,也是机器学习的核心问题。简单来讲, 泛化性能用来衡量一个在训练集上训练好的模型在测试集上的表现。

泛化问题主要可以分为两大类:1) 训练数据与测试数据来自于同一个分布(我们使用训练集来学习这个分布)。 2)训练数据与测试数据来自不同的分布(我们要让在训练集上学习的模型在测试集上也表现良好)。 通常我们把(1)称为“弱泛化”, 把(2)称为“强泛化”。 我们也可以把它们理解为“内插(interpolation)”和“外推(extrapolation)”, 或“鲁棒性(robustness)”与“理解(understanding)”。


弱泛化: 考虑训练集与测试集数据服从两个类似的分布

----如果数据的分布发生了较小的扰动, 模型还能表现得多好?


在“弱泛化”中, 我们通常假设训练集和数据集的数据分布是相同的。但是在实际问题中, 即使是‘’大样本’’(large sample limit)情况下, 二者的分布也总会有些许差异。

这些差异有可能来源于传感器噪声,物体的磨损,周围光照条件的变化(可能摄影者收集测试集数据时恰好是阴天)。对抗样本的出现也可能导致一些不同, 对抗的扰动很难被人眼分辨,因此我们可以认为对抗样本也是从相同的分布里采出来的。

因此, 实践中把“弱泛化”看作是评估模型在“扰动”的训练集分布上的表现是有用的。

数据分布的扰动也会导致优化目标函数(optimization landscape)的扰动。



不能事先知道测试数据的分布为我们优化带来了一些困难。如果我们在训练集上优化得过于充分(上图蓝色曲线左边的最低的局部极小点), 我们会得到一个在测试集上并不是最好的模型(红色曲线左边的局部极小点)。 这时, 我们就在训练集上过拟合(overfitting)了, 模型在测试集上没有很好地泛化。

“正则化”包含一切我们用来防止过拟合的手段。我们一点都不知道测试集分布的扰动是什么, 所以我们只能在训练集或训练过程中加入噪声, 希望这些引入的噪声中会包含测试集上的扰动。随机梯度下降,随机剪结点(dropout),权值噪声(weight noise), 激活噪声(activation noise), 数据增强等都是深度学习中常用的正则化技术。在强化学习中,随机仿真参数(randomizing simulation parameters)会让训练变得更加鲁棒。Chiyuan Zhang 在ICLR2017的报告中认为正则化是所有的可能“增加训练难度”的方法(而不是传统上认为的“限制模型容量”)。 总的来讲, 让优化变得困难一些有助于模型的泛化。

这很令人不安, 我们的“泛化”方法太粗糙了,仅仅相当于一个”优化阻碍器”。我们基本就是给优化器制造一点障碍,干扰训练过程让它刚刚好可以防止过拟合。还有,更好的训练会牺牲模型的泛化性能, 用这种观点看待泛化问题会让模型的可训练性的研究非常困难。

但是如果更好的优化会导致过拟合,那我们又怎么解释一些优化过程可以同时降低训练集和测试集上的误差?事实上任何一个优化器和优化目标的组合总会维持一个1)在模型空间中找到更好的模型 2)过拟合到某一个特定解 二者的平衡。现在我们还没有办法去控制这个平衡。

对于弱泛化最大的挑战可能就是对抗攻击了。 对抗方法会产生对模型最糟糕的的干扰,在这些扰动下模型会表现得非常差。 我们现在还没有对对抗样本鲁棒的深度学习方法, 但是我感觉这个问题最终会得到解决[5]。

现在有一些利用信息论的工作表明在训练过程中神经网络会明显地经历一个由 “记住”数据到”压缩”数据的转换。 这种理论正在兴起, 虽然仍然有关于这种理论是不是真的有效的讨论。 请关注这个理论,这个关于“记忆”和”压缩”的直觉是令人信服的。


强泛化:自然流形

在强泛化范畴,模型是在完全不同的数据分布上进行评估的, 但是数据来自于同一个流形(或数据产生过程)





如果测试数据分布于训练数据分布“完全不同”,我们如何来训练一个好的模型呢?实际上这些数据都来自同一个 “自然数据流形’‘ (natural data manifold)。 只要来源于同一个数据产生过程,训练数据和测试数据仍然含有很多的信息交叠。

现实可观察的数据可以被看作来源于一个非常高维的,不断变化的“自然流形”。一个数据元组(一段敲钹的的视频, 敲钹发出的声音)是这个流形上的一个点。数据元组(一段敲钹的视频,蛙鸣的声音)就不是这个流形上的点--这样的数据元组不符合现实。正如你感觉到的, 这个自然流形非常巨大, 它也是高度结构化的。例如,我们观察到的所有的数据都要遵循物理规律如重力定律, 物体不会突然出现,也不会突然消失等等。

强泛化可以看作是模型可以多好地学到这个 “超级流形”, 训练这个模型只使用了流形上的很小一部分样本。一个图像分类器不需要去发现麦克斯韦方程组--它只需要理解与流形上的数据点相一致的事实。

在ImageNet上训练的现代分类器已经基本上可以做到强泛化了。模型已经可以理解基础的元素比如边缘, 轮廓以及实体。这也是为什么常常会把这些分类器的权值迁移到其它数据集上来进行少样本学习(few shot learning),和度量学习(metric learning)。这样的迁移还有提升空间:在ImageNet上训练的分类器不是完全通用的,少样本学习任务还没有被解决,对抗样本仍然会造成很大干扰 。很明显,我们的模型还不能像人类一样明白它在看什么,但这是个开始

和弱泛化一样,我们可以对抗地采样测试集来让它的数据分布与训练集尽量不同。AlphaGo Zero是我最喜欢的例子: 在测试阶段,它看到的是与它在训练阶段完全不一样的, 来自人类选手的数据。此外,人类选手也在尽力把 AlphaGo Zero带到它在训练时从未见过的地方。虽然 AlphaGo Zero不能明确地理解抽象的数学, 对弈心理学或绿色是什么意思, 但是很明显它在围棋这个领域理解得很好,足够击败人类选手。 如果一个人工智能系统可以在有经验的人类的干扰下稳定地工作, 我认为它具有了足够的强泛化能力。

遗憾的是, 强化学习的研究忽略了强泛化问题。 大部分的基准都基于静态的环境, 没有多少认知的内容(比如人型机器人只知道一些关节的位置可能会带来奖励, 而不知道它的它的世界和它的身体是什么样子的)。

我相信解决强化学习可训练性问题的关键在于解决泛化性。我们的学习系统对世界的理解越多, 它就更容易获得学习的信号, 可能需要更少的样本。这也是为什么说 少样本学习(few shot learning),模仿学习(imitation learning), 学习如何学习(learning to learn)重要的原因了:它们将使我们摆脱采用方差大而有用信息少的暴力求解方式。

我相信要达到更强的泛化,我们要做到两件事:



首先我们需要模型可以从观察和实验中积极推理世界基本规律。符号推理(symbolic reasoning)和因果推理(causal inference)看起来已经是成熟的研究了, 但是对任何一种无监督学习可能都有帮助。 我想起了人类通过逻辑推理系统(数学)推导宇宙物理规律来理解天体运行。有趣的是, 在哥白尼的革命之前, 人类最初可能依赖某种贝叶斯式的启发(“迷信”), 当我们发现经典力学以后, 这些”贝叶斯”式的模型就被抛弃了。

我们的基于模型的机器学习方法(试图去“预测”环境的模型)现在正处于哥白尼革命之前的时期:它们仅仅是肤浅地基于一些统计原理进行内插, 而不是提出深刻的,一般性的原理来解释和推断可能在数百万光年以外或很久远的未来的事情。注意人类不需要对概率论有很好的掌握就能推导出确定性的天体力学, 这就产生了一个问题:是否有可能在没有明确的统计框架下进行机器学习和因果推理?

让我们的学习系统更具适应性可以大大降低复杂性。我们需要训练可以在线实时地思考,记忆, 学习的模型而不仅仅是只能静态地预测和行动的模型。

其次, 我们需要把足够多样的数据送给模型来促使它学到更为抽象的表示。只有环境里有非常丰富的内容,正确的表示才能被发掘出来(AlphaGo Zero 就提出了角色需要使用自然流形中多少的数据,才能具有一定的理解能力的问题)。没有这些限制的话,学习本身就是欠定义的,我们能够恰好找到一个好的解的可能性也非常小。 也许如果人类不能站起来看到天空,就不会想要知道为什么星星会以这样奇怪的椭圆形轨迹运行,也就不会获得智慧。

我想知道三体文明(出自小说《三体》)拥有如此高的技术水平是不是因为他们的生计取决于他们复杂的天体力学的理解。也许我们也应该在我们的Mujoco 和 Bullet环境中加入一些天体运行 : )

脚注:


[1]有一些研究领域不能被归入表达能力, 训练难度和泛化性能的框架内。比如说可解释性研究试图去解释为什么一个模型会有特定的行为。不仅仅是高风险领域(医疗, 执法)的机器学习技术用户关心这些研究,可解释性也能帮助解决泛化性问题:如果我们发现模型提供的诊断的方式或根据与一个人类医学专家非常不同,这很可能意味着我们的模型的推理方式并不能够泛化。确定你的模型学到了正确的东西比仅仅获得低的测试误差更为重要。差分隐私是另一个我们对机器学习模型的要求。这些话题超出了本文讨论的范畴。

[2]简单地解释为什么会这样:一个包含N个神经元的ReLU 全连接层会把一个线性空间切分成N个分段连续的部分。 再加一个ReLU层会再次切分, 产生N^2个分段线性部分, 三层就会是N^3个等等。详细的分析参见Raghu et al. 2017.

[3]这有时候会被称为多层次优化问题, 它含有一个“外部” 和一个 “内部”优化过程,而协同适应是同时进行的。 比如一个机器上并发进程的异步通信,或者生态系统中相互影响的物种进化。在这些例子中,没有明确的“外部” 和 “内部”优化过程。

[4]序列-序列注意力机制模型(seq2seq with attention)在刚被提出的时候达到了当时最好的水平, 但是我怀疑带有注意力机制只是让模型变得易于训练而不是增加模型的表达能力和泛化能力。可能单纯的序列-序列模型在有好的初始化情况下也可以做得一样好。

[5]一个缓解对抗攻击的想法,虽然无助于解决强泛化问题:让计算对抗扰动的代价变得极其高昂。模型和数据都是黑盒子。在推理期间每次调用模型时, 从训练好的模型中随机挑选一个送给对抗者而不告诉他们是哪一个模型。模型的训练彼此独立甚至可以用不同的架构。 这使得计算有限差分梯度变得很困难因为f(x+dx)-f(x)可以有任意大的方差。此外,由于我们采样不同的模型,连续模型梯度之间的梯度也会有很大的方差。另一种可行的方案就是使用多模态数据(视频, 多视角, 图像+声音), 对抗攻击者很难在扰动输入的同时保持不同模态输入的一致性。