基本参数估计技术 从之前的章节里我们知道参数估计就是在寻找能使模型的预测和真实数据相一致 的参数值。这种一致性的程度告诉我们关于模型适用性的一些信息(尽管不是全部信 息)。此外, 对这些参数值的解释往往会揭示潜在的内部过程。在本章中, 我们提供了 实现这些目标所需的基本工具。 3. 1 差异函数 尽管我们希望最大化模型预测和真实数据之间的相似程度, 但大多数参数估计程 序都通过最小化模型预测与真实数据之间的差异来重塑这一意图。 最小化的实现需要先构建一个连续的差异函数(Discrepancy Function) 来将模型预 测和真实数据之间的差异浓缩成一个单一的数值。我们通过逐步反复地调整参数, 来 实现该差异函数的最小化。差异函数也被称为目标函数(Objective Function)、代价函 数(Cost Function) 或是误差函数(Error Function), 我们将在下面考虑几种这样的 函数。 为了说明这一点, 图3. 1 展示了Carpenter 等人(2008) 报告的遗忘实验中的一类 条件下的数据。在该实验中, 被试学习了一组冷门知识(例如“灰狗有着在犬类中最 好的视力”) 共60 个, 在5 分钟、1 天、2 天、7 天、14 天和42 天后分别测试他们对 这些知识的记忆程度。每种不同时间隔中测试的都是不同的知识子集。该图还展示了 基于幂函数的遗忘模型的最佳拟合预测。在这里, 我们首次将第一章所提到的幂函数 应用于实际问题。正如前文所预期的, 幂函数也是表征遗忘的好方法。Carpenter 等人 (2008) 使用了以下形式的幂函数: p = a(bt +1) - c (3. 1) 其中p 是预测的回忆概率, t 是间隔测试的时间(在图3. 1 中以天为单位), a、b、 c 是函数的三个参数。 差异函数以单一的数值来表示模型的预测(即图3. 1 中的实线) 和真实数据(图 3. 1 中的圆点) 之间的差异。 38 图3. 1 Carpenter 等人(2008) 的实验1 (测试/ 研究条件) 的数据(圆点) 和幂函数的 最佳拟合预测(实线)。最佳拟合参数值分别为a = 0. 95, b = 0. 13 和c = 0. 58。详见正文。 3. 1. 1 均方根误差 对于连续数据来说, 一种流行且简单的差异函数是数据和预测值之间的方差均值 (的平方根, 或称为均方根误差, Root Mean Squared Deviation, RMSD)。这种测量方法 又被称为“最小二乘法(Least-Squares)”, 因为它使数据和预测值之间的距离的平方最 小化。 其公式为: RMSD = ΣJ j = 1(dj - pj )2 J , (3. 2) 其中, J 是求和的数据点的个数, 向量d 和p (其元素为dj 和pj ) 分别代表真实数 据和模型的预测值。对于图3. 1, RMSD 的值为0. 026。换言之, 基于幂函数的遗忘模 型的预测值平均偏离了实际数据2. 6 个百分点(的测量单位)。在图中, 预测值和实际 数据之间的差异由连接每个数据点的中心和预测实线的竖线表示。 需要注意的是, RMSD 中采用的“数据点” 为所有被试的平均值, 而非单个个体 的观测值。当我们拟合群体而非个体被试的平均值时, 往往需要注意这种情况(这就 39 是为什么我们在分母中使用J 而不是N, 而后者通常是观测次数的记号)①。 3. 1. 2 卡方检验法(χ2 ) 当数据是离散的时用χ2 或G2 度量差异更为合适(如Lamberts, 2005), 例如当反 应的数目是恒定的, 但每个反应可以属于几个不同的类别之一(例如, 一个项目是在 其正确的位置上还是在偏离了1 个、2 个或其他位置上被回忆起)。χ2 被定义为: χ2 = ΣJ j = 1 (Oj - N pj )2 N pj , (3. 3) 其中J 表示反应类别的数目, N 指观测到的反应总数, Qj 表示每个类别j 内的观测 到的反应个数。要注意的是, 所有Qj 的总和为N, 而且模型预测值pj 是概率而不是频 数, 就像人们通常从模型中预期得到的那样(因此, 需要将每个pj 与N 相乘来获得预 期频数)。 G2 测量也被称为对数似然比(Log-Likelihood Ratio), 被定义为: G2 = 2ΣJ j = 1 Oj log{Oj / (N pj )} , (3. 4) 使用与公式3. 3 相同的符号。在大多数情况下, χ2 和G2 可以互换使用, 尽管 Cressie 和Read (1989) 指出这两者之间存在一些细微的差别。 χ2和G2的一个可取的特性是, 它们可被视为统计检验的指标, 因为两者都有一个 df = J - np -1 的渐进χ2分布, 其中np 指需要被估计的自由参数的个数。当χ2 (或G2 ) 显著时, 这说明模型显著地偏离实际数据(即模型给出的拟合度显著较差)。评估模型 的绝对拟合度在心理学建模中是很重要的, 然而在大多数情况下, 人们对各种模型的 相对拟合度更感兴趣, 第10 章将会介绍这类模型比较的技术。 χ2差异函数有两点属性需要考虑。第一, 如果一个类别中观测的或预期的反应个数 少于5, 就应当特别注意了。在可能的情况下, 一个解决办法是将几个小的反应类别合 并成一个大的类别(如Van Zandt, 2000)。第二, 即使自由度保持不变, 增加样本量 (N) 也会增大χ2 的变化幅度。这是因为在计算χ2 的过程中, 即使是由噪音引起的微 小变化也会被系数N 所放大(想了解原因? 试着分别计算当N 为10、Oj 为9 时和当 N 为100、Oj为90 时, pj =0. 8 的χ2 值)。因此, 当χ2 差异被用作统计检验时, 它常常 对预测值和观测值之间的细微差异过于敏感。 还有一些其他的差异函数可能会引起心理学家的兴趣, 大家可以在Chechile (1998) 和Chechile (1999) 的论文中找到有用的介绍。 3. 2 模型与数据的拟合: 参数估计技术 我们该怎样最小化差异函数呢? 有许多具有竞争力的方法, 我们将在本书剩下的 40 ① 因为RMSD 计算的是预测值和真实数据之间的连续的差异值, 这就假定数据至少是在等距尺度上测量的。 使用顺序尺度的测量(如李克特式的评分量表) 可能会有问题, 因为差异值在量表上可能会有不同的涵义 (Schunn & Wallach, 2005)。例如在7 点量表中, 距离中点1 个单位的差异(如5 对4) 与靠近端点的同样1 个单 位的差异(如6 对7 或2 对1) 可能具有不同的心理意义。 章节中对它们进行讨论。 前两种方法分别称为最小二乘法和最大似然估计法( Maximum Likelihood Estimation), 本章和下一章会专门介绍它们。第三种方法涉及贝叶斯统计的应用, 将在 第6 章和第9 章中讨论。 虽然最小二乘法和最大似然估计法的原理十分相似, 但它们背后的动机和特性有 很大的不同。最小二乘法的优点在于它的概念简洁明了: 显然人们希望最大限度地减 小模型和数据之间的差异, 而最小二乘法正是这样做的。然而, 这种简洁性也有代价: 最小二乘法通常没有已知的统计属性。例如, 我们无法判断模型和数据的差异是反映 了数据的偶然波动, 还是什么更严重的问题。如图3. 1 中的RMSD 是“好” 还是“坏” 呢, 0. 026 的值是偶然波动的反映, 还是意味着模型不够好? 同样, 如果两个模型的最小二乘拟合不同, 我们通常也不能对二者进行统计比较。 一个模型可能拟合度比另一个高, 但我们还是无法确定这是偶然, 还是两个模型在逼 近数据时的真实差别。最后, 参数估计值通常没有明显的统计特性。我们不知道对估 计的参数有几成把握, 我们也不能预期重复实验有多大可能能够产生出相似的参数值。 与最小二乘法相比, 最大似然估计法深深扎根于统计学。尽管最大似然估计也是 最小化模型预测和数据间的差异, 但是这里用到的差异函数具有一些已知的(可证明 的) 统计学特性, 这些特性将在下一章讨论。在本章的剩余部分, 我们将重点讨论最 小二乘法, 但大部分讨论也将适用于最大似然法。我们将慢慢指出其中的区别。 3. 3 在线性回归模型背景下介绍最小二乘法 为了便于大家熟悉, 我们先在线性回归框架内讨论最小二乘法参数估计。具体来 说, 我们首先将模型定义为yi = b0 + b1 xi + ei 。它将每个观测yi表示为自变量的测量值xi 和两个待估参数(截距b0和斜率b1) 的函数, 再加上误差项ei 。 在R 语言中, 这些参数的估计非常简单: 语句lm (y ~ x) 将返回回归截距和斜 率, 其中y 和x 分别是包含结果值和预测值的向量。既然有了这个简单的解决方案, 为 什么我们要花一整章来研究模型与数据的拟合过程呢? 答案是, 与线性回归不同, 大 多数心理模型的参数不能直接计算出来, 因为它们的复杂性使得无法直接以代数方法 解决。相反, 这些参数必须迭代地估计。我们先直观地了解这个迭代过程, 然后再讨 论更多的技术细节。 3. 3. 1 建模的可视化 首先要注意的是, 参数估计技术是一个通用的工具, 可以用于任何建模问题。也 就是说, 无论你的模型的具体情况和你想拟合模型的数据如何, 本章所介绍的技术都 可以估计出最适合的参数值。 要了解为什么这些技术如此通用, 请看图3. 2。该图显示了包含两个参数的建模问 题的“误差曲面(Error Surface)”。现在, 我们可以忽略这些参数的含义, 忽略模型的 性质, 甚至忽略数据, 但不用担心, 我们很快就会补上这些空白。 41 图3. 2 由y = Xb + e 给出的线性回归模型的“误差曲面”。真实数据和预测值之间的差异 (以RMSD 为差异函数) 显示在垂直轴上, 作为两个参数(斜率b1 和截距b0 ) 的函数。观 测值数据取样自以0 为均值、以1 为标准差、相关参数ρ = 0. 8 的两个正态分布( 一个为x 的分布, 一个为y 的分布)。将误差曲面投射到二维基底空间上的等高线, 得到误差曲面 的最小值位于b1 = 0. 74 和b0 = - 0. 11 处。详见正文。 曲面上的每个点显示了模型预测与真实数据之间的差异程度(由RMSD 测量得到, 见第3. 1 节), 该差异是一个具有两个参数(斜率和截距) 的函数。这意味着要生成图 中的曲面, 我们需要列举大量可能的参数值组合, 并将每个组合的模型预测与真实数 据进行比较。这正是此图的生成方式。请注意, 曲面在它的中心有一个点, 其高度是 最低的。与该点相关的参数值是“ 最佳拟合参数估计值( Best-Fitting Parameter Estimates)”, 它最容易通过在二维基底空间上的等高线投影所形成的“靶心” 进行定 位。数据拟合模型的目的, 是找到那些最佳拟合的参数值。一旦获得了参数值, 就可 以检验模型的预测, 并可以确定模型对数据是否提供了足够的解释。需要注意的是, 并不能保证所有模型都能充分地拟合它所应用的数据。即使任何误差曲面都会有一个 最小值(实际或许不止一个), 即使最佳拟合参数总是可以被估计出来, 但预测值和真 实数据之间的最小差异可能仍然很大———因此它的拟合优度(Goodness-of-Fit) 也很差 ———这使得该模型没有多大用处。稍后我们将继续讨论如何评估模型拟合优度的问题, 但目前我们需要了解的是, 如何准确地获得参数的最佳拟合估计。 当然, 有一种可能是像我们在图3. 2 所做的那样, 列举参数值所有可能的组合 (当然参数值得有一定的间隔, 因为我们无法探索连续性的参数值的无限个组合)。通 过列举并追踪最小差异, 我们可以简单地得出最佳拟合参数的估计值。此过程被称为 “网格搜索(Grid-Search)”, 它在某些情况下是有用的。然而在大多数情况下, 这种方 法是不可行的: 我们图中的曲面是用大约1600 个差异值所绘制的, 如果我们需要检查 四个参数而不是两个参数, 在数值间隔保持不变的情况下, 这个数字会增加到250 万。 如果模型是蒙特卡罗(Monte Carlo) 模型, 则可能需要花费几秒钟甚至几分钟的时间 42 来生成单个点的预测, 这将是令人望而却步的。 幸运的是, 如果你将图3. 2 中的误差曲面想象成由木头或其他硬质材料雕刻而成, 那么有一种替代方法很容易就浮现出来。假设你把弹珠扔到这个曲面上的任意一点, 会发生什么? 是的! 在重力的驱动下, 弹珠很快就会停在这个曲面的最低点。在这个 特殊的例子中, 你把弹珠扔到哪一点并不重要, 从任意一点开始, 弹珠都会到达相同 的最低点。这种简单的物理类比体现在几乎所有的参数估计技术中: 首先确定参数的 “起始值” (可以随机取, 或更常见地, 通过有经验的猜测确定), 然后用参数估计技 术迭代地调整参数, 使差异函数的值一步一步地降低, 直到无法进一步改善为止①。此 时, 我们就得到了最佳拟合的估计值。这种机制意味着, 实际上图3. 2 所示的误差曲 面不会被完整地计算出来(或知道), 相反, 这种参数估计过程将在曲面上勾勒出一条 从起点到最低点的路径。误差曲面上的所有其他值都未经计算并且未知。 虽然这种参数估计的可视化过程在概念上非常简单, 但在沿着误差曲面向下的每 一步参数调整的选择背后, 都存在着相当大的技术复杂性。我们将在揭示生成图3. 2 的模型的细节之后, 再讨论这些技术问题。 3. 3. 2 回归参数估计 你可能已经猜到, 我们的误差曲面背后的模型是一个简单的线性回归, 包含标准 的双参数模型yi = b0 + b1xi + ei中的两个变量。在我们的例子中, 每个变量(x 和y) 的 数据通过随机抽取20 个来自均值μ =0、标准差σ =1 的正态分布的观测值而生成。两 个变量之间的相关系数ρ =0. 8, 通过lm 函数得到的误差曲面数据的最佳拟合回归线是 yi = -0. 11 +0. 74 xi 。 对于最佳拟合参数值, 模型预测 (即拟合值y^i) 和真实数据之间的 RMSD (见公式 3. 2) 为0. 46, 这表示为图3. 2 中曲面最低点的纵坐标的值。 我们如何将参数估计技术应用于更复杂的、理论上的模型? 答案就在以下两段R 代码中。 43 ① 滚动的弹珠并不是一个完美的类比, 因为它在误差曲面上连续地滚动, 而参数估计的步骤通常是离散的。 因此, 更准确的类比可能是在夜间被扔到敌后山头上执行秘密任务的伞兵, 她必须在不知道自己要去哪里的情况 下, 通过一系列向下移动到达谷底。 脚本3. 1 生成模拟数据和计算回归参数的两种方法的R 代码 脚本3. 1 只有短短几行, 但完成了三个主要的任务: 首先它生成数据, 然后它执 行回归分析, 最后它再一次进行回归, 但这次是通过调用一个函数, 利用前文所述的 实现逐步向下移动的程序来估计参数。 首先来看第6 行, 它用正态分布的随机样本填充规则矩阵(命名为data) 的第二 列。这些作为我们的自变量x 的值。下一行, 也就是第7 行, 做了几乎相同的事情。它 随机抽取正态分布的值, 此外它还确保这些值与第一个集合(即x) 的相关程度由变量 rho 决定。得到的样本被放入数据矩阵的第一列, 它们表示y 的值。重要的是要认识 到, 这两行代码是从两个已知均值(μ)、标准差(σ) 和相关(ρ) 的分布中抽取随机 样本, 因此我们期望样本统计量(即X - 、s 和r) 与这些总体参数值大致相等, 如果它 们完全相等, 那就太令人惊讶了。 如果我们对真实的回归分析感兴趣, 我们会替换掉这几行语句, 将自己的数据导 入程序。在这里, 我们生成模拟数据, 这样我们就可以检验我们的拟合模型对数据的 已知特征还原得有多好。 这样生成数据之后, 接下来我们在第10 行调用lm (函数名代表“线性模型 (linear model)”) 来执行标准的线性回归。 现在让我们来看看最有趣且最新颖的部分, 该部分从第14 行开始。该行将起始值 赋给两个参数, 即斜率(b1) 和截距(b0), 这两个参数按照这个顺序表示在一个向量 中。顺序由写代码的人决定, 是随意的, 但是一旦决定了, 就要保持一致。为了后续 处理方便, 我们在下一行使用names 语句将名称添加到参数向量中。 请注意, 斜率的起始值为-1, 正好与我们在第7 行生成数据语句所暗含的真实斜 率相反, 这些起始值与真实结果相去甚远。虽然我们选择这些起始值主要是为了说明 问题, 但它也反映了在现实中, 我们往往对真实的参数值一无所知。 程序的最后一行值得多加讨论, 因为从现在开始, 我们将多次使用optim 函数。简而 言之, 这个函数接受任意数据集和任意模型的任意起始值集, 然后返回最佳拟合参数的 估计值。为了让它展现出来, 我们需要告诉optim 起始值是什么、数据是什么、最后使用 什么模型。起始值很直接, 在第一个参数中传递给了optim。数据也比较简单, 在第三个 参数中传递(注意data1 =data 不是拼写错误, 我们将在下面解释这种奇怪赋值的必要 性)。传递有关模型的信息也很直接, 但需要更多的解释: 这是在第二个参数(即rmsd) 中完成的, rmsd 是另一个函数的函数名, optim 会反复调用rmsd 来计算数据和模型预测 之间的差异。在我们的例子中, 模型的“预测(Predictions)” 就是回归线上的数值。 脚本3. 2 显示了rmsd 函数以及其内部调用到的另一个函数getregpred。这段代码实 际上位于图3. 1 的代码之前, 是个程序文件。但我们现在才呈现, 是因为在解释了程 序的其余部分之后, 它们才更有意义。 44 脚本3. 2 生成模拟数据和计算回归参数的两种方法的R 代码 我们从第16 行开始, 该行通过赋值给变量rmsd 的方式来定义函数。函数的输入参 数命名为parms 和data1。 第一个输入参数由模型的当前参数值构成。这不是巧合, 因为(对于optim 函数来 说) 需要提供待估计的参数作为第一个参数。 第二个输入参数包含要拟合的数据。我们命名这个参数为data1 是为了将它与图 3. 1 中optim 的变量data 区分开来。参数的名称完全是随意的, 但是无论我们命名rmsd 的输入参数为什么, 在调用函数时(即在图3. 1 的最后一行) 就必须使用该命名。这 也解释了调用optim 时data1 = data 的写法。 rmsd 函数的主体仅由两行组成: 第一行获得给定参数的预测, 第二行计算数据与 预测之间的差异并返回结果(使用公式3. 2)。为了获得预测, 第17 行调用在第1 行到 第13 行定义的getregpred 函数。每当它被rmsd 函数调用时, 函数getregpred 就计算基 于当前给定的截距和斜率的回归线的拟合值(y^)。getregpred 函数的核心是第3 行语 句, 它接收参数b0和b1 (可以按名称索引, 因为我们在图3. 1 中命名了它们), 然后对 数据的第二列计算拟合值。函数getregpred 的其余部分是绘制数据和当前的预测(例 如, 对于最佳拟合回归线的当前估计), 然后等待按键继续(每一步的停顿和绘图是为 了教学目的, 除了介绍这个例子, 我们不会以这种方式来放慢进程)。这里没有迫切的 需要来讨论这些行, 尽管你可能希望查阅它们, 以获取有关R 绘图功能的信息细节 (R 的绘图功能相当强大, 本书中的大部分图都是由R 生成的)。 这样一来我们的程序介绍就完成了。图3. 3 提供了两张我们刚才讨论的程序所生 成的过程快照。左侧子图显示的是数据点和在参数估计开始阶段的回归线, 而右侧子 45 图显示的是相同的数据和在参数估计接近结束时的回归线。当我们运行程序时, 总共 生成了121 个图形, 每个图形都来自于一次optim 对rmsd 的调用。换言之, 它花了 121 步在误差曲面上从起始值降到最低值(因为数据是随机采样的, 所以如果你运行图 3. 1 和图3. 2, 你在误差曲面上下移的步骤数可能会不同)。 图3. 3 简单回归直线参数估计期间的两个快照。每个子图都显示了数据( 绘图符号) 和 由斜率和截距参数确定的当前预测( 实线)。左侧子图显示的是早期快照, 右侧子图显示 的是接近结束时的快照。 正如我们前面所指出的, 起始值与我们所知道的真实值有很大的不同。我们选择 了那些相当差的值, 以确保图3. 3 的早期快照看起来差异很大。如果我们选择了更好 的起始值, 那么优化的步骤会更少———但即使是这里的121 步, 也比我们在图3. 2 中为 了追踪整个曲面而不得不计算的大约1600 个预测值有了很大的进步。顺便说一句, 令 人欣慰的是, 我们的程序返回的b0和b1的最终估计值与一开始就以传统方式计算得出的 结果完全相同。 让我们简要回顾一下。我们首先形象地展示了在无法直接分析求解时(在认知建 模中的绝大多数情况) 参数得以估计的机制, 然后我们提供了一个在R 语言中进行参 数估计的实例。需要说明的是, 我们的示例以及图3. 1 和图3. 2 中的代码要强大得多。 虽然我们“只” 估计了简单回归直线的参数, 但上述框架可以扩展到更复杂的建模, 只需将图3. 2 中的第17 行替换为你喜欢的认知模型(可能会扩展出几十行甚至几百行 或者几千行的代码), 脚本就会为你估计该模型的参数。为了理解为什么会这样, 我们 需要讨论一下前面例子中的核心, optim 函数的技术问题。 3. 4 黑箱内部: 参数估计技术 参数估计技术究竟是如何找到误差曲面的最低点的? 有几种技术可供选择。我们 首先研究Nelder 和Mead (1965) 的单纯形法(Simplex)。此方法是optim 函数的默认 方法, 就是我们在前面的示例中所使用的方法。 3. 4. 1 单纯形法 单纯形法的工作原理 单纯形是由任意维度上的任意数量的点互相连接而成的几何图形。例如, 三角形 46 和棱锥体分别表示二维和三维的单纯形①。在Nelder 和Mead 的多胞形算法(Polytope Algorithm) 中, 单纯形的维度数对应于参数空间的维度数, 单纯形的点个数比参数个 数多一个。因此, 前面的例子涉及由三个点组成的二维单纯形, 即三角形。单纯形的 每个点对应于一个参数向量, 在前面的例子中, 参数向量包含斜率和截距。因此, 对 于前面的例子, 其单纯形是投影到图3. 2 中X - Y 空间上的三角形。一开始, 单纯形在 起始值给定的位置上创建, 并且单纯形的每个点都进行差异函数估计。接着, 单纯形 就通过两个可能的步骤之一在参数空间中移动(步骤的选择由一个算法决定, 在此不 做介绍): 首先, 单纯形可能会翻转, 这意味着差异最大的点(拟合最差的点) 会被翻 到另一侧, 这就翻了一个下坡跟头, 如果是在一个特别有益的方向翻跟头, 它可能还 会伴随着单纯形的扩张(从而覆盖更多的曲面); 其次, 单纯形可以通过将拟合最差的 点(或多个点) 移近中心来收缩。翻转和收缩会一直持续下去, 直到单纯形沿误差曲 面翻滚下来, 并在底部停止。 这个过程显示在图3. 4 中, 它展示了我们之前的误差曲面的二维投影, 阴影程度 代表差异函数的值(即本例中的RMSD)。该图包含参数估计过程中的三个假设点(位 置a、b 和c), 介绍了单纯形沿着曲面向下滚动时的行为。在每一点上, 单纯形都将通 过不同的翻转(a 和c) 或收缩(b) 来接近最低值(显而易见的“靶心” 处)。这个 过程将在单纯形到达d 点时结束, 在那里它将继续收缩, 直到它塌缩到一个点②上, 这 个点的位置对应于最佳拟合参数估计。这个点就是误差曲面上的最低值。 图3. 4 图3. 2 中误差曲面的二维投影。RMSD 的值用阴影的明暗程度表示, 较低的 RMSD 值对应较暗的灰度。三个大的单纯形展示了三种可能的沿误差曲面向下的移动。 (a) 翻转伴随着扩张。(b) 沿着两个维度收缩。(c) 无扩张翻转。注意, 这些点的位置 是随意确定的, 这只是为了说明问题。点d 处的小单纯形表示返回最佳拟合参数时的最终 状态。详见正文。 ①② 为了满足你的好奇心, 四维单纯形被称为正五胞体, 五维单纯形是正六胞体。 实际上, 单纯形永远不会是一个点, 但它的体积可以非常小。直径的大小由收敛容差决定, 这个值可以 在optim 的另一个参数中指定。R 语言的帮助文档提供了详细的说明。Lagarias et al. (1998) 对单纯形的收敛特性 进行了严格的检验。 单纯形法可以到达误差曲面的最低值, 而无需知道参数待估的函数, 也无需顾虑 所涉及参数的数量。该算法所需要的只是每一步的参数值和差异函数的一个计算值。 因此, 单纯形法实际上实现了我们上文夜间伞兵的类比过程。 单纯形法的局限 虽然单纯形法①在很多情况下都能很好地工作, 但是它也存在局限性。 第一, 尽管单纯形以离散的步骤滚动, 但它仍然要求所有的参数都是连续的。因 此, 单纯形法不能估计那些被限制为整数的参数(例如, 人们在回忆一个项目之前要 复述它的次数)。在这些情况下, 可以将整数的网格搜索(Grid Search) 与余数的单纯 形法估计结合起来, 换句话说, 可以对整数参数的每个值进行单纯形法估计。另一种 方法需要重新参数化模型, 使一个相对于单纯形法来说是连续的参数在模型中具有离 散的功能(例如, 复述次数的值为1. 3, 可以用来表示7 轮回忆中有1 次复述和3 轮回 忆中有2 次复述的平均预测值)。 第二, 大多数模型参数默认被约束在一定的范围内。例如, 降低记忆痕迹强度的 遗忘率大于1 是没有意义的(通常遗忘就是遗忘, 而不是痕迹加强), 因此必须使单纯 形法意识到这个约束。一种实现方法是, 每当约束被违反时, 就给模型的预测(不管 它们实际是什么值) 分配一个大的差异值。理想的情况是, 它将作为一个“屏障函数 (Barrier Function)” 来执行, 当预测接近(甚至超过) 参数值的边界时, 惩罚就会持 续快速地增长, 以惩罚特别离谱的值。虽然这种技术可以成功地将参数估计保持在界 限内, 但是它可能会导致单纯形过早地塌缩到子空间, 从而返回不恰当的参数估计 (Rowan, 1990)。另一种方法是, 我们可以使用optim 以外的优化函数(Optimization Function) 来估计参数, 并直接将边界传递给它———我们将在第4 章讨论其中的一些备 选方案。 第三, 虽然原则上对于可以估计的参数数量没有限制, 但是当参数数量变多时, 单纯形法的效率相当低。具体而言, 如果有5 个以上的参数, 就很难取得高效的估计 (Box, 1966)。即使参数只有2 个, 也可能出现单纯形法无法收敛到最小值的情况, 即 便是在表现良好的函数(凸函数上) (Lagarias et al. , 1998)。 第四, 只有当差异函数与模型参数呈确定性关系时, 单纯形法才能很好地工作。 也就是说, 如果每次评估模型时, 相同的参数值产生不同的预测, 那么单纯形法就会 遇到困难。你可能会奇怪这怎么可能发生, 但事实上这很常见: 任何包含随机成分的 模型(比如前一章的随机游走模型) 在相同的参数值下必然会产生变化的预测。这种 随机变异可以被认为是反映了被试内部试次间的“噪声”, 或者是反映了被试之间的个 体差异, 或者是这两者兼有。模型预测中随机变异的存在不是一件小事, 因为它将误 差曲面变成随机的“气泡黏液(Bubbling Goo)”, 其中凹点和峰值在瞬间出现并消失。 几乎不需要什么思考就能意识到, 这将是单纯形法的重大挑战。可以通过在每次调用 ① 为简洁起见, 从这里开始, 我们将通过大写它的名称(Simplex/ 单纯形法) 来指代其算法, 而仍以小写 (simplex/ 单纯形) 来指代其几何图形。