如何在深度学习中加入知识

摘要:科学研究的使命是理解和探索世界,以及根据经验和知识改造世界。其中知识嵌入知识发现是融合知识和数据的两种重要方法。知识嵌入可以打破知识和数据之间的障碍,从而建立具有物理常识的机器学习模型。人类对世界的理解总是有限的,而知识发现可以利用机器学习从观测中抽提出新知识。知识发现不仅可以帮助研究人员更好地掌握物理学的本质,同时也能对知识嵌入的研究提供有利的支持。通过将知识嵌入和知识发现相结合,可以形成知识生成和使用的闭环,从而提高模型的鲁棒性和准确性,发现未知的科学原理。本研究不仅总结和分析了现有的文献,还给出了目前研究的不足以及未来的发展机遇。

1. 意义与背景

科学研究的主要目的是了解和探索世界,并根据经验和知识改造世界。科学进步的标志往往是科学和工程的交替发展。一方面是从实践与实验中探索(exploration)与发现新的机理,并加深对物理世界的认知(也就是科学进步),另一方面是将现有知识应用于实践(即工程进步)。

知识可以指导工程实践,而工程中积累的数据反过来又有助于科学的进步。例如,在16世纪,第谷·布拉赫建立了一座天文台并收集了大量观测数据,约翰尼斯·开普勒根据这些数据提出了开普勒定律,而后艾萨克·牛顿基于此进一步推导出了引力定律。获取到的知识又可用于开发新的观测设备,如哈勃望远镜。

随着科技的进步,研究者们有能力获得越来越多的观测数据。机器学习作为一种统计建模工具,依赖其强大的拟合能力在各个领域获得了广泛应用。在科学领域,机器学习可以助力科学家发现新知识[Davies等人,2021],甚至实现简单的定理推导[Kaliszyk等人,2018]。在工程中,相比于传统的基于机理的仿真模拟,机器学习可以使用数据驱动的方法预测物理场的变化。然而,由于数据匮乏和场景复杂等原因,机器学习仍然面临着准确性和鲁棒性低的问题。简单地直接应用机器学习很难获得理想的效果。嵌入领域知识可以为模型提供更丰富的信息,是提高模型性能的一种实用有效的方法[Karpatne等人,2017]

研究人员将领域知识与数据驱动的机器学习模型相结合的方式通常可分为两类:知识嵌入和知识发现。知识嵌入是在数据驱动模型的基础上引入领域知识,构建具有物理常识的模型,从而提高模型的准确性和鲁棒性,减少数据需求,并创建可落地的机器学习模型。知识发现是通过机器学习算法从观测和实验数据中直接挖掘出控制方程,并且启发科学研究。

 

 

 1. 知识嵌入与知识发现关系示意图

 

知识嵌入与知识发现方法是密切相关的,二者可以形成一个闭环。整个系统的示意图如图1所示。一方面,从专家经验和理论研究中可以获得领域知识,通过知识嵌入可以利用符号语义空间中的领域知识改进向量特征空间中的机器学习模型(图1中的蓝色箭头)。另一方面,由于许多实际应用中的系统是无序且不规则的,潜在控制方程的结构和系数往往过于复杂,难以从理论推导中获得。而知识发现可以从数据中提炼出领域知识,从而支持知识嵌入(图1中的绿色箭头)。

在应用方面,知识嵌入可以提高机器学习模型的性能,促进高效模拟器的开发和反问题的建模。另一方面,知识发现可以用来发现新的物理原理,并为黑盒模型提供可解释性。知识嵌入和知识发现是实现领域知识与机器学习算法融合的关键问题。在过去的十年里,学者们进行了很多探索性的工作。本文旨在概述目前在知识发现和知识嵌入方面的研究,并对研究中的不足之处和未来潜在的机会提出一些建议

2. 知识发现

知识发现的目标是从数据中提取未知的知识,并推进人类认知的前沿。知识发现算法的输入是各种观测数据和实验数据,而输出往往是以偏微分方程PDE)为主的控制方程。实际上,知识发现可以视为通过方程的形式表达多种物理变量之间的映射关系,如果我们之前是用神经网络表示这种映射关系,那么知识发现就相当于找到了一种神经网络的解释方法(神经网络的方程形式的替代模型)。

