想象你是一位灯光师,手里握着一批精密的光学灯具。它们不是传统的电子灯,而是靠“拧相位旋钮”来控制光束的仪器。光在其中以每秒钟三十万公里的速度奔跑,功耗却低得惊人。你的任务,是让这些灯具在舞台上投出导演想要的光影。这就像训练一个光子神经网络(ONN):你要调整的不是电流,而是一个个光学参数,让光流完成正确的计算。 但麻烦来了:这些“光学灯具”脾气古怪。有的老化发黄,有的受温度影响悄悄漂移,灯具的旋转臂还有物理极限。更重要的是,你无法像训练电子芯片那样把参数想设多大就设多大。你得学会一套全新的“调灯”方法——可微光学元件的梯度计算、非理想特性的补偿、物理约束下的优化、先在电脑里预演再上真舞台…… 这篇文章就带你走进光子神经网络训练的世界,用“灯光师调灯”的故事,把训练策略的来龙去脉讲清楚。

岗位关联

对 AI 从业者而言,理解 ONN 训练策略,等于提前布局下一代低功耗 AI 计算:当 GPU 算力逼近瓶颈,懂得“如何让光学会计算”的工程师,将在算力革命中占据先机。

目录
  1. 可视化演示
  2. ONN训练基础
  3. 前向光学传播
  4. 光域反向传播
  5. 非理想特性补偿
  6. 物理约束与优化
  7. 仿真训练方法
  8. 训练部署与未来
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示ONN光信号前向传播、可微光学元件反向传播梯度更新,以及仿真与物理部署间的Loss Gap可视化。

本节配有交互动效(进入视口后自动加载,约 3KB)。

前向传播:光信号穿越MZI网格 输入光信号经MZI干涉器网格 相位调制实现矩阵乘法 Y = MZI_mesh(X, theta) 光信号通过可调MZI干涉器网格完成线性变换,检测器读出结果。

ONN训练基础

想象灯光师走进一座崭新的剧场,发现这里的灯具不是传统电子调光台,而是一排排靠“拧相位旋钮”控制的光学仪器。光在其中以接近物理极限的速度奔跑,功耗却低得惊人。但问题随之而来:这些“光学灯具”该怎么训练?灯光师习惯了电子调光台的“电流权重”——想调多亮就调多亮,正负随意。可光学灯具的旋钮是相位和分束比,读出的光是光强,永远是正的。这套全新的“调光语言”彻底改变了训练玩法。

这就是光子神经网络(ONN)训练的第一个认知转变:它是用光信号完成矩阵计算的计算范式,天然适配神经网络中的线性层,但它的“权重”是光学元件的物理参数。电子芯片里的梯度下降可以直接操纵连续权重,而光芯片的参数有周期性、有物理误差、还有读数方式带来的非线性。直接把 PyTorch 那套流程搬到光芯片上,就像把电子调光台的说明书硬套在光学灯具上——根本拧不动。

训练要从“可微的光学元件”入手。马赫-曾德尔干涉仪(MZI)是最常见的可调单元,由两个分束器和两个移相器构成,它的传递函数对相位参数可微。只要整个光路的数学模型可微,梯度就能算出来,反向传播就有了立足点。我们把光网络整体看作一个参数化矩阵 $M(\theta)$,输入 $x$ 经过它得到输出 $y$。

灯光师要想调好这套光学灯具,第一步就是理解每个旋钮与幕布光影之间的对应关系——这正是可微性带来的礼物。没有可微,就没有方向;有了可微,每一次拧旋钮都有据可依。

y=M(θ) x\displaystyle y = M(\theta)\,x
这个公式是整个 ONN 训练的“总开关”:光信号 $x$ 穿过可调光网络 $M(\theta)$,得出输出 $y$。训练就是不断调整 $\theta$,让 $y$ 越来越接近目标。
  1. 输入向量 $x$光信号携带输入数据进入光网络,每个波导对应向量的一维,就像一束光被拆成多条并行的光束。
    x=[x1,x2,…,xn]Tx = [x_1, x_2, \ldots, x_n]^T
  2. 参数化矩阵 $M(\theta)$所有光学元件共同构成一个参数化线性变换,$\theta$ 表示所有可调相位旋钮的集合。
    M(θ)=∏k=1KUk(θk)M(\theta) = \prod_{k=1}^{K} U_k(\theta_k)
  3. 输出向量 $y$光经过变换后由探测器阵列读出,作为网络的输出结果,相当于幕布上的最终光影。
    y=M(θ) xy = M(\theta)\,x

