大家好,我是于建国。很多人知道我的名字应该是这个的。外国人读我的这个于建国发音很难,尤其这个于他们根本就读不出来,所以我就用这个来代替了。
What's your name?DJANGO.The dear son.[0:42.310-0:44.770]
我是日本会津大学博士一年级的学生,硕士的研究是基于深度学习结合口型的语音识别。很高兴的和大家在这里分享,我其他的就不多说,让我们直接步入正题。
由于人工智能的火热,越来越多的人担心自己的工作会被人工智能所取代,让人想要入门深度学习,却发现它很黑箱。这一次就是分享一些我个人的心得,关于深层神经网络的设计理念。分享的内容分为四个部分。
第一部分我们谈论人工智能,但到底什么是智能,什么是学习?这不仅仅局限于机器学习和人工智能,也包括我们日常生活的学习和我们自身的智能。对这部分内容的理解可以帮助我们在随后明白深度学习到底可以做什么。为什么画面识别、语音识别、自动驾驶、机器翻译大量的应用都可以使用深度学习。
第二部分,当你想要入门深度的学习深度学习的时候,周围的人都会告诉你要学好线性代数,学好概率,学好编程。但很少会有人告诉你为什么没有目的的学习是十分没有效率的。所以第二部分我会简单描述这些预备知识对深度学习起到了哪些作用,为什么你需要学好这些内容。
第三部分,知道了什么是学习之后,我们再来看看学习到底难在哪里。为什么深度学习如此高效?它相比浅层学习算法有什么优势?它适合什么问题,又不适合什么问题?因为我们想要搞清如何设计出合理的深层神经网络,自然要针对深层神经网络为什么高效这一点来发挥它的长处,避开它的短处。
第四部分,虽然深度学习没有定性的理论,但是它但是明白它为什么高效这一点之后,就可以相应的列出几条设计性原则。读新论文的时候,我更关注的是,他们如何从……这几条原则出发设计他们网络的。
最后,给想要零基础入门深度学习的朋友,分享一些我自己做的材料。
第一部分,智能:何谓学习
智能能够做到的事情太多太多,实在难以用一句话给出一个让人信服的定义。
所以让我们从另一个角度来切入:为什么生命需要智能?智能的作用是什么?而这个答案却是唯一的,那就为了生存下去。
所以现在假设宇宙还没有产生生命,我们来想象一个生存游戏。
这个生存游戏和这个右上角的小游戏差不多,就是躲避危险,从而尽可能长的生存下来。需要注意的是你这时候要清空大脑当中所有的先验知识,你并不知道这个游戏怎么玩,所有的规则都是随机的,并不说碰到绿柱子就会死。
那稍微抽象一下,就可以得到左边的这个模型。ABCD表示不同的环境。个体在接受到环境的刺激后,会产生靠近或者远离的行为,结果就是存活或者死亡。这时候……环境就是输入X。个体是关联f。可以叫它(function /mapping)映射。我在随后都喜欢叫它……关联。行为是输出Y。
假设游戏的规则是……假设B和C都是危险的,靠近就会死亡,也可能A和D是危险的……这是随机的。同时个体的关联f……也是大自然随机生成的,个体的行为都是随机的。如果你是大自然的造物主,你要怎么在上述的条件下……设计出一个可以一直自我延续下去的生命?
比较直接暴力的方式就是不断的随机生成,总有一个个体会满足条件的对吧?比如说这个映射。用(01)表示B;(10)表示C;1表示远离,0表示靠近。当……B和C出现时,我们希望个体会产生“1”这个数字。
但这个时候我们追加另一个规则:环境会变,就像这个小游戏,如果环境在第二关变成没碰到柱子就会死呢?我想应该有人玩过Mario(马里奥),你会用以前玩马里奥的方式去玩它,但结果就是各种死。所以当环境变成A和D是危险的时候,这个生命就会死亡。
所以即便一个个体非常幸运地产生了能够……满足生存的关联,f也会在下一次环境变化的时候重新化成无机物。如果还用随机生成的方式,生命永远永远只能在最初的阶段停留片刻,无法进入到下一个阶段。因此生命想要延续,就需要一种能力,可以适应变化的能力。这也是霍金对智能的描述:Intelligence is the ability to adapt to change.生命是适应变化的能力。
于是大自然,是靠大量的个体不断地繁殖,并且该繁殖过程中并非完美地复制,而是会产生变异。变异的个体就有机会适应变化后的环境而存活下来,无法适应环境的个体会被筛选掉,筛选下来的个体……继续大量繁殖,(增加差异性……)产生差异性,迎接下一次环境的筛选。筛选后的结果便是进化,进化出适合当前环境的关联。用这种繁殖变异筛选的动态循环,就可以形成能相对稳定存在的生命。
游戏的关键在于:关联的更新速度要大于环境的变化速度,
所以自然界很多生物大量繁殖这一行为并不浪费,它增加了可供筛选的样本数量,防止环境变化后个体全部被筛选掉。
这张图粗略地展示几何概念之间的关系,大量的智能关联。虽然我这里写的是智能,但我想描述的是那个function。
(function)是靠DNA来存储的,而DNA的复制会产生变异,造成差异性。差异性又反映于个体,变异的个体会被环境所筛选,个体的死亡对种群起到了改造作用,进而对智能关联进行筛选。
那么对上述的内容进行梳理就会得到下面的几个总结,进化的对象不是个体,也不是基因,而是智能关联。个体的生死对种群只是起到了一次更新的作用,而基因相当于硬盘。存储在上面的智能关联才是核心。
进化的过程就是智能关联被不断筛选的过程。筛选出符合当前环境的关联,寻找关联f的过程就是学习。自然选择的动态过程,就是一种以种群为单位的学习方式。
智能是适应变化的能力。
智能的核心部分有:
1.(学习:关联的寻找),在低等生命中对应的是自然选择;
2.其次是(延续关联的存储),将学到的关联延续下去。别的星球可能产生过生命,但是却没有既能在那个星球稳定存在,又可以完成自我延续和复制的媒介。
所以影片《普罗米修斯》当中将DNA称为外星人留在地球上的火种。
最后是(决策关联的应用),应用所学到的关联产生不同的行为来躲避危险。
DNA上存储的关联,好比是工具的蓝图;而各式各样的蛋白质,就是根据蓝图造出的工具。蓝图是由自然选择来绘制的。
你会发现这和你所认识的智能可能不太一样,似乎过于简单。
因为刚才的描述仅仅是停留在蛋白质层面上的低等智能阶段。
靠这种方式存活的生命是病毒,仅有保护性蛋白质外壳和DNA或者RNA,可以进行自我复制。
但是单个蛋白质能够完成的任务十分有限,为了增加适应变化的能力,大量的蛋白质组合在一起,并行地工作,就达到了细胞层面的智能。同理,大量的细胞形成组织,在器官、系统、个体、团体、国家越往上提,能够完成的任务就越复杂。
我想用下面的这段视频让大家感受,近几年所推崇的互联网思维,其实始终都存在于你我的体内。只是科技让你我的链接速度提升后,才得以凸显。
我们自身就好比一个工厂,内部有大量的蛋白质在并行地完成各项生理功能。而处在互联网时代的我们,和体内的蛋白质本质上没有什么区别,你并不是单个生命。
可能有人会觉得这些内容跟深度学习没有什么关系,但是请你耐心地听下去。
自然界无法瞬间产生特别复杂的功能,高等智能都是由低等智能迭代生成的。
大量的生物用低等智能的方式就可以很好地生存。但是我们依然想要弄清高等智能的原理,并服务于我们自身。因为我们的环境更为的复杂,高等智能最具代表性的就是可以思考,但是思考的原理实在是难以解读。还是用老方法,转而问:为什么会进化出意识允许我们思考,它能够解决什么问题。
环境的变化是随机的,所以进化并没有什么方向,但是却有着增加差异性的趋势。
还记得生存游戏的关键吗?那就是:关联的更新速度要尽可能大于环境的变化速度。
而增加差异性就是增加了更新的幅度,通过自我复制的方式能够产生的差异性还是相对较弱的。
所以自然界慢慢开始产生了有性繁殖,两个不同的个体进行交配,增加子代的差异性。
但是有性繁殖带来了一个问题,如果生命不可以移动,那么个体只能与周围的个体进行繁殖,这一区域就始终都是那么几种智能关联,有性繁殖差异性的能力就会被限制。所以为了洗牌,大范围移动成为了必然需求。
即便是植物这种不可以移动的生物,也会利用果实让动物帮助来它们来传播种子。
可大范围移动也带来了另一个问题,那就是环境会随着移动而变化。个体在上一环境当中,通过学习得到的关联,在下一环境当中并不适用。
比如说你将热带植物放到沙漠当中,不同的环境会杀死它。
这个时候就需要新的学习方式,如果还用自然选择的方式显然不可行,因为增加了移动、感官等能力。……个体的生长周期变长。
设想一下:花了好几个月生下来的小动物,错走一步掉坑里摔死了,那么几个回合下来,这个物种就灭绝了。他们承担不起自然选择这种试错学习方式所带来的代价。
于是大范围可移动生物而言,他们需要在原有智能的基础上增加另一项能力:预测。
关联不再是简单的应激反应,不再是从环境到行为的关联,而是从过去事件到未来事件的关联。
生物会利用意识,在大脑当中模拟自己与环境的关系,通过预测下一步甚至下几步会发生什么,从而进行决策。
这就和下棋一样。
神经元细胞内部大量的蛋白质可以……控制电离子的进出,进而有了控制电的能力。它们用不同的频率来表示不同的状态,大脑当中的神经网络就有了模拟环境的变化与状态的能力。允许个体……以个体为单位学习两个空间的关联。……不再是自然选择这种以种群为单位的学习方式。
而决策需要依据,这就需要生命有感知能力,感知周围的信息。
我们以深度学习所擅长的画面识别为例,来看看它到底在做什么,同时进一步……理解建立两个空间的关联这一概念。这里列出了4个不同的生物和人类的视觉差异。
而这引出了一点知识,人眼所看到的并非是世界的原貌,而是适合自己生存的一种感知方式。
因为蛇的猎物一般是夜间行动,所以它就进化出了一种可以在夜间也能很好观察的感知系统:感热。
任何的视觉系统都是将反光与脑子当中的概念进行关联,相同的反光经过不同的视觉系统会得到不同的感知。
所以画面识别实际上并不是识别这个东西本身是什么,而是寻找人类的视觉关联方式并再次应用。
如果我们不是人类,我们是蛇类,那么画面识别所寻找的关联就和现在要找的关联不一样。
当X代表的是画面,Y代表的是大脑当中的概念时,那么神经网络完成的就是画面识别。
当X表示说过的话,Y表示……即将要说的话,那么神经网络所完成的就是语言模型。
当X代表的是英语,Y代表的是中文,那么神经网络完成的就是机器翻译。
神经网络就是从很多个输入输出的例子当中,寻找能够解释这两个空间的关联。
就像y=ax+b这个线性方程。给你两个例子,让你确定A和B一样,确定后就可以在以后的活动当中利用所建立的关联、这个f,根据特定输入、特定的X,得到我们想要的Y。
但是自然界的关联可不是像线性方程那么简单。
而代表着……高等智能的……意识,允许我们在脑中预先模拟接下来会发生什么,从而决定下一步的行动。
一个人的一生就是在不断地建立自己所处环境当中各式各样的预测模型,形成一个世界模型,你可以叫它世界观。
茶杯坠落会发生什么?如果有枪响会怎样?人站在高处会预测自己坠落的后果,所以害怕。
随着环境的变化,所建立的预测模型也需要跟着更新。
比如我们现在生存的环境就和古人不一样。有投资项目、未来的几个月股票、房价、汇率等变化。所以你可以看到我们作为一个生命体,始终都在适应着这个时刻变化的世界。
智能的内容在于关联,核心在于学习,但却不仅限于此,它还有围绕着关联和智能的其他能力。
除了建立关联外,还有何时搜集数据,因为我们是从历史经验当中学习;
还有何时更新已经建立好的模型,什么时候使用哪一个模型,这些都属于智能。
比如说,人脑的预测实际上是双向的,它会时时刻刻……预测即将发生的事情,并将实际发生的事情与自己的预测进行比较。
通常这一个过程不会得到你的注意,只有那些与自己预测不符的事件才会得到你意识的注意。
比如说,你不会注意每天都走的楼梯,但是这个楼梯当中的某一个阶梯突然高出3厘米深,你就很容易察觉,瞬间就察觉了。
这种与自己所建立的模型冲突的事件会更容易被记住,并且作为训练数据收集起来,用于以后的学习,为了让你更好地预测,更好地生存。
所以,思考的目的就是在于预测。
而人的一生始终都需要学习,因为世界在不断地变化。
并不存在小孩子比成人学习能力强这么一说。
之所以会造成这种现象,是因为人们依赖自己的世界模型。小孩子并没有构造出完整的世界模型。……DNA当中进化出来的本性,让我们小时候充满了好奇心,会什么都好奇,什么都学习;而成人已经建立了较为完善的世界模型,需要有一种保护机制,防止被别人忽悠。如果你还像小孩一样什么都学,什么都更新,那么你很容易……就会被洗脑。
但是成人也会更新已经建立好的关联。比如说如何说服一个成人,较好的做法是描述一个事件,这个时候他会不由自主地预测结果。但当你告诉他他的预测是错误的时候,他就会得到(原来自己已经建立的模型并不可靠)的这么一个信号,会关闭抵制学习的保护机制来更新已有的模型。
其次,智能始终是并行执行的……都是并行执行的;
唯独意识不可以同时……存在于两个地方,原因之一就在于,意识必须……在某一个时刻决定要用哪个关联。
我们的四肢有各式各样的关联,有骑车的,有跑步的,他们都共享相同的四肢。意识会起到调控作用。
我们现在的人工智能还没有达到意识的层面,仅仅是建立两个空间的关联而已。所以画面识别、语音识别都可以很好地完成。当然我们会在这个基础上逐步迈向意识的。
第二部分:人工智能。智能的核心部分有学习、存储和应用。在自然界当中有自然界的实现方式。而人工智能就是要将这种能力在机器上实现。
比如说我们不靠蛋白质,而靠机器来应用关联;不靠DNA,而靠电脑来存储已经学到的关联;不靠自然选择,而靠机器学习算法来建立关联。大家的目的都是为了做出更好的决策,更好地生存下去。那么实现这一目标需要哪些知识?
世界是不断变化的,会从一个状态变化到另一个状态。这里就牵扯到两个概念,状态与变化。
那么该如何准确地描述状态与变化呢?
进化出能够感知三维世界的我们,习惯在三维世界下描述物体。然而除了长宽高,世界上还有很多决定事物状态的因素。比如决定股票价钱的因素、决定天气的因素就不止三个。
甚至我们生存的世界可能并非三维,仅仅是因为三维空间感知已经足够让我们很好的生存了。
我们并没有进化出感知更高维度的能力。但是这些高维度的状态与变化又该如何描述?
线性代数就是用来描述任意维度空间下的状态与变化的学科;而线性代数当中的矩阵就是存储着状态与变化信息的媒介。通过线性代数我们知道了该如何描述事物的状态及其变化。
可是遗憾的是,对于一个微小的生物而言,很多时候信息都是缺失的,我们没有办法百分之百确定事物在变化后会达到哪一种状态,甚至世界的底层都是建立在纯基础(?)之上。
因此,我们需要概率在这种情况下帮助我们预测未来状态,从而做出合理的决策。
同时既然我们想要在计算机上实现智能,那么就需要懂得如何将自己的想法在计算机上实现。但你不需要什么都懂,你特别需要明白的是如何在计算机上操作(存储着状态与变化的矩阵)。
第三部分,学习的难点。
知道了什么是学习之后,我们再来看看学习到底难在哪里。这一部分的理解直接决定了你对神经网络的设计理念。
学习是要从历史经验当中训练出一个关联f,希望可以利用这个关联f来解决新的问题。
就拿高考来说,我们通过做历年的真题来训练自己的解题方法。训练的方式是不断地做题,并且对照正确答案。等到高考的时候,当看到……新题目X时,我们希望利用自己已经训练好的关联f、这个解题方法来得到正确的答案Y。而我们真正关心的并不是已经做过了的历年真题,而是高考。
所以学习的难点在于,需要在未见过的任务上仍然表现良好。
那来考虑一个极端的情况,假如说高考只有四道判断题,那么只需要记住这四道题的对错,高考就可以拿满分;可是实际的情况是,高考所能出的题却是无限的,而我们能够训练的历年真题却是有限的。
又比如识别猫的图片,猫会有各式各样的形态、表情、颜色大小,各种各样的变体,而我们没有办法穷举出所有的猫。该如何从有限的图片样本当中,训练出一个(可以较好判断一张图片是否为猫)的关联呢?
学习就是需要从有限的例子当中找出合理的关联f。
一个方向就是训练更多的数据,看到更多的情况。比如有的同学就用题海战术。这就是这些年大数据对人工智能起到的作用。
而单靠大数据是不足够的。另一个方向的例子就是那些只做一两道题就可以抓住问题核心的学霸们。而这个实际上才是深度学习在自然界任务当中超越其他机器学习算法的关键,也就是加入了先验知识,调整假设空间。
当然,学习是数据越多越好,但是为了明白为什么光靠大数据是不足够的,我们需要明白以下的几个问题。
第一点,上面提到学习的第一个方向就是见到更多的例子。可是当维度越高,其情况就越多,就越没有办法见到所有的情况。
只考虑离散的简单任务。一维的时候有1个情况,二维的时候就10维了,10种了。三维的时候就100种了。维度越高我们越没有办法见到所有的情况。现在一个普通的任务就有上百维,……而且是连续的数据。
那么那些没有见过的数据该如何预测?一般的方法是取左右两个见过的数据的平均值,但是在高维情况下,这种做法十分不可靠。因为它不像一维数据那样规整,而且……有激烈的凹凸。
那么想要预测得可靠,……就需要更多的数据,并且是不一样的数据。这个在现实中即便是大数据也难以实现。
你可以想象搜集卡片有多么难。玩过炉石传说的朋友可以想象,如果纯粹的靠买卡片包,想要把所有的卡片都给搜集齐全了,那需要投入多少的资金。还有这个概率是多少?
其次,关联f的寻找。我们是靠历史数据来训练关联f的,但是能够解释历史数据的关联f并非唯一。
比如说我想要两个数字相加等于1,我可以让其中一个数字为1,另一个数字为0,也可以让其中一个数字为−299,另一个数字为300。二者都能完成任务。
这就会造成我们寻找的关联f可能会完美地解释训练数据,但是却没有办法保证在新的预测中依然能够完美预测。
比如这两张图片。左边学习到的关联可以完美地预测训练数据,……但实际应用在训练集上,这红色的部分却预测错了。我们实际想要一个非常规整的双螺旋。
又比如说高考。能够解题的方法有很多种,有的非常巧妙。但这些巧妙的解题方式可能只适用于个别题目,其他的题目就不再适用。学生可能找到了一种可以解出他所有已经做过的题的解题方式,但是却没有办法保证该解题……方法在高考时同样有效。
而这个就引出了无免费午餐定理。既然关联f是无限的,那么寻找关联f、能够解释X到Y空间的这个关联f好比是大海捞针,……不同的机器学习算法,只是更擅长在某个海域打捞而已。如果你重点打捞某个海域,那么其他的海域就会被忽略。所以如果想要打捞的关联f可以存在于大海当中的任何一个地方时,那么深度学习并不会比其他的……机器学习算法更为优秀。这种情况下,任何两个机器学习算法都是等价的。这就是无免费午餐(定理)。
但这是不是意味着深度学习并不优秀呢?并非如此。
因为自然界当中的很多任务,其关联f并非像我之前所说的,可以出现在大海当中的任何一个位置,而是会集中出现在某个特定的海域,而且符合自然物理现象的特定海域。而深度学习就是擅长打捞该海域的机器学习算法。
深度学习就是我先前所说的学习的第二个方向,加入了先验知识,调整假设空间。
那该如何理解加入先验知识呢?
比如说,你想让你的朋友猜你大脑当中想的一个事物,这个难度是相当大的。因为你可以想象任何一个事物,而你的朋友通常会要求你把范围缩小,给它一个范围。比如说食物也可以进一步把范围缩小到水果,那么它就不需要在所有的事物当中乱猜,更容易猜(到)。
又比如说……如果我们没有办法见到所有的变体,那该如何是好呢?
二战时期,德军的(?)machine可以生成成千上万的密码。而……英军雇佣包括图灵在内的数学家来……直接破解它的加密原理。我们应该也像破解密码那样,来破解自然界的这些变体到底是如何生成的。那么我们就不再害怕变体了。
问题就来了,自然界的变体拥有什么样的特点?图灵它们是靠原文和密文之间不会出现相同的字母这一特点来破解密码的;那么自然界当中这些生成的变体拥有什么特点呢?
这个就引入了第一个自然界的先验知识:并行组合,也就是深层学习当中分布式表达distributed representation的思想。
假设我们有八个不同的苹果,用一般的学习方式,我们需要见到8种不同的情况才可以完美地学习。
但如果我告诉你,这些不同的苹果是由颜色、大小、形状三个因素组合形成的呢?
假如每个因素有两种情况,那么我们只需要学习好这六种情况即可,不需要见到8个变体。
所以你会发现,加入了(变体是由不同因素组合形成的)这一先验知识之后,我们降低了学习所需要的数据量。
而椭圆其实也有变体,什么样的形状是椭圆,我们可以依照相同的思路继续分解下去,进一步降低训练所需要的数据量。
拿人脸识别为例,各式各样的人脸是由五官组合的,而各式各样的五官又是由不同的形状、这些棱角组合的,不同的棱角又是由像素点所组合的。我们可以一直这样拆分下去,降低训练所需要的数据量。
但是这样的拆分方式是有前提的。因为我们知道世界是通过组合形成的……
1个碳原子加2个氧原子形成二氧化碳,3个氧原子形成臭氧。
同时又不是线性组合。所以我们来看深层神经网络最基本的变化公式:每一层都是将X内部的因素进行组合,进行线性组合,再加入非线性的能力,得出一个Y。
仿照着大自然变体的生成规律;而训练神经网络就是给大量的X和Y,让你求得w和b。就像线性方程组Y=aX+b,给你两个例子,让你求解a和b一样。
在第一部分我们也提到了,人体其实也是有这种组合方式形成的,所以神经网络非常去适合做画面识别、语音识别。
如果在一个完全不同的物理世界当中,可能是其他的平行世界,事物和我们人体可能就不是以这种组合方式形成的。那么以这种拆分方式学到的关联,就没有办法很好地完成生成数据的工作,所得到的预测也不会可靠。
但到目前为止,所讲的仅仅是浅层神经网络为什么优秀的原因。
一个具有(一个隐藏层)的神经网络,只要拥有足够多的节点就可以模拟任何的数据。
但是为什么深层神经网络比浅层神经网络要优秀呢?其实在那个……椭圆的部分,大家应该就已经可以感受到了。
就是将拆分后的因素再次拆分,可以进一步降低训练所需要的数据量。
然而这里实际上已经增加了第二条先验知识,那就是迭代变换。
我们知道原子会形成分子,而事物是在原子所形成的分子的基础上进一步迭代形成的,并非再从原子重新开始。
飞机是由原子到分子再到各式各样的零件组合而成的,坦克同样也利用到了相同的分子层,并不是说坦克就利用了另一个世界的分子层。所以虽然作为图片,坦克和飞机是不同的样本,但是它们都共享着相同的分子层。这就意味着当你使用深层神经网络来训练飞机样本时,会间接地对坦克的样本进行训练,降低了训练所需要的数据量。以这两个图作为例子。不是很好懂……这个图的左边是神经网络的链接图,右边是变体之间的关系图。接触在一起的圆圈表示一个节点可以取得不同数值,分开的圆圈就表示不同的节点。如果……用浅层神经网络来算的话,那么每一个变体……假设只有八个变体,每一个变体只会被拆成它服务于它自身的因素,并不会对其他的样本起到作用。但如果用深层神经网络的话,像下面这个图,就容易在abc这三个因素之间形成共享。那么你在训练3到0的这个样本的时候,就会对其他所有共享着a,b,c的其他样本起到了间接训练作用。
在拿编程做比较,我们不会一步到位地编程,而是会分成很多个小模块。这些小模块可以在不同的需求下都适用,也就是共享,这样就不需要再……每遇到一个细微变化时就……重新编写一次,
目前描述的网络叫做深层前馈神经网络feforward neural network。变换只会一层接着一层,不同层之间不会有跳跃,并且组合只能在同一层内的因素间进行。
想象如果一个网络当中,某个节点可以跟其他……任何一个节点连接,那么这样的网络就没有任何的侧重。
这就好比你在找人的时候,被告知他无处不在,和他哪儿都不在,这就相当于没有加入先验知识,没有缩小寻找关联的海域。
所以前馈神经网络的这种逐层变换的方式,很好地缩减了训练所需要的数据量。
因为这种组合方式比较符合自然界物理形成规律,所以深度学习并不会在所有的任务当中都强大,但是会在很多自然形成的数据当中,超越其他机器学习的算法。
回过头来再来思考生命和环境的关系,环境会变得越来越复杂。热力学第二定律,熵自发性增加,
但是复杂(之处)是在原有因素的基础上,依照物理规律形成的各种变体。比如……原本只有N个因素,那么……如果每个因素可以取两种不同的状态,那么就有2n个变体。
而深度学习就是将这些变体再次拆分成因素,
同时得到一个关联f:它是如何组成的。这个关联就是知识。
我们目前学到的前馈神经网络,引入自然界两个固有的先验知识:并行(、迭代)。新状态是由若干个(我这里写错了,应该写)若干个因素并行组合形成的;迭代:新状态是由已经形成的状态再次迭代形成的。
前馈神经网络几乎可以适用于所有的任务,但是它非常的一般化,所提供的先验知识针对性很低,先验知识不够针对,
那么训练所需要的数据量就会变大。
并且过深(?)之后,那些噪音所形成的规律也会被学习到模型当中,而这些规律并不是我们想要的。
而神经网络的其他变体,比如循环神经网络、卷积神经网络就提供了十分……具有针对性的先验知识,可以缩小……搜索的海域面积,排除掉那些噪音规律所带来的额外干扰。
不同的神经网络变体,其关键就是在于你向其中加入了不同的先验知识。
我希望我用这个影片来让大家感受一下自然界当中并行组合和迭代变换这两个先验知识。
你可以看到这些有很多个点,这些点共同并行一起决定了这个花的状态。而新状态又是在原有状态的基础上发展的。
铺垫了这么多,终于到了核心部分。
知道了深层学习为什么高效之后,对应的如何设计网络,我们也有了相应的指导。
需要明确两个概念,深度学习并非万能。
使用深度学习的前提是:你的数据可以使用这样的先验知识。
不然就像你用解英语题的巧妙方式去解数学题一样。
其次,深度学习没有固定的形式。
不要认为循环神经网络就是循环神经网络,卷积神经网络就是卷积神经网络。如果你以这种方式去学习神经网络,那么你这辈子都学不完。
因为网络的连接方式是无限的。
你需要抓住两个核心,因素拆分和因素共享。
每一个层内节点……表示的是因素,这些因素共同描述事物的一种状态。这些状态可以逐层发展,发展后的状态又可以进行合并或者拆分,来进行下一个状态的变换。
你可以把一个方框视为神经网络,而神经网络又可以继续与其他的神经网络形成更深的神经网络。比如卷积层处理完的输出,可以接着再进行循环层的处理。右图最后的这一层的神经网络的因素,就是由三个神经网络提供的,不同的神经网络的因素之间可以进行相加,也可以进行合并,合并成更高维度的状态设计。
神经网络更像是玩乐高积木,但是玩的规则在于如何拆分因素,如何使不同的样本之间……形成因素共享。
所以在看到很多新网络结构时,请务必考虑他们是如何考虑因素拆分和因素共享的,他们的结构是如何考虑……到这两点的。
虽然大家习惯叫循环神经网络、卷积神经网络,但是请以层的概念去理解它们。
层是指从一个状态到另一个状态的变化,这个变化才是层。
下面就来看看,循环层和卷积层是如何利用因素共享这个先验知识,来降低训练所需要的数据量,同时排除噪音规律所带来的干扰。
另外记住,卷积层并不是只是针对画面识别,循环层也并不……只是针对时序信号,关键在于时间共享和空间共享。
如果使用前馈神经网络来处理时序信号,……需要将前后所发生的事物状态,并成一个更大的向量。这样……每一个维度的权重都需要学习,即使当中很多的因素都是无关紧要、都是冗余的。
并且这样的处理方式只能处理固定长度的持续信号,长度不足时需要补0。
但如果我告诉你……这些不同时刻的状态都是由相同规则进行处理的。那么每一个时序序列中……这一个时序序列中,每个时刻的状态都可以为权重的学习提供帮助。比如在前馈层,三个时刻,只能对这个Wxh进行一次学习。而在循环层当中,三个时刻可以对Wxh、Whh进行三次学习。不同时刻的状态由相同规则进行处理的,这就是循环层加入的(时间共享)这个先验知识。
应用这种处理方式的原因是,世界上很多的数据都符合这种时间共享的规律。
比如你在演奏音乐的时候,……每个乐器,它的物理特性在时间维度上是不变的。并不会说……你在吹笛子的时候吹一会儿吹着吹着把它吹成二胡的物理特性了。
同时需要注意的是,循环层当中有两个因素流,一个是从输入得到的,另一个是从上一个时刻得到的。
所以你可以看到它有两个权重,Wxh和Whh。
用前馈层……前馈神经网络做实序预测,相当于徒手捏个陶瓷。你费时费力不说,你又没有办法保证每一个角度都是相同的。
而用循环神经网络做持续预测,相当于使用转盘,摆出一个手型之后,每一个角度都是以这种手型方式去捏制的。
人们常说(循环神经网络比前馈神经网络要好)的原因在于,考虑了更长的历史信息。
但我曾经做过实验,使用相同长度的历史信息将二者进行比较之后,循环神经网络依然比前馈神经网络要好,可能一定程度上验证了共享的作用。
另外双向循环神经网络,它是两个循环层的堆叠。
堆叠后有两种合并方式,一种是将所有的因素都相加。另一种是将因素合并成一个更大的向量。
我做过的所有实验当中,相加的效果都要比合并的好。也可能是因为第二个方向起到了限制作用。
只有那些记忆可以在正向产生某种规律,又可以在反向产生另一种规律的关联f,这二者同时达到,这两个条件同时满足时,这个关联f才会被我们采用。
上述提到的是时间共享,还有空间共享的卷积层。
前馈神经网络同样可以进行画面识别。但如果使用前馈神经网络,假设这是一张图片,那么在这个例子当中,就需要学习……9×9=81个权重。
但是如果知道这些权重在空间下是共享的、……局部共享的,那么我可能就只需要学习九个权重。
原因在于:我们的眼睛在观察的时候,并非是将整个图片全部映入眼帘,而是一个区域一个区域扫描。
像这种,这是我们实际观察的图片,然后再进行处理,将这些信息进行整合。
每一个区域扫描的规则都是共享的。你的眼球不会在扫描这个区域的时候是人眼、扫描到下个区域变成猫的眼睛。
设计神经网络,实际上是对假设空间进行了调整。
也就是说你选择在哪一片海域去寻找你的关联f。
这里我总结了4个设计原则。
第一,增加共享,降低确定关联所需要的数据量。
如果你知道大家在哪个海域之后,你就可以……用更少的渔网去打鱼。
第二是增加惩罚。
我们事先可能知道关联f或许不满足哪些特点,一旦这种特点的关联f在训练时被找到的时候,我们就对其结果进行惩罚,起到了筛选的作用。
还用打鱼做比喻的话,就是那些不符合条件的小鱼会被大孔的渔网所筛选掉。
(第三,)优化起点。
我们优先从哪一片海域开始寻找,找不到我们再找其他的海域。
(第四,)降低变体的数量。变体的数量越多,我们就需要见到越多的情况,见到越多的数据。所以我们可以预处理数据,将变体数量在学习之前就降低下去。比如说将数据减少平均值或者除以……标准差。
神经网络其实并不黑箱,黑箱的是你要学习的任务。
就像高考的难点……在于你不知道你等待你的任务……等待你的题目是什么。
神经网络也像是料理,并不是一种方式,适用于所有的食材。你要根据你的食材特点选择合理的烹饪方式。
接下来我(们)再看看,应用这些设计原则的各项技术。
迁移学习利用了知识共享这一特点,将(一个任务当中已经学到的关联)应用到其他的任务当中去。
比如画面识别,我们用大量的反光到概念,来学习我们的视觉系统。(画面识别的前几层)其实就可以想象成是(人的眼球是如何将反光关联到视网膜上的)。而(后几层)可以想象成(视网膜上的成像又是如何逐层抽象成图形概念的)。虽然很多的图像识别这一部分不太一样,但是如果将(已经训练好的、用于识别动物的神经网络的前几层)这一部分拿出来,这个f1拿出来,用在识别植物的神经网络当中,再额外加两层同样适用。毕竟大家都是人眼,这个f1很大程度上是共享的,这个就是迁移学习。
多任务学习。
多任务学习其实和迁移学习使用的是相同的先验知识,只是利用的方式有些许的不同。迁移学习是将已经学到的知识用在另一个共享着相同知识的其他任务上;
而多任务学习,是……在训练的时候,用(共享着相同底层知识的其他任务的数据)来一起帮助训练,可以起到扩充数据量的作用,训练所需训练的数据量的作用,同时寻找的关联f会更加优秀。
因为不同任务对底层的共享知识同时进行了约束,只有满足两个任务的关联f才会被采用,就是排除掉了那些只符合单个任务的关联f。
跨层组合,这是另一条先验知识。
我们知道前馈神经网络是不允许跨层组合的,但是在现实当中是否有跨层组合呢?它有没有什么潜在的好处?
比如我们在判断一个人的时候,很多时候我们并不是观察它的全部,或者给你的图片本身就是残缺的。这个时候我们会……利用单个五官再加这个人的着装,再加ta的身形来综合判断这个人。这样即便这个图形本身是残缺的,也可以很好判断它是什么。
这和前馈神经网络的先验知识不太一样。前馈神经网络不允许不同层……之间的因素进行组合,但是这个允许不同层之间的因素进行组合。
残差神经网络就是用这种特点的神经网络。大家喜欢用机器学习的方式去理解,为什么残差网络更为优秀。我这里只是提供了一个以先验知识的角度去理解的方式。
需要注意的是,每一层并不会像我这里所展示的那样会形成明确的五官层。只是有这样的组合趋势,
你实际没有办法保证神经网络到底学到了什么内容。因为你对它的隐藏层并没有加入限制,你只是对它的最后的输出层给了一个target,给了一个标签。
蒸馏学习,其本质仍然属于迁移学习,但是将知识以不同的方式迁移。一般的迁移学习是将学习到的权重直接应用在新的模型当中,迁移的是权重,而蒸馏模型所迁移的是标签。
比如这张图形当中有两个模型,一个模型是叫做老师,另一个模型叫做学生。他们完成的任务是相同的。
但是这个叫老师的模型拥有更好的特征,可能有额外的信息。而这个教学生的模型,由于实际应用的约束,无法使用这样的特征。蒸馏模型的做法就是先训练老师模型,用老师模型的预测值作为一种额外的标签,再和学生模型自己的标签一同使用,来共同限制关联f的寻找,帮助学生模型寻找到更好的关联f。
而这个帮助过程只是发生在训练阶段,实际使用当中只是用学生模型。这就好比一个学生在做题的时候,他既有参考答案,又有一个家教的指导。虽然家教无法代替学生去考试,但因为有家教的辅导,这个学生会比没有家教辅导的其他学生更容易学习。
虽然作为叛逆学生的我不希望承认这一点。
因为不需要使用老师模型,这种技术也用于压缩深层神经网络的大小,同时也应用于那些只有训练时候才可以得到的额外信息的这种任务。
我硕士的研究结合口型的语音识别,就是这种特点的任务。我不能在识别一个人说话的时候,在他的嘴里放一个用于测量口型移动的机器。口型数据只可以在训练的时候作为额外的信息来帮助我……训练出来更好的一个学生模型。
自动编码器Autoencoder。自动编码器是利用先验知识……并行与迭代的这两个先验知识来操控变体的一种技术。当它用作生成模型的时候,它就可以仿造自然界的生成变体的方式来生成不同的变体。
比如说我输入一个7,它就可以利用自然界的变体生成方式来生成各式各样的7。
当它用作特征工程时,实际上就是to disentangle the factors of variation:拆分不同变体的因素,达到降低变体数量的作用,所以会逐层减少。
比如说第一层有8个不同的变体,第二层我拆分成3个,像苹果那样不断地拆分……
那这样的话它的变体会越来越少,这我们所需要的……训练数据量就会被降下去。
Batch Normalization。一般地,我们会在输入和输出进行预处理,减去它的均值和去掉它的标准差,降低变体数量。
但是这个思路一样可以在隐藏层实施,因为输入输出是事物的状态,有变体;隐藏层同样是发展的中间状态,一样有变体。
端到端(End to end)。
这张图描述了机器学习的历史。我们逐渐……在减少人类知识在机器学习当中的作用,而让机器自己去学习知识。
假设我们现在的输入X是细胞层面,而输出的是器官层面。
如果使用传统的机器学习方式,我们会尽可能地人工地去学习:细胞层面的输入X是如何可以转换到一个线性可分的空间下去,然后再让机器学习来学习它自己的知识。但这个需要一个专家用一生去学习细胞是如何到达组织层的,并且还难以照顾到潜在的细节。
而端到端的思想就是,直接消除人工预处理和……后续处理,尽可能地让模型利用自然界的先验知识,从输入自己形成到达输出的规则,增加……模型的整体契合度。
过拟合是指,你在学习时过分拟合训练级的数据了。
拿这张这几个图做例子,中间的是拟合的刚刚好,而左边的情况是欠拟合,这段都没有分开,而右边的这个情况就过分拟合了。
拿历年真题作为训练集,高考作为测试集来说,
dropout。训练神经网络的方式是,将若干个样本逐步地送到神经网络当中训练。这些样本当中不可能只包含一种规律,那些细小的细节也能形成规律。如果连续送入网络当中的几个样本都具有相同的细节规律,那么神经网络就会记住它,这就影响我们真正想要学习的那个大规律。
而使用dropout之后,每次学习都会遗忘一些规律。这样即使拥有几个……相同细节规律的样本,很偶然地被连续送到了网络当中,也会被遗忘掉。只有当所有样本当中都存在的大规律才会被记住。
你的dropout,调得越强,它忘的就越多。所以dropout不仅对测试集的效果起到了作用,同时还对训练集的效果起到了作用。它会让你的训练集表现降低下去,但是它会提高你测试集的表现。
乱序,训练的样本不要有固定的顺序,而要随意打乱,这和dropout的原因是一样的。防止拥有相同细节规律的样本连续被送入到网络当中。
比如说我们不要一直地从abandon(遗弃、放弃)开始背英语单词一样。
L2。保持最简化解决方案,不要过于地复杂,不然只能顾及到特例而失去普遍性。
这就是老师为什么提倡你在高考时使用最普遍的解题方式一样。
这个是多题一起来做,相互比较之后得出结果,会让你网络的训练、loss function的降低方向更加的合理,更加的准确。
这就相当于你看两本描述不同的书,可以得到一个更好的理解(对于一个概念而言)。
加入噪音:题目当中加入一些干扰项,你在训练的时候加入一些干扰项,改变考前的环境、教室状态等,这就增加了鲁棒性。
噪音会对我们的结果产生影响,改变数据的分布。而神经网络就干脆直接将噪音一起建模到网络当中,将正常因素和噪音因素形成的组合作为最后的结果。
终于要讲完。
机器、计算机、人工智能,这些都是人类自身能力的延伸,这些技术可以应用在任何行业之中。
曾经我们是使用锄头耕地,现在是靠机器。曾经我们靠算盘来算账,现在靠计算机。
但是机器也好,计算机也好,所更换的仅仅是工具,不是工作内容。我们始终需要耕地,始终需要算账。
同样的人工智能帮助我们的,仅仅是建立关联。
有了合理的关联f之后,我们就可以根据特定的情况产生相应的行为。人工智能和机器和计算机一样都是工具,它并不会改变我们想要完成的任务,而未来的所有任务都可以依靠这一项新工具来实现。