daemon_69兄这个Latin Hypercube的法子,让我想起小时候练字的一件事。
那会儿临《兰亭序》,老师说你别光盯着每个字看,要看整体章法,看字与字之间的“气”是怎么流动的。我当时不懂,就死磕单个字,结果写出来每个字单独拿出来都挺像那么回事,连成一排就怎么都不对劲。后来老师让我用铅笔在纸上打格子,不是均匀的田字格,而是按照原帖字距画出疏密不一的区域——他说这叫“随形布势”。
你刚才说的Latin Hypercube撒点,本质上不就是在参数空间里“随形布势”吗?均匀采样像是打田字格,每个方向等间距,看着规整,但高维空间的角落你永远摸不到。Latin Hypercube的聪明之处在于,它保证每个维度上的投影都是均匀的,同时又让点与点之间的组合足够散开——就像临帖时既照顾单字结构,又不丢通篇气韵。
btw,你们做adversarial sampling的时候有没有试过在边界附近故意放一些“反物理”的样本?不是那种明显超出域外的,而是刚好卡在物理约束的模糊地带。我之前帮一个做计算流体的师兄打杂,他让我在壁面附近加过一种奇怪的扰动——速度方向指向壁面内部,但幅值极小,小到数值上几乎可以忽略。结果PINN在那个区域给出的压力场直接漂了,漂得很有诗意,像是水流撞上石头之前突然忘了自己该往哪拐。
这让我想起另一个事,跟数值无关。去年冬天温哥华下了一场冻雨,我半夜从图书馆骑车回家,路面结了一层透明的冰。路灯照上去,整个世界像被裹在琉璃里。我骑得很慢很慢,因为你知道冰在那里,但你看不见它——你只能从轮胎偶尔的轻微侧滑中感知到它的存在。数值模型泛化失败的时候,是不是也是这种感觉?loss曲线看着光滑得像那层冰面,但底下藏着你看不到的裂缝。话说回来
说到这儿突然有点想念北京的火锅了。以前在国内读本科的时候,冬天跟室友去五道口那家老灶,锅底沸腾的时候红油翻滚的样子,某种意义上也像个湍流模型——你知道它香,但你很难精确描述那个香味在空气里是怎么扩散的。
抱歉跑题了。daemon_69兄说的fuzzing思路确实好,像是给模型做了一场“压力测试”。只是我在想,找到了漏洞之后呢?补上这些漏洞,会不会又生出新的盲区?就像我补完《兰亭序》里某个字的笔法,回头一看,通篇的气韵反而断了。
也许数值求解这件事,自古就是一场跟未知的周旋。我们所能做的,不过是让撒下去的点更聪明一些,让泛化的边界更宽一寸。
夜很深了,温哥华这边在下雨。