Kaczmarz迭代算法在磁粒子成像(MPI)中的应用,迭代公式推导

Kaczmarz迭代算法背景

Kaczmarz迭代算法作用:最初被用来求解线性方程组,在MPI中被用来重建图像

假设存在一个线性方程组(此方程可以用来建模MPI中系统矩阵和接收信号之间的关系):
S c = u Sc = u\qquad Sc=u
其中 S ∈ C M × N , c ∈ C N , u ∈ C M S \in C^{M\times N},c \in C^N,u \in C^M SCM×N,cCN,uCM。M为M个频率分量,N对应了MPI中体素的个数。


MPI背景: 在MPI中S即为系统矩阵, c c c为空间中粒子分布的浓度, u u u为接收到的电压信号。而MPI重建的就是粒子浓度的空间分布 c c c,因此可以通过已知的 S , u S,u Su求解 c c c


Kaczmarz迭代算法核心公式

​ 和其他文章一样,这里首先给出Kaczmarz算法的核心公式:
c k + 1 = c k + λ u i − s i ⋅ c k ∣ ∣ s i ∣ ∣ 2 2 s i c^{k+1}=c^k +\lambda \frac{u_i-s_i\cdot c^k}{||s_i||_2^2}s_i ck+1=ck+λ∣∣si22uisicksi
其中,k表示第k次迭代的结果, i = k   m o d   M + 1 i=k \ mod \ M +1 i=k mod M+1, λ \lambda λ 为松弛因子,目的是使算法收敛到加权最小二乘解上,迭代M次后记为一次完整迭代。

简单理解这个公式,就是算法通过正向计算得到一个投影 s i ⋅ c k s_i \cdot c^k sick,然后将计算的投影与实际测量值 u i u_i ui相比较,然后使用二者的差值优化参数 c c c。迭代进行这一优化过程,直到达到最优解(近似)。其中 c c c初始可为任意值


Kaczmarz迭代算法公式推导

​ 首先回到方程(1),可以将方程(1)看作M个方程,每个方程有N个变量,这N个变量对应了空间中的N个维度,那么每个方程就可以被视为N维空间中的一个超平面。求解这M个方程就可以被视为求解M个超平面的交平面((N-1)维)。那么Kaczmarz算法是如何实现这一求解过程的呢?

​ 算法通过迭代求解的方法,使得每一次迭代的结果都能满足M个方程中的一个,而每次迭代满足的方程与前一次不同(通过随机选择,或顺序选择的方式实现不同方程的选择),这样结果会随着迭代的进行逐渐向最优值收敛。

​ 那么又出现一个问题,为什么满足了其中一个方程就能使得结果逐渐收敛呢?换个问法,它是怎么迭代计算满足该次得方程得呢?Kaczmarz通过把当前解向其他任意一个超平面投影得方式来解决这一问题。

​ 试想一下,若干个超平面若相交,那么一个超平面中的点,向另一个超平面进行投影,新的投影点是不是距离最优解更进一步了呢?想不出来?没关系,下面这张二维空间求解图能帮助你理解。

在这里插入图片描述

​ 接下来,举个简单的例子实现核心公式的推导。

​ 若只对空间中的两个相邻点(N=2)求解粒子分布,最高采集到了系统矩阵和粒子信号的二次谐波频率,即M=2。数学上将N维空间超平面的求解,简化为求解二维空间中两(M)条直线的交点。求解过程如下:

​ 假设两个方程在空间中的位置关系如下图所示:从初始的随机点开始,迭代k次之后到达S点,第k+1次迭代由S点向另一条直线映射,投影点为P点。P点所在方程为 s 1 ∗ c 1 + s 2 ∗ c 2 = u k + 1 s_1*c_1+s_2*c_2=u_{k+1} s1c1+s2c2=uk+1

在这里插入图片描述

