Neural Network 1
神经网络里的非线性是很重要且必不可少的。在全连接层之间引入非线性单元,可以让神经网络具有更强的表达能力。一个三层的神经网络可以大概写成这样子的形式,
s=W3max(0,W2max(0,W1x))
中间的隐藏层神经元数量的大小可以自己设置。
Modeling the Neurons
- 86 billion neurons in human nervous system
- connected with 1014−1015 synapses(突触)
- dendrites(树突) and axon(轴突)
- 树突是神经元自己的,较短的突触 input
- 轴突是神经元连接别的神经元的,且较长的突触 output
- fire rate of neuron ⇔ activation functions f
- 实际的神经元要复杂的多,这里只是 coarse model,如
- 有很多种不同的神经元,结构和功能都不同
- 树突不只是一个权重值,而是复杂的非线性动态系统
- 神经信号的传输时间很重要,这忽略了
- Single neuron as linear classifier
- Binary Softmax classifier (logistic regression)
- Binary SVM classifier (with max-margin hinge loss)
- Regularazation interpretation
⇔ gradual forgetting
Activation functions
sigmoid
- σ(x)=1/(1+e−x)
- 有点落伍了(fallen out of favor and it is rarely ever used)
- 原因 1:梯度饱和问题(sigmoid saturate and kill gradients),即如果神经元的激活值很大,返回的梯度几乎为零,因此反向传播的时候,也会阻断(or kill)从此处流动的梯度。此外初始化的时候,也要注意,如果梯度很大的话,也很容易造成梯度饱和。
- 原因 2:sigmoid outputs are not zero-centered,因为输出结果在 [0,1] 之间,都是整数,所以造成了某些维度一直更新正的梯度,某些则相反。就会造成 zig-zagging 形状的参数更新。不过利用 batch sgd 就会缓解这个问题,没有第一个问题严重。
tanh
- tanh(x)=2σ(2x)−1
- 很明显,tanh non-linearity 虽然也有梯度饱和问题,但是起码是 zero-centered,因此实际中比 sigmoid 效果更好。
ReLU
- Rectified Linear Unit,即 f(x)=max(0,x)
- 好处(pros)之一,加速收敛速度,据说是因为线性,非饱和(non-saturating)的形式
- 好处之二,运算(oprations)很实现都很简单,不用指数(exponentials)操作
- 坏处,很脆弱(fragile),容易死掉(die),即如果很大的梯度经过神经元,那么就会造成此神经元不会再对任何数据点有激活。不过学习率设置小一点就不会有太大的问题。【refer to stackexchange and Quora】
Leaky ReLU
- 不是单纯的把负数置零,而是加一个很小的 slope,比如 0.01
- f(x)=1(x<0)(αx)+1(x≥0)(x)
- 是为了修复 “dying ReLU” 问题。
- 如果 α