认知的概率模型(ESSLLI教程) - 第六部分译文 - 层次模型

6. 层次模型

人类的知识被抽象成不同的层次,例如,最常见的或基本类别分类(如狗,汽车)可以被看作是不同个体的抽象,或更经常在不同的子类别之间(如狮子狗,腊肠犬,拉布拉多,等等);多个底层类别反过来又可被归类到上层的类别:如狗、猫、马都是动物,汽车、卡车、公交车都是车辆。认知发展的一些最深层次的问题是:抽象知识会如何影响具体知识的学习?抽象知识该如何学习?在本节中,我们将看到这些层次的知识如何被建模为分层的生成模型:不同层次的生成模型具有不确定性,其中较低层次依赖于较高层次的选择。

6.1共享原型学习:基层的抽象

分层模型能够使我们在复合相关概念、过程或系统的观测上捕获潜在的共享结构—过滤到我们不感兴趣或不相关的差别,在不同的子概念中抽象出共同的元素。也许这类问题最熟悉的例子莫过于类别分类了。想想一个孩子学习一个基层的种类,如狗或汽车,这些种类都有一个原型或一些产品特性,我们的问题很简单,就是如何获取原型。

现实世界的类别各不相同,因此,这项任务极具挑战:像狗或汽车实际上跨越了许多不同的子类别,例如狮子狗、腊肠犬、拉布拉多等等或轿车、跑车、敞篷车、旅行车等等。

小孩子观察到这些子类或下属类别的一些例子:几条贵宾犬、一条腊肠犬、三条拉布拉多犬等,她必须能从这些数据推理出,狗总体上是什么样的,以及每个不同类的狗是怎样的。原型的知识包括理解什么是典型的狗,以及什么是不典型的狗但仍然是狗,这需要了解不同品种的狗的共同特点以及系统上的不同。

为简化这种场景请看以下的生成过程。

我们将从几种不同的包装袋中取出大理石,一共有五种颜色的大理石。每个袋子都有一定的“原型”颜色混合。这一生成过程可以用以下Church程序例子使用狄利克雷分布(Dirichlet分布是Beta分布的高维模拟)来展示。

