Sigmoid函数是学习DL中activation function的必学经典。 f ( x ) = 1 e − x + 1 f(x) = \frac{1}{e^{-x}+1} f(x)=e−x+11 他的图像 note: this pic is from here. 他的一些好的性质简单带过:
可微(这是使用chain rule所必须的)单调性对变量的scaling 能力事实上sigmoid函数是一个软饱和函数;当|x|很大时候,可以看到两侧的函数是很平的。此时他的导数是接近于0的。不严谨地说 f ′ ( x ) ≈ 0 , when ∣ x ∣ > c f'(x) \approx 0 , \text{when} |x| > c f′(x)≈0,when∣x∣>c 由此带来了第一个问题 这意味着当你的x数值比较大时候,你的梯度基本是0;根据chain rule,你会发现你的local gradient部分会含有 f ( x ) f ′ ( x ) f(x)f'(x) f(x)f′(x)项。这样其也接近于0。而没有了梯度的指示,梯度下降法就失去意义了。(一般五层网络就会出现梯度消失的问题)
其实软饱和在使得DL神经网络 在20/30年内难以有效训练,这是阻碍DL发展的一个重要原因。
第二个问题在于 not zero-centered! sigmoid的函数数值都是正的。下一层的输入也是正的。 我们在计算时候,根据chain rule 梯度计算是上面来的和自己的; 观察我们自己部分,对于 f ( x ) = w T X + b f(x) = w^TX+b f(x)=wTX+b如果对 w w w求偏导,得到的是 X X X;此时 X > 0 X > 0 X>0.所以你整个对 w w w求偏导的情况,其实完全取决于前面部分的数值。E.g,
∂ L ∂ σ ∂ σ ∂ f ∂ f ∂ w = ∂ L ∂ σ ∂ σ ∂ f X \frac{\partial L }{\partial \sigma} \frac{\partial \sigma}{\partial f}\frac{\partial f}{\partial w} = \frac{\partial L }{\partial \sigma} \frac{\partial \sigma}{\partial f}X ∂σ∂L∂f∂σ∂w∂f=∂σ∂L∂f∂σX Cause we have: ∂ σ ∂ f = σ ( 1 − σ ) > 0 \frac{\partial \sigma}{\partial f} = \sigma(1-\sigma) > 0 ∂f∂σ=σ(1−σ)>0 since σ ∈ ( 0 , 1 ) \sigma \in (0,1) σ∈(0,1) 所以此时所有的符号都是由 ∂ L ∂ σ \frac{\partial L }{\partial \sigma} ∂σ∂L决定;这也就导致了,我们的 w w w的更新方式只有两个:全正、或者全负;(in 2 dimension, these search directions are the first and second quadrant in coordinate system)
所以在优化搜索过程中,我们会有很多zigzag,这使得效率低下!
exp函数计算的代价太大