在光波小镇上,住着一位名叫阿光的匠人。他的工坊不靠齿轮,也不靠电线,而是用无数透明的“水管”把消息送来送去。更奇妙的是,水管里的“水”会像湖面一样波动:两股水波在蓄水池相遇,高浪叠高浪就变成巨浪,一浪起一浪落就互相抵消成平湖。阿光发现,只要控制每根管子的粗细(通道)和开闸的时刻(相位),就能让水波在流动的过程中自动完成“几股水按比例混合”的运算。这个原理,正是光子矩阵乘法的核心:光波在传播路径上天然地完成干涉、叠加,从而一次实现矩阵与向量的乘法。本文就从这间水波工坊出发,看看光如何用波动本性替我们算矩阵,以及它和电子计算到底谁更适合未来AI。

岗位关联

理解光计算原理,能让你站在架构层面看懂下一代AI加速器的底层逻辑,为设计高性能推理系统提供全新的“物理直觉”。

目录
  1. 可视化演示
  2. 光波本质
  3. 干涉计算
  4. 衍射计算
  5. 非线性效应
  6. 光学范式
  7. 光电子对比
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示光计算物理原理、光子矩阵乘法实现及光电子计算对比,交互切换理解光计算核心技术。

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

'+modeData.principle.caption+'

光波本质

阿光每天开工前,都要先检查水波的三件套:水面抬多高、波纹密不密、波峰什么时候到。水面抬多高,决定这股水有多“猛”;波纹的疏密,对应水流的“颜色”;波峰早到晚到,则决定了多股水汇在一起是会互相帮衬还是互相拆台。光波也一样,它表面上看是连续的波动,实际上可以精确拆成几个关键的“旋钮”,而这些旋钮正是光计算的输入原材料。

在物理上,光波用复数振幅描述最方便。一个沿 \(x\) 方向传播的平面光波可以写成:

回到工坊,阿光手里的三件套就是振幅、频率和相位。后续所有光计算,本质上都是操控这三个旋钮,让它们在传播路上自己“算起来”。

E(x,t)=Acos⁡(kx−ωt+φ0)\displaystyle E(x,t) = A\cos\left(kx - \omega t + \varphi_0\right)
这个式子把光波拆成“多高、多密、早晚”三个独立旋钮:振幅 \(A\)、波数 \(k\) 和角频率 \(\omega\),以及初始相位 \(\varphi_0\)。
  1. 振幅 \(A\)波峰到平衡位置的距离,决定光的强弱;探测器实际读到的是振幅的平方,也就是光强 \(I \propto A^2\)。
    AA
  2. 波数 \(k\)表示波在空间上变化得多快,与波长成反比,\(k = 2\pi / \lambda\)。
    k=2πλ\displaystyle k = \frac{2\pi}{\lambda}
  3. 角频率 \(\omega\)表示波在时间上抖动的快慢,与频率成正比,\(\omega = 2\pi f\)。
    ω=2πf\displaystyle \omega = 2\pi f
  4. 初始相位 \(\varphi_0\)决定波在起点是“先起浪还是先落浪”,相位不同,两束光相遇后的叠加结果就完全不同。
    φ0\varphi_0

干涉计算

水波工坊最迷人的地方是蓄水池:两股水同时汇入,如果浪尖碰上浪尖,池子会掀起更高的浪;如果浪尖碰上浪底,池面反而变得平静。这就是干涉。阿光在每根进水管上装了可调的阀门(相当于权重),再让它们汇入同一个池子,于是蓄水池水位天然就变成了“按比例加权后的总和”。这个动作,恰好就是矩阵乘法中的乘加运算。

把多个输入光场分别乘上复数权重再相加,等价于矩阵乘向量。假设输入是两个光场 \(x_1, x_2\),经过一个 \(2\times 2\) 的分束与移相网络后,输出 \(y_1, y_2\) 可以写成:

