1.m熵的证明

之前我们选择 loss=MSEloss-λ|m|²,用新的散m方法后选择 loss=MSEloss-λH(m),其中H(m)是m值的点向周围分散的熵。

选择熵,是因为现在m的物理意义是分散程度的强弱,构造一个分布,熵体现分布的分散程度。而对于整个m矩阵,应该用联合熵,但由于m之间互不影响,则求和。

首先证明,对单个m,其分布的熵正比于 log(m):

该证明来自deskmel

这是对m连续分布的求熵,也可以用离散化的进行更精确证明。但从比例关系来看,应该也是正比于 log(m)的。和之前的loss类似,前一项目的让m变小,后一项目的让m变大,通过系数λ使两项对抗。

2.反向传播求导

如上图,一个float m的点,对应原响度为fft,则可以对同一时间帧上频率维度前后 ⌊m⌋个点产生影响,分别加上分散值,比例为m:(m-1):...:(m-⌊m⌋),再做归一化即可。而该点则减去fft*(1-m)/m²的值。

对[K T]维的矩阵fftm,用一个[K T K]维矩阵Z_ADD储存造成的影响。比如坐标为(i,j)的点,对整个j时间帧上的K个点造成的影响(也就是加多少),储存在Z_ADD(i,j)这个K维vector中。

Z_ADD矩阵中也是包含负值的,就是对自己点造成的影响(减去一部分)。因此newfft(i,j)=fft(i,j)+∑Z_ADD(p,j,i), for p in [K]

同理,也储存一个梯度矩阵Z_GRAD,比如Z_GRAD(p,j,i)就代表newfft(i,j)m(p,j)的梯度。

理论上求导时,[K T]矩阵newfft对[K T]矩阵m求导的结果,是[K T T K]维的张量G,其中G(i,j)代表newfft(i,j)m的梯度。但实际上newfft(i,j)只与m的第j个时间帧有关,其余为0。