EN

UED 束流诊断的卷积神经网络

用一个小的卷积神经网络,从每一发电子束团的衍射图样上直接读出它的指向和能量抖动。

布鲁克海文国家实验室(BNL)的 ATF 上有一台兆电子伏超快电子衍射(MeV Ultrafast Electron Diffraction,MeV UED)装置。它把很短的电子束团打在一片薄晶体上,记录电子散射之后落在探测器上的位置。每一发束团的指向都略有不同,能量也略有高低,许多发累加起来,这些抖动就把要测的衍射斑抹宽了。BNL 的 Xi Yang 能从衍射图样上读出束流参数,办法是对各个衍射斑做高斯拟合,但一帧要 0.4 s 左右,电子枪每秒打几发以上就跟不上了。Xi Yang 的想法是用拟合标注过的帧训练一个网络,再让它去读每一发新的图样。卷积神经网络(Convolutional Neural Network,CNN)的搭建和训练由我完成,由此产生的两篇 Scientific Reports 文章(2021 年与 2022 年)我都是第一作者。

一发束团里的信息

电子在晶体上散射之后,落在荧光屏上形成一个个亮点。衍射斑的位置取决于束流在 x 向和 y 向的指向以及能量,宽度则取决于两个方向的发散角以及能散(energy spread),因此原则上一帧图像里就包含了这六个量。

两幅伪彩色探测器图像。左边是约 512 像素见方的整帧,深蓝背景上散布着明亮的衍射斑,中央区域框着一个虚线方框,正中有一个虚线小圆。右边是方框内裁出的 256×256 图像,十来个亮点围成一环,中间是一个大的黑色圆盘。
记录下来的一发,左边是整帧(虚线小圆是反射镜上的孔),右边是送进网络的 256×256 裁剪图,中央被遮掉。

一个小的 CNN

工作从模拟开始。Xi Yang 用 GPT 把束流从电子枪跟踪到样品,衍射图样则由 Xi Yang 和 Lijun Wu 用 Lijun Wu 的程序算出。这样得到了 10,000 幅钛酸锶晶体的图样,每一幅都带着生成它的六个数作为标签。

我选了 LeNet 式的网络结构,在 CNN 里算是最简单的一种:五轮卷积加池化把一帧图像压成一叠 6×6 的特征图,然后一个全连接层接六个线性输出,每个输出对应一个量。

卷积网络的结构图:1×256×256 的输入,五对卷积与 2×2 最大池化层,特征图数目依次为 2,4,8,16 和 32,末端压成 32 幅 6×6 的特征图,展平为 1152 个单元,再经一个 120 个单元的全连接层得到 6 个输出。
整个网络,从一帧图像到六个数。

能散

第一个网络同时学六个量。在它没有见过的图样上,指向和发散角的误差都在各自范围的 2% 以内,能量的结果一般,能散的结果则与猜测相差无几。

200 幅模拟测试图样上的两幅面板。上方是竖直指向,橙色的预测叉点落在蓝色的标签线上,rms 误差 0.0177,误差直方图很窄。下方是能散,叉点在标签线周围散得很开,rms 误差 0.2093,误差直方图很宽。
第一次训练六个量中的两个,上方是竖直指向,预测值紧贴标签,下方是能散,预测值散得很开。

问题不在网络本身。一个衍射斑的宽度(相对于它离中心的距离而言)同时来自发散角和能散:

relative spot width=(Δθθ)2+(ΔEE)2

其中 Δθ 为束流的发散角,θ 为该衍射斑的布拉格角,ΔE 为能量 E 的能散。

在这组数据里发散角远大于能散。按论文里算过的那个例子,开根号之前两项的比例是 95 比 5,因此能散的信息在图样里是有的,只是被发散角淹没了。

于是我们又做了第二组数据,其中只有能散在变,发散角压到了几 µrad。此时每个衍射斑都沿半径方向拉长,同一个网络就能把能散读到范围的 0.2% 左右。真实束线上的发散角压不到这么小,我们在论文里提议加聚光镜(condenser lens)和光阑来做到这一点,但没有试过。

并排的三幅模拟衍射图样,标注的能散分别为 9.4e-05,2.5e-02 和 4.4e-02。每幅四角各有一个亮点,用虚线椭圆圈出,中间是黑色圆盘;从左到右衍射斑越来越长,都沿着从中心向外的方向。
三幅模拟图样,发散角保持很小,能散从左到右增大,衍射斑只沿半径方向变长。

