Neural network 为什么在0-1回归任务中,sigmoid层的结果比tanh层差?

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 =

我正在使用回归来预测一个值为0-1的数组(位数组)。神经网络规范如下(MATLAB):

我使用了以下代码来实现Sigmoid层:

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