【问题标题】:Gradient descent for small and large values of multidimensional matrix多维矩阵的小值和大值的梯度下降
【发布时间】:2018-03-28 01:05:19
【问题描述】:

我有一个矩阵 R,我想使用梯度下降法来估计它。该代码适用于小尺寸矩阵(例如 100x1),但当我增加尺寸(例如 10x3)时它会给出 NaN 值。请帮忙!

R =[196,242,3;186,302,3;22,377,1;244,51,2;166,346,1;298,474,4;115,265,2;253,465,5;305,451,3;6,86,3];
N = length(R);
M = size(R,2);
K = 3;

P = rand(N,K);
Q = rand(M,K);
alpha = 0.002;
beta = 0.02;


for iter = 1 : 5000
e = R - P*Q';
P_new = P + 2*alpha*(e*Q-beta*P);
Q_new= Q + 2*alpha*(e'*P-beta*Q);
mse2(iter) = norm(R - P*Q')/norm(R); 

P=P_new;
Q=Q_new;
end

R_est = P*Q';

【问题讨论】:

    标签: matlab matrix gradient-descent


    【解决方案1】:

    您的问题在于 for 循环。最大的双 matlab 可以存储是1.7977e+308,在循环运行 7 次后,您的 P 和 Q 的值大约为 10^101,在运行 8 次后inf。我不确定您所说的估计矩阵是什么意思,但您的 nanvalues 来自 P 和 Q 增长如此迅速的方式。另一件值得注意的事情是,mse2 变量不被使用。它的目的是什么?

    【讨论】:

    • 实际上这是矩阵补全问题,用于针对原始矩阵 R 填充缺失的条目。因此 mse 2 介于原始 R 的值和估计的 R R_est 的值之间。
    • 我无法弄清楚为什么值在多维矩阵中变得如此之大。
    • 在 for 循环中设置断点并单步执行以查看变量如何增长。
    猜你喜欢
    • 2016-01-16
    • 2019-04-19
    • 2013-05-25
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多