Neural network 为什么在0-1回归任务中,sigmoid层的结果比tanh层差?
我正在使用回归来预测一个值为0-1的数组(位数组)。神经网络规范如下(MATLAB): 我使用了以下代码来实现Sigmoid层:Neural network 为什么在0-1回归任务中,sigmoid层的结果比tanh层差?,neural-network,activation-function,Neural Network,Activation Function,我正在使用回归来预测一个值为0-1的数组(位数组)。神经网络规范如下(MATLAB): 我使用了以下代码来实现Sigmoid层: classdef sigmoidLayer < nnet.layer.Layer methods function layer = sigmoidLayer(name) % Set layer name if nargin == 2 layer.Name =
classdef sigmoidLayer < nnet.layer.Layer
methods
function layer = sigmoidLayer(name)
% Set layer name
if nargin == 2
layer.Name = name;
end
% Set layer description
layer.Description = 'sigmoidLayer';
end
function Z = predict(layer,X)
% Forward input data through the layer and output the result
Z = exp(X)./(exp(X)+1);
end
function dLdX = backward(layer, X ,Z,dLdZ,memory)
% Backward propagate the derivative of the loss function through
% the layer
dLdX = Z.*(1-Z) .* dLdZ;
end
end
end
classdef sigmoidLayer
输出仅为0或1。那么为什么乙状结肠比tanh更坏,而不是相等或更好呢 这取决于你所说的“更糟”。没有更多的细节,很难回答清楚 然而,关键区别之一是函数的导数。由于梯度更新的大小取决于函数的导数,当导数饱和时,梯度更新的大小可能会接近0(网络无法再学习) 当
x->+/-inf
、sigmoid->1/0
和d(sigmoid)/dx->0
时,sigmoid在1和0处饱和,因此根据您的数据,这可能会导致学习速度变慢或“更差”。相反,尽管它在变为1时会饱和,但tanh在0附近不会饱和(实际上它是其导数的最大值),所以在这个区域学习是没有问题的
您可能还想调查一下谢谢。“较差”是指较差的预测结果。sigmoid使输出为0.5-1,而不是0饱和。
classdef sigmoidLayer < nnet.layer.Layer
methods
function layer = sigmoidLayer(name)
% Set layer name
if nargin == 2
layer.Name = name;
end
% Set layer description
layer.Description = 'sigmoidLayer';
end
function Z = predict(layer,X)
% Forward input data through the layer and output the result
Z = exp(X)./(exp(X)+1);
end
function dLdX = backward(layer, X ,Z,dLdZ,memory)
% Backward propagate the derivative of the loss function through
% the layer
dLdX = Z.*(1-Z) .* dLdZ;
end
end
end