成本函数的最小二乘最小化

时间:2015-08-21 01:05:54

标签: matlab signal-processing mathematical-optimization least-squares gradient-descent

我的目标是最小化以下成本函数而不是W

J = (E)^2
E = A - W .* B
Such that W(n+1) = W(n) - (u/2) * delJ

delJ = gradient of J = -2 * E .* B
u = step_size=0.2

where:
- A, B are STFT matrix of 2 audio signals (dimension is 257x4000 for a 16s audio with window size = 256 , 75% overlap, nfft=512)
- W is a matrix constructed with [257x1] vector repeated 4000 times (so that it become 257x4000] matrix

我已经编写了自定义功能,如下所示。问题是,A和B中的元素是如此之小(~e-20),即使在1000次迭代之后,g也没有发生变化。

我肯定错过了一些东西,如果有人可以帮助或引导我找到一个解释新人整个过程的链接。

[M,N] = size(A);

E =@(x) A - repmat(x,1,N) .* B; % Error Function
J = @(x) E(x) .^ 2; % Cost Function
G = @(x) -2 * E(x) .* B; % Gradiant Function

alpha = .2; % Step size
maxiter = 500; % Max iteration
dwmin = 1e-6; % Min change in gradiation
tolerence = 1e-6; % Max Gradiant norm

gnorm = inf;
w = rand(M,1);
dw = inf;

for i = 1:maxiter
    g = G(w);
    gnorm = norm(g);
    wnew = w - (alpha/2)*g(:,1);

    dw = norm(wnew-w)
    if or(dw < dwmin, gnorm < tolerence)
        break
    end
end
w = wnew;

A&amp; B总是正实数矢量。

1 个答案:

答案 0 :(得分:1)

您的问题实际上是一系列独立问题。如果我们将AB的每一行以及w的每个元素与i编入索引,那么最小化误差矩阵中的平方和

A - repmat(w, 1, N) .* B

与最小化误差向量

上的平方和相同
A(i, :) - w(i) * B(i, :)

分别用于所有行。后一个问题可以使用Matlab的最小二乘算子之一来解决,特别是mrdivide/

for i = 1 : M
    w(i) = A(i, :) / B(i, :);
end

据我所知,没有办法进一步对这个计算进行矢量化。

在任何情况下,都不需要使用梯度下降或其他形式的优化算法。