This commit is contained in:
louzefeng
2024-07-11 05:50:32 +00:00
parent bf99793fd0
commit d3828a7aee
6071 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,97 @@
<audio id="audio" title="33 深度学习之外的人工智能 | 一图胜千言:概率图模型" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/c9/48/c9a65c617aea8903eca5684e007e2948.mp3"></audio>
在前面两个模块中,我和你分享了神经网络和深度学习的知识。神经网络是理解深度表征的模型,深度学习是训练深度神经网络的算法,两者是一脉相承的关系。**本质上讲,神经网络和深度学习都是由数据驱动的,大量有标记的训练样本是复杂模型取得良好性能的前提,这也解释了为什么直到近年来深度学习才得以蓬勃发展**。
但深度学习远非实现人工智能的唯一途径,在接下来的四篇文章中,就让我和你聊一聊深度学习之外的人工智能。
早年间的人工智能赖以实现的基础是**逻辑学**,但逻辑学适用的是理想化的,不存在任何不确定性的世界。可遗憾的是,真实世界是由随机性和误差主宰的,在这光怪陆离的环境中,纯粹的数理逻辑就如同古板的老夫子一般与周遭格格不入。
可即使抛开噪声与干扰不论,很多问题也没有固定的解。在医学上,即使子女的基因和母亲的基因已经确定,父亲的基因也可以有多种可能。要解决这类不确定性推理的问题,就必须借助**概率论**的方法。而将概率方法与图论结合起来,得到的就是今天的主题:**概率图模型**。
**概率图模型probabilistic graphical model也叫结构化概率模型是用图论表现随机变量之间的条件依赖关系的建模方法。典型的概率图模型包括贝叶斯网络和马尔可夫随机场分别对应着有向图模型和无向图模型。**
贝叶斯网络Bayesian network的拓扑结构是**有向无环图**,“有向”指的是连接不同顶点的边是有方向的,起点和终点不能调换;“无环”指的是从任意顶点出发都无法经过若干条边回到该点,在图中找不到任何环路。
贝叶斯网络中的顶点表示随机变量,一个顶点既可以表示可观察的显式变量,也可以表示未知参数和隐变量。如果不同的变量之间存在因果关系,那么相应的顶点就会由带箭头的边连接起来,箭头的方向由表示原因的变量指向表示结果的变量,边的权重就是对应的条件概率值。
<img src="https://static001.geekbang.org/resource/image/9c/6d/9c48b643e9484274470622da7231ab6d.png" alt="">
图片引自《深度学习》图3.7
**贝叶斯网络的作用是表示出随机变量之间的条件依赖关系,将多个随机变量的联合概率分布分解为条件概率因子乘积的形式**
根据条件概率的链式法则,四个随机变量$A, B, C, D$的联合概率可以写成
$$ p(A, B, C, D, E) = p(A) \cdot p(B | A) $$
$$\cdot p(C | B, A) \cdot p(D | C, B, A) \cdot p(E | D, C, B, A) $$
那么根据上面的概率图,联合概率就可以简化为
$$ p(A, B, C, D, E) = p(A) \cdot p(B | A)$$
$$\cdot p(C | B, A) \cdot p(D | B) \cdot p(E | C) $$
不知道这个例子是否让你想起另一种机器学习的方法:**朴素贝叶斯分类**。朴素贝叶斯分类的基础假设是不同的属性之间条件独立,因此类条件概率可以表示成属性条件概率的乘积。但在绝大多数情形下,这个假设是不成立的。将属性之间的依赖关系纳入后,得到的就是通用的**贝叶斯网络**。
贝叶斯网络引出的一个重要概念是**条件独立性**conditionally independence。如果事件$a$和$b$在另一事件$c$发生时条件独立,就意味着在$c$发生时,$a$发生与否与$b$发生与否相互无关,两者联合的条件概率等于单独条件概率的乘积,其数学表达式为
$$p(a, b | c) = p(a | c) \cdot p(b | c)$$
条件独立性可以这样理解,假设天降大雪,那么一对夫妻各自从工作单位回家的话,他们到家的时间都会因下雪而延长,但两个人各自耽误的时间在下雪的条件下是独立的;可如果老公要去接老婆一起回家的话,条件独立性就不再满足了。
条件独立性是概率论视角下的概念,如果从图论的角度看,变量之间的依赖与独立对应的是顶点之间的连通与分隔。直观理解,两个直接相连的变量肯定不会条件独立。在不直接相连的两个变量之间,信息必须通过其他变量传递,如果信息传递的通道全部被堵塞,那么两个变量之间就能够满足条件独立性。假设两个变量$X$和$Y$之间通过第三个变量$Z$连接,那么连接的方式可以分为以下三种(注意箭头方向的区别):
- **顺连**$X \rightarrow Z \rightarrow Y$或$X \leftarrow Z \leftarrow Y$
- **分连**$X \leftarrow Z \rightarrow Y$
- **汇连**$X \rightarrow Z \leftarrow Y$
在顺连的情况下,当变量$Z$已知时,$X$和$Y$条件独立。这是因为确定的中间变量不能通过变化传递信息,$Z$的固定取值不会随$X$的变化而变化,所以$X$的变化自然也不会通过$Z$影响到$Y$。这里的变量$Z$就像一扇固定的水闸,隔开了$X$和$Y$之间的流动,也就堵塞了两者之间的信息通道。
分连的情况与顺连类似,$Z$扮演的同样是固定水闸的角色。分连代表了一因多果的情况,当这个原因确定后,所有的结果之间都不会相互产生影响,因而$Z$已知时,$X$和$Y$条件独立。
反过来,在多因一果的汇连情形中,当$Z$未知时,来自$X$和$Y$的信息都会从这个窟窿里漏掉,此时$X$和$Y$条件独立。反过来,$Z$已知意味着将这个窟窿堵上,$X$和$Y$之间就构造出信息流动的通路,也就不满足条件独立的条件。需要注意的是,这里的$X, Y, Z$既可以是单个的顶点,也可以是顶点的集合。
条件独立性又可以引出贝叶斯网络另一个良好的性质,通俗的说就是**贝叶斯网络的每个顶点只取决于有箭头指向它的其他顶点,而与没有箭头指向它的其他顶点条件独立**。这个性质简化了贝叶斯网络中联合概率分布的计算,也可以节省大量的运算和存储。
当研究者要对真实世界建模时最理想的方案是建立起包罗万象的联合分布这就要求计算出分布中所有随机变量的所有可能取值的概率并将它们存储起来。假定一个模型中包含8个二进制的随机变量需要存储的概率值数目就会达到$2 ^ {8} = 256$个。
可如果在这8个变量中每个变量最多只取决于其他两个变量那么贝叶斯网络的概率表需要存储的只是相关顶点之间所有可能的状态组合最多只要计算$8 \times 2 ^ 2 = 32$个值,这不仅降低了运算复杂度,也节省了存储空间。尤其是在实际问题中,涉及的变量数目可能成千上万时,只要每个顶点都只有少量的父节点,贝叶斯网络在运算上的优势就体现得尤为明显。
贝叶斯网络的另一个优点是**能够根据各变量之间的条件依赖性,利用局部分布来求得所有随机变量的联合分布**。这个特点让贝叶斯网络在解决复杂问题时不需要关于某个实例的完整知识,而是从小范围的特定知识出发,逐步向复杂问题推广。
贝叶斯网络是基于不确定性的因果推断模型,其作用体现在在不完备的信息下,根据已观察的随机变量推断未观察的随机变量。在给定变量之间层次关系的前提下,如果按照自底向上的方式执行推断,就是由果溯因的诊断,这就像医生根据症状诊治病因(诊断过程其实就可以看成基于经验的贝叶斯推理过程);如果按照自顶向下的方式执行推断,就是由因得果的推理,这使得贝叶斯网络可以用作数据的生成模型。
**贝叶斯网络的构造包括两个步骤**:首先要根据变量之间的依赖关系建立网络的拓扑结构,其次要根据拓扑结构计算每条边上的权重,也就是条件概率。网络结构的构建通常需要特定的领域知识,条件概率表的构造也就是贝叶斯网络的训练,在网络的规模较大时可以使用期望最大化等方法实现。
**将贝叶斯网络的有向边替换为无向边,得到的就是马尔可夫随机场**。**马尔可夫随机场Markov random field属于无向图模型它的每个顶点表示一个随机变量每条边则表示随机变量之间的依赖关系**。使用无向边使马尔可夫随机场不能表示出推理关系,但这也解除了对环路结构的限制。环路的存在使它可以表示循环依赖,而这又是贝叶斯网络无法做到的。和贝叶斯网络相比,**马尔可夫随机场侧重于表示随机变量之间的相互作用**。
贝叶斯网络中每一个节点都对应于一个先验概率分布或者条件概率分布因此整体的联合分布可以直接分解为所有单个节点所对应的分布的乘积。而在马尔可夫随机场中由于变量之间没有明确的因果关系联合概率分布通常会表达为一系列势函数的乘积。这些乘积的求和并不一定等于1因而必须进行归一化才能得到有效的概率分布。马尔可夫随机场中的联合概率分布可以写成
$$p(\mathbf{x}) = \dfrac{1}{Z} \mathop \Pi \limits_k f_k(x_{{ k }})$$
式中的每个$x_{{ k }}$代表一个团,团是所有顶点的一个子集,并且团中所有的顶点都是全连接的;$f_k(\cdot)$表示每个团对应的势函数,通常取对数线性模型;$Z$表示的则是用于归一化的配分函数。
在马尔可夫随机场中,随机变量的独立性和顶点的连通性之间也有对应关系,但其形式却比贝叶斯网络更加简单。要判断两个变量是否独立,只需要观察对应的顶点之间有没有将它们连接在一起的边就可以了。只有在两个顶点之间不存在任意一条信息通路时,对应的随机变量才是条件独立的。条件独立通常意味着两者之间所有的顶点都有固定的观察值。
无论是贝叶斯网络还是马尔可夫随机场,都属于结构化的概率模型。它们提供了将概率模型的结构可视化的简单方式,而对图形的观察可以加深对模型性质的认识,其中最主要的性质就是变量之间的条件独立性。此外,概率图模型还可以表示学习和推断过程中的复杂计算,隐式地承载了图形背后的数学表达,这在以下解决问题的三步框架得以体现。
- **表示**:如何对不确定性和随机变量之间的关系进行建模
- **推断**:如何从建立的模型中推演出要求解的概率
- **学习**:对于给定的数据来说,何种模型是正确的
受篇幅所限,关于三步框架的内容就不做进一步的展开了。
今天我和你分享了概率图模型的原理,包括有向的贝叶斯网络和无向的马尔可夫随机场。其要点如下:
- 概率图模型是概率论与图论的结合,是用图论表现随机变量之间的条件依赖关系的建模方法;
- 贝叶斯网络是有向无环图,侧重于表示随机变量之间的依赖关系;
- 马尔可夫随机场是无向图,侧重于表示随机变量之间的相互作用;
- 概率图模型体现了“表示-推断-学习”的问题解决框架。
作为两种不同的模型,贝叶斯网络和马尔可夫随机场各有优势。那么它们能不能结合起来,各自避短扬长,共同发挥作用呢?
欢迎发表你的观点。
<img src="https://static001.geekbang.org/resource/image/57/48/57eda304a18b35999beaadbfc1c32348.jpg" alt="">

