news 2026/10/22 5:28:05

非线性压缩感知如何驱动光源-掩模优化:数学模型与工程实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
非线性压缩感知如何驱动光源-掩模优化:数学模型与工程实践

光刻技术做到45nm以下工艺节点之后,所有搞计算光刻的人都会碰到同一个瓶颈:光源和掩模不能再各调各的,必须放到一个优化框架里一起解,这就是光源-掩模优化(Source-Mask Optimization, SMO)的由来。但很多人第一次把非线性压缩感知相关方法摆到纸面上时,都会被问题的复杂度吓一跳——成像链路本身是非线性,优化变量的量级动辄千万到亿级,再加上可制造性约束,整个问题怎么看都不像一个“好解”的数学题。这期我想从数学模型的角度,把SMO背后这类很有意思的思路拆开讲透:非线性压缩感知怎么做光源-掩模优化,稀疏约束到底作用在哪里,目标函数怎么建,迭代怎么才能稳定收敛。

这篇文章适合三类人看:一是准备在计算光刻工具链里落地SMO的工程师,二是研究光学成像逆问题、想找真实应用场景的研究人员,三是刚接触光刻技术、想理解SMO数学本质的入门者。如果你对光刻成像链路有一定基础,读起来会非常顺;就算你数学细节跟得吃力,我也尽量把每一步“为什么这么做”讲清楚,让你能直接照着搭模型、调参数。

1. 先看清SMO的真面目:一个高维非线性逆问题

1.1 光刻成像的正向链路到底长什么样

要理解SMO的数学本质,得先把光刻成像的正向链路拉通。光刻机本质上就是一个极度精密的投影系统:照明光从光源出发,经过聚光镜组照射到掩模上,掩模的透射场被投影光瞳滤波,最后在晶圆面干涉形成像。整个过程可以简化成“光源强度分布、掩模透射函数、投影光瞳、光刻胶响应”四个环节的级联。

用一个贴近工程的说法:光源不再是简单的“一个亮斑”,而是光瞳面上一个强度分布 S(f,g)(f、g是光瞳面归一化空间频率坐标)。掩模也不再是“一块黑白版”,而是一个复振幅透射函数 m(x,y)。对于部分相干照明,晶圆面上的空间像强度分布可以写成Abbe分解形式:

$$I(x,y) = \sum_{i=1}^{N_s} s_i \left| h_i(x,y) * m(x,y) \right|^2$$

其中 s_i 是第 i 个照明点(光源像素)的强度,h_i 是第 i 个点光源经过投影光瞳后的相干脉冲响应(点扩散函数),* 表示卷积。这个形式非常直观:每个源点产生一个相干成像项,所有源点的强度加权叠加就是最终的空间像。

另一个等价写法是Hopkins公式,用交叉传递函数(TCC)表示:

