0
私は勾配降下法を使って推定したい行列Rを持っています。コードは小さな次元行列(例えば100x1)に対して良好に働いていますが、次元を大きくするとNaN値が得られます(例:10x3)。助けてください!多次元行列の小さな値と大きい値の勾配降下
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';
実際には、これは元の行列Rに対して欠落したエントリを埋めるための行列補完問題です。したがって、mse 2は元のRの値と推定R R_estの値の間にあります。 –
多次元行列で値が大きくなる理由を理解できません。 –
forループにブレークポイントを設定し、変数をどのように拡大するかを調べます。 –