阿光看着蓄水池里翻涌的水波,忍不住感慨:电子计算要循环很多次才能做完的矩阵乘,在他这里只是一次“开闸放水”的功夫。所有乘加在光传播的一瞬间同步完成。

(y1y2)=(w11w12w21w22)(x1x2)\displaystyle\begin{pmatrix} y_1 \\ y_2 \end{pmatrix}=\begin{pmatrix} w_{11} & w_{12} \\ w_{21} & w_{22} \end{pmatrix}\begin{pmatrix} x_1 \\ x_2 \end{pmatrix}
这个矩阵公式说明:只要把权重矩阵“刻”进光学器件的分束比和相位延迟中,光场流过一次就能同时得到所有输出的加权和。
  1. 输入光场向量\(x_1, x_2\) 是两路输入光的复振幅,代表两个参与运算的数据。
    (x1x2)\begin{pmatrix} x_1 \\ x_2 \end{pmatrix}
  2. 权重矩阵矩阵元 \(w_{ij}\) 由分束器透射率和移相器相位决定,表示第 \(j\) 个输入对第 \(i\) 个输出的贡献。
    (w11w12w21w22)\begin{pmatrix} w_{11} & w_{12} \\ w_{21} & w_{22} \end{pmatrix}
  3. 乘加展开第一个输出等于第一行权重与输入逐项相乘再求和,这就是干涉叠加的数学本质。
    y1=w11x1+w12x2y_1 = w_{11}x_1 + w_{12}x_2
  4. 输出强度探测器读到的是 \(|y_i|^2\),所以输出端会看到两个亮度不同的光点,它们就是矩阵乘法的结果。
    Ii=∣yi∣2I_i = |y_i|^2

衍射计算

阿光的工坊后院有一排竹篱笆,水波穿过缝隙后,会在后方扩散出一圈圈波纹。他渐渐发现,竹篱的缝隙形状决定了后方的波纹图案:缝隙越密集,图案越“分得开”;缝隙越宽,图案越“聚得拢”。这就是衍射,它像一台天然的“分拣机”,把波中不同频率的成分拆开来摆好。按照惠更斯原理,每个缝隙都可以看作新的子波源,所有子波在远处叠加,便形成了衍射图案。

更神奇的是,远场衍射图案恰好是入射光场的傅里叶变换。一束波在空间上的分布,经过衍射后,变成了它在“频率维度”上的分布。这为光计算提供了一件利器:把信号变换到频域去做卷积。

阿光把竹篱笆称为“免费的傅里叶计算器”。图像卷积、信号滤波这类AI里的高频操作,只要让光通过一片精心设计的衍射层,就能在飞秒级时间内直接算完,连“乘法循环”的步骤都省了。

\displaystyleE_{\text{out}}(f) = \int_{-\infty}^{\infty} E_{\text{in}}(x)\, e^{-i 2\pi f x}\, dx
这个公式说明,一束复杂的光场经过远场衍射后,其输出就是输入场的频谱;卷积运算在频域里只需一次乘法即可完成。
  1. 入射光场\(E_{\text{in}}(x)\) 是光在空间各点的复振幅分布,也就是待变换的“数据波形”。
    Ein(x)E_{\text{in}}(x)
  2. 复指数核\(e^{-i 2\pi f x}\) 相当于一个以频率 \(f\) 旋转的“筛子”,只让对应频率成分通过。
    e−i2πfxe^{-i 2\pi f x}
  3. 积分累加对每个位置 \(x\) 的贡献做无穷求和,等价于把所有子波源的贡献叠加到频率 \(f\) 上。
    ∫−∞∞⋯ dx\int_{-\infty}^{\infty} \cdots \, dx
  4. 输出频谱\(E_{\text{out}}(f)\) 告诉我们信号中有多少频率 \(f\) 的成分,卷积在频域变成点乘。
    Eout(f)E_{\text{out}}(f)

非线性效应