前向光学传播

演出开始,光束从灯出发,经过透镜组、反光镜,一层层投射到幕布上。每一层光学器件都在改变光束的方向和强度。灯光师并不需要真的“看见”每一层内部的物理细节,他只需要知道:光从入口进去,经过这一整串灯具,最终会在幕布上形成怎样的光影。这就是 ONN 的前向传播——让光真实地穿过整个芯片。

光在波导中传播是相干叠加的,波导把光束约束在纳米尺度的“光轨”上。MZI 这个基本灯具通过两条光路的相位差形成干涉,等效于一个 $2\times 2$ 的酉矩阵——一种保持能量守恒的线性变换。把许多 MZI 排成网格,每一层就对应一次矩阵乘法。整个芯片等效于一个大型酉变换 $U(\theta)$,输入光场经过它得到输出光场。

前向传播在训练中承担着“试演”的角色。每一次参数更新后,都要让光真实地跑一遍,读出幕布上的光影(探测器阵列的光强分布),与导演想要的目标光影对比,算出损失。这里的损失不是抽象的数字,而是实实在在的光强差距——哪里太亮、哪里太暗,一目了然。

每一层灯具都在“加工”光束,直到最后一盏灯把光投到幕布上——这就是一次前向演出,也是训练时最自然的一次“试演”。试演之后,才是真正考验灯光师功夫的时刻:怎么根据幕布上的偏差,倒推出每一盏灯该怎么拧。

U(θ)=∏k=1KMZIk(θk,φk)\displaystyle U(\theta) = \prod_{k=1}^{K} \text{MZI}_k(\theta_k, \varphi_k)
这个公式说明:整个光网络的变换是一串 MZI 单元连乘的结果。每个 MZI 有两个旋钮:分束角 $\theta_k$ 和相位 $\varphi_k$,它们决定了这盏“灯”如何加工光。
  1. 单个 MZI 传递矩阵一个 MZI 单元实现 $2\times 2$ 酉变换,由分束比 $\theta_k$ 和相位 $\varphi_k$ 决定,就像一盏灯的两个旋钮。
    MZIk(θk,φk)=[eiφkcos⁡θksin⁡θk−sin⁡θke−iφkcos⁡θk]\text{MZI}_k(\theta_k, \varphi_k) = \begin{bmatrix} e^{i\varphi_k}\cos\theta_k & \sin\theta_k \\ -\sin\theta_k & e^{-i\varphi_k}\cos\theta_k \end{bmatrix}
  2. 级联乘积多层 MZI 按拓扑顺序连乘,组成整个光网络的变换矩阵,对应光一层层穿过灯架。
    U(θ)=∏k=1KMZIk(θk,φk)U(\theta) = \prod_{k=1}^{K} \text{MZI}_k(\theta_k, \varphi_k)
  3. 酉矩阵性质理想光路是无损的,因此总变换满足 $U^{\dagger}U = I$,即能量守恒——光不会凭空消失,只会重新分配。
    U†U=IU^{\dagger}U = I

光域反向传播

导演皱起眉头:“幕布右边的光斑太亮,左边的太暗。”灯光师站在舞台中央,眼睛盯着幕布,脑子里却开始倒着过一遍每一盏灯的线路:这团太亮的光,是从哪几盏灯来的?它们各自的旋钮该往哪个方向拧、拧多少?这个“从结果倒推原因”的过程,就是 ONN 训练中的光域反向传播。

光域反向传播的关键在于:每个光学元件的传输函数都可微。因此可以像电子深度学习一样,用链式法则把损失对输出的敏感度传回每一个相位参数。工程上常用的实现有两种:一是建立可微的数字模型,在模型里做标准的自动微分;二是光学伴随法——让一束“共轭光”从输出端反向穿过光路,用干涉来直接读出梯度。无论哪种方式,最终都得到一个数学对象:损失对每个相位参数的偏导数。

得到梯度之后,就用梯度下降更新相位参数。由于光场是复数域的量,物理上可执行的更新方向取梯度的实部。这一步有点像灯光师在笔记本上写下“三号灯逆时针拧 5 度,五号灯顺时针拧 3 度”,然后逐个执行。