​ 可知向量 O P ⃗ = O S ⃗ + S P ⃗ \vec{OP}=\vec{OS}+\vec{SP} OP =OS +SP , 其中S为第k次迭代求得的结果(为已知点),记为 C k C_k Ck,为了求 S P ⃗ \vec{SP} SP ,做辅助线 AS 与被投影直线平行,过原点做投影直线的垂线,与两条线分别交于A,B两点,所以有:
S P ⃗ = A B ⃗ , A B ⃗ = O B ⃗ − O A ⃗ , \vec{SP} = \vec{AB}, \\ \vec{AB} = \vec{OB}-\vec{OA}, \\ SP =AB ,AB =OB OA ,
​ 求解 O A ⃗ , O B ⃗ \vec{OA},\vec{OB} OA ,OB 即可得到 S P ⃗ \vec{SP} SP ;由直线方程可知, A B ⃗ \vec{AB} AB 的方向向量为 a k + 1 ⃗ = ( s 1 , s 2 ) \vec{a_{k+1}}=(s_1,s_2) ak+1 =(s1,s2),单位方向向量为 e ⃗ = a k + 1 ⃗ ∣ a k + 1 ⃗ ∣ \vec{e}=\frac{\vec{a_{k+1}}}{|\vec{a_{k+1}}|} e =ak+1 ak+1 ,因此,由点到直线的距离方程可得:
∣ O B ⃗ ∣ = ∣ s 1 ∗ 0 + s 2 ∗ 0 + u k + 1 ∣ s 1 2 + s 2 2 = u k + 1 ∣ a k + 1 ⃗ ∣ ∣ O A ⃗ ∣ = O S ⃗ ⋅ e ⃗ = O S ⃗ ⋅ a k + 1 ⃗ ∣ a k + 1 ⃗ ∣ = C k ⋅ a ⃗ k + 1 ⃗ ∣ a ⃗ k + 1 ⃗ ∣ |\vec{OB}| = \frac{|s_1*0+s_2*0+u_{k+1}|}{\sqrt{s_1^2+s_2^2}} = \frac{u_{k+1}}{|\vec{a_{k+1}}|} \\ |\vec{OA}|=\vec{OS} \cdot \vec{e}=\vec{OS}\cdot\frac{\vec{a_{k+1}}}{|\vec{a_{k+1}}|}=\frac{\vec{C_k\cdot \vec a_{k+1}}}{|\vec{\vec a_{k+1}}|} OB =s12+s22 s10+s20+uk+1=ak+1 uk+1OA =OS e =OS ak+1 ak+1 =a k+1 Cka k+1
所以:
A B ⃗ = O B ⃗ − O A ⃗ = u k + 1 − C k ⋅ a ⃗ k + 1 ∣ a k + 1 ⃗ ∣ a k + 1 ⃗ \vec{AB} = \vec{OB}-\vec{OA}=\frac{u_{k+1}-C_k \cdot \vec a_{k+1}}{|\vec{a_{k+1}}|}\vec{a_{k+1}} AB =OB OA =ak+1 uk+1Cka k+1ak+1
由此可得迭代公式:
O P ⃗ = O S ⃗ + u k + 1 − C k ⋅ a ⃗ k + 1 ∣ a k + 1 ⃗ ∣ a k + 1 ⃗ ∵ O P ⃗ = C k + 1 , O S ⃗ = C k C k + 1 = C k + u k + 1 − C k ⋅ a ⃗ k + 1 ∣ a k + 1 ⃗ ∣ a k + 1 ⃗ \vec{OP} =\vec{OS}+\frac{u_{k+1}-C_k \cdot \vec a_{k+1}}{|\vec{a_{k+1}}|}\vec{a_{k+1}} \\ \because \vec{OP} = C_{k+1}, \vec{OS}=C_{k}\\ C_{k+1}=C_{k}+\frac{u_{k+1}-C_k \cdot \vec a_{k+1}}{|\vec{a_{k+1}}|}\vec{a_{k+1}} OP =OS +ak+1 uk+1Cka k+1ak+1 OP =Ck+1,OS =CkCk+1=Ck+ak+1 uk+1Cka k+1ak+1
​ 观察上述迭代公式,可以发现,迭代公式可以简单的理解为,第k+1次迭代为,第k次的结果加上 使用第k次的结果预测第k+1次时的偏差。

参考:

代数重建算法 - Yoshieraの部屋 (gitee.io)

Kaczmarz算法原理 - 知乎 (zhihu.com)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值