针对基于观测数据寻找控制方程这一问题,研究人员开展了大量的工作。早期研究人员通过理论推导获得方程结构,然后通过待定系数法确定方程的系数[Hosmer Jr等人,2013],例如万有引力定律和麦克斯韦方程的发现过程。然而,许多现实世界的问题(例如流体力学中的湍流)过于复杂,无法通过理论推导解决。因此,研究人员开发了各种模拟方法[Griebel等人,1998Zhang2001]。但是数值模拟不能揭示复杂系统内部的完整结构,且缺乏可解释性[BongardLipson2007]。随着机器学习的发展,神经网络被用作逼近器来解决知识发现问题,例如DeepONet模型[Lu等人,2021]。虽然理论研究证明神经网络有能力逼近任何函数及其导数[Hornik等人,1990],但神经网络的本质是一个替代模型(即无法解释的黑匣子),无法获得明确的知识,因此上述方法无法获得具有物理含义的方程。此外,研究人员还尝试使用物理信息神经网络(PINN)来确定控制方程[Raissi等人,2019],但是这种方法需要提前获得控制方程的显式形式,本质上是确定已知方程的未知系数,而不是知识发

 

 

 

 

2:知识发现算法分类图

真正的知识发现方法有能力在方程形式未知的情况下,基于观测数据和先验信息,直接生成与数据最匹配的控制方程,并且该方程还具有一定的迁移与泛化能力。知识发现的核心是确定控制方程的结构和系数。待挖掘方程的结构复杂度以及系数复杂度是评价知识发现方法的两个维度(图2)。

2.1. 复杂结构方程的知识发现

现有的知识发现方法大多包含如下步骤:首先基于先验知识构造候选集(即包含多种潜在函数项的集合),然后通过各种优化方法选择最合适的候选项组合产生方程。现有的方法可以分为封闭候选集方法、可扩展候选集方法以及开放候选集方法,如图2所示。