(define colors '(black blue green orange red))

(define bag->prototype

(mem (lambda (bag) (dirichlet '(1 1 1 1 1)))))

(define (draw-marbles bag num-draws)

(repeat num-draws

(lambda () (multinomial colors (bag->prototype bag)))))

(list (draw-marbles 'bag 20)

(draw-marbles 'bag 20)

(draw-marbles 'bag 20)

(draw-marbles 'bag 20))

请注意我们使用了本教程的第一部分介绍过的mem操作符, mem在分层模型中特别有用因为它能使我们在整个运行过程中将任意随机提取与分类组织起来,本例中它使我们能让每个袋子与特定的大理石颜色组合相关联,这些袋子的组合一次随机生成后就一直保持不变。运行上述代码多次,每次运行生成满足大理石颜色分布特征的大理石袋子,然后进行四次采样,每次采集20块大理石样本。你可以直观地看到一个样本就足以了解袋子是怎么样的,特别是四次采样的主观颜色分布之间很相似,但与此相反,你可以看到每次代码运行的巨大变化-- 从不同的袋中采样。

现在让我们增加一些难度:我们会生成三种不同的包装袋,并尝试通过观测采样学习它们各自的颜色原型。我们将每个袋子学习结果表述为后验预测分布:使用表达式(draw-marbles‘bag 1)假想表示从袋中取一次;我们也会从一个全新的没有任何观测数据的包装袋的后验预测分布中采样。

(define colors '(black blue green orange red))

(define samples

(mh-query

200 100

(define bag->prototype

(mem

(lambda (bag) (dirichlet '(1 1 1 1 1)))))

(define (draw-marbles bag num-draws)

(repeat num-draws

(lambda () (multinomial colors (bag->prototype bag)))))

(list (draw-marbles 'bag-1 1) (draw-marbles 'bag-2 1) (draw-marbles 'bag-3 1) (draw-marbles 'bag-n 1))

(and

(equal? (draw-marbles 'bag-1 6) '(blue blue black blue blue blue))

(equal? (draw-marbles 'bag-2 6) '(blue green blue blue blue red))

(equal? (draw-marbles 'bag-3 6) '(blue blue blue blue blue orange))

)))

(hist (fold append '() (map first samples)) "bag one posterior predictive")

(hist (fold append '() (map second samples)) "bag two posterior predictive")

(hist (fold append '() (map third samples)) "bag three posterior predictive")

(hist (fold append '() (map fourth samples)) "bag n posterior predictive")

该生成模型描述了每袋的混合原型,但它并没有试图学习一个更高级别的共同原型。这就像只仅仅学习不同子属类别的原型,狮子狗、腊肠犬、拉布拉多,而没有学习更高阶的原型比如狗一样—或者是说不同的较低级别的类或包装袋之间共享特征或功能的学习。

具体来说推理表明每个包装袋里主要是蓝色的,但剩余的其它颜色的不确定性可能还比较多,包装袋之间没有任何共享信息对没有观测数据的bag-n有意义,因为它没有在观测过的包装袋之间发现共享结构。

现在让我们介绍一个抽象层次:一个全局原型,为每个袋子事先准备特定的混合原型。

(define colors '(black blue green orange red))

(define samples

(mh-query

200 100

(define prototype (map (lambda (x) (* 5 x)) (dirichlet '(1 1 1 1 1))))

(define bag->prototype

(mem

(lambda (bag) (dirichlet prototype))))

(define (draw-marbles bag num-draws)

(repeat num-draws

(lambda () (multinomial colors (bag->prototype bag)))))

(list (draw-marbles 'bag-1 1) (draw-marbles 'bag-2 1) (draw-marbles 'bag-3 1) (draw-marbles 'bag-n 1))

(and

(equal? (draw-marbles 'bag-1 6) '(blue blue black blue blue blue))

(equal? (draw-marbles 'bag-2 6) '(blue green blue blue blue red))

(equal? (draw-marbles 'bag-3 6) '(blue blue blue blue blue orange))

)))

(hist (fold append '() (map first samples)) "bag one posterior predictive")

(hist (fold append '() (map second samples)) "bag two posterior predictive")

(hist (fold append '() (map third samples)) "bag three posterior predictive")

(hist (fold append '() (map fourth samples)) "bag n posterior predictive")

在前面例子的推理相比,这种额外层次的抽象使得学习更快了:在相同的观测样本基础上对每个袋子怎么样的更有信心了,这是因为所有观察到的样品都显示了一种共同的原型结构,蓝色占据了大部分的权重,而余下权重由其余颜色均匀分配。统计学家有时将分层模型的这种推理现象称为“共享统计强度“:就好像每个袋的样品观察同时还提供了有关其它袋子的较弱的间接样本。在机器学习和认知科学中的这种现象通常被称为学习中的学习或学习传递。直觉上知道关于袋子的一般知识能让学习者从一个袋子获得的知识转移到其它袋子。这个例子类似于看到不同子类的狗从而学习到与特定子类狗种独立的更抽象的基本狗的原型的特征。

学习更高抽象层次的共享结构还能支持从没有任何观察数据的新袋子提取的推理:一个假设的新包能产生任何颜色,但比起其它颜色来蓝色大理石的可能性更大。类似地,我们可以想像一种假设的、以前没有看到过的新的狗品种,有着我们熟悉的狗的基本特征,但在其它独特的方面不同。

如果我们在上述程序中将袋3的观测样本改成只有两个,一个蓝色和一个橙色的,将(equal? (draw-marbles‘bag-3 6) ’(blue blue blue blue blue blue))替换为:(equal? (draw-marbles 'bag-3 2) '(blue orange)),就可以看到“共享统计强度”和“学习中的学习”的特别惊人的例子。

在没有共同的高阶原型结构情况下,从观察数据推理出bag-3的蓝色和橙色是等几率的,然而,当我们推理出一个共同的高阶原型时,那么我们的推理bag-3看起来很像我们之前有六个观察数据时(5个蓝色、1个橙色)的结果,因为所学的高阶原型告诉我们在任何情况下蓝色最有可能不管其它低概率的颜色可能被观察到(这里是橙色)。

6.2超假设的学习:超层的抽象

分层模型使我们能够捕捉到更抽象和更重要的“学会学习”现象,有时也被称为超假设的学习。想想看孩子如何学习如何活的生物(我们采用心理学家利兹希普利和罗伯戈德斯通的例子)。

我们了解特定种类的动物如狗、猫、马和更奇特的生物像大象、蚂蚁、蜘蛛、麻雀、老鹰、海豚、金鱼、蛇、蠕虫、蜈蚣等等各种例子。这些例子告诉我们每一个种类是这样的:狗会叫,有四条腿,一条尾巴;猫会喵,有四条腿和一条尾巴;马会嘶鸣,有四条腿和一条尾巴;蚂蚁不发声音,有六条腿,没有尾巴;知更鸟和老鹰都有两条腿,翅膀和尾巴,知更鸟会唱而老鹰会嚎;海豚有鳍和尾巴,没有腿,金鱼也一样;蜈蚣有一百条腿,没有尾巴,不能发出声音;等等。这些概括或原型都可以通过看到的这些物种的几个例子而推理出来。

但是我们还可了解生物物种一般是什么样的,看起来某些动物属性是某一特定种群的特征:该种类的每个个体都有这个属性,或者没有一个有。特征属性包含腿的条数、有没有尾巴、发什么声音。如果一个物种某个个体有四条腿,或六或八或二或一百条腿,那么该物种的所有个体都有相同的脚条数(除非受伤,出生缺陷或其它灾难),而其它属性没有这种特性。再看外部颜色,有些种类的动物是一样的,如海豚、大象、麻雀,而其它种类则颜色不同:狗、猫、金鱼、蛇。还有一些中间的,有一个或几个典型颜色模式:马、蚂蚁、鹰、蠕虫。

这种关于动物种类的抽象知识在我们学习新物种时非常有用。仅仅一个新物种的案例也许足以推理出该种类的原型或特性:第一次看到蜘蛛,发现它有八条腿、没有尾巴、不出声;认为其它蜘蛛也有八条腿、没有尾巴、不作任何声音是个不错的选择;然而蜘蛛的特定颜色不必一定要概括。虽然一个基本统计类可能会告诉你只有观察到更多的实例我们才可以自信地学习到什么特性是那个种类的常态还是变种,但是儿童认知发展的直观性和经验性看来这种“只有一次的学习”更是普遍规范。这怎么工作的?分层模型告诉我们如何规范抽象知识满足“只有一次的学习”的要求,并获取抽象的知识本身。

我们可通过修改大理石袋子案例来作为研究这种现象的一个简单版本。层次模型的结构可以如下来阐明。我们现在有两个更高级别的参数:phi描述跨越不同袋子大理石颜色预期的比例,而alpha,一个实数,描述了所学到先验的强度--任何新袋符合原型phi分布的期望有多强烈。例如,假设我们观察到bag-1都是蓝色大理石,bag-2都是绿色,bag-3都红色,等等,这并没有告诉我们期望未来的袋子的颜色,但它确实表明袋子很常规,所有袋只有一种颜色的大理石组成。

(define colors '(black blue green orange red))

(define samples

(mh-query

200 100

(define phi (dirichlet '(1 1 1 1 1)))

(define alpha (gamma 2 2))

(define prototype (map (lambda (w) (* alpha w)) phi))

(define bag->prototype

(mem

(lambda (bag) (dirichlet prototype))))

(define (draw-marbles bag num-draws)

(repeat num-draws

(lambda () (multinomial colors (bag->prototype bag)))))

(list (draw-marbles 'bag-1 1) (draw-marbles 'bag-2 1) (draw-marbles 'bag-3 1) (draw-marbles 'bag-4 1) (draw-marbles 'bag-n 1) (list (log alpha)))

(and

(equal? (draw-marbles 'bag-1 6) '(blue blue blue blue blue blue))

(equal? (draw-marbles 'bag-2 6) '(green green green green green green))

(equal? (draw-marbles 'bag-3 6) '(red red red red red red))

(equal? (draw-marbles 'bag-4 1) '(orange))

)))

(hist (fold append '() (map first samples)) "bag one posterior predictive")

(hist (fold append '() (map second samples)) "bag two posterior predictive")

(hist (fold append '() (map third samples)) "bag three posterior predictive")

(hist (fold append '() (map fourth samples)) "bag four posterior predictive")

(hist (fold append '() (map fifth samples)) "bag n prior predictive")

(truehist (fold append '() (map sixth samples)) "consistency across bags (log alpha)")

这种模型使用正规参数的伽玛分布作为先验分布。 伽玛分布是一个有用的非负数的连续分布,这里有一些不同的参数值的伽玛分布例子:

6-1

我们已经查询了第四个袋子的颜色组合,它只有一块橙色大理石的观察记录。结果会看到一个强烈的橙色的后验预测分布,远远强于一个橙色观察所能得出的,它反映了超假设学习得出的袋子颜色均匀分布的预测。

要明白这是真正的“只有一次的学习”,与没有任何观察的bag-n的“先验”预测分布不一样。因为没有从整体的层次模型中学习到关于特定颜色的知识,你会看到bag-n的预测弱到只有扁平的分布,而相反的,我们已经学到每袋大理石的颜色一致的抽象特性知识,这样从一个新袋子的一次观察就足以作出比一次观察更强烈的预测。

上面的代码用直方图显示了推理出的alpha(实际是它的log),表示了学习到的分布phi作为先验知识会如何强地去约束每个袋子—每个个体的袋子预计和全体的原型有多一致。通常会看到推断出的alpha值明显小于1(log小于0),这大约意味着phi表示的原型对一个新袋的预测所发挥的影响要比一个观察值小,因此,一个新袋子的首次观察很大程度上决定了这个包是什么样子的推理。

现在,将在上面的代码示例的条件语句改成如下样子:

(and

(equal? (draw-marbles 'bag-1 6) '(blue red green black red blue))

(equal? (draw-marbles 'bag-2 6) '(green red black black blue green))

(equal? (draw-marbles 'bag-3 6) '(red green blue blue black green))

(equal? (draw-marbles 'bag-4 1) '(orange))

)))

直观上袋一、袋二、袋三会有一个非常不同的超假设:袋内大理石颜色不再是均匀的而是变化的,它在袋内变化的幅度和整体的变化幅度一致。

我们可以通过这个推理看到两个耦合效应,首先,推理出的alpha值现在明显大于1(log大于0),表明整体分布phi现在对个体的袋子看起来有强有力的约束力;其次,对于只观察过一次橙色大理石的新bag-4,现在对那个袋子颜色分布已不再非常有影响力,phi的分布比一次观测值的影响力要强得多。

6.2.1 lambda抽象与层次抽象

(。。。)

6.2.2 抽象的好处

(本节正在“改写“)

现在让我们调查对比一下有关不同层次抽象的学习速度。假设我们有一批袋子都是一样的,颜色混合比例黑蓝绿为5:4:3,没有橙色和红色。但学习者不知道这一点,她只观察了每个袋子的两个球,她能怎样了解每个袋以及整体的情况?

(define vector-sum (lambda (a b)

(list->vector (map (lambda (x y) (+ x y)) (vector->list a) (vector->list b)))))

(define num-samples 200)

(define zero-vec (list->vector '(0 0 0 0 0)))

(define colors '(black blue green orange red))

(define samples

(mh-query

num-samples 100

(define phi (dirichlet '(1 1 1 1 1)))

(define alpha (gamma 2 2))

(define prototype (map (lambda (w) (* alpha w)) phi))

(define bag->prototype

(mem

(lambda (bag) (dirichlet prototype))))

(define (draw-marbles bag num-draws)

(repeat num-draws

(lambda () (multinomial colors (bag->prototype bag)))))

(list (list->vector (bag->prototype 'bag-1))

(list->vector (bag->prototype 'bag-2))

(list->vector (bag->prototype 'bag-3))

(list (log alpha))

(list->vector prototype))

(and

(equal? (draw-marbles 'bag-1 2) '(blue black))

(equal? (draw-marbles 'bag-2 2) '(green blue))

(equal? (draw-marbles 'bag-3 2) '(black black))

(equal? (draw-marbles 'bag-4 2) '(black blue))

(equal? (draw-marbles 'bag-5 2) '(blue green))

(equal? (draw-marbles 'bag-6 2) '(black green))

)))

(define bag-1-prototype (vector->list (fold vector-sum zero-vec (map first samples))))

(define bag-2-prototype (vector->list (fold vector-sum zero-vec (map second samples))))

(define bag-3-prototype (vector->list (fold vector-sum zero-vec (map third samples))))

(define overall-prototype (vector->list (fold vector-sum zero-vec (map fifth samples))))

(hist (repeat 1000 (lambda () (multinomial colors bag-1-prototype))) "bag one prototype")

(hist (repeat 1000 (lambda () (multinomial colors bag-2-prototype))) "bag two prototype")

(hist (repeat 1000 (lambda () (multinomial colors bag-3-prototype))) "bag three prototype")

(hist (repeat 1000 (lambda () (multinomial colors overall-prototype))) "overall prototype")

(truehist (fold append '() (map fourth samples)) "log alpha")

可以看到学习到的整体原型相当接近于的真实世界的分布(黑蓝绿比例为5:4:3),反映了所有的袋子的颜色分布。这也是每个袋子应该是的原型,然而学习者还可能推理出与此差别很大的原型,因为她主要是基于两个采样来看该特定的袋子。

再看一下学习曲线,以相同的整体比例再增加更多的袋子且只观察两块大理石或者每个袋子增加更多的观察数量。当有同一个潜在分布的许多袋子被观察同时每个观察都是稀疏的,你会发现,虽然某个特定的原型仍然有相当的不确定性或与真正的预测分布差距很大,但是整体原型的学习还是相当成功。

再回到我们熟悉的分类案例,例如一个孩子可能对“狗”的原型相当有信心,而对任何特定狗的品种的原型不太了解—抽象层次的学习要比具体层次的学习快得多,还可以利用抽象的知识去约束具体品种的预期。来看大理石这个例子,尝试以下框中语句替换条件—一个基层原型抽象案例,但每个袋子为稀疏采样的版本。

(and

(equal? (draw-marbles 'bag-1 2) '(blue black))

(equal? (draw-marbles 'bag-2 2) '(blue green))

(equal? (draw-marbles 'bag-3 2) '(blue orange))

(equal? (draw-marbles 'bag-4 2) '(blue red))

)))

这里学到的整体原型结果表明所有颜色中蓝色有相当明显的趋势,但个体袋子推理出的原型分布又有相当明显的变化,这反映了两次随机抽取观察到的特定颜色。

在一个超类的超假设例子中你可以看到同样的学习曲线。尝试使用下面的条件数据:

(and

(equal? (draw-marbles 'bag-1 1) '(blue))

(equal? (draw-marbles 'bag-2 2) '(green green))

(equal? (draw-marbles 'bag-3 2) '(orange orange))

(equal? (draw-marbles 'bag-4 2) '(red red))

(equal? (draw-marbles 'bag-5 2) '(black black))

)))

本例学习者可以推理出每个袋子颜色是一致的,会将这些抽象知识应用来约束一个只有一次观察的袋子,也就是说,bag-1学到的原型是强的蓝色,即使我们仅仅从那个袋子里取了一次蓝色。

抽象约束只是由有两次观察数据的几袋推理出来的:每个袋子自身提供的证据只能微弱地表明袋子是一致的,但跨越袋子的超假设却是确凿证据的。

在机器学习中人们常常谈起关于维度的诅咒。维数诅咒是指随着一个模型参数的增加(即增加了该模型的维度),假设空间的大小会成指数级增长。这种假设空间大小的增加会引发两个相关的问题,第一是假说空间维度的增加会使所需要的用来估计模型参数(即样品的复杂性)的数据量迅速增加的;第二是搜索假设空间所需的计算量也迅速增加。因此,添加参数增加模型复杂度可能会导致严重的推理问题。

另一方面,我们已经看到,在贝叶斯模型中增加额外级别的结构可以使我们有可能用较少的观察量却学到更多,这是因为抽象层次的学习可以比在特定具体层次的学习更快。因为这个办法改善了维数诅咒,我们将这些效果称为抽象的祝福。

一般来说,抽象的祝福显得很奇怪,因为直觉告诉我们增加更多的层次就增加了模型的复杂性,而更复杂的模型应该更难学习,而不是更容易。另一方面,长期以来认知科学的观念是在假设空间上增加约束能使学习更容易。例如,通用语法的支持者们为了可学习性长期坚持一个高约束性的语言系统,他们的理论常常有一个明确分层风格。如果能为假设引入允许不同观察之间知识转换的软的、概率性的约束,分层的贝叶斯网就是一种办法。

6.3 案例:形状偏差

6.4 案例:因果推理

6.5 案例:X-Bar理论

语言生成的中心问题之一是孩子们如何在嘈杂的、不完整的、稀疏的数据中方便和快捷地获取语言知识。第一个建议是将可能的自然语言空间变化参数化,这样使用有高阶约束的结构可以大大降低学习问题的复杂性。每一个约束都是对一小组值运用一个参数的结果。儿童只需要观察到足够的数据来设定这些参数,这样具体结构的建立细节就会被推广至他们语言构建的其它方面。

一个例子来自X- bar理论的领域,X-bar理论为短语结构提供了一个层次模型。所有短语词组都建立自相同的基本模板:

6-2

其中X是一个词汇的种类,如N(名词),V(动词)等等。提议是所有的短语具有相同的基本“内部的形状”,它们有一个头部--X,还有一个定语(Spec)和一个补语(Comp),补语比定语与头部连接得更紧密。作为特定类别的头部的定语或补语集通常被认为是由通用的语法指定的(但也可以随参数而变化)。

语言变化的一个重要表现形式是头部与补语或定语出现的顺序。

在一种语言中往往有一个主导的语序,但对部分类别往往有例外,例如,英语是种主要以头开始的语言,在动词短语中,比如一个动词的直接宾语(补语名词短语)在头部的右边,但是,也有诸如(简单)形容词和名词秩序的例外情况:形容词出现在名词前面,而不是在后面(虽然很多的复杂补语类型,如关系从句出现名词的后面)。

事实上,语言在头部顺序上保持一致可能对学习者有很大的好处,学习者在遇到一种顺序一致语言的一些短语类型和实例后就可以学习到语言的主导顺序,然后将这方面的知识应用到新的短语类型上。实际上,许多语言有例外情况说明了一种灵活方式推断头部的需要。

下面Church程序显示了一个高度简化的X-Bar结构的模型:

(define samples

(mh-query

100 100

(define categories '(D N T V A Adv))

(define pseudocounts (beta 1 1))

(define head->direction-bias

(mem (lambda (head) (first (dirichlet pseudocounts)))))

(define head->comp

(lambda (head)

(case head

(('D) 'N)

(('T) 'V)

(('N) 'A)

(('V) 'Adv)

(('A) 'none)

(('Adv) 'none)

(else 'error))))

(define generate-phrase

(lambda (head)

(if (equal? (head->comp head) 'none)

(list head)

(if (flip (head->direction-bias head))

(list (head->comp head) head)

(list head (head->comp head))))))

(define (generate-random-phrase) (generate-phrase (uniform-draw categories)))

(define observations (repeat (length data) generate-random-phrase))

(generate-phrase 'N)

(equal? observations data)

)

)

(hist samples "Xbar")

首先尝试增加观察到的(D N)数量,会发生什么?再尝试改变数据为'((D N)(T V)(V Adv))。如果以(V Adv)为条件会怎样?(Adv V)呢?

本例我们看到的是一个用于捕获“原则和参数”版本的简单概率模型(在此情况下,原则是X-Bar模式和参数是短语的头部顺序)。

尽管有例外的句子或短语类型,但还是能得出概率性的、系统性的推理,更重要的是,由于抽象的好处,语言的整体头部顺序可以从非常小的数据中推理出来—在学习者对个别短语类型的顺序非常有信心之间。

转载于:https://www.cnblogs.com/limitplus/archive/2011/09/04/2166718.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值