水波工坊里,阿光偶尔会往水里加一点糖浆。加了糖浆的水变稠,波纹传播的速度也会悄悄改变。而且水越“强”(振幅越大),糖浆对它的影响越明显。普通的线性光学只能做“按比例混合”,而一旦材料性质随光强改变,光就能控制光,实现开关、调制和放大。这个现象在光学里称为Kerr效应。

Kerr效应的核心是:强光会改变材料的折射率,而折射率又反过来影响光的传播。有效折射率可以写成:

有了这个“由光控光”的本领,阿光就能做出全光开关:一束弱光路过,被强光改变相位,从而被引导到不同出口。这有点类似神经网络里的激活函数——当输入强度超过某个阈值,输出才“打开”。非线性效应,正是让光计算从单纯的线性矩阵乘法走向完整神经网络的关键一步。

\displaystylen = n_0 + n_2 I
其中 \(n_0\) 是材料固有的折射率,\(n_2\) 是Kerr系数,\(I\) 是光强。光越强,折射率改变越明显,就像水越“猛”,糖浆对波纹的影响越大。
  1. 固有折射率 \(n_0\)材料在没有强光时的基础折射率,决定光速的基准快慢。
    n0n_0
  2. 非线性增量 \(n_2 I\)Kerr系数乘以光强,表示强光导致折射率多出的那一部分。
    n2In_2 I
  3. 整体效果总折射率 \(n\) 随光强变化,光的相位也随之被调制,于是可以用一束强光控制另一束光的相位。
    n=n0+n2In = n_0 + n_2 I

光学范式

阿光发现,电子工坊总喜欢让所有零件排队干活:一个数据算完,再算下一个。而他的水波工坊不一样,只要把整张“水管网”铺好,几十根管道可以同时送水,所有蓄水池同时见底。这就是光计算的范式革命:不是把单个乘法做得更快,而是把成千上万个乘法同时做完。

光计算中有两种天然并行维度:空间并行和波长并行。在矩阵乘法中,矩阵的一行对应一条光学路径,所有行的运算同时发生;不同波长的光互不干扰,各自携带一路数据,相当于在同一个空间里叠加了很多层“隐形水路”。总吞吐量可以简单表示为:

阿光看着他的整张水网,明白了“范式”二字的重量:与其纠结单个晶体管的时钟频率,不如像水波一样,让成千上万条路径在空间里同时激荡。光的并行性和丰富的波长资源,为矩阵运算提供了真正“一次成型”的架构想象力。

\displaystyleC_{\text{opt}} = N \times B
这个公式说明光通信和光计算的总吞吐量等于并行通道数 \(N\) 乘以单通道带宽 \(B\)。通道数来自空间和波长复用,带宽来自光本身极高的振荡频率。
  1. 并行通道数 \(N\)可以是空间上并行的光波导数量,也可以是同时传输的波长数量。
    NN
  2. 单通道带宽 \(B\)每路光信号可承载的信息速率,光频段极高,所以单通道带宽远超电信号。
    BB
  3. 总吞吐量二者相乘得到系统整体算力,只要增加波长数量或光路数量,总吞吐量近似线性增长。
    Copt=N×BC_{\text{opt}} = N \times B

光电子对比

阿光偶尔会被请去电子小镇“交流经验”。他发现电子工坊里,数据像传送带上的包裹,一个接一个地经过乘法器,一旦传送带速度受限,整个工坊的产量就卡住了。而他的水波工坊虽然有天然并行优势,却也面临一个难题:水波会漫出沟渠、会被杂质搅浑,精度上总比电子零件差一些。两种工坊各有长短,最好的方案往往是合作。

衡量一种计算方式的能效,常用功耗延迟积(PDP)来刻画。它把“耗多少电”和“等多久”放在一起看:

水波工坊和电子工坊的最终设计图,其实是一张“混合图纸”:光负责传输和大规模矩阵乘,电子负责精准控制和高精度存储。阿光把这句话记在本子上:光电子混合不是妥协,而是让每一股水流都去它最擅长的地方。