灯光师在脑子里“倒放”每一盏灯的线路,光域反向传播就是把这条脑内线路变成严格的数学和光学。有了梯度,训练就不再是盲人摸象,而是一场有方向的精密调校。

∂L∂θk=Re⁡[(∂L∂y)T∂y∂θk]\displaystyle \frac{\partial L}{\partial \theta_k} = \operatorname{Re}\left[\left(\frac{\partial L}{\partial y}\right)^T \frac{\partial y}{\partial \theta_k}\right]
这个公式是光域反向传播的“施工图”:先算损失对输出的敏感度,再算输出对每个旋钮的敏感度,两者相乘取实部,就是该旋钮的调整方向。
  1. 损失对输出的敏感度先算出损失函数 $L$ 对网络输出 $y$ 的梯度,这是误差的“源头”,等价于幕布光影偏差的数学化。
    ∂L∂y=2(y−ytarget)\frac{\partial L}{\partial y} = 2(y - y_{\text{target}})
  2. 输出对相位的敏感度再求输出 $y$ 对第 $k$ 个相位参数 $\theta_k$ 的偏导,表示“拧这个旋钮对幕布光斑的影响大小”。
    ∂y∂θk=∂U(θ)∂θk x\frac{\partial y}{\partial \theta_k} = \frac{\partial U(\theta)}{\partial \theta_k}\,x
  3. 链式相乘取实部把两者相乘得到梯度,由于光场是复数,物理更新方向取实部。
    ∂L∂θk=Re⁡[(∂L∂y)T∂y∂θk]\frac{\partial L}{\partial \theta_k} = \operatorname{Re}\left[\left(\frac{\partial L}{\partial y}\right)^T \frac{\partial y}{\partial \theta_k}\right]

非理想特性补偿

舞台上有几盏灯用了三年开始发黄,剧场空调让温度忽高忽低,连空气里的灰尘都在调皮地遮挡光线。经验丰富的灯光师不会假装这些问题不存在,而是会准备一本“补偿簿”:哪盏灯偏亮、哪盏灯偏暗、温度每升高一度哪盏灯要额外拧多少。在真实的 ONN 芯片上,同样的问题每天都在发生。

ONN 的非理想特性来自三个主要方面。第一是工艺偏差:制造时光刻和刻蚀的微小误差,让实际相位偏离设计值,就像灯具出厂时旋钮刻度就歪了一点。第二是热漂移:温度改变材料的折射率,导致相位随温度缓慢移动,就像热胀冷缩让灯臂悄悄变形。第三是噪声:光子到达探测器像雨点一样有随机抖动(散粒噪声),加上电路热噪声,让读数不再精确。

补偿策略因此分为几个层次。在片校准:在芯片上集成参考光路和探测器,定期用已知信号“对表”;查找表:提前测出温度与相位偏移的对应关系,运行时查表修正;统计抑制:多次测量取平均,把随机抖动抹平。更重要的是,训练目标本身也应该把这些非理想项建模进去,让网络学会在“不完美的世界里”依然工作。

好的灯光师带着“补偿簿”,知道每盏灯比标称值亮多少、暗多少,提前多拧半圈。ONN 训练要落地,同样离不开对真实物理误差的建模与补偿。

θactual=θdesign+Δθ(T)+εfab\displaystyle \theta^{\text{actual}} = \theta^{\text{design}} + \Delta\theta(T) + \varepsilon^{\text{fab}}
这个公式说明:芯片上的真实相位,等于设计相位加上温度漂移和制造误差。训练和部署时都绕不开这个“现实修正项”。
  1. 设计相位 $\theta^{\text{design}}$仿真训练得到的理想相位值,是补偿的基准点,对应“灯光方案”里的理论旋钮位置。
    θdesign=arg⁡min⁡θE[L(θ)]\theta^{\text{design}} = \arg\min_{\theta} \mathbb{E}[L(\theta)]
  2. 温度漂移 $\Delta\theta(T)$环境温度改变材料折射率,导致实际相位偏离设计值,与温度差和光路径长度成正比。
    Δθ(T)=2πλdndT Lpath (T−T0)\Delta\theta(T) = \frac{2\pi}{\lambda}\frac{dn}{dT}\,L_{\text{path}}\,(T - T_0)
  3. 制造误差 $\varepsilon^{\text{fab}}$工艺偏差带来的固定偏移,可通过校准查找表逐片修正,就像给每盏灯建立独立的“性格档案”。
    θactual=θdesign+Δθ(T)+εfab\theta^{\text{actual}} = \theta^{\text{design}} + \Delta\theta(T) + \varepsilon^{\text{fab}}