View File

@@ -0,0 +1,58 @@
<audio id="audio" title="34 深度学习之外的人工智能 | 乌合之众的逆袭:集群智能" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/9a/39/9a105ab7740ba40e75833c5fcd809539.mp3"></audio>
梅拉妮·米切尔在《复杂》中举过一个例子:在巴西的亚马逊雨林中,几十万只行军蚁(已知的行为最简单的生物)正在行进。用现在时髦的话说,这是一支去中心化、自组织的大军。在这个蚁蚁平等的团体中,单个蚂蚁几乎没有视力,也不具备什么智能。可聚集成团体的他们组成了扇形的团状,一路风卷残云地吃掉所有能吃掉的,带走所有能带走的。高效的它们只需一天就能消灭雨林里一个足球场面积内的所有食物。到了夜间,蚂蚁会自发形成一个球体,保护起蚁后和幼蚁,天亮后又各就各位,继续行军。
快速飞行的蝙蝠群在狭窄的洞穴中互不碰撞,大雁群在飞行时自发地排列成人字形、海洋鱼群通过几何构型充分利用水流的能量......这些自然界中的集群行为早早就吸引了人类的注意。在由大量数目的生物个体构成的群体中,不同个体之间的局部行为并非互不相关,而是互相作用和影响,进而作为整体化的协调有序的行为产生对外界环境的响应。生物群体正是通过个体行为之间的互动达到“整体大于部分之和”的有利效果,就像一百只行军蚁只会横冲直撞,一百万只行军蚁却能整齐划一。
实现集群智能的智能体必须能够在环境中表现出自主性、反应性、学习性和自适应性等一系列智能特性,但这并不意味着群体中的个体都很复杂。**集群智能的核心是由众多简单个体组成的群体能够通过相互之间的简单合作来实现某些功能,完成某些任务**。其中,“简单个体”是指单个个体只具有简单的能力或智能,“简单合作”是指个体与其邻近的个体只能进行某种简单的直接通信或通过改变环境间接与其它个体通信,从而可以相互影响、协同动作。
与高大上的深度学习不同,集群智能既不需要汪洋浩瀚的物理数据,也不需要艰深晦涩的数学算法,难道蚂蚁和大雁会计算微积分吗?集群智能的基础只是作用于个体的运行准则和作用于整体的通用目标,这些目标通常还都很简单。可正是数量足够庞大的简单规则才孕育出了整体意义上的高级智能,这也验证了量变引发质变的哲学观点。
从抽象的角度来说,群体行为是大量自驱动个体的集体运动,每个自驱动个体都遵守一定的行为准则,当它们按照这些准则相互作用时就会表现出上述的复杂行为。群体本身不具备中心化的结构,而是通过个体之间的识别与协同达成**稳定的分布式结构**。这个分布式结构会随着环境的变化,以自身为参考系不断趋于新的稳定。**集群智能**swarm intelligence正是群居性生物通过协作表现出的自组织与分布式的宏观智能行为它具有如下的特点
**第一个特点是可扩展性**。广义的可扩展性意味着系统可以在增加体量的同时保持功能的稳定,而不需要重新定义其部件交互的方式。集群智能系统中的作用方式通常是个体间的间接通信,因而互动的个体数量往往不会随着群体中个体的总数量的增加而增长,每个个体的行为只受群体维度的松散影响。在人造的集群智能算法中,可扩展性保证了通过简单扩充来增强算法性能的可行性,而不需要重新编程。
**第二个特点是并行性**。集群智能系统天然具有并行性这是因为组成集群的个体完全可以同时在不同的地方执行不同的行为。在人造的集群智能算法中并行性能够增强系统的灵活性能够在同时处理复杂任务不同方面的集群中自行组织。同时并行性也决定了集群智能具有较强的环境适应能力和较强的鲁棒性Robust不会由于若干个体出现故障而影响群体对整个问题的求解。
**第三个特点是容错性**。去中心化和自组织的特点让容错性成为集群智能系统的固有属性。由于集群系统由许多可以互换的个体组成,他们中没有一个总司令负责控制整个系统的行为,所以一个失败的个体很容易被另一个完全正常运作的个体所取代。除此之外,去中心化的特性也大大降低了系统全面崩溃的可能性。
**用集群智能方法实现人工智能,代表的是研究方式的转变**。不管是人工神经网络还是深度学习,其本质都是对人类思维的**功能模拟**,采用的方法论是机械论的哲学,而机械论中先验规则设定的前提决定了功能模拟的方式很难产生人类水平的智能。既然机械论这条路走不通,研究者们便开始转向另一条可能的道路:**从结构模拟出发,通过人为创造类似人类脑神经系统的结构模型,实现智能的大规模涌现**。
功能模拟的任务是重新制造出类人脑的复杂系统,结构模拟的任务则是复制出人脑这个复杂系统。一般来说,复制的难度要低于制造的难度。二进制的计算机可以通过算法代替人类执行特定的任务,但算法的核心问题也恰恰在于只能执行特定的任务,而不具备通用性,想要生成人类思维的特质,比如创造力和想象力,更是绝无可能。
结构模拟的理论基础在于对复杂系统的认识。当构成一个系统的基本单元数量极为庞大时,将这些个体看作一个整体,就会有一些全新的属性、规律或模式自发地冒出来,这种现象就称为“**涌现**”emergence
对于涌现现象来说,大量微观层次上的交互导致对其功能性的描述过于困难,结构化的模拟反倒成为一种直观有效的方式。对涌现现象的代表性应用,就是以蚁群算法为代表的各类**粒子群算法**。
在蚁群系统中,单只蚂蚁便是构成这一复杂系统的基本单元。在单只蚂蚁活动范围受限的情况下,整个蚁群中不同蚂蚁之间的协作与联动,却能够很快找到一条将食物搬回巢穴的最优路径。更重要的是,这一行为完全是自组织的行为,并不存在一个上帝视角的蚁后如元帅般指挥蚂蚁们的行动轨迹,这条最优线路完全是自发找到的。
蚁群的行为给善于向自然学习的人类以新的启发:只对单只蚂蚁的简单行为进行建模,系统中不同蚂蚁间复杂的大规模互动过程交给蚂蚁自己完成,这样能否产生“涌现”的效果呢?
基于这样的想法,意大利米兰理工学院的马可·多里戈博士在他的博士论文中提出了**蚁群优化算法**ant colony optimization通过对蚁群在寻找食物过程中发现最优路径行为的模拟来寻找问题的最优解。
蚁群算法的初始化是让第一批蚂蚁随机出发,独立且并行地搜索问题的解,对解的搜索就是蚂蚁对路径的选择。在行进的过程中,蚂蚁会在自己的路径上释放信息素,信息素的强度是与解的最优程度成正比的,新的蚂蚁则会根据已有信息素的强度选择自己的行进路径。
随着搜索的不断进行,信息素也会发生动态变化:旧蚂蚁留下的信息素会不断蒸发,新蚂蚁经过后则会产生新的信息素。蚁群的集群化搜索会产生聚集作用,最优路径会被越来越多的蚂蚁发现,信息素的强度也会逐渐增大,从而将更多蚂蚁吸引过来,被下一只蚂蚁选择的概率也就进一步增加。**蚁群算法就是利用这种正反馈机制逐步遍历解空间,使搜索向最优解推进**。
在不断的实践中,蚁群算法不仅被证明是个相当靠谱的优化算法,还激发出了鸟群、蜂群等其他类似原理的最优化算法。当然,蚁群算法也有它的限制条件:只有当基本单元的数量足够巨大时,“涌现”的结果才会出现。当蚂蚁数目太少的时候是达不到“涌现”效果的。
**蚁群的行为与蚁群算法的诞生对人工智能的研究也是一种启示:相对于宏观的功能模拟,结构模拟重于微观的解构**
功能模拟是个自顶向下的过程:先确定要完成的任务,再来设计任务实现的方式。结构模拟则是个自底向上的过程:只对最底层的基本单元及其运作方式进行定义,并让这些基本单元在微观层面上进行交互,从而自发地生成各种宏观行为。
在这个过程中,结构模拟回避了复杂系统中复杂性形成的过程,以放任自流的方式让微观单元自己完成。这未尝不是个好办法:当现有的技术水平远远不足以透彻地研究复杂系统时,与其通过功能模拟人为地对其运作方式进行武断地判断,不如采用无为而治的方式,发挥基本单元的自然天性,看看它能造出个什么世界。
今天我和你分享了集群智能方法的现实依据,以及它所代表的研究方向。其要点如下:
- 集群智能是由众多简单个体通过自组织和去中心化的简单合作实现的智能;
- 集群智能具有可扩展性、并行性和容错性等特点;
- 集群智能体现出微观个体之间的相互作用能够实现整体大于部分之和的效果,其实例是蚁群算法;
- 集群智能在人工智能中的应用代表的是从宏观模仿到微观解构的方向转变。
虽说神经网络模拟的是思维功能,但从结构模拟的角度看,深度神经网络其实也可以归入集群智能的范畴。那么关于集群智能的研究又能给神经网络带来哪些启发呢?
欢迎发表你的观点。
<img src="https://static001.geekbang.org/resource/image/e7/51/e7151984e06f3ee537179af1cb7a1d51.jpg" alt="">