\displaystylePDP = P \times \tau
这个公式说明,一次运算的代价同时取决于功耗 \(P\) 和延迟 \(\tau\)。光传输几乎没有电阻发热,延迟也极短,因此PDP远低于电子互连。
  1. 功耗 \(P\)完成一次运算需要消耗的能量,电子在导线中流动会产生焦耳热,而光子传播几乎不发热。
    PP
  2. 延迟 \(\tau\)一次运算从输入到输出所需的时间,光以高速传播,延迟可以压缩到皮秒级。
    τ\tau
  3. 乘积意义功耗和延迟相乘得到单次计算的综合代价,光计算在两项上都表现出明显优势。
    PDP=P×τPDP = P \times \tau

AI 应用场景

大模型推理的光学矩阵引擎

阶段:模型推理加速

解决的问题:大模型的线性层要反复做矩阵乘,传统GPU受限于串行乘加和内存墙,速度慢且功耗高。光子矩阵乘法把权重矩阵编码进光学阵列,输入数据变成光脉冲,一次流过即完成整层线性变换,大幅降低延迟和功耗。

具体案例:在Transformer推理中,QKV投影和FFN层全是矩阵乘法。光学引擎可以把一个2048×2048的权重矩阵刻进MZI干涉网格,输入向量调制为光强,输出端直接读出计算结果,省去逐行循环。

光学神经网络做图像分类

阶段:模型训练与推理

解决的问题:卷积在图像任务中计算量巨大,电子实现需要大量乘加操作。衍射光学元件可以天然实现傅里叶变换,把卷积变成频域点乘;再配合非线性光学层,就能搭建一个全光神经网络。

具体案例:研究者用多层衍射光学网络对手写数字分类,光通过第一层完成卷积,第二层完成非线性激活,最后一层聚焦到类别的光斑上。整个推理过程没有一块电子芯片参与。

数据中心的光电混合互连

阶段:分布式训练通信

解决的问题:大规模集群训练时,GPU之间通信的功耗和延迟是主要瓶颈。光互连能耗更低、带宽更高,利用波长复用在单根光纤里同时传多路信号,让梯度同步变得像“水面同时涨落”一样快。

具体案例:超大规模AI集群采用共封装光学(CPO),把光引擎直接封装在交换芯片旁,减少光-电-光转换次数,使万卡训练的通信时间缩短一半以上。

Python 演示

python39 行
import numpy as np def mzi_2x2(phi, theta):    # 2x2 马赫-曾德尔干涉仪,对应一对分束器与移相器    bs1 = np.array([[1, 1], [1, -1]]) / np.sqrt(2)    phase = np.diag([np.exp(1j * phi), np.exp(1j * theta)])    bs2 = np.array([[1, 1], [1, -1]]) / np.sqrt(2)    return bs2 @ phase @ bs1 def simulate_photonic_matmul(matrix, vector):    # 模拟光束按权重叠加的干涉过程    n, m = matrix.shape    output = np.zeros(m, dtype=complex)    for j in range(m):        field = 0.0 + 0.0j        for i in range(n):            weight = matrix[i, j]            field += weight * vector[i]        output[j] = field    power = np.abs(output) ** 2    return power, output def normalize_rows(matrix):    row_norms = np.linalg.norm(matrix, axis=1, keepdims=True)    return matrix / row_norms if __name__ == "__main__":    np.random.seed(42)    target = np.array([[2.0, 1.0], [1.0, -1.0]])    M = normalize_rows(target)    x = np.array([1.0, 0.5])    expected = M @ x    power, field = simulate_photonic_matmul(M, x)    calibrated = np.sqrt(power) * np.sign(field.real)    U = mzi_2x2(0.5, 0.2)    print("MZI 单元矩阵:\n", U)    print("目标矩阵乘输出:", expected)    print("光子模拟输出:  ", calibrated)    print("归一化误差:", np.linalg.norm(calibrated - expected))
目的:用Python模拟光子矩阵乘法的核心机制——输入光场按权重干涉叠加,输出端探测光强并恢复计算结果的符号。
  1. def mzi_2x2(phi, theta):定义马赫-曾德尔干涉仪,它是光计算中最基本的可编程分束单元。
  2. return bs2 @ phase @ bs1三个光学环节依次作用:分束、移相、再合束,对应矩阵的连续乘法。
  3. def simulate_photonic_matmul(matrix, vector):模拟矩阵乘法的干涉叠加过程,每个输出端口收集所有输入光场。
  4. field += weight * vector[i]把第 \(i\) 路输入乘以权重后累加,这就是光学干涉的数学等价。
  5. power = np.abs(output) ** 2探测器只能读光的强度,因此计算复振幅模长的平方。
  6. calibrated = np.sqrt(power) * np.sign(field.real)用相位符号恢复正负号,模拟相干探测对负权重的重建。
  7. if __name__ == "__main__":主程序入口,验证光子模拟矩阵乘法与理想结果的误差。

