2014-12-23 13 views
0

시작하기 전에 나는 이것이 10 월에 코딩을 시작 했으므로 이것을 서언하고 싶습니다. 그래서 조금 어색한 것이면 나를 용서해주십시오.역 전파 오류가 3 에포크 후에 감소하지 않습니다! 초급 도움이 필요한 초보자를위한 MATLAB

나는 내가 해왔 던 프로젝트를 위해 MLP를 만들려고 노력해왔다. 나는 숨겨진 레이어 (Sigmoid)와 출력 레이어 (softmax)를 가지고 있으며 제대로 작동하는 것 같습니다. 그러나 역 전파를 계산할 때 내 오류가 처음에는 감소하고 두 개의 다른 값이 번갈아 나타납니다.

오류 (y)에 대한 epoch (x)의 그래프 아래 이미지를 참조하십시오.

여러 개의 서로 다른 학습 속도, 서로 다른 수의 에포크, 다양한 초기 임의 가중치를 시도했습니다. 생각할 수있는 모든 것,하지만 계속 같은 문제가 있습니다. 또한 데이터와 대상을 0-1 사이의 값으로 표준화했습니다.

학습 속도를 상당히 낮추고 나면보다 매끄러운 그래프를 얻을 수 있지만 처음 몇 시대 이후에는 많은 오류가 줄어들지 않습니다. 예를 들어 10/50/100 에포크의 훈련을 사용할 때 4-5 에포크 후에는 거의 감소가 없습니다. 지역 최저점에 도달 했습니까?이를 개선 할 수 있습니까?

이 문제가 발생하는 이유에 대해 조명 해 주시고 문제를 해결할 수있는 코드를 제안 해 주실 수 있습니까? 정말 고마워요

역 전파 알고리즘에 사용 된 코드를 묶었습니다.

function [deltaW1, deltaW2,error] = BackProp(input,lr,MLPout,weightsL2,targ,outunits,outofhid) 
%This function returns a new set of updated weights for layer 1 and layer 2 
% These weights replace the previous set to improve generalisation 

%% Finding the derivative of the Sigmoid 
DerivativeS = outofhid.*(ones(size(outofhid)) - outofhid); 

%% Finding delta2 
error = zeros(10,length(MLPout)); 
for y = 1:length(outunits) 
    for j = 1:length(MLPout) 
     error(y,j) = (targ(j) - MLPout(y,j)); 
    end 
end 
%finding delta x weights two - the new weights between the hidden layer and output layer 

deltaW2 = lr.*(error*outofhid'); 

%finding delta one - the new weights between the input layer and hidden layer 


deltaW1 = lr*(((error'*weightsL2').*DerivativeS')'*input); 
deltaW1 = deltaW1'; 
end 
+0

데이터를 정규화 했습니까? 동일한 데이터를 가진 이미 테스트 된 솔버를 시도해보고 데이터에서 작동하는지 (솔버가 어떻게 작동하는지 반드시 알고 있어야합니다) 코드에서 문제가 아닌지 확인 했습니까? 구현하려는 역 전파 방정식은 무엇입니까? 나는 그것을 찾기 위해 게으 르다. – Werner

+0

안녕하세요. 예, 데이터를 정규화했습니다. 나는 솔버가 무슨 뜻인지 실제로 알지 못합니다. (미안, 여기 아주 녹색) –

+0

@Werner 안녕하세요. 예 저는 데이터를 정규화하고 출력을 표준화했습니다. 나는 솔버가 무슨 뜻인지 실제로 알지 못합니다. (미안하지만, 아주 녹색 여기) 구현하려고하는 알고리즘은 델타 가중치 업데이트 방정식입니다. 페이지 L7-13에서 찾을 수 있습니다. http://www.cs.bham.ac.uk/~jxb/INC/l7.pdf –

답변

1

코드에서 오류가 음수 값을 가질 수 있다고 생각됩니다. 유클리드 거리를 비용 함수로 사용하십시오. 비슷한 :

error(y,j) = sqrt ((targ(j) - MLPout(y,j))^2) 

(그들은 "더 볼록"지역 최소값에 갇혀받을 가능성이 적습니다 때문에) 보통 유클리드 거리보다 더 잘 작동 다른 비용 함수가 있습니다. 예를 들어, 음의 로그 가능성은 좋은 선택 중 하나입니다. 몇 가지 설명과 파이썬 코드는 here으로 제공됩니다. MATLAB 구현을 위해서는 this page이 도움이 될 수 있습니다.

+0

유클리드 거리를 프로젝트의 일부로 사용하도록 지시 받았기 때문에 나는 그것에 매달렸습니다. –

+0

내가 제안한 변경 사항을 구현했습니다. 고맙습니다. 그러나 나는 단지 몇 개의 신 (新) 시대 이후에 거의 배우지 않고 나를 떠나게된다. –