2016-05-14 11 views
0

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?

Antwort

0

Ich habe die Initialisierung der Parameter von Nullen auf Rand geändert und zusammen mit der Normalisierung habe ich es zum Laufen gebracht.

0

Sieht so aus, als müssten Sie den Trainingsgeschwindigkeitskoeffizienten reduzieren oder Ihren Parametervektor normalisieren.

+0

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

+0

Ist es auch sinnvoll, dass das Modell mit ~ 9000 Parametern für einen ~ 24000 großen Datensatz arbeitet? – Deven

+0

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. –