物理约束与优化

灯具的旋转臂只能转有限的角度,电机转动需要时间,电力也有预算——灯光师不能要求一盏灯瞬间转到指定位置。优化方案必须贴着物理真实来设计。ONN 训练遇到的正是这类“带着镣铐跳舞”的问题:光学参数不是数学世界里任意精确的浮点数,而是一个个有物理边界的旋钮。

最典型的约束是相位范围。相位参数通常在 $[0, 2\pi)$ 区间内,超出部分会折叠回来,梯度下降时要特别小心边界效应——参数一旦越过边界,就会像旋转臂转过了头,反而回到原点附近。其次是调制速率:热光调制器靠加热改变折射率,响应速度慢(微秒到毫秒级);电光调制器快但能耗高。如果训练结果要求相位在极短时间内大幅跳变,硬件根本跟不上。第三是能耗约束:热光调制本质上是给芯片“加热”,大量相位同时更新会带来可观功耗。

因此,训练策略必须引入“物理意识”。参数更新后要投影回有效范围,避免越界;对于实时推理敏感的任务,训练出的参数要避免过于陡峭的相位跳变;更系统的做法是鲁棒优化——让训练目标对器件扰动不敏感,把参数解推向“安全区”。这样即使某个旋钮偏了几度,整个网络的性能也不会崩塌。

灯光师在安全操作手册里优化灯光方案,既保证效果又保证设备不坏——物理约束下的 ONN 训练正是这种“戴着镣铐跳舞”的工程艺术。

min⁡θ  Eδ∼P[L(θ+δ)]+λ ∥θ−θˉ∥2\displaystyle \min_{\theta}\;\mathbb{E}_{\delta \sim \mathcal{P}}\left[L(\theta + \delta)\right] + \lambda\,\|\theta - \bar{\theta}\|^2
这个公式是一个带物理意识的训练目标:既要让期望损失小,又要让参数落在“安全区”附近,避免依赖某个恰好精确的相位值。
  1. 期望损失项对器件扰动 $\delta$ 的分布求期望,让训练目标对随机误差不敏感,相当于“在各种意外情况下都要表现好”。
    Eδ∼P[L(θ+δ)]\mathbb{E}_{\delta \sim \mathcal{P}}[L(\theta + \delta)]
  2. 正则项 $R(\theta)$鼓励参数落在实现更容易、功耗更低的“安全区”,用 $\bar{\theta}$ 表示安全中心。
    λ R(θ)=λ ∥θ−θˉ∥2\lambda\,R(\theta) = \lambda\,\|\theta - \bar{\theta}\|^2
  3. 综合优化目标两项相加后对 $\theta$ 求最小,得到物理友好的参数解。
    min⁡θ  Eδ[L(θ+δ)]+λ ∥θ−θˉ∥2\min_{\theta}\;\mathbb{E}_{\delta}[L(\theta+\delta)] + \lambda\,\|\theta-\bar{\theta}\|^2

仿真训练方法

新剧上演前,灯光师先在电脑 3D 软件里搭建一座“数字剧场”,把所有灯具的参数输入进去,一遍遍地预演。预演通过之后,才把方案拿到真实舞台去装灯。这样既省钱又安全——总不能在真剧场里一遍遍试错,把昂贵的灯具烧坏。ONN 训练遵循同样的逻辑:先在仿真器里训练,再部署到真芯片。

仿真训练的核心是“数字孪生”:用可微的器件模型构成模拟器,让光网络在电脑里先学会计算。模拟器里的 MZI 用理想传递函数加上非理想修正项来建模,既保留了可微性,又逼近真实器件行为。工程师在模拟器里做标准的反向传播训练,可以快速尝试各种拓扑结构和超参数。但仿真和真实之间总有不匹配,称为 sim-to-real gap——电脑预演再完美,真实舞台上的烟尘、灯老化、电压波动总会带来意外。

