gpt4 book ai didi

algorithm - 高斯混合模型 - 参数的Matlab训练

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:00:29 27 4
gpt4 key购买 nike

我正在运行基于高斯混合模型的语音增强算法。问题是估计算法在训练过程中下溢。我正在尝试计算给定高斯簇的对数频谱框架 X 的 PDF,它是每个频率分量 X_k 的 PDF 的乘积(fft 是为 k= 1..256)我得到的是 256 exp(-v(k)) 的乘积使得 v(k)>=0

这是 MATLAB 计算的片段:N - 帧数; M——混合数; c_i 每种混合物的权重;

gamma(n,i) = c_i*f(X_n|I = i)

 for i=1 : N
rep_DataMat(:,:,i) = repmat(DataMat(:,i),1,M);
gamma_exp(:,:) = (1./sqrt((2*pi*sigmaSqr_curr))).*exp(((-1)*((rep_DataMat(:,:,i) - mue_curr).^2)./(2*sigmaSqr_curr)));
gamma_curr(i,:) = c_curr.*(prod(10*gamma_exp(:,:),1));
alpha_curr(i,:) = gamma_curr(i,:)./sum(gamma_curr(i,:));
end

由于 K = 256,乘积很快变为零,因为数字小于 1。有没有一种方法可以通过导致下溢(如 logsum 或类似的)来计算它?

最佳答案

您可以在日志域中执行计算。

将乘积转换为总和非常简单。另一方面,总和可以用诸如 logsumexp 之类的东西进行转换。 .这适用于以下公式:

log(a + b) = log(exp(log(a)) + exp(log(b)))
= log(exp(loga) + exp(logb))

其中logalogb分别是ab在日志域中的表示。基本思想是分解具有最大参数的指数(例如,loga 为了便于说明):

 log(exp(loga)+exp(logb)) = log(exp(loga)*(1+exp(logb-loga)))
= loga + log(1+exp(logb-loga))

请注意,如果您要添加 2 个以上的术语,同样的想法也适用。

关于algorithm - 高斯混合模型 - 参数的Matlab训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24452360/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com