如果你对“光能不能像 GPU 一样做计算”感兴趣,那衍射神经网络(Diffractive Deep Neural Network, D²NN)一定值得你系统学一遍:它用多层相位板(衍射层)让光在传播和干涉中“自动完成推理”,在硬件上有潜力做到低功耗、低延迟、接近光速的计算。本次教程我会用“能跑起来的代码”为主线,带各位读者从 0 到 1 理解并实现一个 D²NN(原论文作者用Tenorflow进行编写的,不利于理解,这里我用Python/PyTorch 进行了重新撰写,更简洁,理解起来更容易),并进一步拓展到光学自编码器(Optical Autoencoder),以使得读者更好的理解。
一、衍射神经网络到底在“学”什么?
Xing Lin et al. ,All-optical machine learning using diffractive deep neural networks.Science361,1004-1008(2018).DOI:10.1126/science.aat8084
https://www.science.org/doi/10.1126/science.aat8084#tab-citations
传统神经网络学习的是权重矩阵 W,用大量乘加运算完成推理。D²NN 学的是每一层相位板的相位分布 ϕ(x,y)。当光场 U(x,y) 通过相位板后:
再经过自由空间传播(衍射传播算子)到下一层。多层叠加后,最后探测器平面上的能量会在某些区域增强(相长干涉),在另一些区域变弱(相消干涉)。训练的目标,就是让“正确类别对应的探测区域”变亮,或让“输出平面重构出目标图像”。
二、两条路线代码:分类器 vs 自编码器
A. 光学分类(Optical Classifier)
输入:28×28 手写数字(作为振幅/强度调制)
输出:10 个探测区域的能量(哪个区域能量最大就是哪一类)
典型结果:探测器平面常常呈现“散斑 + 某个区域更亮”
B. 光学自编码器(Optical Autoencoder)
输入:28×28 手写数字
输出:仍然是一张 28×28 图(重构输入)
典型结果:训练收敛后,输出平面中心区域会逐渐出现清晰的数字形状
三、核心物理:衍射传播怎么做
实现 D²NN 的关键是“传播算子”。常用方法是角谱法(Angular Spectrum Method, ASM),本质是对光场做 2D FFT 到频域、乘以传播传递函数H(fx,fy) 、IFFT 回到空间域
四、Python&matlab到衍射神经网络仿真结果展示
五、D²NN 除了分类/自编码器,还能做什么?
计算成像:相位恢复、全息重建、散射介质成像(去雾/穿透散射)
光通信:模式复用/解复用(如 OAM 模式分离)
光学加密:相位板即“物理密钥”,不知道相位就无法还原
边缘检测/滤波:直接训练出一个全光“算子”
光学前端加速:作为 CMOS 前的预处理,减少后端算力负担