弥合 gap 的主要手段有三种。领域随机化:训练时随机扰动器件参数,让网络见过各种“不完美”的情况,增强鲁棒性。领域迁移:用少量真实芯片的测量数据微调仿真训练出的参数,像灯光师到了真剧场快速走一遍台。硬件在环:把真实芯片接入训练循环,每次迭代都用真芯片的前向结果计算损失,让训练始终贴着硬件真实。

电脑预演能解决 90% 的问题,剩下 10% 必须在真实舞台上临场调整——这就是硬件在环的价值。聪明的工程师从第一天起就把“仿真+实机”当作一个整体来设计训练流程。

gap=∥ysim(θ)−yhw(θ)∥\displaystyle \text{gap} = \left\| y^{\text{sim}}(\theta) - y^{\text{hw}}(\theta) \right\|
这个公式量化了“电脑预演”和“真实舞台”之间的差距:同一组参数在仿真器和真实芯片上分别跑一遍,输出差异有多大。
  1. 仿真预测 $y^{\text{sim}}$数字孪生模拟器中对参数 $\theta$ 的预测输出,相当于电脑预演的光影效果。
    ysim=fsim(θ)y^{\text{sim}} = f^{\text{sim}}(\theta)
  2. 硬件实测 $y^{\text{hw}}$同一组参数在真实芯片上得到的光强读数,相当于真实舞台上的光影。
    yhw=fhw(θ)y^{\text{hw}} = f^{\text{hw}}(\theta)
  3. 差距度量两者差异的范数,是衡量仿真模型保真度的关键指标,gap 越小,预演越可信。
    gap=∥ysim(θ)−yhw(θ)∥\text{gap} = \left\| y^{\text{sim}}(\theta) - y^{\text{hw}}(\theta) \right\|

训练部署与未来

首演之后,灯光师并没有觉得万事大吉。每晚演出,他都会根据观众反应和灯具老化情况,悄悄微调灯具的位置和角度。他的灯光系统越用越顺手。ONN 训练的未来也是如此——训练不是一次性的,而是贯穿芯片整个生命周期的持续过程。

训练部署差距(training-deployment gap)是未来要持续面对的课题。芯片会老化,环境会变化,仿真模型会过时。因此,持续学习成为必备能力:在推理间隙插入短暂的校准阶段,用实时数据微调相位参数。更进一步的发展方向是片上训练——把小型控制电路与光芯片做异构集成,让芯片在运行环境中自主完成“前向传播-计算梯度-更新相位”的闭环。这样,芯片不再是一个“出厂即固定”的硬件,而是一个能自我进化的计算系统。

发展趋势也逐渐清晰:更大规模的可编程光阵列,成千上万个 MZI 集成在单一芯片上;与 CMOS 工艺的异构集成,让电子控制和光学计算各司其职;用 AI 辅助设计光器件本身,形成“用 AI 设计光、用光运行 AI”的循环。而在训练架构上,光电混合是最务实的路径——电子负责算梯度和控制,光学负责高速前向传播,两者配合,各取所长。

真正成熟的灯光系统,是在一次次演出中不断进化出来的。ONN 的训练策略,也正从“一次性离线训练”走向“边用边学的持续演化”。

θ(t+1)=θ(t)−η(t) g^(t)\displaystyle \theta^{(t+1)} = \theta^{(t)} - \eta^{(t)}\,\hat{g}^{(t)}
这个公式是持续训练的“心跳”:每一轮迭代,用当前估计的梯度方向 $\hat{g}^{(t)}$ 更新相位,步长 $\eta^{(t)}$ 控制调整幅度。
  1. 当前参数 $\theta^{(t)}$第 $t$ 轮训练时的相位配置,对应当前所有灯具旋钮的位置。
    θ(t)=[θ1(t),θ2(t),…,θK(t)]\theta^{(t)} = [\theta_1^{(t)}, \theta_2^{(t)}, \ldots, \theta_K^{(t)}]
  2. 梯度估计 $\hat{g}^{(t)}$由硬件在环或光学伴随法估计出的梯度方向,注意是“估计”——真实系统里梯度总带着噪声。
    g^(t)≈∇θL(θ(t))\hat{g}^{(t)} \approx \nabla_{\theta} L(\theta^{(t)})
  3. 迭代更新沿梯度反方向迈一小步,步长 $\eta$ 控制收敛速度,太大容易震荡,太小则收敛缓慢。
    θ(t+1)=θ(t)−η(t) g^(t)\theta^{(t+1)} = \theta^{(t)} - \eta^{(t)}\,\hat{g}^{(t)}