View File

@@ -0,0 +1,67 @@
<audio id="audio" title="35 深度学习之外的人工智能 | 授人以鱼不如授人以渔:迁移学习" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/b1/f0/b1be07f2f129ff4adc23baad408845f0.mp3"></audio>
无论是小学还是大学,在教学中都会强调的一个问题就是“举一反三”,将学到的规律灵活地运用到其他相似的场景下。而要想让人工智能学会举一反三,用到的就是**迁移学习技术**。
**迁移学习transfer learning是运用已学习的知识来求解不同但相关领域问题的新的机器学习方法目的是让机器“学会学习”**。当训练数据和测试数据来自不同的特征空间或遵循不同的概率分布时,如果能够将从训练数据上习得的知识迁移到测试数据上,就可以回避掉复杂的数据标签工作,进而提升学习性能。迁移学习就是解决这个问题的学习框架,它能够对仅有少量甚至没有标签样本进行学习,从而解决目标问题。
许多机器学习和数据挖掘算法都建立在两个主要假设之上:第一,训练样本和测试数据必须处于相同的特征空间并具有相同的分布;第二,有足够的高质量训练样本作为学习资源。
遗憾的是,这两个假设在大多数实际应用中难以成立。一方面,训练数据和测试数据在时间上的差异可能导致分布规律的变化;另一方面,对大量数据进行标注不仅费时费力,还容易受到知识产权问题的影响。一旦没有数据,再好的深度学习方法都是无源之水,无本之木,难以发挥作用。
迁移学习的出现给解决这些问题带来了一丝曙光。其实说到底,**迁移学习可以看作是提升学习算法泛化性能的一种思路**。现实世界并非标准化和结构化的数据集,而是杂乱无章的万花筒,包含着大量从未在训练集中出现过的全新场景,这足以让许多在训练集上无往不胜的人工智能变成真实世界中的“人工智障”。**迁移学习有助于算法处理全新场景下的问题,利用一般化的规律去应对富于变化的环境**。
在迁移学习中,已有的知识(包括样本数据集及其分布)叫做**源域**,要学习的新知识叫做**目标域**。同样,待解决的任务也可以分为**源任务**和**目标任务**。根据源域/目标域和源任务/目标任务的关系,迁移学习问题可以划分为以下三类:
- **归纳迁移学习**inductive transfer learning源域与目标域可能相同也可能不同目标任务与源任务不同
- **直推式迁移学习**transductive transfer learning源域与目标域不同目标任务与源任务相同
- **无监督迁移学习**unsupervised transfer learning目标任务与源任务不同且源域数据和目标域数据都没有标签。
**在从源域到目标域的迁移过程中,迁移学习要解决的三个问题是:迁移什么、能不能迁移、如何迁移**
“迁移什么”明确的是迁移学习的作用对象。显然,迁移的对象应该是普适性的知识,而不是特定领域的知识。用来背古诗词的技巧不一定适用于背化学方程式,这时需要迁移的就是整体意义上的记忆方法。
在确定了迁移什么之后,接下来就要解决能不能迁移的问题,只有当源域和目标域具有较高的相关性时,迁移才会有助于学习。如果不管三七二十一,把知识生搬硬套到风马牛不相及的问题上,反而会起到负作用。这就像骑自行车的技巧可以用在骑摩托车上,因为它们都有两个轮子,可如果用骑自行车的方法骑三轮车的话,只怕是要翻车了。
解决了上面两个问题之后,面对的就是迁移学习中的核心问题——**如何迁移**。迁移学习的具体方法包括以下四种:
- **基于样本的迁移学习**instance transfer
- **基于特征的迁移学习**feature representation transfer
- **基于模型的迁移学习**parameter transfer
- **基于关系的迁移学习**relational knowledge transfer
**基于样本的迁移学习是对已有样本的重用过程,它通过调整源域中原始样本的权重系数,使之和目标域匹配,进而应用在目标域中**。这种方法通过度量训练样本和测试样本之间的相似度来重新分配源域数据的采样权重,相似度越大的样本对目标任务的训练越有利,其权重也会得到强化,相似度小的样本权重则被削弱。
**在归纳迁移学习中TrAdaBoost是典型的基于样本的方法**。它假定两个域中的数据具有不同的分布但使用完全相同的特征和标签。由于源域和目标域之间的分布差异不同的源域数据对目标任务的学习既可能有用也可能有害。TrAdaBoost通过多次迭代的方式调整源域数据的权重以鼓励“好”数据和抑制“坏”数据。
基于样本的方法也可以用于直推式迁移学习之中。这种情况下学习的出发点是使经验风险最小化使用的方法则是基于重要性采样的方法。重要性采样的作用在于将关于未知的目标域数据的期望转化为关于目标域数据和已知的源域数据之间关系的期望对两组数据关系的估计则可以通过核均值匹配或者使KL散度最小化等方法完成。
**基于特征的迁移学习是特征表示的重建过程,它通过特征变换使得源域数据与目标域数据处在同一个特征空间之上,再在这个公共空间上进行学习**。这种方法适用于所有的迁移学习任务。特征迁移的基本思想是学习在相关任务中共享的一组低维特征表示,对特征的降维采用的也是特征映射和特征选择两种方式(降维学习的两种方式)。
基于特征选择的迁移学习是识别出源领域与目标领域中共有的特征表示,再基于这些共有特征实现知识迁移。由于与样本类别高度相关的特征应该在模型中具备更高的权重,因此在找出源域和目标域的共同特征后,需要从目标域数据中选择特有的特征来对共同特征训练出的通用分类器进行精化,从而得到适合于目标域数据的分类器。
基于特征映射的迁移学习是把每个领域的数据从原始高维特征空间映射到新的低维特征空间,使源域数据和目标域数据在新的低维空间上具有相同的分布,这样就可以利用低维空间表示的有标签的源域数据来训练目标域上的分类器。特征映射和特征选择的区别在于映射得到的特征不属于原始的特征的子集,而是全新的特征。
**基于模型的迁移学习是已有模型的转移过程,它假设源任务和目标任务共享一些参数或者一些先验分布,将在训练数据上训练好的成熟模型应用到目标域上解决问题**。应用在归纳迁移学习中的大多数模型方法都来自于多任务学习,但多任务学习试图同时提升源任务和目标任务的学习效果,而迁移学习只是利用源域数据来提高目标域的性能。在迁移学习中,通过给目标域的损失函数分配更大的权重,可以确保在目标域中获得更好的性能。
**基于关系的迁移学习是问题结构的复制过程,如果源域和目标域之间共享了某种相似关系,那就可以将源域上的逻辑关系网络应用到目标域上**。与其他三种方法不同,关系学习方法处理的是关系域中的迁移学习问题,其中的数据在概率上不需要满足独立同分布的条件,但是一定要能够用类似的关系来表示,最典型的实例就是物理网络的数据和社交网络的数据。在这种方法中,数理逻辑是常用的工具。
除了以上的具体方法之外,迁移学习还需要解决一系列理论问题。既然迁移学习的目的是让机器学会学习,向人类学习的机制取经就是最简单的途径。人类学习的一个重要特点就是能够从纷繁复杂的现象中抽象出共性的问题,实现实例和规律的剥离。如果机器可以学会这种思维,把问题的内容和结构区分开来,其举一反三的能力就会产生质的飞跃。
另一方面,从迁移学习很容易进一步得到“**元学习**”meta-learning的概念。元学习的目标是通过对元数据的自动化学习来提升学习算法的灵活性是对学习方法的学习。每个特定的学习算法都建立在一系列有关数据的假设基础上这叫作**归纳偏差**。只有当归纳偏差和学习问题相匹配时,算法才能获得良好的效果。这不仅给机器学习和数据挖掘算法添加了应用的约束,给它们的实用性造成了相当大的限制。
正因如此,**学习的灵活性对通用人工智能至关重要**。通过使用学习问题的属性、算法属性、派生模式等不同类型的元数据,元学习可以对不同的学习算法进行学习,选择,更改或组合,以有效地解决给定的学习问题。其实遗传进化就是对基因编码的学习过程,这个过程在大脑中执行,这意味着我们每个人其实都是元学习的践行者。但是元学习到底能不能推广到机器学习之中,还是个未知数。
今天我和你分享了迁移学习的基本原理和常用方法。其要点如下:
- 迁移学习是运用已学习的知识来求解不同但相关领域问题的新的机器学习方法,目的是让机器“学会学习”;
- 迁移学习适用于跨领域和小数据的学习任务;
- 迁移学习的任务类型可以分为归纳迁移学习,直推式迁移学习和无监督迁移学习;
- 迁移学习的学习方法包括基于样本、基于特征、基于模型和基于关系。
2016年人工智能的大咖吴恩达表示“继深度学习之后迁移学习将引领下一波机器学习技术”。那么你如何看待迁移学习的前景呢
欢迎发表你的观点。
<img src="https://static001.geekbang.org/resource/image/a3/bb/a331dead77d7e3e1d9f1939ed38534bb.jpg" alt="">