常见误区

误区我一直以为光子计算比电子快,是因为光速每秒三十万公里,而电子很慢。所以只要换成光子,任何计算都能快几万倍。

正解电子在导体中的漂移速度虽然慢,但电路里传输的是电磁场信号,实际速度也可以接近光速。光计算真正的优势不在于“光速快”,而在于并行性和高带宽:光可以在空间和波长上同时承载大量数据,一次传播同时完成无数条乘加路径,而电子计算通常要串行循环。

为何常见:人的直觉容易把“速度”等同于“快”,忽略了计算体系结构中并行度才是更关键的因素。

误区我觉得两束光加起来,亮度高就说明干涉增强,亮度低就说明干涉减弱,所以直接用光强相加也能模拟干涉。

正解干涉发生在复振幅层面,而探测器只看到强度。两束光同相时,振幅相加导致强度大于各自强度之和;反相时振幅相减,甚至完全抵消。如果直接用强度相加,会丢掉相位信息,根本无法解释“亮加亮等于暗”的相消干涉现象。光子矩阵乘法靠的正是复振幅的相干叠加。

为何常见:日常经验里我们习惯用亮度感知光,很少意识到光还有相位这个“隐藏变量”。

误区光计算这么厉害,迟早把CPU和GPU全部淘汰,未来所有计算机都变成全光机器。

正解光子在存储、高精度数字运算和非线性逻辑上仍处于劣势。光学矩阵乘法擅长做大规模的线性运算,但精细的数值控制、条件分支、数据缓存仍是电子的主场。目前最务实的路线是光电混合:光负责传输和矩阵乘,电子负责控制和存储。

为何常见:新技术出现时,人们容易陷入“二元替换”的思维,忽略了计算机体系结构历来是多种技术互补演化。

误区光在空气中传播没有阻力,所以光计算系统应该是零损耗、零噪声的,精度一定比电子高。

正解光会散射、被材料吸收,波导弯曲会产生辐射损耗,分束器和探测器也会引入噪声。更重要的是,光学器件的制造误差会让权重矩阵偏离设计值,导致计算精度受限。这也是为什么光子矩阵乘法目前更适合对精度要求不高的推理任务。

为何常见:我们日常看到光在透明介质里传播,几乎感觉不到损耗,容易忽略工程实现中的各种非理想效应。

面试题

Q1. 在光计算中,探测器最终读到的是光波的哪个量?

单选题 · easy

  • A.振幅平方即强度← 正确答案
  • B.光波的振荡频率
  • C.光波的波长大小
  • D.光波的偏振方向

答案:A。干涉计算的结果最终以光强形式呈现,而光强正比于振幅的平方。频率、波长、偏振虽然都携带信息,但普通光电探测器读出的是强度,因此答案是A。

Q2. 两束同频光波相遇,相位差为π时会发生什么?

单选题 · easy

  • A.相消干涉亮度降低← 正确答案
  • B.相长干涉亮度增加
  • C.两束光波波长变长
  • D.两束光波频率加倍