AI 应用场景

数据中心光互连芯片的在线校准

阶段:部署与监控

解决的问题:数据中心的光互连模块对温度极其敏感,环境温度波动 ±15°C 时,相位漂移会导致信号质量严重下降。传统做法是人工定期标定,成本高且跟不上环境变化。利用 ONN 训练中的“非理想特性补偿”策略,系统可在运行中自动校准。

具体案例:某数据中心在 100G 光互连模块中加入内置 MZI 微调结构和参考光路,每 30 分钟执行一次硬件在环校准:让一束参考光穿过光路,实时估计相位偏移,再通过查找表修正参数。实施后误码率下降了一个数量级,运维人力大幅减少。

光子AI加速器出厂训练流水线

阶段:生产与测试

解决的问题:每颗光子芯片的工艺偏差各不相同,如果逐片从零开始训练,成本高、周期长。仿真训练方法提供了新思路:先用数字孪生训练一套“通用参数”,再针对每颗芯片做少量微调。

具体案例:某光子 AI 加速器产线搭建了器件级数字孪生模型,在仿真器中完成大部分训练。测试台上用标准光信号扫描每颗芯片的偏差,生成独立的“偏差查找表”,只对少数关键相位做补偿微调。单芯片校准时间从小时级降到分钟级,良率显著提升。

边缘端低功耗光推理芯片的自适应

阶段:边缘部署与自适应

解决的问题:边缘设备温度波动大、电池能量有限,光芯片一旦出现热漂移,推理精度就会下降。传统方案是加大散热设计,而 ONN 的持续学习策略提供了更优雅的解法。

具体案例:一款用于智能摄像头的低功耗光推理芯片,集成了片上光电混合校准回路。芯片每 10 分钟用一条参考光路估计当前温度漂移,以极小能耗微调相位参数。在室温变化 20°C 的实际测试中,识别率始终保持在 95% 以上,无需主动散热。

Python 演示

python58 行
import numpy as np # 可微光学元件:MZI(马赫-曾德尔干涉仪)def mzi(x, theta, phi):    # 单个MZI对2维光信号的酉变换    U = np.array([        [np.cos(theta) * np.exp(1j * phi), 1j * np.sin(theta)],        [1j * np.sin(theta), np.cos(theta) * np.exp(-1j * phi)]    ])    return U @ x, U # 前向传播: 光信号逐层穿过MZI网络def forward(x, params):    v = x.astype(complex)    Us = []    for theta, phi in params:        v, U = mzi(v, theta, phi)        Us.append(U)    return v, Us # 损失: 输出光强与目标光强的差距def loss_fn(y_pred, y_true):    return np.mean(np.abs(y_pred - y_true) ** 2) # 数值梯度: 模拟光路的可微性, 用有限差分估计梯度def numerical_grad(x, y_true, params):    grad = []    eps = 1e-4    for i in range(len(params)):        gi = []        for j in range(2):            p_up = [np.array(p) for p in params]            p_up[i][j] += eps            y_up, _ = forward(x, p_up)            p_dn = [np.array(p) for p in params]            p_dn[i][j] -= eps            y_dn, _ = forward(x, p_dn)            gi.append((loss_fn(y_up, y_true) - loss_fn(y_dn, y_true)) / (2 * eps))        grad.append(np.array(gi))    return grad # 训练主循环: 梯度下降更新相位参数def train():    x = np.array([1.0, 0.5], dtype=float)    y_true = np.array([0.7, 0.2], dtype=float)    params = [np.array([0.8, 0.4]), np.array([1.1, 0.9])]    lr = 0.05    for epoch in range(50):        y_pred, _ = forward(x, params)        grad = numerical_grad(x, y_true, params)        for i in range(len(params)):            params[i] -= lr * grad[i]        if epoch % 10 == 0:            print(f"epoch {epoch:2d}, loss = {loss_fn(y_pred, y_true):.5f}")    print("final |y| =", np.round(np.abs(y_pred), 4)) if __name__ == "__main__":    train()
目的:用 NumPy 模拟一个两层的 MZI 光网络,通过数值梯度(模拟可微光路)完成相位参数的训练,演示 ONN 训练的核心思想。
  1. U @ x光信号穿过一个 MZI 的数学抽象,对应前向光学传播中的矩阵变换
  2. np.cos(theta) * np.exp(1j * phi)相位调制,$\theta$ 和 $\varphi$ 就是“灯光旋钮”
  3. np.abs(y_pred - y_true) ** 2探测器读光强,误差按光强差距计算
  4. numerical_grad用有限差分模拟“可微光路”,每次扰动一个参数观察损失变化
  5. params[i] -= lr * grad[i]梯度下降拧相位旋钮,对应光域反向传播的参数更新