封闭候选集方法是应用最广泛的方法,它基于稀疏回归来提取重要的候选函数项。Brunton等人[2016]开发了SINDy,它首先构建了一个包含冗余项的完备候选集,然后利用稀疏回归确定合适的方程。尽管SINDy只能处理常微分方程ODE),但它有许多变体[Champion等人,2019]。例如,PDE-FIND通过在候选集中引入偏导数项将SINDy扩展到偏微分方程(PDE[Rudy等人,2017]SGTR结合群稀疏编码(group sparse coding)解决了参数化偏微分方程的问题[Rudy等人,2019]。此外,在稀疏回归算法中可以使用不同的范数最小化方法作为稀疏约束[DonohoElad2003Hoyer2004]。对于实际中有噪声的观测数据,可以通过低秩去噪[Li等人,2020]和神经网络拟合[Rao等人,2022Xu等人,2020]生成高质量数据。除了筛选候选项外,封闭候选集方法还可用于自动筛选物理过程[ChangZhang2019],加深我们对物理本质的理解。

由于封闭候选集方法中的候选项都是预设的,因此可以很容易地嵌入先验信息。例如,Rao等人[2022]利用专门设计的核函数对方程中已知存在的函数项进行编码(即利用先验信息)。尤其是在PDE-Net中,每个δt块对应于一个时间步长,从而建立了控制方程和网络之间的联系[Long等人,2018]PDE-Net也有许多变体,其中大多数依赖于包含冗余项的预设的封闭候选集。此外,Chen等人[2021c]通过将PINN与稀疏回归相结合,提出了PINN-SR,将领域知识嵌入到知识发现模型中。

虽然基于稀疏回归的封闭候选集方法易于实现,但在实际应用中却常常遇到困难:一方面,传统方法本身就可以识别简单系统的大部分控制方程。另一方面,对于传统方法无法解决的复杂系统,很难提供一个超完备的候选集(即包含所有潜在正确的函数项)。这就导致封闭候选集方法很容易陷入只能找到我们已知的方程的困境,而传统方法找不到的未知方程,封闭候选集方法也难以找到。这一难题极大制约了此类方法的实际应用。

针对封闭候选集的局限性,研究者们提出了可扩展候选集方法。此类方法更适合于发现具有复杂结构的控制方程(图3b)。比如,Maslyaev等人[2019]提出了EPDE,以验证遗传算法在PDE挖掘中的作用。随后,DLGA将神经网络和遗传算法相结合,通过将不同的函数项编码为基因片段,实现候选集的自动扩展[Xu等人,2020]DLGA的变体探索了在有噪声和稀缺数据场景下的知识发现,尤其是R-DLGA通过结合PINN获得了较高的鲁棒性[XuZhang2021]。除了遗传算法之外,PDE-Net 2.0[Long等人,2019]还引入了SymNet[Sahoo等人,2018],用网络拓扑结构产生交互项。然而,无论是PDE Net 2.0还是遗传算法都只能通过加法和乘法生成新的函数项,不能实现除法运算或生成复合函数。因此,尽管可扩展候选集方法比封闭候选集方法更灵活,占用的内存更少[Long等人,2019],但它们仍然无法构建具有分式结构和嵌套结构(即复合函数)的控制方程。

 

 

 

3:封闭候选集方法、可扩展候选集方法和开放候选集方法的示意图

为了从数据中挖掘出任意形式的方程,学者们提出了开放候选集方法(图3c)。此类方法的主要思路是利用符号数学方法对方程进行转化与表示,进而可以产生任意形式的方程。例如Bongard and Lipson[2007]提出的ARE方法(automated reverse engineering),可以借助符号数学自动产生非线性耦合动力系统的方程。但是由于ARE独立分析每个变量,所以在扩展性方面存在问题。后来,研究人员对符号回归进行了更多研究,进一步采用二叉树来表示控制方程(图3c[SchmidtLipson2009],但是此种方法容易过拟合,只能产生简单的多项式或常微分方程[Rao等人,2022]。在上述研究的基础上,研究人员将符号数学与遗传算法结合,提出了一种基于树结构的遗传算法SGASymbolic genetic algorithm)以处理更加复杂的系统,实现了基于符号数学表示的PDE发掘[Chen等人,2021b]。开放候选集方法的优势在于更加灵活,无需对函数项的结构进行假设与约束,但是其劣势在于具有更大的探索空间,在实际应用中比传统方法需要更大的计算量。

上述三种方法适用于不同的场景。如果所研究的系统很简单,那么稀疏回归等封闭候选集方法既准确又高效。可扩展候选集方法如遗传算法,更适合于具有复杂交互项且内存要求较低的系统。对于具有多物理耦合的强非线性系统,控制方程可能非常复杂,可以借助符号数学构建更大的探索空间,以实现任意形式方程的寻优。

2.2. 复杂系数的方程挖掘

在从数据中挖掘控制方程时,方程系数的复杂度也非常重要。如图4所示,系数可分为三种,即常系数、可由数学公式表示的系数和无法用数学公式表示的系数。值得一提的是,图4c中的难以表示的系数场是由含有20个随机变量的Karhunen-Loeve展开方法(KLE)生成的,KLE是在数值模拟中常用的随机场生成方法。

 

 

 

4:不同类型方程系数的示意图。(a):恒定系数,值为20;(b):可用三角函数表示的系数;(c):难以表示的随机系数场(可用于描述物理场,如渗透率场)

挖掘常系数方程的方法很简单。在得到方程结构后,只需使用最小二乘法来拟合系数。因此,前一节中描述的所有方法都可以处理常系数。

在现实情况下,往往还存在着大量变系数控制方程。它们的系数随时间或空间而变化,可以用三角函数等方程来描述,如图4b所示。这类问题的挑战在于方程的结构和系数都是未知的,在不同的系数取值区间内,最优方程结构可能不同。当方程系数变化时,算法容易对局部观测数据过拟合,难以找到正确的全局解。在许多研究中,首先通过稀疏回归确定方程结构,然后通过逐段拟合[Rudy等人,2019]或逐点拟合[Li等人,2020]获得系数。这种拟合方法的本质是将系数的变化趋势可视化,而不能得到系数的具体表达式。Stepwise-DLGA提出了winner-takes-all策略,该策略将观测数据分组,并在不同的组中选择频繁项作为最终结果[Xu等人,2021b]。尽管stepwise-DLGA的计算过程复杂,但它可以避免局部过拟合,并能给出系数的具体表达式。

在处理复杂系数问题时,许多研究将数值区间划分为多个拟合窗口,然后在每个窗口内用常数来拟合系数。然而,当系数场具有强非线性时,对于过大的窗口,常系数的假设很难成立,对于较小的窗口,则出现大量过拟合方程结构。因此,上述方法只能解决具有弱非线性的变系数问题(即可用方程表示)。然而,在实际中许多系数对应于物理场,因此具有较强的非线性(例如污染物扩散问题中的渗透率场和传热问题中的热传导系数场)。在数值模拟中,由于很难直接计算此类系数场,所以会通过二维随机场来描述这些系数[Zhang2001],如图4c中的系数场。针对这种难以数学表示的复杂系数场问题,Luo等人[2021b]提出了KO-PDE模型,使用核平滑算法在每个拟合窗口中引入非线性,进而在不破坏控制方程系数的非线性的情况下,在每个窗口中引入尽可能多的数据来避免局部过拟合。换言之,KO-PDE通过在每个窗口中引入非线性核函数,使得窗口可以更大,更易于找到正确的方程形式。复杂系数场的控制方程挖掘问题对于知识发现的实际应用至关重要,有待持续深入的研究。

2.3. 知识发现的挑战

方程的表示是知识发现的核心问题。封闭候选集方法直接涵盖了所有可能的候选项,尽管它们易于实现,但应用范围有限。在可扩展候选集方法中,通过将函数项转化为基因片段或卷积核(kernels)来表示方程,因此此类算法可以找到具有复杂交互项的方程。开放候选集方法使用符号数学来表示任意形式的控制方程,可以处理具有分数结构和复合函数的控制方程,但计算成本很高。更高效更全面的方程表示方法是未来的研究方向之一。

目前,知识发现领域面临着如下五个挑战:

  • 遗传算法是一种相对低效的优化算法,难以对具有复杂结构和复杂系数的方程所构成的寻优空间进行探索。基于梯度的优化算法具有更高的效率,但是目前缺少合适的评估函数以计算梯度。比如,虽然编辑距离可以度量两个方程的差异(即一个方程需要几步修改可以变为另一个方程),但是编辑距离无法直接衡量方程的表现(例如,假设四阶导数是正确的解,则三阶导数不一定比二阶导数表现好)。为了采用更高效的基于梯度来优化方程的方法,需要更合适的方程嵌入表示(类似于词向量[LeMikolov2014])。
  • 控制方程本质上是数据背后的必要条件,但在许多情况下算法找到的是充分条件,这会导致过拟合问题。未来的研究可能会着眼于从多个实验中发现方程[Tod等人,2021],以提取共性(即必要条件)。
  • 复杂系统(如湍流)的控制方程不仅复杂,甚至包含偏微分方程组。需要开发能挖掘系数和结构都复杂的方程的算法(图2右上角)。
  • 导数(梯度)的精度对于挖掘偏微分方程非常重要。通过差分计算获得的梯度对噪声不具有鲁棒性[Rudy等人,2017]。目前常用的抗噪方法包括利用神经网络中的自动微分,使用神经网络生成高质量数据[Rao等人,2022Xu等人,2020],以及应用方程的弱形式[Xu等人,2021a]PINN-SRR-DLGA证明了通过嵌入领域知识可以提高鲁棒性,未来值得进一步的探索。
  • 知识发现的目标是在挖掘到的方程的准确性和简洁性之间找到平衡。随着候选集从封闭逐渐开放,这其实是一个准确性增大和简洁性减少的过程。开放候选集方法容易找到方程的不同等价形式。如何化简找到的方程是一个巨大的挑战(即在不影响准确性的情况下,找到最简洁的等价形式)。

3. 知识嵌入

人类在生产实践中积累的经验、知识以及物理机理是宝贵的财富,但是当前机器学习模型大多未能有效利用它们,严重制约了机器学习的应用。纯数据驱动模型不仅数据需求高,还可能产生违背物理机理的预测结果[Raissi等人,2019Wang等人,2020]。通过在机器学习模型中融合领域知识,有望打破数据驱动模型和知识驱动模型之间的壁垒。

3.1. 建模过程中的知识嵌入

研究人员们尝试在机器学习建模过程中嵌入领域知识,具体包含三个阶段:数据预处理、模型结构设计和惩罚与奖励设计(图5)。

 

 

 

5:知识嵌入算法分类图

3.1.1. 数据预处理阶段的知识嵌入

在数据预处理阶段,除了传统的特征工程方法外,还可以将领域知识应用于数据归一化。数据归一化是将原始数据通过某种变换映射到一个特定区间内的方法,可以在保持数据分布特征的同时,使得不同量级的原始数据处于同一尺度,有利于后续数据处理和分析。但是,在实际场景用,数据分布往往不是理想的均匀分布或者正态分布,且最重要的数据很可能处于较小的取值区间内,导致直接利用数据归一化的效果不佳。此时,可以考虑利用领域知识对数据分布进行调整,以便模型更好的对目标区间建模。

例如,在评估地下资源时,传统的归一化方法并不能有效解决地层错位(数据分布不同)的问题,进而限制了模型的预测精度。而地层的起伏信息的领域知识可以作为归一化的分组标准,确保不同井的地层保持对齐[Chen and Zhang2020],如图6所示。这种方法也可以被称作自适应归一化,对于实际场景中数据分布不均匀的数据非常有效(图6c中不同位置的目标地层在归一化后能够有效对齐)。

 

 

 

6: 标准归一化与基于地层信息的自适应分层归一化结果对比:a,自西向东连井曲线上地层起伏情况;b,基于常规归一化方法后的地层分布;c,基于自适应分层归一化后的地层分布。

又比如,在生物学研究中,在控制基因的因子分析基础上构建的去除不必要变异(remove unwanted variation, RUV)方法比RNA序列数据的常规标准化方法效果更好[Risso等人,2014]。如图7所示,其中图7a展示了SEQC数据集的三个主控因素经过RUVg归一化后的散点图,可见RUVg调整了library preparation effects,并且保留了样品AB的差异。图7b展示了SEQC数据集中,A样本复制品的差异表达检验的p值的经验累积分布函数(ECDF)。当A样本复制品不具有差异表达时,p值应满足均匀分布(即接近45度对角线),可见基于领域知识的RUVg归一化方法相比于常规方法具有优势。

 

 

 

7RUVg归一化在silico empirical control genes中的应用

此外,还可以使用领域知识对时间序列数据进行分解,例如在电力负荷预测中,可以先将电力负荷转化为负荷比值,然后分解为无量纲趋势和局部扰动两部分(图8)。无量纲趋势反映了不同区域的固有模式,比如产业结构等,可以借助领域知识和专家经验确定。局部扰动则主要受到天气变化、日期信息和历史负荷数据等因素的影响,可以通过具有强大拟合能力的神经网络来确定[Chen and Zhang2021]。最终采用这种数据分解方法后的模型相比于常规神经网络具有明显的精度提升。

 

 

 

8:电力负荷分解示意图,包含由领域知识确定的无量纲趋势以及由机器学习算法预测的局部扰动。

3.1.2. 模型结构设计阶段的知识嵌入

在模型结构设计阶段,主要有四种嵌入方法,分别是根据领域知识设计网络拓扑结构、利用微分和卷积之间的关系来设计卷积核、根据有限元法(FEM)设计神经网络、通过约束模型输出的值域来嵌入先验知识,如图5所示。

首先,可以根据领域知识设计网络拓扑结构。早期的研究主要集中在计算机视觉上,例如,研究人员基于人类视觉皮层的两条通路开发了用于动作识别的双流卷积网络[SimonyanZisserman2014]。具体而言,视觉皮层分为知觉形状的腹侧通路和知觉空间位置的背侧通路,前者被用于识别物体,而后者可以识别运动(图9)。在双流卷积网络中(图10),空间流可以从静止的视频帧中识别动作,只负责提取静态特征,类似腹侧通路。而时间流结合光流来捕捉时序运动信息,类似背侧通路。

 

 

 

 

 

9:视觉皮层中的腹侧通路和背侧通路

 

 

 

 

10:双流卷积网络结构示意图

此外,由于视觉系统的处理能力有限,视觉场景通常包含的项目超过了并发处理的能力。视觉显著性(或注意力)检测是一种通过选择相关或显著信息而忽略无关信息来有效处理这种能力限制的认知机制。针对这一问题,Yohanandan等人[2018]基于生物学中对视觉显著性(visual saliency)检测的进化过程的理解,改进了计算显著性模型。通过将生理机制应用到模型结构中,研究者通过低分辨率灰度图像有效加速了显著性检测模型的训练和检测过程,降低耗时。

具体而言,基于生物学领域知识可知,视网膜上的感光细胞分为视杆细胞(Rods)和视锥细胞(Cones)两种,他们的数量、分布和后续连接细胞数都有差异。视杆细胞分布在中央凹外,可以编码低分辨率的灰度信息,而视锥细胞集中在视网膜的中央凹中,可以编码高分辨率的彩色信息(图11a)。视杆细胞的后续连接细胞数少于视锥细胞,因此虽然视杆细胞的分布面积更大,但是对应于更低的图像分辨率。视杆细胞和视锥细胞的分布是的人类视网膜中的显著性检测快速且高效。图11b展示了猕猴大脑中信息从视网膜输入流向眼动输出的过程。受此生理机理启发,研究者提出了近似周边视觉方法,在模型中设计了图像灰度化和下采样策略近似周边视觉中的消色差和低分辨率。最终基于灰度低分辨率图像达到了和高分辨率彩色图像相似的精度的前提下提速10倍。

 

 

 

11:视杆细胞(Rods)和视锥细胞(Cones)分布图及猕猴大脑中信息从视网膜输入流向眼动输出的过程

在地球科学领域,ChenZhang[2020]提出了根据地质力学方程设计的机理模拟网络结构,如图12所示。虽然不同的地质力学参数需要通过不同的物理模型或经验模型计算,但这些物理模型的输入信息基本上都包含纵波速度Vp、横波速度Vs、真实深度TVD和密度RHOZ。然而,在实际应用中,两种声波速度(VpVs)往往是未知信息。因此,有理由假设计算地质力学参数的数学模型中,实际上包含有2个中间变量。基于此假设,研究者在常规的LSTM模型中增加了物理约束层,其中包含两个空神经元以及2个从输入中跳层连接过来的输入变量。在训练环节,由于缺少声波速度数据,所以无法对2个空神经元进行监督学习,但是可以将模型压缩到2维空间。换言之,模型中的2个空神经元会是VpVs在空间中的等价基。

最终,通过对网络结构的调整,研究者将地质力学方程中关于维度的知识嵌入到模型中。实验表明,在同等网络复杂度下(即相近的参数量),嵌入领域知识的物理约束神经网络具有更高的预测精度,成功基于易于获得的低成本物理参数,生成了成本高昂的包括杨氏模量、泊松比等10种地质力学参数的三维物理场。

 

 

 

 

12:根据地质力学方程设计的机理模拟网络结构

此外,PDE-Net[Long等人,2018]中的δt block的结构(图13)也是参考了方程离散化的方法构建的,每个block相当于对流场进行一次求解(迭代一个时间步)。仿照数值模拟中的逐个时间步求解,PDE-Net中重复调用δt block进行计算(图14),以便获得最终的预测结果。从本质上讲,PDE-Net与数值模拟非常类似。

 

 

 

 

 

13PDE-Net中的δt block结构

 

 

 

 

14PDE-Net结构示意图

在模型结构中嵌入领域知识的第二种方法是利用微分和卷积之间的关系来设计卷积核,例如PDE-NetPD-Net2.0中利用卷积运算替代了控制方程中的偏微分项,通过网络结构实现微分[Long等人,2018年;Long等人,2019]。此外,在基于物理约束的深度学习的研究中,往往需要计算目标物理量对xyt等维度的偏导数,以便衡量模型输出结果与已知控制方程的一致性(详见后文奖惩函数设计阶段嵌入知识的方法)。然而,在使用CNN时,无法像全连接神经网一样利用自动微分机制计算上述偏微分项。针对此问题,Zhu等人[2019]利用Sobel滤波器计算CNN中的导数,进而构建损失函数中与控制方程相关的正则项。此外,在PeRCNN中,研究者也利用卷积核表示梯度,以生成高分辨率数据[Rao等人,2022]

第三种方法是根据有限元法(FEM)的求解过程设计神经网络。例如,Ramuhalli等人[2005]利用方程中的未知变量作为网络中的权重,将有限元方程转换为网络,构建了有限元神经网络(finite-element neural networks)。此外,Yao等人[2019]根据有限元分析(FEA)构建卷积核,并基于雅可比求解器构建网络,构造了有限元分析网络(FEA-Net)。上述研究都是借鉴数值求解的方法改进神经网络。

 

作者:陈云天
链接:https://www.zhihu.com/question/279012198/answer/2548645553
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

posted @ 2022-09-21 11:17  jasonzhangxianrong  阅读(1916)  评论(1编辑  收藏  举报