答案:A。相位差为π意味着浪尖对浪底,彼此抵消,这就是相消干涉,亮度降低。波长和频率不会因为叠加而改变,因此只有A正确。

Q3. 光计算中干涉为什么能做矩阵乘法?

单选题 · mid

  • A.线性叠加等价于加权求和← 正确答案
  • B.光照可以长期保存数据
  • C.光子具有质量会受力
  • D.光速有限便于时钟同步

答案:A。干涉的本质是复振幅叠加,多个输入分别乘以权重再相加,恰好对应矩阵乘法的乘加规则。光不能长期保存数据,光子无静止质量,光速有限反而让同步更困难,所以B、C、D都不成立。

Q4. 夫琅禾费远场衍射的图案,与入射光场是什么关系?

单选题 · mid

  • A.近似傅里叶变换关系← 正确答案
  • B.完全等于原始波形
  • C.与光的波长无关
  • D.正是光强直接平方

答案:A。远场衍射的复振幅分布近似为入射光场的傅里叶变换。它不是原始波形,也不是强度平方,而且衍射图案与波长密切相关,因此答案是A。

Q5. 光的衍射计算特别适合加速哪类算法?

单选题 · easy

  • A.卷积与频域滤波操作← 正确答案
  • B.冒泡排序等比较操作
  • C.数据库事务回滚操作
  • D.密码学哈希摘要操作

答案:A。衍射天然实现傅里叶变换,而卷积在频域等价于点乘,因此卷积和滤波运算最受益。排序、事务、哈希都依赖非线性逻辑和存储,光学衍射难以直接加速。

Q6. Kerr效应的核心现象是什么?

单选题 · mid

  • A.光强改变材料折射率← 正确答案
  • B.光速随传播距离改变
  • C.光频率随温度升高
  • D.光波长随偏振旋转

答案:A。Kerr效应就是折射率随光强变化,即 \(n = n_0 + n_2 I\)。这使强光可以控制弱光的相位,从而实现全光开关。光速不会因距离改变,频率和波长的变化也不是Kerr效应的核心。

Q7. 光学矩阵乘法与电子矩阵计算的本质区别是什么?

单选题 · hard

  • A.光传播一次完成乘加← 正确答案
  • B.使用更长的数值位宽
  • C.必须用浮点数计算
  • D.结果只能为实数标量

答案:A。光计算把矩阵的行映射为并行光路,一次传播同时完成所有乘加,这是本质区别。光学精度通常不高,也不需要浮点,结果可以是复数振幅,因此B、C、D都不对。

Q8. 光子计算相比电子计算的主要优势有哪些?

多选题 · mid

  • A.天然并行完成矩阵运算← 正确答案
  • B.功耗更低传输损耗更小← 正确答案
  • C.数字计算精度通常更高
  • D.延迟更低且带宽更大← 正确答案

答案:ABD。光传播天然并行、无焦耳热、带宽高,所以A、B、D正确。光子计算的数值精度目前往往低于精心设计的电子数字计算,因此C是错误选项。

Q9. 下列哪些是光子计算目前面临的挑战?

多选题 · hard

  • A.光学精度和噪声限制← 正确答案
  • B.光电器件转换开销← 正确答案
  • C.超低功耗且无损耗
  • D.混合集成封装难度← 正确答案

答案:ABD。制造误差、散射噪声、光-电-光转换和封装集成都是真实瓶颈。“超低功耗且无损耗”是理想状态而非现实挑战,因此C不选。

Q10. 关于非线性光学的说法,正确的有哪些?

多选题 · extreme

  • A.大光强可改变折射率← 正确答案
  • B.全光开关与波长转换← 正确答案
  • C.专用于线性叠加运算
  • D.可实现非线性激活← 正确答案

答案:ABD。强光改变折射率对应Kerr效应,可用于全光开关和波长转换,也为光神经网络提供了非线性激活。非线性光学恰恰不是用于线性叠加,而是突破线性限制,所以C错误。