常见误区

误区“把网络换成光学器件,剩下照搬 PyTorch 就行,反正都是梯度下降。”很多初学者以为深度学习框架的抽象层可以屏蔽所有硬件差异。

正解光学器件的参数是相位和分束比,有周期性;探测器只读光强,输出永远非负;非理想特性还会让批量归一化等电子芯片的常规技巧失效。就像电子调光台的说明书拿到光学灯具上根本拧不动,ONN 训练必须针对光路重新设计损失函数、参数更新规则和校准流程。

为何常见:深度学习框架让“训练=自动微分+优化器”的概念太深入人心,容易忽视底层硬件的物理特性差异。

误区“反正光路是线性的,只要算一次前向就完事了,不需要训练。”这种说法混淆了推理和训练两个阶段。

正解线性系统也需要确定参数才能完成特定任务。检测器的平方律(光强等于振幅的平方)本身就是非线性;而且大规模 MZI 网络的参数优化没有闭式解,必须靠梯度迭代搜索。前向只是“演出”,训练才是“排演”——没有排演,演出永远不会正确。

为何常见:把线性理解为“简单”,忽略了“找到最优参数”才是训练的本质目标。

误区“数字孪生这么逼真,仿真里损失降到零,部署肯定没问题。”许多项目组在仿真阶段过于乐观。

正解仿真模型与真实器件之间存在建模误差:工艺偏差、温度漂移、通道串扰都会让实际输出偏离仿真。必须通过硬件在环微调、领域随机化或校准查找表来弥合 gap。就像电脑预演的灯光方案,到了真实舞台还要根据现场烟尘和灯具老化做调整。

为何常见:仿真环境太理想,加上“仿真通过=验证完毕”的惯性思维,让人低估了硬件现实的残酷。

误区“真正的光训练,应该让光自己完成整个反向传播,否则不算光计算。”

正解工程上更常见的是光电混合训练:光路负责高速前向传播,电子电路或外部模型负责计算梯度,再把相位写回器件。全光反向传播是前沿研究课题,但不是工程落地的前提。就像灯光师可以先在纸上算好旋钮角度,再动手去拧——计算在哪里发生并不重要,重要的是结果正确。

为何常见:被“光计算”这个词带偏,以为整个训练流程都必须在光域完成才算先进。

误区“仿真里相位是 float64,硬件上应该也差不多吧。”初学者容易把仿真精度当成硬件精度。

正解真实相位移相器受制造误差、温度漂移、控制电压位数限制,通常只有有限有效精度。训练时要考虑参数鲁棒性,避免把性能寄托在某个“刚好精确”的相位值上。鲁棒优化和正则化就是为此设计的——让参数落在安全区,而不是悬崖边。

为何常见:仿真环境的抽象让硬件精度问题完全隐形,直到部署才发现“差之毫厘,谬以千里”。

面试题

Q1. 光子神经网络的核心计算优势是什么?

单选题 · easy

  • A.利用电子GPU做矩阵加速
  • B.用光做高速低功耗矩阵计算← 正确答案
  • C.完全依靠数字电路执行计算
  • D.依赖量子比特叠加加速计算

答案:B。正确选项是 B。A 描述的是电子 GPU 的路线,C 是传统数字电路,D 是量子计算。ONN 的本质是用光的传播完成矩阵计算,光速快且几乎没有焦耳热,就像灯光师的灯具组让光“免费”完成一次矩阵乘法。

Q2. MZI在ONN中扮演什么角色?

单选题 · easy

  • A.存储训练数据与标签
  • B.做可调的2×2酉矩阵变换← 正确答案
  • C.探测输出光强大小
  • D.提供非线性激活函数

答案:B。正确选项是 B。MZI 像一盏可调灯具,通过两个分束器和两个移相器实现任意 2×2 酉变换。A 是存储器职责,C 是探测器职责,D 是非线性单元职责,都不属于 MZI 的核心功能。