View File

@@ -0,0 +1,68 @@
<audio id="audio" title="36 深度学习之外的人工智能 | 滴水藏海:知识图谱" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/62/83/62d8d011e502ceae30f81f399dc9df83.mp3"></audio>
近期,关于“深度学习是不是炼金术”的争议愈演愈烈。这些争议产生的原因在于**深度学习的黑箱特性**:虽然深度学习算法能够将图片中的猫咪辨识出来,却无法详细地解释为什么会做出这样的判断,其判定方法是否具备普适性也无从知晓。
因此,**人工智能的一个重要研究方向就是开发具有更好的可解释性,更容易被人理解的人工智能模型**。这样的模型将能够克服现有人工智能在概念认知和语言认知上的巨大障碍,它不但会辨认图片里有一只猫,还能指出它是依据猫特有的眼睛、耳朵和胡子这些特征做出的判断。
要构造可解释的人工智能,靠大数据去训练复杂模型肯定是不靠谱的,还是要回归到逻辑推演的路径上,而**知识图谱很可能成为可解释人工智能中的一项关键技术**。
**知识图谱knowledge graph是由大量的概念实体以及它们之间的关系共同构成的语义网络**。某种程度上,它类似于今天备受推崇的思维导图,但是具有更加规范的层次结构和更加强大的知识表示能力。
《福尔摩斯探案集》的作者亚瑟·柯南道尔有句名言:“一个逻辑学家,不需要亲眼见过或听过大西洋和尼亚加拉大瀑布,他从一滴水中就能推测出它们。”
知识图谱也是如此,它采集星罗棋布的碎片化信息和数据,然后按标准化的思考方式加以整理,再将各个看似不相关但背后有着共同联系的信息关联起来,挖掘出背后的规律。
为了构造知识的基本框架,知识图谱除了包含实体之外,一般还包括概念、属性、关系等一系列信息。人类的智能源于对知识内部表示的推理过程,这也是早期人工智能的大咖们热衷于符号主义的原因。因为人类的认知过程正是不断用概念、属性和关系去理解世界和解释世界的过程,而这些理解共同构成了人脑中高度组织化和结构化的知识图谱。
知识图谱中的概念、属性和关系可以用下面的一个例子来理解:当我们提到莱昂内尔·梅西的时候,即使不熟悉足球的人也很可能知道他是个足球运动员,这里的“足球运动员”就是概念;经常看球的人则会知道梅西来自阿根廷,效力在巴塞罗那俱乐部,这些都属于实体梅西的属性;更狂热的球迷还会知道内马尔是梅西的前队友,克里斯蒂亚诺·罗纳尔多是梅西的主要竞争对手,这就是实体梅西和其他实体之间的关系。
同数理逻辑一样,知识图谱也可以用于知识的推理。知识推理最广泛的应用就是知识库问答,也就是理解自然语言中的问题,并从知识库中寻找答案。但正所谓“生也有涯,知也无涯”,即使最庞大的百科全书也不可能将所有知识尽收囊中,这时就需要知识图谱大显身手了。**知识图谱可以根据已有实体的概念、属性和关系为新的概念自动生成属性;也可以明确不同新实体之间的关系**。
**具体说来,知识推理可以分为归纳和演绎两类,分别表示了“从特殊到一般”和“从一般到特殊”的过程**
所谓归纳induction是指从某类事物的大量实例出发推理出关于这类事物的一般性结论。如果在我认识的程序员朋友中小张很聪明老李很聪明大刘也很聪明那我就有理由相信所有的程序员都很聪明。这就是归纳的过程。可以看出**归纳推理能够从旧知识中获取新知识,是知识的增殖过程**。
将归纳的过程调转方向得到的就是演绎。演绎deduction指的是从一般性的前提出发推导出个别结论或者具体陈述的过程。既然我已经归纳出“所有的程序员都很聪明”的结论那么当遇到一个陌生的程序员小赵时即使对他一无所知我也可以通过演绎得出“小赵很聪明”这个符合一般性原则的具体陈述。
如果你对数理逻辑的内容还有印象,那就不难发现,经典的三段论实际上就是一类演绎推理。虽然演绎推理可以用来解决复杂的问题,但它只是将已有事实揭示出来,而不能够产生新知识。
**数理逻辑能够实现的推理建立在硬性约束的基础上,只能实现非黑即白的推理过程,相比之下,知识图谱则可以实现软性推理**
在归纳推理中,软性推理的一个应用是**路径排序算法**path ranking algorithm
在知识图谱中,实体是由二元关系相连接的,因而现实世界中的规则在知识图谱中就体现为不同实体之间的关系路径。路径排序算法正是以实体之间的路径为依据,在不完全的知识库中学习目标关系的分类器。
**路径排序算法的实现包括特征抽取、特征计算和分类器训练三个步骤**。特征抽取的任务是生成路径特征的集合并加以筛选,筛选出的特征被应用在训练数据集上,对每个训练样本都计算出其对应的特征取值,最后根据训练样本为每个目标关系训练出一个分类器。将分类器应用在知识图谱上,就可以自动挖掘并筛选出可靠的规则。
软性推理也可以应用在演绎过程中,得到的就是**马尔可夫逻辑网**和**概率软逻辑**。
马尔可夫逻辑网Markov logic network是将无向概率图模型和一阶谓词逻辑相结合得到的统计关系学习模型。这个网络是一阶逻辑公式的集合其中的每个逻辑规则都被分配一个实数作为权重系数以此实现规则的软化。规则的权重越大意味着它的约束力越强当权重为正无穷时软性规则就退化为硬性规则。
你可能知道小品里的包袱“1加1在什么情况下等于3在算错的情况下等于3”这就是典型的以对错来区分的硬性规则。但在由软性规则构造出的马尔可夫逻辑网中1加1等于3也是合法的但这个合法规则只存在于另外的一个平行世界之中这个世界和真实世界的差别很大其存在的可能性很小因而与它相关的规则成立的概率也会很低。
利用马尔可夫逻辑网对知识图谱建模后,就可以利用已有的规则和权重系数来推断未知事实成立的概率。如果规则和权重系数部分未知或者全部未知时,则可以自动学习规则和权重,这也就是**马尔可夫随机场的结构学习**。
如果对马尔可夫逻辑网加以扩展给网络中每个顶点所代表的原子事实赋予一个连续分布的真值得到的就是概率软逻辑probabilistic soft logic。概率软逻辑能够对不确定的事实和规则同时建模因而具有更强的不确定性处理能力。连续真值的引入也有助于问题的优化从而大大提升了推理效率。
归纳推理也好,演绎推理也罢,实现的都是符号推理,也就是在知识图谱中的实体和关系符号上直接进行推理。与符号推理对应的是**数值推理**。数值推理使用数值计算的方法来模拟推理过程,其典型的实现方案就是**基于分布式表示的推理**。
**分布式知识表示knowledge graph embedding是将包含实体和关系的知识图谱组件嵌入到连续的向量空间中以便在保持知识图谱内在结构的同时简化操作**
在分布式的表示中,首先要定义出实体和关系在向量空间中的表示形式,其次要定义打分函数来衡量每个实体-关系组成立的可能性,最后通过构造优化问题来学习实体和关系的低维向量表示。
在分布式知识表示的基础上,数值推理可以完成多类任务:利用打分函数计算所有备选答案的得分,可以实现知识图谱上的链接预测;根据某个实体元组的得分是否超过预先设定的阈值,可以对元组进行分类;计算不同实体的表示向量及其相似程度,则可以对实体进行解析......受篇幅所限,对具体推理任务的详细原理就不做介绍了。
今天我和你分享了知识图谱的基本原理与简单应用。其要点如下:
- 知识图谱是由大量的概念实体以及它们之间的关系构成的语义网络;
- 用知识图谱实现从特殊到一般的归纳推理,典型的方法是路径排序算法;
- 用知识图谱实现从一般到特殊的演绎推理,典型的方法是马尔可夫逻辑网和概率软逻辑;
- 用知识图谱实现数值推理,典型的方法是基于分布式知识表示的方法。
在数理逻辑中我曾提到,人工智能进行推理的一个关键问题是常识的缺失。那么知识图谱的出现是否能够给计算机注入常识呢?
欢迎发表你的观点。
<img src="https://static001.geekbang.org/resource/image/94/7a/9492443eef81027a5d1c7edb04fb6c7a.jpg" alt="">