A Three-Way Testing Framework for Quantifying Epistemic Calibration Uncertainty in SBI¶
作者: Luben M. C. Cabezas, Pedro L. C. Rodrigues, Rafael Izbicki
主题: 数理统计 / 假设检验
相关性: 6/10
链接: https://arxiv.org/abs/2609.24419
一、领域脉络与小综述¶
这个方向是什么¶
本文所处的子方向是基于模拟的推断(Simulation-Based Inference, SBI)中的不确定性量化与校准诊断。根本问题在于:当似然函数不可解析计算、但可以从前向模拟器采样时,如何从模拟数据中估计后验分布,并保证据此构造的可信区域(credible region)具有正确的覆盖频率。SBI 方法(如神经后验估计 NPE、神经似然估计 NLE、对比学习等)用神经网络逼近后验,但这类逼近往往产生过度自信或校准不良的后验。为此,近年工作引入共形校准(conformal calibration),在模型无关的意义上修正可信区域。然而,共形校准本身依赖有限校准集,其估计出的截断值(cutoff)带有抽样不确定性——这正是本文所称的校准过程中的认知不确定性(epistemic calibration uncertainty)。本文提出一个三向检验框架,将参数空间划分为"内部"、"外部"、"不确定"三个区域,用以诊断这种不确定性,并指导校准集模拟预算的选择。
发展脉络¶
-
奠基工作:ABC 与似然自由推断。 早期方法如 Approximate Bayesian Computation(Marin et al., 2012; Sisson et al., 2018)通过拒绝采样或 MCMC 在模拟数据上近似后验,但受限于低维汇总统计量和模拟效率。Izbicki 等(2014, 2018, 2019)提出直接用条件密度估计(CDE)框架学习后验,即 ABC-CDE(Izbicki et al., 2019),将后验估计问题转化为非参数回归问题,并给出了基于 CDE 损失的评价准则。这为后续神经后验估计奠定了基础。
-
主要进展:神经后验估计与 SBI 工具链。 随着标准化流(normalizing flows)的发展,NPE 方法(Papamakarios & Murray, 2016; Greenberg et al., 2019; Deistler et al., 2022)成为主流。Papamakarios et al. (2021) 系统综述了标准化流在概率推断中的应用;Deistler et al. (2025) 提供了 SBI 的实用指南。这些方法用条件流模型直接拟合后验,训练后可摊销推断(amortized inference),但缺乏覆盖保证。
-
校准问题的提出与共形化。 Hermans et al. (2022) 指出 SBI 后验估计器可能严重失准,即使边际覆盖正确,条件覆盖也可能失败。为修复这一问题,共形预测(Shafer & Vovk, 2008; Vovk et al., 2022)被引入 SBI。共形方法在交换性假设下给出有限样本的边际覆盖保证,但标准共形预测只提供全局保证,不保证局部条件覆盖。为此,Cabezas et al. (2025a) 提出 CP4SBI,用回归树对特征空间分区,在每个分区内做局部共形校准,从而近似实现局部条件覆盖。
-
当前 frontier:校准本身的可靠性。 即使有了 CP4SBI 这样的局部共形校准器,其输出仍依赖有限校准集。校准集大小、分区方式、得分函数的选择都会引入额外的不确定性。本文(Cabezas, Rodrigues, Izbicki, 2026)正是针对这一缺口:将校准截断值的估计不确定性显式建模,并用三向检验将其可视化。作者在引言中明确说:"Since the cutoff t(x) must be estimated using a finite calibration set, the resulting point estimator, t̂, possesses inherent uncertainty. Quantifying this uncertainty is crucial for understanding and diagnosing potential deficiencies in the calibration method itself." 这是本文的出发点。
子线索聚类¶
被引文献大致落在三条线索上:
-
SBI 后验估计方法:NPE(Papamakarios & Murray, 2016; Greenberg et al., 2019; Deistler et al., 2022)、NLE(Papamakarios et al., 2019)、密度比估计(Hermans et al., 2020; Dalmasso et al., 2020, 2024)、对比学习(Durkan et al., 2020)。这条线索关注"如何用神经网络逼近后验"。
-
共形预测与校准:Shafer & Vovk (2008)、Vovk et al. (2022) 的共形预测理论;Baragatti et al. (2024) 将共形预测与 ABC 结合;Patel et al. (2023) 在 SBI 中做变分推断加共形修正;Cabezas et al. (2025a) 的 CP4SBI 是本文的直接基础。这条线索关注"如何保证覆盖"。
-
不确定性分解与三向决策:Hüllermeier & Waegeman (2021) 区分 aleatoric 与 epistemic 不确定性;Berg (2004) 提出"不决策"作为第三种选择;Esteves et al. (2016) 和 Coscrato et al. (2020) 发展了三向假设检验(接受/拒绝/不决定)的框架。本文的三向区域划分直接继承这条线索。
这个方向在追问的核心问题¶
- 问题 1:如何在不依赖似然的情况下,构造具有条件覆盖保证的可信区域?
- 问题 2:当校准集有限时,校准本身的不确定性有多大?如何量化?
- 问题 3:如何将校准不确定性传达给最终用户,而不只是给出一个"看起来精确"的区域?
- 问题 4:给定一个可容忍的误差水平,需要多少模拟预算才能让校准不确定性足够小?
当前主流方法是共形预测及其局部变体(CP4SBI),已知瓶颈是:有限校准集导致截断值估计有方差,且这种方差在现有方法中未被显式报告。本文的三向检验正是针对这一瓶颈。
⚠️ 作者的 framing(这是作者的说法)¶
作者把缺口 frame 成:"现有共形校准方法(如 CP4SBI)虽然能给出局部覆盖保证,但它们是近似方法,校准过程本身带有 epistemic uncertainty;我们提供一个三向检验框架,将这种不确定性显式地表示为内部/外部/不确定三个区域,从而让实践者知道哪些参数的归属是可靠的、哪些还需要更多模拟数据。" 作者在摘要中写道:"While recent model-agnostic conformal calibration methods have succeeded in constructing credible sets with prescribed local Bayesian coverage, their approximate nature introduces inherent epistemic uncertainty in the calibration process. In this work, we propose a novel tool for diagnosing calibration uncertainty." 注意,作者没有声称提出新的校准估计器,而是提出一个诊断工具。竞争路线(如直接估计截断值的置信区间、或贝叶斯共形方法)在本文中未被讨论。
张力¶
- 被引文献中,CP4SBI 声称"局部覆盖"是近似成立的,而本文的 Theorem 1 依赖 Assumption 1(即顺序统计量区间近似有效)。两者之间有一个微妙的循环:本文的保证建立在 CP4SBI 分区有效性的假设之上,而 CP4SBI 本身的有效性又依赖校准集大小。作者在 Appendix C 中承认 Assumption 1 只是"approximately valid",但没有给出误差界。
- 另一个张力:三向检验中的"不确定区域"大小直接取决于 β 的选择,但 β 与 α 的关系(名义覆盖水平 vs. 检验显著性水平)没有理论指导。实验中也未系统变化 β 来展示敏感性。
- 未见明显对立引用——所有被引工作都指向"校准是必要的,但校准本身需要被诊断"这一共识。
二、最核心、最简单的例子 / 数学问题¶
第一步:符号、模型、可观测数据¶
在展开论文细节前,先把记号一次性立清楚。以下记号贯穿全文:
- 参数与观测:
- \(\theta \in \Theta\):模型参数(可能是多维的),是推断的目标。
- \(x \in \mathcal{X}\):观测数据(可以是高维的,如图像、时间序列)。
-
联合分布由先验 \(\pi(\theta)\) 和似然 \(p(x|\theta)\) 决定,但 \(p(x|\theta)\) 不可解析计算,只能通过模拟器采样。
-
后验估计器:
-
\(\hat{p}(\theta|x)\):由 SBI 方法(如 NPE)训练得到的近似后验密度。它是固定的(训练完成后不再改变),本文不讨论其训练误差,只讨论基于它的校准。
-
非一致性得分(nonconformity score):
- \(s(\theta; x)\):衡量"参数 \(\theta\) 与观测 \(x\) 的不一致程度"的标量函数。本文固定为 \(s(\theta; x) = -\hat{p}(\theta|x)\),即负近似后验密度。得分越小(密度越大)表示越"内部"。
-
对给定 \(x\),\(s(\theta; x)\) 作为 \(\theta\) 的函数是确定的;随机性来自 \(\theta \sim \pi(\theta)\) 和 \(x \sim p(x|\theta)\)。
-
目标可信区域:
-
\(C(x) = \{\theta \in \Theta : s(\theta; x) \le t(x)\}\),其中 \(t(x)\) 是条件分布 \(s(\theta; X)|X=x\) 的 \(1-\alpha\) 分位数。即:\(\mathbb{P}(s(\theta; X) \le t(x) | X=x) = 1-\alpha\)。这是理想但未知的区域。
-
校准集(可观测数据):
-
\(\mathcal{D} = \{(\theta_i, x_i)\}_{i=1}^B\):从联合分布 \(\pi(\theta) p(x|\theta)\) 独立采样得到的 \(B\) 对数据。这是实际可观测的。注意:这里 \(\theta_i\) 是模拟时采样的参数,\(x_i\) 是对应的模拟观测,所以 \(\theta_i\) 是"已知的"——这正是 SBI 校准与普通共形预测的区别:校准集中参数是可见的。
-
CP4SBI 的分区与局部截断:
- \(\mathcal{A} = \{A_1, \dots, A_K\}\):由回归树在 \(\mathcal{X}\) 上诱导的划分。对每个 \(x\),\(A(x)\) 是包含 \(x\) 的那个叶子。
- \(I_{A(x)} = \{i : x_i \in A(x)\}\):落在同一叶子中的校准集索引集合,大小记为 \(m = |I_{A(x)}|\)。
- \(T_{A(x)} = \{s(\theta_i; x_i) : i \in I_{A(x)}\}\):该叶子中校准点的得分集合。
-
\(\hat{t}(x)\):CP4SBI 估计的截断值,通常取 \(T_{A(x)}\) 的调整后 \(1-\alpha\) 经验分位数(如 \(s_{( \lceil (m+1)(1-\alpha) \rceil )}\))。
-
顺序统计量与置信区间:
- \(s_{(1)}^{A(x)} \le s_{(2)}^{A(x)} \le \dots \le s_{(m)}^{A(x)}\):\(T_{A(x)}\) 的升序顺序统计量。
- \(l\):最大的整数,使得 \(\mathbb{P}(Z \le l-1) \le \beta/2\),其中 \(Z \sim \text{Binomial}(m, 1-\alpha)\)。
- \(u\):最小的整数,使得 \(\mathbb{P}(Z \ge u) \le \beta/2\)。
-
区间 \([s_{(l)}^{A(x)},\ s_{(u)}^{A(x)}]\) 是 \(t(x)\) 的近似 \((1-\beta)\) 置信区间(基于二项分布分位数)。
-
三向区域:
-
对任意 \(\theta\),比较 \(s(\theta; x)\) 与置信区间:
- 若 \(s(\theta; x) < s_{(l)}^{A(x)}\):\(\theta \in I(x)\)(内部,接受);
- 若 \(s(\theta; x) > s_{(u)}^{A(x)}\):\(\theta \in O(x)\)(外部,拒绝);
- 若 \(s_{(l)}^{A(x)} \le s(\theta; x) \le s_{(u)}^{A(x)}\):\(\theta \in U(x)\)(不确定,弃权)。
-
可观测 vs 不可观测:
- 可观测:校准集 \(\mathcal{D}\)、得分 \(s(\theta_i; x_i)\)、分区 \(\mathcal{A}\)、顺序统计量。
- 不可观测(想要但观测不到):真实条件分位数 \(t(x)\)、真实后验 \(p(\theta|x)\)、参数 \(\theta\) 的真值(对给定观测 \(x_{\text{obs}}\) 而言)。
第二步:最小内核¶
最简情形:假设 \(\mathcal{X}\) 只有一个分区(即 \(A(x) = \mathcal{X}\) 对所有 \(x\)),且得分 \(s(\theta; x)\) 在给定 \(X=x\) 时关于 \(\theta\) 有连续分布。此时问题退化为:用 \(m\) 个 i.i.d. 校准得分 \(s_1, \dots, s_m\)(它们来自条件分布 \(s(\theta; X)|X \in \mathcal{X}\),近似等于 \(s(\theta; X)|X=x\))估计 \(t(x)\)。
核心数学问题:给定 \(m\) 个 i.i.d. 样本,如何构造 \(t(x)\) 的置信区间,使得对任意固定的 \(\theta\),犯"把外部参数判为内部"或"把内部参数判为外部"的错误概率都被控制?
关键观察:事件 \(\{t(x) \le s_{(l)}\}\) 等价于"至多有 \(l-1\) 个校准得分不超过 \(t(x)\)"。由于每个校准得分独立地以概率 \(1-\alpha\) 不超过 \(t(x)\)(由 \(t(x)\) 的定义),所以
三向检验的运作方式:对任意给定的 \(\theta\),我们不知道它是否在 \(C(x)\) 内(即 \(s(\theta;x) \le t(x)\) 是否成立)。但我们知道 \(s(\theta;x)\) 的数值。若 \(s(\theta;x) < s_{(l)}\),那么即使 \(t(x)\) 取置信区间内的最大值 \(s_{(u)}\),也有 \(s(\theta;x) < s_{(u)}\),所以 \(\theta\) 几乎必然在 \(C(x)\) 内——除非 \(t(x)\) 比 \(s_{(l)}\) 还小,而这件事的概率不超过 \(\beta/2\)。同理,若 \(s(\theta;x) > s_{(u)}\),则 \(\theta\) 几乎必然在 \(C(x)\) 外。若 \(s(\theta;x)\) 落在区间内,则无法判断,归入"不确定"。
为什么这是最小内核:论文的全部技术内容——分区树、局部化、CP4SBI 的调整分位数、Theorem 1 的证明——都是在这个二项分布计数论证上"加壳"。去掉所有一般性假设后,剩下的就是这个:用二项分布分位数构造顺序统计量区间,从而以受控错误概率区分内部、外部与不确定。Theorem 1 的两个不等式正是上述两个概率事件的直接推论。
这个内核的局限:它依赖两个近似:(1) 校准得分在分区内近似 i.i.d.;(2) \(t(x)\) 是条件分位数而非边际分位数。当分区不够细或校准集不够大时,近似失效——这正是 Assumption 1 的内容,也是本文没有严格证明的地方。
三、这篇论文做了什么¶
三句话¶
- 研究了什么问题:在 SBI 中,用有限校准集估计可信区域截断值 \(t(x)\) 会引入认知不确定性;本文提出一个三向假设检验程序,将参数空间划分为"内部"、"外部"、"不确定"三个区域,以诊断这种不确定性。
- 核心工具 / 方法:基于 CP4SBI 的局部共形校准框架,利用校准得分的顺序统计量和二项分布分位数构造 \(t(x)\) 的近似 \((1-\beta)\) 置信区间,再根据每个参数 \(\theta\) 的得分 \(s(\theta;x)\) 相对于该区间的位置进行三向分类。
- 主要结论:在 Assumption 1(顺序统计量区间近似有效)下,Theorem 1 保证"把外部参数误判为内部"和"把内部参数误判为外部"的概率各不超过 \(\beta/2\);实验表明,随着校准集规模 \(B\) 增大,不确定区域缩小,内部/外部区域与目标区域逐渐对齐。
关键设定与假设¶
- 设定:
- 已有训练好的后验估计器 \(\hat{p}(\theta|x)\)(本文用 NPE,但方法不依赖具体估计器)。
- 校准集 \(\mathcal{D} = \{(\theta_i, x_i)\}_{i=1}^B\) 独立采样自联合分布 \(\pi(\theta)p(x|\theta)\)。
- 固定名义覆盖水平 \(\alpha\)(如 0.1)和检验显著性水平 \(\beta\)(如 0.05)。
- 得分函数固定为 \(s(\theta;x) = -\hat{p}(\theta|x)\)。
-
CP4SBI 用回归树学习分区 \(\mathcal{A}\),在每个叶子内计算局部截断值。
-
假设:
- Assumption 1(本文唯一正式假设):对固定 \(x\),顺序统计量 \(s_{(l)}^{A(x)}\) 和 \(s_{(u)}^{A(x)}\) 满足
\[\mathbb{P}\left(t(x) \le s_{(l)}^{A(x)}\right) \le \beta/2, \quad \mathbb{P}\left(t(x) \ge s_{(u)}^{A(x)}\right) \le \beta/2.\]作者在 Appendix C 中论证其"近似有效性":条件于 \(X \in A(x)\),校准得分近似 i.i.d.,且 \(W \approx Z \sim \text{Binomial}(m, 1-\alpha)\)。注意,这里没有给出近似误差的界,也没有讨论分区树估计误差的影响。
-
隐含假设:\(\hat{p}(\theta|x)\) 固定,不随校准集变化;校准集与测试观测独立;得分函数不依赖于 \(x_{\text{obs}}\) 本身(否则需要额外的交换性条件)。
-
相比 CP4SBI 的放宽/强化:
- 放宽:不要求校准集内部划分(不 split calibration set),直接使用全部校准数据估计分区和截断值(见 Appendix A.2 的说明)。
- 强化:额外要求 \(\beta\) 级别的错误控制,而 CP4SBI 本身只保证覆盖,不提供逐点分类的错误概率。
主要结果¶
- Theorem 1(核心理论结果):固定 \(x\) 和 \(\theta\)。若 Assumption 1 成立,则
- 若 \(\theta \notin C(x)\)(真值在目标区域外),则 \(\mathbb{P}(\theta \in I(x)) \le \beta/2\);
- 若 \(\theta \in C(x)\)(真值在目标区域内),则 \(\mathbb{P}(\theta \in O(x)) \le \beta/2\)。
证明极其简短(Appendix C.2):利用集合包含关系。若 \(\theta \notin C(x)\),则 \(s(\theta;x) > t(x)\)。事件 \(\{\theta \in I(x)\}\) 即 \(\{s(\theta;x) \le s_{(l)}\}\),它蕴含 \(\{t(x) < s_{(l)}\}\)(因为 \(s(\theta;x) > t(x)\)),故概率不超过 \(\mathbb{P}(t(x) \le s_{(l)}) \le \beta/2\)。另一方向同理。
- 实验结论(无定量指标,仅视觉比较):
- 在 Gaussian Linear Uniform 等 SBI benchmark 上,随着 \(B\) 从 1000 增至 4000,不确定区域(橙色)显著缩小,内部区域(绿色)与目标区域(灰色轮廓)逐渐重合。
- 在神经质量模型(NMM)上,\(B=8000\) 时不同参数对的不确定区域大小差异明显,表明某些参数维度更难校准。
- 作者未报告数值化的覆盖率、区间宽度或与 baseline 的定量对比。
证明路线与技术技巧¶
- 整体路线(三步):
- 构造截断值置信区间:利用二项分布计数,将 \(t(x)\) 的置信区间表示为校准得分顺序统计量的区间 \([s_{(l)}, s_{(u)}]\)。
- 定义三区域:用该区间替代单点截断值,将参数空间分为 \(I\)(得分低于 \(s_{(l)}\))、\(O\)(得分高于 \(s_{(u)}\))、\(U\)(得分在两者之间)。
-
证明错误控制:对任意固定 \(\theta\),将"误判"事件归结为"\(t(x)\) 落在置信区间之外"的事件,从而用 Assumption 1 直接控制。
-
技术技巧点名:
- 顺序统计量与二项分布分位数:这是整个方法的核心工具。\(l\) 和 \(u\) 的选取不依赖得分分布的具体形式,只依赖 \(m\) 和 \(\alpha\),因此是分布自由的。
- 回归树分区(CP4SBI 的既有技术):用于近似条件分位数 \(t(x)\) 随 \(x\) 的变化。树的分区将全局问题局部化,但本文没有分析分区误差对 Assumption 1 的影响。
- 三向决策 / 弃权机制:源自 Berg (2004) 和 Esteves et al. (2016) 的三向假设检验思想。通过允许"不确定"类别,将二类错误同时控制在 \(\beta/2\) 以内,而不是像传统检验那样只控制第一类错误。
- 无分布假设:整个论证只用了 i.i.d. 和分位数定义,没有对 \(\hat{p}\) 或 \(s\) 的分布做参数假设。
真实例子与应用¶
- SBI benchmarks:Gaussian Linear Uniform(图 2)、Gaussian Linear、Two Moons、Gaussian Mixture、Bernoulli GLM、SLCP、SIR、Lotka-Volterra(图 4-5)。这些是 SBI 领域的标准测试问题,后验已知或可用大量样本近似,因此可以画出"目标区域"作为参照。
- 神经质量模型(NMM):一个随机微分方程组描述的皮层柱模型,参数有生理意义(如突触增益、时间常数)。作者对三个参数对分别估计可信区域,发现不同参数对的校准难度不同。
- 应用方式:给定观测 \(x_{\text{obs}}\),用训练好的 NPE 计算得分 \(s(\theta; x_{\text{obs}})\),再用校准集得到 \([s_{(l)}, s_{(u)}]\),最后在参数空间网格上标记每个 \(\theta\) 属于 \(I\)、\(O\) 还是 \(U\)。图 2 和 3 展示的正是这些区域。
🔎 结论是否比证明窄¶
- 是的,结论比证明窄。Theorem 1 的证明只依赖 Assumption 1,但 Assumption 1 的成立条件没有被证明。作者在 Appendix C 中只是说"approximately valid",没有给出任何误差界或收敛速度。因此,严格来说,论文的理论贡献是一个条件命题:"如果顺序统计量区间有效,那么误判概率受控";而实验贡献是展示这个条件在若干 benchmark 上似乎成立。
- 论文标题中的"Quantifying Epistemic Calibration Uncertainty"——实际上量化的不是不确定性本身,而是由有限校准集导致的分类不确定性(即 \(U\) 区域的大小)。作者没有给出一个标量指标来总结不确定性,而是用区域面积/形状来可视化。
- 作者在结论中写道:"For future work, we intend to expand this diagnostic tool and type of analysis to other credible set estimators beyond CP4SBI",这等于承认当前结果绑定在 CP4SBI 的分区方案上。
- 没有讨论多重检验问题:当参数空间网格点很多时,同时对所有 \(\theta\) 做三向检验,误判概率是否随网格密度膨胀?Theorem 1 只对"固定 \(\theta\)"成立,没有给出 uniform 控制。
四、开放问题¶
-
Assumption 1 的严格条件:在什么条件下(分区大小、校准集规模 \(B\)、得分分布的光滑性),顺序统计量区间 \([s_{(l)}^{A(x)}, s_{(u)}^{A(x)}]\) 能保证 \(\mathbb{P}(t(x) \le s_{(l)}) \le \beta/2\) 和 \(\mathbb{P}(t(x) \ge s_{(u)}) \le \beta/2\) 同时成立?目前只有"近似"论证,没有有限样本误差界。扎根点:Appendix C 中 "approximately valid" 的表述。
-
分区误差的传播:CP4SBI 用回归树学习分区,分区本身是从同一校准集估计的。这种"双重使用"(先学分区、再算分位数)会如何影响 Assumption 1?是否存在过拟合导致的条件覆盖偏差?扎根点:Appendix A.2 中省略内部划分的说明。
-
\(\beta\) 与 \(\alpha\) 的联合选择:三向区域的大小直接取决于 \(\beta\),但论文没有给出选择 \(\beta\) 的准则。\(\beta\) 与名义覆盖 \(\alpha\) 之间应满足什么关系?是否存在最优 \(\beta\) 使得 \(U\) 区域面积最小同时错误率受控?扎根点:Theorem 1 中 \(\beta/2\) 的出现。
-
高维参数空间的扩展:实验仅展示二维参数对。当 \(\Theta\) 的维度升高时,网格化三向检验的计算成本指数增长,且 \(U\) 区域可能占据几乎整个空间。是否有更高效的抽样或积分方法?扎根点:实验部分"we restrict our analysis to the first two parameters"。
-
与贝叶斯后验校准的关系:本文的 \(C(x)\) 是频率意义下的条件覆盖区域,而 SBI 用户通常关心贝叶斯后验。三向检验中的"不确定"区域是否对应后验分布中概率质量较低的区域?能否将 \(U\) 区域解释为后验的某种信度带?扎根点:引言中"credible regions"的提法。
-
校准集预算的主动设计:论文展示了 \(U\) 区域随 \(B\) 增大而缩小,但未给出如何预先决定所需 \(B\) 的方法。能否用序贯方法(如逐步增加校准集直到 \(U\) 区域面积低于阈值)?扎根点:结论中"selecting optimal simulation budgets for calibration"。
提醒:要确认上述某条是否是真 gap,建议去读 SBI 校准方向近期约 5 篇论文(如 CP4SBI、conformal SBI、贝叶斯共形预测)的引言和 future work——如果多篇都指向同一问题,那是共识性 gap;如果互相矛盾,那可能是机会。
Maintained by 陈星宇 · Homepage · Source on GitHub