Q3. 为什么ONN训练需要可微光学元件?

单选题 · mid

  • A.为了显著加速模型推理
  • B.为了计算梯度做反向传播← 正确答案
  • C.为了增大光学传播损耗
  • D.为了支持叠加态信息存贮

答案:B。正确选项是 B。可微是梯度计算的前提,有了梯度才能反向传播更新参数。A 是推理加速、与训练无关;C 是要避免的坏现象;D 是量子计算概念。就像灯光师要知道每个旋钮对光影的“导数”,才能一步步往对的方向拧。

Q4. 训练ONN时的“非理想特性补偿”主要应对什么?

单选题 · mid

  • A.软件编译器层面的缺陷
  • B.硬件工艺热漂移等误差← 正确答案
  • C.训练数据分布不均衡
  • D.操作系统与驱动不兼容

答案:B。正确选项是 B。非理想特性包括工艺偏差、温度漂移、散粒噪声,它们让实际输出偏离设计值。A 是软件问题,C 是数据问题,D 与光路硬件无关。补偿的核心就是像灯光师带“补偿簿”一样,把硬件误差提前建模和修正。

Q5. 仿真训练与硬件部署之间的差距主要来自?

单选题 · mid

  • A.训练数据规模远远不够
  • B.仿真与真实器件行为不一致← 正确答案
  • C.学习率设置得过高过低
  • D.网络层数设计得太多

答案:B。正确选项是 B。sim-to-real gap 的本质是仿真模型永远是对真实器件的近似,建模误差就是差距的来源。A 是数据侧问题,C 是超参数问题,D 是网络架构问题,这些都不会直接造成仿真与硬件的失配。

Q6. 关于光域反向传播,下列说法正确的是?

单选题 · hard

  • A.光路能独立完成全部反向传播
  • B.靠可微模型计算梯度再更新相位← 正确答案
  • C.反向传播只能在软件中完全完成
  • D.训练时相位参数完全不可调节

答案:B。正确选项是 B。工程上常用可微模型或光学伴随法计算梯度,然后写回相位参数,构成光电混合训练。A 过于绝对,仍需探测器读数参与;C 排除了光学伴随法等硬件加速梯度方案;D 错误,相位参数正是训练要调整的对象。

Q7. 物理约束下优化ONN参数时,常用的鲁棒优化目标包括?

单选题 · hard

  • A.极小化最坏情况下的误差← 正确答案
  • B.最大化光在途中的损耗
  • C.把相位调到无穷大倍率
  • D.完全消除器件所有噪声

答案:A。正确选项是 A,即 min-max 优化,让最坏情况下的误差最小化。B 是反优化目标,C 超出物理可实现范围,D 不可能完全消除噪声(散粒噪声是量子本质)。鲁棒优化的思路是让参数落在“安全区”,即使器件有偏差也不会崩塌。

Q8. 以下哪些属于ONN仿真训练方法?

多选题 · mid

  • A.数字孪生模拟光路训练← 正确答案
  • B.器件级物理建模与仿真← 正确答案
  • C.硬件在环联合微调测试← 正确答案
  • D.随机梯度剪枝压缩模型

答案:ABC。正确选项是 A、B、C。数字孪生、器件级建模、硬件在环是仿真训练体系的三大支柱。D 是模型压缩剪枝技术,与光路仿真和训练没有直接关系。

Q9. 以下哪一项属于ONN的非理想特性来源?

单选题 · hard

  • A.芯片制造工艺参数偏差← 正确答案
  • B.训练数据标注错误问题
  • C.网络超参数设置不合理
  • D.操作系统调度延迟过高

答案:A。正确选项是 A。工艺偏差是制造层面导致实际相位偏离设计的核心非理想特性。B 是数据质量问题,C 是训练配置问题,D 是软件系统问题,都与光芯片的物理非理想特性无关。

Q10. 以下哪些是ONN训练的常见物理限制?

多选题 · easy

  • A.相位可调范围非常有限← 正确答案
  • B.相位调制速率存在上限← 正确答案
  • C.片上能耗受系统约束限制← 正确答案
  • D.无法完成任何矩阵计算

答案:ABC。正确选项是 A、B、C。相位范围 [0,2π)、调制速率上限、能耗约束都是 ONN 训练必须面对的物理限制。D 错误——ONN 的核心能力恰恰就是矩阵计算,这并非限制。