10. SVD-Assist ......................................................................................................................199
10.1 Concepts....................................................................................................................199
10.1.1 Super Parameters...............................................................................................199
10.1.2 Implementation Overview.................................................................................200
10.1.3 How Many Super Parameters? ..........................................................................202
10.1.4 Strengths and Weaknesses ................................................................................202
10.2 SVDAPREP ..............................................................................................................203
10.2.1 Preparing a PEST Input Dataset........................................................................203
10.2.2 Running SVDAPREP........................................................................................204
10.2.3 What SVDAPREP Does....................................................................................206
10.2.4 The New Model Batch File ...............................................................................207
10.3 The PARCALC and PICALC Utilities.....................................................................208
10.3.1 PARCALC ........................................................................................................208
10.3.2 PICALC.............................................................................................................208
10.4 The Super Parameter PEST Control File ..................................................................209 10.4.1 General ..............................................................................................................209
10.4.2 An Important Note on Super Parameter Definition ..........................................209
10.4.3 The “SVD Assist” Section ................................................................................210
10.5 SVD-Assisted Inversion............................................................................................217
10.5.1 What PEST Does...............................................................................................217
10.5.2 Best Parameter Estimates..................................................................................218
10.5.3 Parallelised SVD-Assisted Inversion ................................................................218
10.6 Some Final Points .....................................................................................................219
10.6.1 JCO2JCO and other Utility Programs...............................................................219
10.6.2 Efficiency ..........................................................................................................219
10.6.3 Null Space Monte Carlo....................................................................................220
10. SVD-Assist
10.1概念
10.1.1超级参数
通过使用PEST的“奇异值辅助”方法,可以大大减少高参数化反演的运行时负担,从而使一些难以处理的反演问题在数值上易于处理。
它通过定义一组所谓的“超级参数”来实现这一点,并估计这些参数而不是本地模型参数。
这些超参数通过包含所有模型参数的加权雅可比矩阵的奇异值分解来定义。
在数学上,超参数是原始参数域在一组跨越校准解空间的正交轴上的标量投影。
通过估计这些标量投影的值,然后将它们中的每一个乘以沿相应轴方向的单位向量,得到反问题的解;然后将这些向量相加形成估计的参数集。
理想情况下,实现现场测量与相应模型输出之间良好拟合所需的超参数数量等于校准解空间的尺寸。这可能比模型实际使用的参数数量要小得多。然而,它们是根据校准数据集的信息内容进行最佳定义的。因此,它们构成了该数据信息内容的最佳容器。此外,它们的数量是保存该信息所需的最小数量。详见Doherty(2015)第6.2.6节。
一旦定义了一组超级参数,PEST只需在每次迭代中执行与超级参数数量相同的模型运行次数。这是因为PEST计算的是相对于这些超参数的有限差分导数,而不是相对于本地模型参数的导数。这就是为什么使用SVDassist可以大大减少高度参数化反演的数值负担的原因。同时,在后台,PEST将超参数的值转换为本机参数的值。关于超参数,所有用户需要知道的是,这些是PEST采用的节省劳动力的设备,以使模型运行效率的提高成为可能。它们的实际值是不相关的。
使用svd辅助作为反问题的解决机制并不排除使用支持吉洪诺夫正则化。事实上,由于上一章和Doherty(2015)中所述的原因,在问题不适定的情况下,应该始终鼓励使用Tikhonov正则化,因为它提供了实现该问题的解决方案的机制,该解决方案尽可能与专家知识保持一致。然后,这可以建立该解决方案的最小误差方差凭证;该方案可为标后不确定度分析提供最佳平台。幸运的是,使用SVD-assist并不需要用超参数来表示正则化关系。相反,这些可以用原生参数来表示,就像在没有svd辅助的情况下求逆问题的解一样。PEST负责翻译。(注意,如果你愿意,svd辅助反演可以在不使用Tikhonov正则化的情况下进行。它不是其实施的必要组成部分。)
10.1.2实现简介
在接下来的讨论中,为了方便起见,假设使用PEST进行正则化反演。因此,基本参数PEST控制具有“估计”或“正则化”的pesmode设置。然而,没有理由认为SVD-assist不能作为PEST预测分析和Pareto操作的解决方案程序,尽管这种情况很少发生。因此,基本参数PEST控制文件中的pesmode可以设置为“估计”,“正则化”,“预测”或“帕累托”中的任何一个。
逆问题并不一定要考虑到svd辅助。
SVD-assist只是一种解决方案策略。
选择使用它是一个数字方便的问题。
因此,应该遵循前几章中提出的关于实现数值稳定的正则化反演以追求最小误差方差解决模型校准逆问题的建议。
•在反演过程中包含尽可能多的参数,以反映模拟系统的异质性。
这赋予了反演过程所需的灵活性,使异质性在尊重校准数据集的信息内容的地方和方式出现。
此外,它赋予校准后的不确定性分析过程有能力探索参数的非唯一性对管理关键预测的不确定性的影响。
•将Tikhonov正则化添加到反演过程中,从而为所有参数提供回退位置,并且在数据保证的情况下,应该实现偏离这些回退位置的方法。
将目标测量目标函数设置为合适的值。
这可能是非常低的初始PEST运行,或在一个水平,以抑制伪异质性引起的过度拟合在后来的PEST运行。
•在PEST控制文件中包含奇异值分解或LSQR部分。使用这些解决装置中的任何一种都保证了反演过程的数值稳定性。
•将rlamda1设置为10,RLAMFAC设置为-3。快速移动的马夸特λ提供了对抗数值不稳定性的最后一道防线,同时也适应了模型线性。
•在模型数值性能有疑问的地方,也应该考虑一些其他的解决方案辅助工具,例如本手册第4章中讨论的劈裂斜率分析和模型运行故障宽恕。
•确保不同观察组之间的权重相关性正确。确保每一组对初始测量目标函数的贡献与其他组相同。(本手册第2部分中描述的PWTADJ1实用程序可以在这方面提供帮助。)一旦准备好了PEST输入数据集,将PEST控制文件“控制数据”部分中的NOPTMAX变量设置为
-2。然后运行PEST。然后,PEST将根据本地模型参数计算雅可比矩阵。这将被存储在文件夹中。其中case是PEST控制文件的文件名基础。在存储完这个文件之后,PEST将立即停止执行。
接下来,决定您想要使用的超级参数的数量(见下文)。然后运行SVDAPREP实用程序来构建新的PEST控制和辅助文件,以实现svd辅助反演。为方便起见,让我们将该文件称为case-svda.pst。如果您不想看,甚至不需要看这个文件,因为它的细节不重要。
然而,对于那些感兴趣的人来说,它的规格将在本章后面列出。
然后通过输入以下命令,在这个新的PEST控制文件的基础上运行PEST。
pest case-svda
任何版本的PEST都可以使用,包括并行PEST和BEOPEST。
svd辅助的PEST运行的第一次迭代进行得非常快,因为PEST从存储在case.jco中的基参数导数计算超参数导数。
然而,对于所有后续迭代,它使用本手册前面描述的标准有限差分过程计算超参数的导数。
当PEST进行svd辅助的模型运行时,它将与为正常的PEST运行所写的信息相同的信息写入屏幕。
特别是,它记录了测量和正则化目标函数,以及不同观察组对目标函数的贡献,因此您可以随着反演过程的进展监视PEST的性能。在
运行记录文件中记录了相同的信息。
同时,还记录了其他文件,如临时残差文件(命名为case-svda.rei),以便根据需要监测PEST在减少特定残差方面的进展。
如果进行svd辅助反演,可以使用本手册第5节中描述的重启开关停止并重新启动PEST,就像进行正常反演时一样。
在反演过程的任何阶段,最佳参数值都存储在参数值文件case-svda.par中。
但是因为它记录了超参数的优化值,所以这个文件对用户来说用处不大;注意,超级参数被命名为“par1”、“par2”等。
基本参数的优化值存储在一个名为case的文件中。
Bpa(“Bpa”代表“最佳参数值”)。注意,该文件的文件名基础与基本PEST控制文件的文件名基础相同,而不是超参数PEST控制文件的文件名基础。
在进行奇异值分解(svd)辅助反演时,采用与常规PEST反演相同的运行终止标准。
然而,正如已经讨论过的那样,如果您觉得已经完成了足够的工作,就没有必要等待PEST宣布反转过程“结束”。
如果是这种情况,那么您可以用通常的方式自己停止PEST的执行。
即使PEST终止了它自己的意志,在实现svd辅助反演时,它也不会使用优化的参数进行最终的模型运行。
这是因为随着反演过程的进行,超参数与基参数之间的关系可能会发生变化;因此,如果在早期迭代中获得了最佳参数,那么将当前的超级参数值转换为基本参数值的必要资金就会丢失。
幸运的是,基于通过奇异值分解辅助反演获得的最佳参数,进行手动运行模型是一件容易的事情。只需使用PARREP实用程序(请参阅本手册的第二部分)和如下命令创建一个新的基本PEST控制文件(在本例中表示为case-sol .pst),其中的初始值是优化的参数。
parrep case.bpa case.pst case-soln.pst
然后在文件case-soln中将NOPTMAX设置为零。点击并运行PEST。然后,PEST将根据优化的参数运行一次模型,然后停止执行。或者,您可能希望使用SUBREG1实用程序从case-soln中删除正则化。然后在此文件中设置NOPTMAX为-2以计算新的雅可比矩阵。PWTADJ2实用程序的使用也可以被认为是调整这个新的PEST控制文件中的权重的一种手段,以便它们反映模型-测量不拟合的随机特征。然后,您可以使用本手册第二部分中描述的GENLINPRED等实用工具进行校准后线性参数和预测不确定性分析。
10.1.3有几个超级参数?
应该使用多少个超级参数?使用尽可能多的计算资源。
本手册第二部分中描述的SUPCALC实用程序试图计算特定逆问题的解空间的最佳维度。它有这样做所需的信息一旦用基参数计算出雅可比矩阵。
但是,不需要将SVD-assist PEST控制文件中包含的超级参数的数量限制为supcalc计算的解决方案空间维度。
正如下面所讨论的,超参数的定义是基于线性假设的,大多数模型可能或多或少地违反了这一假设。解空间和零空间的维数和组成可能随着参数值的变化而变化。估计的超级参数越多,这个问题就越小。最后,要使用的超级参数数量的唯一考虑因素是可供您使用的计算资源。事实上,如果你有足够的计算资源来进行正反演,那么就完全不需要使用SVD-assist作为求解逆问题的数值装置。
根据定义,如果超参数的个数超过解空间的维数,则超参数估计问题是不适定的。通常情况下,这并不重要。如果采用吉洪诺夫正则化,则引导逆问题趋向最小误差方差解。此外,如果将奇异值分解或LSQR指定为基本参数PEST控制文件中的解决方案机制,则SVDAPREP实用程序(见下文)将其指定为超参数PEST控制文件中的解决方案机制。因此,无论问题中存在多少个超参数,svd辅助反演过程的数值稳定性都得到了保证。
有时,可用的计算资源可能不足以使用SUPCALC建议的最小数量的超级参数。然后使用尽可能多的超级参数。正如Doherty(2015)所解释的那样,超参数定义中隐含的参数简化是最优的,因为它使用最少数量的“参数容器”为校准数据集的信息内容提供了最大的可接受性。最后,环境建模和环境模型校准是一个妥协的问题。超级参数包含一个非常好的折衷。
10.1.4优势和劣势
svd辅助方法的强大之处在于它的使用节省了大量的模型运行时间。相对于反演过程中特征参数的数量,校准解空间的维度越小,这些潜在的节省就越大。
已经提到了svd辅助方法的巨大弱点。这是一个事实,即超参数定义是基于线性假设的,而模型可能会违反这一假设。如上所述,通过使用比跨越解空间实际所需的更多的超参数,可以获得一些对非线性的防御。
另一种防御策略是在svd辅助反演过程进行多次迭代后重复超参数定义过程。例如,假设PEST在该过程的第三次迭代中在减少度量目标函数方面没有取得什么进展。(首先检查这种情况的原因是不是对超级参数移动施加了相对或因子限制,或者许多基本参数达到了它们的界限。)然后,您可以决定停止PEST执行,并使用PARREP实用程序创建一个新的基本参数PEST控制文件,该文件具有迄今为止从停滞的svd辅助反演过程中获得的最佳参数。在这个新文件中将NOPTMAX设置为-2后,运行PEST来计算一个新的基参数雅可比矩阵。然后利用SVDAPREP构造一个新的超参数PEST控制文件。使用该文件运行PEST以恢复svd辅助的反演过程。
可以采取进一步的措施来改善模型非线性的影响。与往常一样,从专家知识的角度来看,基本PEST控制文件中的初始参数值应该是首选值。然后,tikhonov正则化逆问题的解决方案寻求一个参数集,该参数集一方面适合校准数据集,另一方面最小程度地偏离该首选参数集。
有时,特别是在地下水和水库建模的情况下,用户可能很难决定PEST控制文件中引用的所有参数的首选值。然而,有可能在其他方面给予svd辅助反演一个良好的开端。
例如,假设要估计多层模型的参数,并且每层都被赋予许多参数(可能有数百个参数)。可以进行初始参数估计运行,其中每一层中的所有参数都绑定到单个参数,从而表示整个层。这将反问题的维数降低到模型中的层数。如果每层参数的初始值都相同,则该策略体现了层属性均匀性的假设。一旦以这种方式定义的有限数量的层特定参数被估计出来,参数就可以相互解耦,然后可以引入Tikhonov正则化(可能封装层均匀性参数约束),并且可以通过将NOPTMAX设置为-2并运行PEST来计算所有模型参数的雅可比矩阵。然后,svd辅助反演可以按照上述方式进行。
在实现svd辅助反演时,对基本参数边界的强制执行是必须做出妥协的另一个领域。当PEST估计超级参数时,遵循在基本参数PEST控制文件中设置的界限。如果一个超级参数升级向量使得一个基本参数将到达它的边界,那么PEST将缩短升级向量,这样就不会发生这种情况。(这可以限制测量目标函数在迭代中改进的程度。)然后,PEST重新定义超级参数,将基本参数从反演过程中删除,并永久地附加到其界。这有两个缺点。首先,在基本参数数值很高的情况下,超级参数的重新定义可能是数值密集型的(因此很慢)。第二个缺点是,因此有界的参数没有进一步调整的机会。然而,遗憾的是,如果要使超参数本身以及它们共同封装的基本参数保持开放的状态,那么除了采用这种策略之外别无选择。
因此,如果可能的话,基本参数PEST控制文件中的边界应该设置得宽一些。
10.2 SVDAPREP
10.2.1准备PEST输入数据集
如上所述,svd辅助反演的第一步与任何反演的第一步相同,即构建PEST输入数据集。当然,这将包括一个控制文件,可能在该文件中引入吉洪诺夫正则化。如果需要,该文件可以包括固定参数和绑定参数。单个参数可以进行对数变换,也可以根本不进行变换。准备好之后,应该使用PESTCHEK实用程序检查PEST输入数据集。这个PEST控制文件被称为“基本参数PEST控制文件”。
然后应该将NOPTMAX设置为-2并运行PEST,以便计算雅可比矩阵。
一旦计算出雅可比矩阵,就应该运行SVDAPREP实用程序,以便基于超级参数构建PEST数据集。(请注意,如果您改变了主意,决定不使用SVD-assist作为逆问题解决方法,这并不意味着您浪费了计算雅可比矩阵所需的模型运行时间。在PEST控制文件中将NOPTMAX设置为更高的数字,并使用“/i”开关启动PEST。如本手册前面所述,PEST将提示输入要用于其第一次迭代的雅可比矩阵的名称。)虽然基本参数PEST控制文件可以像任何其他PEST控制文件一样,但SVDAPREP要求遵守一个规范。(如果不是这种情况,它将停止执行并显示相应的错误消息。)运行模型的命令必须以“。bat”结尾。在WINDOWS中,这表示一个批处理文件。在UNIX中,此命名约定并不表示脚本文件;然而,SVDAPREP要求这样做。
实际上,PEST运行的“模型”必须是一个批处理文件或脚本文件。这是因为SVDAPREP必须复制该文件,并在其顶部添加一些行。这些行发出命令来运行PARCALC和PICALC实用程序,这些实用程序将超级参数转换为基本参数,并评估表示为基本参数之间关系的先验信息方程。重要的是,这些实用程序驻留在PATH环境变量中引用的目录(即文件夹)中,以便操作系统在发出运行它们的命令时知道在哪里找到它们。或者,应该将PARCALC和PICALC可执行程序的副本放在PEST工作目录中(如果使用Parallel PEST或BEOPEST来解决反问题,则在其每个代理的工作目录中)。
10.2.2运行SVDAPREP
通过在屏幕提示符处输入其名称来运行SVDAPREP。在大多数情况下,您可以通过按键来响应它的许多提示,因为这表示接受相应的默认值。
在开始执行时,SVDAPREP要求您输入基本参数PEST控制文件的名称
Enter name of existing PEST control file:
(如果你省略了“。从PEST控制文件的名称中获取pst”扩展名,SVDAPREP本身提供了这个扩展名。)然后SVDAPREP读取这个文件。它还搜索名为case的文件。jco(其中case是基本参数PEST控制文件的文件名基),它包含通过以上面讨论的方式运行PEST计算的基本参数雅可比矩阵。下一个问题是
Use pre-defined super-parameter file? [y/n] ( if "no"):
如果您对这个提示的响应是“y”,那么SVDAPREP将提示输入超级参数文件的名称。它将在它写入的超级参数PEST控制文件中将SVDA_EXTSUPER控制变量设置为1,并将在这个新的PEST控制文件中记录超级参数文件的名称。本节稍后将描述超参数PEST控制文件的这些和其他特性。
如果您不要求超级参数在外部定义(通常是这种情况),SVDAPREP的下一个提示是
For computation of super parameters:
SVD on Q^(1/2)X - enter 1
if SVD on XtQX - enter 2
if LSQR without orthogonalisation - enter 3
if LSQR with orthogonalisation - enter 4
在这些提示中,X是与基本参数相关的雅可比矩阵(在本手册中通常表示为J),从该矩阵中删除了任何正则化。Q为观测权矩阵。如果实现,LSQR将应用于Q1/2J。
选项1是最好的,除非有超过2500个基本参数。在这种情况下,选择选项3或选项4,因为当参数数开始增加时,奇异值分解变得非常缓慢。注意,SVDAPREP本身不计算超参数。相反,它告诉PEST必须如何通过在超参数PEST控制文件中设置适当的控制变量来计算它们(见下文)。PEST在svd辅助反演过程开始时计算超参数,以及此后每当基本参数达到其界时计算超参数。
接下来SVDAPREP问
Enter number of super parameters to estimate:
请输入合适的数字。参见上面的讨论。
SVDAPREP接下来提示
Enter name of new super pest control file:
为新的PEST控制文件提供一个名称。(如果你省略了“。从PEST控制文件的名称中获取pst”扩展名,SVDAPREP将自己提供此扩展名。这个新的PEST控制文件将用于svd辅助参数估计。接下来,SVDAPREP提示
Enter offset for super parameters ( if 10):
在奇异值分解辅助反演过程中,超参数的起始值为零(表示初始基本参数的扰动为零)。然而,零值参数可能会给PEST带来问题,特别是在强制执行参数更改限制时。因此,最好为这些参数提供一个偏移量,以使它们的值远离零。在大多数情况下,svd辅助参数估计的值为10是合适的;只需按让SVDAPREP接受这一点。
SVDAPREP将超参数指定为“相对限制”。如本手册第4章所述,这个相对限制的实际值必须作为PEST变量RELPARMAX提供。重要的是将这个变量设置得比通常情况下低得多,但也不能太低,以至于参数升级小得无法使用。在大多数情况下,0.1的值是足够的,但是如果PEST收敛太慢,您应该准备好将其向上更改,或者如果参数振荡发生,或者参数太快达到其边界,则应向下更改。SVDAPREP要求用户为RELPARMAX提供一个合适的值,以便在即将写入的控制文件中记录: