Lumerical Python API学习(五)——光子逆向设计概述

Photonic Inverse Design Overview - Python API

来自 https://support.lumerical.com/hc/en-us/articles/360049853854-Photonic-Inverse-Design-Overview-Python-API

Lumerical Python API学习(五)——光子逆向设计概述_第1张图片

一、动机

随着器件密度和集成度的提高,光子集成电路变得越来越复杂。通常,需要平衡几个相互竞争的设计约束,例如性能、制造公差、紧凑性等。传统的设计周期涉及系统地改变一小组特征参数,模拟这些设备以确定它们的性能并进行迭代以满足设计要求。尽管此过程很简单,但一旦您引入了多个设计参数,即使是经验丰富的设计师也会与他们的直觉作斗争。为了克服人类的限制,聪明的工程师可能会使用数学方法来开始预测强大的候选者并更快地收敛到令人满意的设计。

让我们考虑梯度下降优化(gradient descent optimization);我们可以将参数视为设计空间中的坐标,将品质因数(figure of merit)视为由该空间中的表面表示的这些参数的函数。首先,我们需要定义一个封装我们设计性能的品质因数。从理论上讲,这可以是任何东西,但正如您将看到的那样,我们将自己限制在仅考虑导模光学中的功率传输。虽然,我们事先不知道品质因数表面是什么样子,但我们可以使用 FDTD 等物理模拟器为给定的一组参数计算它。在这里,我们可以看到两个参数的 FOM 表面可能是什么样子。
Lumerical Python API学习(五)——光子逆向设计概述_第2张图片
图 1:FOM表面

要绘制两个参数的分析函数,可以直接定义结构化网格并计算每个点的输出; 然而,在我们的框架中,每个 FOM 计算都需要计算成本高昂的模拟。 扫描两个参数我们可以粗略地映射 FOM,但不能保证我们已经解析了重要的特征,如下图所示。
Lumerical Python API学习(五)——光子逆向设计概述_第3张图片
图 2:欠采样的参数空间

最终我们的目标是找到一个“最优”的解决方案,而系统地计算表面是不必要的昂贵; 此外,当我们的空间维度扩展到 10、100 或 1000 个参数时,这个过程变得难以处理。 相反,如果我们在每个函数调用时引入一些开销( overhead)来计算梯度,我们可以更仔细地确定下一组参数,这样我们就可以用更短的路径找到最佳解决方案。
Lumerical Python API学习(五)——光子逆向设计概述_第4张图片
图 3:梯度下降流线

图 3 说明了使用流线(streamlines)的函数的梯度。 优化器将朝着流线的方向移动,但我们没有考虑其他重要因素,如步长( step-size)或预处理(preconditioning)。 注意局部最小值(local minima)作为起始位置的收集器; 然而,一些起始位置不会达到这些最小值,例如沿山脊边缘的位置。 在我们的实现中,我们最小化 FOM,通常称为成本函数(the cost function),相当于最大化 FOM。 有关梯度下降方法的进一步讨论,请参阅以下文章。

• Gradient Descent: All you Need to Know
• Intro to optimization in deep learning: Gradient Descent
•Scipy Tutorial on Mathematical Optimization

个人翻译:逆向设计相关算法学习(一)——梯度下降(Gradient Descent)

二、伴随法

Lumerical Python API学习(五)——光子逆向设计概述_第5张图片
有关更严格的推导和更多信息,请参阅以下优秀资源。

• Adjoint shape optimization applied to electromagnetic design, Optics Express 2013 Vol. 21, Issue 18(2013)
•Optimizing Nanophotonics: from Photorecievers to Waveguides (THESIS), Christopher Lalau-Keraly

三、形状与拓扑

这种无源光子组件设计周期的范式转变,我们通常称为逆向设计。 为了使该方案起作用,工程师提供了以下内容:

•模拟设置
•设计参数化
•品质因数
•包括占地面积(footprint)和材料在内的合理起点

初始化后,优化器会自动遍历更高维度的设计空间,探索新颖的设计,并在具有出色性能的设备上收敛。 此外,实施的技术将解决方案限制在可制造的约束范围内,并在工艺角落包括性能考虑。
Lumerical Python API学习(五)——光子逆向设计概述_第6张图片
上面概述的伴随方法被打包为一个名为 lumopt 的 python 模块,它使用 Lumerical FDTD 作为客户端来求解 Maxwell 的方程和 scipy 库来执行优化。最初的努力是由 Christopher Keraly 进行的,这个公式记录在 Lumopt Read the Docs 下。 Github 上托管的版本与 Lumerical 安装程序附带的 lumopt 模块之间存在一些差异。尽管有许多共同点,但我们在这里专门指的是捆绑的 Lumerical 版本。使用这个 lumopt 框架需要求解器许可证和 API 许可证。

Lumopt 有两种不同的风格——形状优化和拓扑优化。通过形状优化,可以直接定义要变化的几何参数,以及这些参数的界限。例如,沿Y分束器边缘的坐标。这允许用户从一个好的初始起点开始设计并对其进行改进;但是,定义几何形状需要一些工作,并且可以通过此参数化实现的解决方案集可能会受到限制。像这样的显式参数化意味着可轻松执行可制造性的设计规则。
Lumerical Python API学习(五)——光子逆向设计概述_第7张图片

拓扑逆向设计要求用户简单地定义可优化的封装和所涉及的材料。 结果,参数只是该区域的体素,允许实现非常不直观的形状。 通常会实现莫名其妙的形状和出色的性能,但由于出现的小特征,这些结构往往更难用光刻法制造。 我们采取了多种措施来确保它们的可制造性,包括平滑函数和惩罚项以减少小特征。

有关 lumopt 的安装和机制,请参阅下一节。

你可能感兴趣的:(FDTD学习笔记,FDTD,Solutions,时域有限差分法,逆向设计,Python,API,微纳光学仿真)