Ich habe eine Mischung von Experten-Code, der mit einer kleinen Anzahl von Parametern funktioniert. Es ist wie folgt:Mischung von Experten - fminunc Optimierung vorzeitig gestoppt
global x_au;
global x_vi;
global x_alpha;
global y;
global parameter;
options = optimoptions(@fminunc,'GradObj', 'on', 'Algorithm','quasi-newton','MaxIter', 10000,'Display','iter-detailed'); % change number of iterations
optTheta=[];
x_au=x_au_train;
x_vi=x_vi_train;
x_alpha=x_alpha_train;
y=y_train;
parameter=zeros(8969,1);
%expectation step
fprintf('opt1 begins');
opt_1;
fprintf('opt1 complete');
%maximaization step
[x] = fminunc(@costfunction,parameter(1:4483),options);
parameter(1:4483)=x;
resnorm1=total_error(parameter(1:4483));
k=1;
count = 1;
while(1)
opt_1;
fprintf('expectation complete');
%maximaization step
[x] = fminunc(@costfunction,parameter(1:4483),options);
parameter(1:4483)=x;
resnorm2=total_error(parameter(1:4483));
fprintf('resnorm1-resnorm2 - %f, resnorm2 - %f, k - %f',resnorm1-resnorm2,0.000001*resnorm2,k);
if((resnorm1-resnorm2)< .000001*resnorm2 & k~=1) %% to decrease training time
break;
end
aber jetzt, wenn ich dies mit einer großen Anzahl von Parametern für ein Problem haben zu verwenden, erhalte ich das folgende Protokoll.
First-order
Iteration Func-count f(x) Step-size optimality
0 1 5.31444e+10 4.75e+14
Optimization stopped because the objective function cannot be decreased in the
current search direction. Either the predicted change in the objective function,
or the line search interval is less than eps.
First-order
Iteration Func-count f(x) Step-size optimality
0 1 5.31444e+10 4.75e+14
Optimization stopped because the objective function cannot be decreased in the
current search direction. Either the predicted change in the objective function,
or the line search interval is less than eps.
resnorm1-resnorm2 - 0.000000, resnorm2 - 53144.356560, k - 1.000000
First-order
Iteration Func-count f(x) Step-size optimality
0 1 5.31444e+10 4.75e+14
Optimization stopped because the objective function cannot be decreased in the
current search direction. Either the predicted change in the objective function,
or the line search interval is less than eps.
resnorm1-resnorm2 - 0.000000, resnorm2 - 53144.356560, k - 2.000000
>>
Und dann endet der Prozess mit sehr schlechten Ergebnissen. Wie zu sehen ist, kann fminunc nicht korrekt optimieren. Kann mir hier jemand helfen?
Hallo, danke für die Hilfe! Ich habe versucht zu normalisieren, das hat nicht geholfen. Die Optimalität der ersten Ordnung hat sich auf 2.99e + 10 reduziert, aber der Prozess ist nach 3 Iterationen immer noch gestoppt. Was meinst du damit, den Trainingsgeschwindigkeitskoeffizienten zu reduzieren? Bitte erkläre. – Deven
Ist es auch sinnvoll, dass das Modell mit ~ 9000 Parametern für einen ~ 24000 großen Datensatz arbeitet? – Deven
Ich meine, dass alle diese Algorithmen in etwa gleich sind: 'x [n + 1] = x [n] + alpha * dF/dx'. Scheint dein 'alpha * dF/dx' zu groß. Ich schlage vor, Alpha zu reduzieren. Aber ich bin nicht sehr gut in Matlab Optimierung Pack, Alpha kann jetzt automatisch verwaltet werden. 9000 Parameter können in Ordnung sein, Sie müssen dann Regularisierung einführen. –