我試圖實現用於使用反向傳播神經網絡梯度計算。 我不能讓它與交叉熵錯誤一起工作,並將線性單位(ReLU)糾正爲激活。反向傳播整流線性單元激活與交叉熵誤差
我設法讓我的實現工作與sigmoid,tanh和ReLU激活函數的平方誤差。交叉熵(CE)誤差與S形激活梯度計算正確。但是,當我將激活更改爲ReLU時 - 它失敗。 (我爲CE跳過tanh,因爲它在(-1,1)範圍內後退值)。
是否因爲日誌函數的值接近於0的行爲(通過ReLUs返回大約50%標準化輸入的時間)? 我試圖mitiage這個問題有:
log(max(y,eps))
但它只能有助於使誤差和梯度回真正的號碼 - 他們仍然從數值梯度不同。
num_grad = (f(W+epsilon) - f(W-epsilon))/(2*epsilon)
以下MATLAB代碼呈現在我的實驗中使用的簡化的和冷凝的反向傳播實現::
function [f, df] = backprop(W, X, Y)
% W - weights
% X - input values
% Y - target values
act_type='relu'; % possible values: sigmoid/tanh/relu
error_type = 'CE'; % possible values: SE/CE
N=size(X,1); n_inp=size(X,2); n_hid=100; n_out=size(Y,2);
w1=reshape(W(1:n_hid*(n_inp+1)),n_hid,n_inp+1);
w2=reshape(W(n_hid*(n_inp+1)+1:end),n_out, n_hid+1);
% feedforward
X=[X ones(N,1)];
z2=X*w1'; a2=act(z2,act_type); a2=[a2 ones(N,1)];
z3=a2*w2'; y=act(z3,act_type);
if strcmp(error_type, 'CE') % cross entropy error - logistic cost function
f=-sum(sum(Y.*log(max(y,eps))+(1-Y).*log(max(1-y,eps))));
else % squared error
f=0.5*sum(sum((y-Y).^2));
end
% backprop
if strcmp(error_type, 'CE') % cross entropy error
d3=y-Y;
else % squared error
d3=(y-Y).*dact(z3,act_type);
end
df2=d3'*a2;
d2=d3*w2(:,1:end-1).*dact(z2,act_type);
df1=d2'*X;
df=[df1(:);df2(:)];
end
function f=act(z,type) % activation function
switch type
case 'sigmoid'
f=1./(1+exp(-z));
case 'tanh'
f=tanh(z);
case 'relu'
f=max(0,z);
end
end
function df=dact(z,type) % derivative of activation function
switch type
case 'sigmoid'
df=act(z,type).*(1-act(z,type));
case 'tanh'
df=1-act(z,type).^2;
case 'relu'
df=double(z>0);
end
end
編輯
我使用數值梯度驗證結果
Afte [R另一輪的實驗,我發現用Softmax最後一層:
y=bsxfun(@rdivide, exp(z3), sum(exp(z3),2));
和SOFTMAX成本函數:
f=-sum(sum(Y.*log(y)));
使implementaion所有激活功能,包括RELU工作。
這使我的結論,這是物流成本函數(二進制clasifier)不與RELU工作:
f=-sum(sum(Y.*log(max(y,eps))+(1-Y).*log(max(1-y,eps))));
但是,我仍然無法找出問題所在。
ReLU函數的導數爲:對於輸入<= 0,df = 0,輸入> 0時df = 1,這在matlab中相當於'double(z> 0)'。 d3是最後一層的增量,它是正確的形式。例如,ReLU比softplus功能具有優勢 - 選中[here](http://machinelearning.wustl.edu/mlpapers/paper_files/icml2010_NairH10.pdf)。 – Pr1mer