[size=large]神经网络里常常见到sigmoid函数(又称logistic函数),也会提到进入饱和区后该函数的导数很小,不利于训练。
那么,精确值是多少呢,今天,就画个图来看看:[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/1262/7e106164-f4d1-3bc4-be0d-e57d1358cbf2.png[/img]
[size=large]下面是一些点上的具体值,可以看到, x=4时,函数值已经到0.98以上了,而导数已经降到峰值的 十分之一以下了。
训练的时候不能太进入饱和区,但是如果完全在线性区,多层神经网络是没有意义的(多层线性网络还是线性的。。。);
根据这些值,可以为网络权重的初始值设置给个大致的参考吧~
[/size]
[size=large]代码如下:[/size]
那么,精确值是多少呢,今天,就画个图来看看:[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/1262/7e106164-f4d1-3bc4-be0d-e57d1358cbf2.png[/img]
[size=large]下面是一些点上的具体值,可以看到, x=4时,函数值已经到0.98以上了,而导数已经降到峰值的 十分之一以下了。
训练的时候不能太进入饱和区,但是如果完全在线性区,多层神经网络是没有意义的(多层线性网络还是线性的。。。);
根据这些值,可以为网络权重的初始值设置给个大致的参考吧~
[/size]
x=-8, 函数值为:0.00034, 导数为:0.00034
x=-6, 函数值为:0.00247, 导数为:0.00247
x=-4, 函数值为:0.01799, 导数为:0.01766
x=-2, 函数值为:0.11920, 导数为:0.10499
x= 0, 函数值为:0.50000, 导数为:0.25000
x= 2, 函数值为:0.88080, 导数为:0.10499
x= 4, 函数值为:0.98201, 导数为:0.01766
x= 6, 函数值为:0.99753, 导数为:0.00247
x= 8, 函数值为:0.99966, 导数为:0.00034
[size=large]代码如下:[/size]
close all
fsigmoid=@(x) 1./(1+exp(-x));
x=-8:.1:8;
y=fsigmoid(x);
fdy_dz=@(y) y.*(1-y);
dsig=fdy_dz(y);
fontSize=20;
subplot(121);
plot(x,y);
title('sigmoid函数','FontSize',fontSize)
xlabel('x','FontSize',fontSize)
ylabel('sigmoid(x)','FontSize',fontSize)
grid on
% axis equal
subplot(122);
plot(x,dsig);
title('sigmoid函数的导数','FontSize',fontSize)
xlabel('x','FontSize',fontSize)
ylabel('d sigmoid(x) /dx','FontSize',fontSize)
grid on
idx=find(mod(x,2)==0)
for i=1:length(idx)
fprintf('x=%2d,\t函数值为:%2.5f,\t导数为:%2.5f\n',x(idx(i)),y(idx(i)),dsig(idx(i)))
end