$$I(x,y) = \iint TCC(f';f'') \hat{m}(f') \hat{m}^*(f'') e^{-j2\pi (f'-f'')^T r} df' df''$$

TCC本身由光源和光瞳的互相关积分得到。做计算光刻的人都知道,Abbe形式适合在优化过程中动态更新光源,因为每次光源变化只需要重新聚合相干项;而TCC适合成像固定不变、只变掩模的场景。SMO之所以普遍选Abbe路线,就是因为源和掩模都在变,每次重建TCC的代价实在吃不消。

1.2 SMO为什么难:维度爆炸、非凸、约束叠约束

把SMO当成一个数学优化问题来看,难点是明摆着的。先看变量维度:光源在光瞳面上离散化之后,典型规模是几十到几百个像素点,这个还算友好;但掩模在晶圆面按最小格点(通常是几纳米到十几纳米)离散之后,一个几平方毫米的裁剪区域就是上亿个像素。两个变量的尺度完全不在一个量级上。

再看问题性质。光刻成像算子在掩模维度上是非线性的(模平方运算),如果继续把光刻胶响应(阈值、显影等)加进去,整个正向模型是强非线性的。优化目标关于掩模不是凸函数,甚至不是准凸。更麻烦的是解不唯一:同一组目标图形,既可以用离轴照明加二元掩模实现,也可以用传统照明加相移掩模实现,多条路径都能到达同一个成像结果。这就是典型的局部极小值遍地的逆问题。

再加上可制造性约束——光源的强度分布不能任意,掩模必须符合制造规则,掩模上不能有过多碎片化辅助图形——问题就变成“高维、非线性、非凸、带约束”的四重夹击。你如果直接用朴素梯度下降,大概率收敛到一个说得过去但远非最优的解。SMO真正难的地方就在这里:不是建模难,是建完模型之后怎么让算法有意义地收敛。

我用一个生活类比来解释:这就像你同时要调投影仪的灯泡亮度分布和幕布上的图案,目标是在墙上投出指定文字,但灯泡的每个分区亮度不能乱调(可制造性),幕布图案也不能有太多毛边(掩模复杂度),最后还得保证这个方案砸钱能造得出来。这个比喻听着夸张,但变量之间的强耦合程度就是这么高。

2. 压缩感知为什么能横插一脚:稀疏先验的两副面孔

2.1 经典压缩感知干了件什么事

要理解“非线性压缩感知”在SMO里的角色,得先回忆一下经典压缩感知的设定。传统采样是“先采集完整信号,再压缩”,压缩感知的思路是“信号本身是稀疏的,我可以直接从少量线性测量里恢复它”。标准数学模型是:

$$y = A x + e, \quad \min_x |x|_1 \quad \text{s.t.} \quad |y - A x|_2 \le \epsilon$$

这里 x 是待恢复的稀疏信号,A 是测量矩阵,y 是观测值。线性压缩感知有漂亮的理论支撑:有限等距性质(RIP)、零空间条件、L1范数可以恢复稀疏解等等,而且ISTA/FISTA、ADMM这些算法都足够成熟。

问题在于,真实世界的很多观测模型根本不是线性映射,光刻成像就是典型例子。光源、掩模到晶圆像的关系是二次的、卷积的,绝不是一个矩阵乘法能描述。所以就有了非线性压缩感知(Nonlinear Compressed Sensing)的思路:观测算子变成非线性映射,但仍然假设信号在某个域里是稀疏的,只是恢复算法要重新设计。

2.2 光源的稀疏性来自可制造性约束

很多人会问:SMO里的变量到底是哪里稀疏?首先是光源。自由照明源(Freeform Source)在理论上每个像素都可以有独立的强度值,自由度很高;但真正能上线制造的光源不是这样的。光刻机的照明系统对光源形状有严格的物理限制,任意像素级强度分布造不出来,即使造出来,杂散光和能量利用率也会让你崩溃。

所以你会观察到,一个真正收敛到可制造方案的SMO结果,光源强度分布往往呈现“少数几个高亮度岛 + 大片零强度区”的结构。也就是说,光源在像素域里天然是稀疏的:大多数像素的强度是0,只有少数像素承载主要能量。这种先验用数学语言表达就是 ||S||₀ 尽量小,工程上常用凸松弛的 L1 范数 ||S||₁ 来逼近。再加上总剂量约束(比如归一化 ∑s_i=1),每个源点的强度不能无限大,问题就变成了一个带稀疏正则和约束的优化。

我在实际项目中的感受是:光源的稀疏约束不能加得太狠。加太狠会把自由照明源压成一个单亮点,退化成传统照明,SMO就完全失去意义。合理的做法是把稀疏约束当成“可制造性偏好”而不是硬规则,保证优化后的源还有足够的离轴角度来提升工艺窗口。

2.3 掩模的稀疏性藏在边缘梯度里

掩模本身的像素分布一点也不稀疏——随便找一个逻辑层的掩模图形,透射率在空间上密密麻麻全是1和0,像素域里谈不上稀疏。但掩模的梯度域完全不一样:大部分区域内部是平坦的,只有图形边缘处才有剧烈的透射率跳变。换句话说,掩模在梯度域(或者更准确地说,在边缘指示函数这个域)是稀疏的。

这就是总变差(Total Variation, TV)正则的物理基础:

$$|\nabla m|1 = \sum{x,y} \sqrt{(\partial_x m)^2 + (\partial_y m)^2}$$

用TV项做正则,本质上是惩罚掩模边缘的总长度,实现两件事:一是压制优化过程中产生的孤立像素、毛刺、碎片化结构,让掩模更贴近实际可制造的版图;二是鼓励图形边缘保持清晰锐利,和光刻目标的“垂直侧壁”追求是一致的。如果你不用这个正则,掩模优化结果经常会长出一堆“雪花点”——数值上每个点都让目标函数变小一点,但工艺上根本没法用。

另一个必须提的点是掩模的幅值约束。二元掩模要求 m∈{0,1},相移掩模要求 m∈{-1,0,1}。直接在这类离散集合上优化是组合爆炸问题,所以工程里几乎都先松弛到连续区间 [0,1] 或 [-1,1],优化后期再通过二值化、阈值化或退火惩罚收敛回离散值。这个“松弛-再二值化”的过程,也是SMO数学模型里最微妙、最容易翻车的地方,后面我会单独讲。

3. 核心数学模型:非线性观测算子与正则化目标函数

3.1 光刻成像算子不是线性映射

把SMO放进压缩感知框架的第一步,是明确“测量模型”。这里待恢复的变量是光源向量 s 和掩模函数 m,观测目标不是某个“传感器输出”,而是晶圆上我们希望得到的目标图形 R_target(x,y)。

正向算子可以记为:

$$\Phi(m, S) = \mathcal{P}\left( \sum_{i=1}^{N_s} s_i \left| h_i * m \right|^2 \right)$$

其中 \mathcal{P} 表示光刻胶的阈值/显影等非线性响应。这个 \Phi 对 m 和 S 都是非线性的:对 S 是线性的(强度加权求和),对 m 是二次的(模平方),再对叠加结果做光刻胶非线性。所以整个算子绝不是线性测量 y=Ax 能概括的,这正是“非线性压缩感知”这个名字的由来。

3.2 完整的目标函数长什么样

一个典型、可落地的SMO数学模型可以写成这样:

$$\min_{m, S} ; J(m,S) = | \Phi(m,S) - R_{target} |_F^2 + \lambda_1 | S |_1 + \lambda_2 | \nabla m |1 + \beta \sum{x,y} m(x,y)(1 - m(x,y))$$

约束条件:

$$0 \le m(x,y) \le 1, \quad 0 \le s_i \le s_{max}, \quad \sum_{i=1}^{N_s} s_i = 1$$

逐项解释一下这个目标函数的设计意图:

  • 第一项 |\Phi(m,S) - R_{target}|_F^2 是数据保真项,衡量光刻成像结果和目标图形的差异。对于线条类图形,也可以用边缘放置误差(EPE)代替像素级平方误差,因为EPE对晶体管性能更直接,但它不可微,通常用平滑近似。实际工程往往混合使用:前期用L2保真项快速收敛,后期换成EPE加权进一步精修。
  • 第二项 \lambda_1|S|_1 是光源的稀疏正则,前面已经讲过,偏置光源往“少数强源点”方向走,增强可制造性。
  • 第三项 \lambda_2|\nabla m|_1 是掩模边缘稀疏正则(TV项),压制毛刺、控制图形复杂度。
  • 第四项 \beta \sum m(1-m) 是二值惩罚项,当 β 从0.1逐渐增大到5甚至10时,连续值掩模会被“推”向0或1,这是二值化退火的标准做法,比最后一步强行阈值稳定得多。

需要特别说明的是,这个目标函数整体仍然是非凸的。稀疏正则项本身是凸的,但数据保真项关于 m 非凸,所以整个问题靠的是“稀疏先验让可行域更紧 + 迭代算法在局部区域找到好解”这个组合拳。这不是理论上的完美问题,而是工程上最有效的折中。

3.3 线性压缩感知与非线性压缩感知到底差在哪

用表格把两者的差异理清楚最直观:

维度线性压缩感知非线性压缩感知(用于SMO)
观测模型y = A x + ey = Φ(x) + e,Φ为光刻成像
理论保障RIP、零空间条件局部Lipschitz条件、局部凸性
稀疏载体信号本身稀疏光源域稀疏、掩模梯度域稀疏
常用算法ISTA/FISTA、ADMM、AMP近端梯度(每次需算雅可比)、Gauss-Newton + prox
主要难点测量矩阵设计非线性算子求导、多局部极小、参数标定
迭代策略固定A,可预计算常用算子每轮更新光源、掩模,雅可比随变量变化

这个对比背后有一个关键认知:在非线性压缩感知里,你没法预先算一个“测量矩阵”存起来,因为每次 x 变了,\Phi 的雅可比就变了。SMO里源变了,所有 h_i 的加权方式就变;掩模变了,衍射场和成像都变。所以每一次迭代都要重新评估正向模型、重新计算梯度,这也是SMO计算量巨大的根本原因。

3.3.1 那RIP去哪了

线性压缩感知的RIP条件在非线性场景下基本不成立,因为非线性算子可以对不同稀疏信号产生非常相似的观测结果。SMO里最直观的例子就是掩模图形平移、旋转或镜像后,优化结果几乎等价,但信号完全不是同一个。理论分析退而求其次,只能依赖局部分析:假设 \Phi 在某点附近足够光滑、Lipschitz常数可控、初始点足够接近全局最优,那么迭代收敛有保障。这也解释了为什么SMO对初值如此敏感——不是算法不行,是问题本身非凸,初值决定了你会掉进哪个局部极小。

4. 从模型到算法:近端梯度、交替方向与伪代码实现

4.1 近端梯度:把光滑和不光滑的部分分开处理

模型建好之后,下一步是设计算法。目标函数里,数据保真项本身可微(通过雅可比计算梯度),但稀疏正则项和TV项不可微。直接对这个整体求梯度做不到,于是近端梯度法(Proximal Gradient Method)就是最自然的解法。

算法每次迭代做两步:

  1. 在光滑部分(数据保真项)上走一步梯度:\tilde{x} = x^k - \alpha \nabla f(x^k)
  2. 在非光滑正则部分做近端映射:x^{k+1} = prox_{\alpha g}(\tilde{x})

对于 L1 稀疏正则,近端映射就是软阈值:

$$prox_{\alpha \lambda |\cdot|_1}(u) = \text{sign}(u) \cdot \max(|u| - \alpha\lambda, 0)$$

对于 TV 正则,近端映射没有显式简单公式,但可以用Chambolle投影算法、或者用FISTA在子问题上迭代求解。实际工程中,我很少写自己实现的TV去噪,直接调用图像处理库里的TV去噪器反而是更稳妥的选择。

对于掩模幅值约束 0≤m≤1,近端映射就是clip到区间 [0,1]:

$$prox_{\mathcal{C}}(m) = \min(1, \max(0, m))$$

再加上最关键的除法技巧:掩模和二值惩罚项 \beta m(1-m) 是非光滑的(在边界处不可导),但在连续松弛阶段可以把它当作光滑惩罚放进梯度里,梯度是 \beta(1-2m),很好算。这和近端映射完全兼容。

4.2 源-掩模交替优化的工程细节

SMO的变量尺度差异极大:光源几十到几百个自由度,掩模上亿个自由度。如果直接用联合梯度更新,光源的微小变化会被掩模的巨量梯度淹没,整个优化过程极不稳定。工程上几乎无一例外采用交替优化(Alternating Optimization):固定掩模优化光源,固定光源再优化掩模,反复循环。

我自己的经验是,每次光源更新频率不需要和掩模一样。比较稳定的节奏是:光源更新1步,掩模更新3到5步,形成一种“慢源快掩模”的锁步关系。道理很简单:光源改变了全局的照明条件,掩模需要在新的照明下重新适应;如果两边同频大步更新,容易出现“源改一点、掩模补偿一点、目标值原地振荡”的跷跷板现象。

还有一个从来没写进论文、但实际极坑的细节:光源的剂量归一化约束 \sum s_i = 1 必须在每次更新后做投影。如果不做,整个系统的曝光剂量会随迭代漂移,晶圆上图形的CD(关键尺寸)也会系统性偏移。你会看到数据保真项在稳步下降,但EPE却在恶化——这种“指标打架”我排查过很多次,最后都是剂量漂移惹的祸。

4.3 一个能直接上手改的小实验骨架

这里给一段结构化伪代码,展示整个迭代的骨架。我没有贴成某个特定框架的API,方便你在自己的光刻仿真器上移植。

def smo_nonlinear_cs(mask_init, source_init, target, lr_s=1e-3, lr_m=1e-5, max_iter=200): m = mask_init.copy() # 连续掩模,[0,1] s = source_init.copy() # 光源向量,已归一化 beta = 0.1 # 二值惩罚初始值 beta_inc = 1.05 # 退火增长 lambda_s = 1e-4 # 光源L1稀疏正则 lambda_tv = 1e-3 # 掩模TV正则 for k in range(max_iter): # ---- 光源更新:固定掩模,带稀疏正则 ---- grad_s = compute_grad_source(m, s) # 伴随法求导 s = s - lr_s * grad_s s = soft_threshold(s, lambda_s * lr_s) # L1近端映射 s = project_source_constraints(s) # 非负、上限、总剂量归一化 # ---- 掩模更新:固定光源,更新多次 ---- for _ in range(3): grad_m = compute_grad_mask(m, s) # 伴随法求导 m = m - lr_m * grad_m m = clip(m, 0.0, 1.0) # 幅值约束 m = tv_denoise(m, weight=lambda_tv) # TV近端映射 # ---- 每若干轮提升二值惩罚强度 ---- if k % 20 == 19: beta *= beta_inc m = apply_binary_annealing(m, beta) if k % 5 == 0: print(f"iter {k}, loss={evaluate_loss(m, s, target):.6f}, " f"source_nnz={count_nonzero_source(s)}, " f"mask_contour_len={estimate_edge_length(m)}") return m, s

这段代码刻意省略了compute_grad_source和compute_grad_mask的具体实现,因为不同光刻模型下的导数表达式差异很大。一个容易上手的方式是:先对光刻模型生成的空间像强度写一个雅可比向量积(JVP)函数,用自动微分框架(比如PyTorch/JAX)求梯度,然后在CPU/GPU上跑小规模验证。我之前用一个64x64的掩模、16个源点做验证,100轮迭代大概几分钟能跑完,足够用来测试正则参数和迭代策略;但那只是验证模型,真正全芯片级别的SMO还是需要专用计算光刻平台。

5. 实操中反复踩过的坑与排查记录

5.1 正则参数到底怎么标定

第一类大坑是 \lambda_1、\lambda_2 不知道定多少。论文里经常一笔带过“通过交叉验证确定”,但真实世界里你的网格尺寸变了、光刻模型增益变了、像素尺寸变了,同一套参数直接废掉。我自己习惯的做法是:先用两个极端做边界扫描。

第一步,把 \lambda_1 和 \lambda_2 同时设为0,跑一段迭代,记下数据保真项能下降到的最小量级。这一步给你一个“保真项梯度强度”的参考。第二步,固定 \lambda_2 不变(比如给一个和保真项梯度同一量级的1e-2到1e-3),单独调 \lambda_1,观察光源的非零像素数量。理想状态是优化结束后光源有5到30个显著亮点,而不是几百个点都亮或者只剩1个点。第三步反过来调 \lambda_2。

经验值上,\lambda_1 通常比保真项梯度的典型范数低一个数量级,\lambda_2 也不能太大——TV正则过强会把图形转角处抹圆,掩模边缘的CD控制会崩。如果条件允许,画一张 L 曲线:横轴是掩模总变差 |\nabla m|_1,纵轴是数据保真项,取曲线拐角处的参数区间,那个位置是稀疏性和保真度的最佳折中。

5.2 光刻胶模型的梯度消失

光刻胶响应 \mathcal{P} 通常是一个Sigmoid型函数,比如 \mathcal{P}(I) = 1/(1+e^{-\alpha(I - I_{th})})。这个函数的导数在远离阈值 I_{th} 的地方非常小,饱和区梯度几乎为0。训练过神经网络的人看到这个立刻能反应:这就是梯度消失。

在SMO里,现象非常典型:初始几步数据保真项下降很快,但到后期掩模边缘附近的像素已经进入Sigmoid饱和区,梯度信号极其微弱,迭代几乎停滞,但掩模图形还差一点才能达到最优。处理方法有两种,我一般都组合使用:

  • 分阶段优化:前80%的迭代用“无光刻胶模型”,直接对空间像强度 I 做保真项,避免Sigmoid对梯度的削弱;最后20%再把光刻胶模型接入,做微调。
  • 平滑化Sigmoid:把 \alpha 从一个较小的值逐步增加到最终值,这也是一种退火策略,实际效果很稳。

5.3 二值化与连续松弛之间的拉锯

掩模从连续 [0,1] 变到二值 {0,1} 是SMO最脆弱的环节。早期我追求简单,直接在收敛后对连续掩模做硬阈值(比如0.5)。结果每次都吃瘪:阈值后的掩模EPE比连续解反弹0.5到1nm,甚至更多,边缘位置也有系统性偏移。

后来我改成“二值惩罚退火”,就是目标函数里那个 \beta \sum m(1-m) 项。0.1起步,每20轮增长5%,大概一百来轮之后,掩模的过渡区域会被惩罚项压得越来越窄,图形自然趋近0和1。这个方法的好处是让优化器自己决定“什么时候二值化”,而不是你强行在某一步截断,体验完全不一样。

5.4 从裁剪区域到全芯片的尺度灾难

你在裁剪区域(比如2um x 2um)上的SMO结果看起来不错,但直接推广到全芯片绝对会出问题。首先是计算量:变量从百万级涨到十亿级,近端梯度的每一步都涉及多次FFT,这个压力不是线性增长,是几何级数增长。

全芯片级别的SMO工程上都用分块策略,但分块不是简单切豆腐。晶圆成像时,邻近块之间的衍射效应会有重叠区,所以你切块时每边必须留出足够的边界重叠(常见做法是留几个 λ/NA 周期的宽度),优化完成后再把重叠裁掉。如果你不处理重叠,拼接处会出现明显的CD跳变,后道工序立刻就能看到。

另外,很多团队会在裁剪区域验证SMO收益,然后只在最高价值的层次(比如存储器的关键层级、逻辑的Metal层)做全芯片SMO。哪怕是这些层,往往也只对工艺窗口最紧张的图形区域做局部SMO,而后再做传统的OPC。这完全是工程上的成本收益权衡:不是所有图形都值得用SMO。

这里我把过程中常踩的坑整理成一个快速排查表:

症状可能原因排查思路
数据保真项降,EPE反而恶化光源总剂量漂移检查每次迭代后 ∑s 是否等于1,强制投影
掩模上出现雪花点/毛刺TV正则系数太小增大 \lambda_2,观察边缘长度是否下降
光源收敛成单点稀疏正则过强减小 \lambda_1,看光源亮点数是否恢复
后期迭代几乎不动Sigmoid饱和区梯度消失分阶段优化,后期再接光刻胶模型
掩模在0.5附近振荡不收敛二值惩罚系数不足提高 β 退火强度,或延长退火周期
分块拼接处CD跳变块边界重叠不够至少留多倍 λ/NA 宽的边界重叠

6. 这套数学模型的后续延伸方向

6.1 把深度学习生成先验嵌进非线性压缩感知

稀疏正则说到底是一种手工设计的先验,它假设“源是稀疏的、掩模边缘是稀疏的”。但真实的高质量掩模分布,其实远不止“边缘稀疏”这么简单——版图有设计规则、有工艺偏置、有辅助图形放置规范。这几年我做调研时看到的一个方向,是用深度学习网络把掩模的流形结构学出来,然后用“网络生成器 + 低维隐变量”替代手工稀疏正则。这在数学上等于把 L1/TV 正则换成一个学习到的先验分布。

这个思路跟非线性压缩感知完美契合:观测模型还是那个非线性光刻成像算子,稀疏性不再靠L1逼迫,而是靠生成器的低维隐变量隐式保证。代价是网络训练需要大量高质量的掩模样本,而且可解释性变差。我个人的判断是未来3到5年,这个方向很可能成为下一代SMO工具的核心引擎,但在大规模工程落地之前,L1/TV作为可靠基线依然有用。

6.2 把更多物理约束编进数学模型

另一个我关注的方向是把可制造性规则直接写成约束,而不是间接用稀疏性去“诱导”。比如掩模上辅助图形的最小宽度、最小间距,都可以写成线性不等式约束或惩罚项。把这些硬规则加进近端梯度框架并不算难,但要注意的是每个额外约束都是一个非光滑近端映射,迭代步长的选取、收敛性分析都会变得更微妙,代码实现也容易出性能瓶颈。

6.3 从裁剪区域到全芯片的一体化流程

现在很多团队的实际SMO流程还是“裁剪区域SMO + 全芯片OPC”的两段式,数学上并不十分自洽。理想的一体化流程应当让SMO的结果无缝衔接下游OPC,而不是各干各的最后再协调。要做到这一点,就需要在一块较大的版图上同时处理光源全局变量和掩模分块变量,目前的主流做法是引入“分块协调”机制,每个分块变量共享同一套光源,但掩模各自独立更新。这套机制从数学上看非常接近分布式优化里的ADMM——分块子问题并行解,全局光源作为耦合变量协调。我个人认为这才是非线性压缩感知在SMO里最自然的大规模落地路径。

最后分享一个小经验:无论你决定用哪种数学模型做SMO,第一优先级永远是先把正向光刻模型的精度做扎实,再谈稀疏正则和算法改进。我见过不少项目在正则参数上死磕,最后发现是正向模型的光刻胶参数没标定好——你优化得再努力,也是在一个不准确的物理模型上自嗨。先把光刻模型验证到位,非线性压缩感知带来的收益才能真正在晶圆上兑现。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 5:27:42

基于ROS的多无人机编队仿真:架构、算法与避坑指南

简介:一套基于ROS的多无人机编队仿真项目源码,面向无人机控制、算法和智能机器方向的研究者、竞赛队伍及ROS进阶学习者。项目中覆盖PX4/ArduPilot等底层控制接口、多机通信、路径规划、避障、视觉定位与编队协同等关键模块,并配套Gazebo等仿真…

作者头像 李华
网站建设 2026/10/22 5:25:28

180个Claude Code视频处理Skill盘点:107个冷门宝藏与流水线实战

1. 从"只会写代码"到"能剪片子":为什么给 Claude Code 装 Skill 这件事值得聊第一次看到"让 Claude Code 学会做视频"这个说法,我脑子里冒出来的第一个念头是:它本来不就是个写代码的终端助手吗,怎…

作者头像 李华
网站建设 2026/10/22 5:25:27

Suno API接入实战:稳定又便宜的AI音乐生成方案

“稳定又便宜”这个词放在一起的时候,懂行的人第一反应往往是“怎么可能”,尤其是AI生成类的接口服务。但这次我实际用下来,确实踩到过一个性价比和稳定性都超出预期的Suno API接入方案。先说结论:如果你正在做短视频批量配乐、互…

作者头像 李华
网站建设 2026/10/22 5:25:17

IPv4路由查找精讲:从LPM到前缀树的工程实践与性能优化

有没有想过这样一个问题:一个IPv4报文转发出去之前,设备到底做了多少次内存访问、多少次比较,才找到正确的那条路由?很多同行一开始觉得路由查找不就是“查表”嘛——目标IP对上路由条目,命中就转发。可真到要自己动手…

作者头像 李华
网站建设 2026/10/22 5:25:08

企业AI选型:个人版AI助手 vs 数字员工平台的五维对比

今年我连着接了好几个选型咨询,问得最多的一句话几乎一模一样:“我们给全公司每人开一个个人版AI助手账号,一年下来也就百来万,为什么还要多花几百万去上数字员工平台?”每次听到这个问题,我都会先反问一句…

作者头像 李华