2020 年的真实数据

接下来是真实数据,即 BNL 的小组 2020 年在二碲化钼(MoTe2)样品上记录的几千发。探测器只能收到一级衍射斑,而高斯拟合定位置远比测宽度准,所以只有 x 向和 y 向的指向以及能量抖动有标签(Xi Yang 逐发拟合的结果)。发散角和能散没有标签可学,我就把输出层减到三个,重新训练。

在没有见过的数据上,网络的读数正落在拟合的标签上:竖直指向与水平指向读得一样好,能量抖动的 rms 误差约为 3 × 10−5。

200 发真实测试数据上的三幅面板,分别是 x 向指向,y 向指向和能量抖动。每幅里橙色的预测叉点都落在蓝色的标签线上,标题中的 rms 误差为 0.0033,0.0034 和 0.0043,右侧的误差直方图很窄。
200 发网络没有见过的真实数据,蓝线为拟合标签,橙色叉点为网络读数。

网络需要多少数据?我用更小和更大的训练集重新训练,误差在三四千发之后就不再下降。

展开的环

训练时间仍然偏长,我想把它缩短。有用的信息几乎都在衍射环上,约占像素的 38%,于是我把环展开成条带,一个方向是半径,另一个方向是角度,在上面训练一个更小的网络。重采样只取半径 91 到 127 像素的一圈,角度每 1° 一步,输入就从 256×256 的图像变成 36×360 的条带,减少了 80%。权重随之减少 70%,训练时间不到原来的一半。

左边是一帧真实数据,衍射环用虚线圆标出,箭头表示极坐标的两个轴,下方是展开成的细长条带,衍射斑排成一行。右边是标注 origin 和 polar 的两幅损失曲线,各有训练和验证的 MSE 在约 8 万个批次里下降;polar 的验证曲线明显停在更高的位置。
一发真实数据里的环展开成条带,右边是整帧输入与条带输入各自的训练和验证损失(条带的验证损失停在更高的位置)。

代价是精度,误差大约翻了一倍。我是绕着图像中心展开的,而指向抖动会让整幅图样一起移动,于是条带上各衍射斑的相对位置被打乱了;指向和能量恰恰是从这个排布里读出来的,我用的网络又浅,学不回来。

回到机器的旋钮

Xi Yang 接下来的问题是,能否再用一个网络往回多推一步,从样品处的束流反推出产生它的机器设置。2022 年的文章把两个网络串起来:第一个读探测器,就是我的 CNN;第二个把六个束流参数映射到六个机器设置。这六个设置分别是激光光斑在阴极上 x 向和 y 向的偏移,光斑尺寸,微波幅度,枪相位和螺线管线圈电流;第二个网络用 Xi Yang 的 10,000 次 GPT 模拟训练,模拟中的束团电荷量为 0.5 pC。

两幅网络示意图,束流从右向左。左边是一个网络,从电子枪的输入经过隐藏层到衍射图样的测量。右边把同一段拆成两个串联的网络,GTS-ML 从电子枪到样品处的电子束参数,STD-ML 从那里到衍射图样。
左边是从探测器一直反推到电子枪的单个网络,右边是以样品处束流为中间量的两个串联网络,束流从右向左传播。

只有一个隐藏层的网络在微波幅度上最差,原因可能是空间电荷力使这一段映射强烈非线性。我改成四层的网络,六个量上都更好,但仍有两个设置没有达到机器要求的精度:枪相位的误差是 3.7°,目标是 3°,微波幅度也差一点。

离线

这些工作都没有在机器上运行过。2021 年的网络在 2020 年记录的数据上训练和测试,那篇文章里的「实时」指的是按计时它能做到的速度;2022 年的文章从头到尾都是模拟,它为真实机器做的计划(4 小时数据,10 分钟训练)只是估计。虚拟诊断(virtual diagnostic)也不是新想法,Sanchez-Gonzalez 等人 2017 年就在自由电子激光(Free Electron Laser,FEL)的 X 射线脉冲上做过。我们第一篇文章的标题甚至与他们的相呼应。

数字与图均出自 Zhang 等,Sci. Rep. 11, 13890(2021)与 Sci. Rep. 12, 4240(2022),两篇都是 CC BY 4.0 开放获取,图有裁剪。