6. Deep Learning 简介
最先开始的是感知机,然后是多层感知机,深度学习其实就是多加了隐藏层。
全连接的前馈神经网络如下:
对于每一层的计算可以写成矩阵操作的形式,不断重复的矩阵操作就可以考虑使用并行计算来进行加速。
对于分类问题,在输出层通常使用softmax函数多分类。
- 问题:如何确定多少层,多少个神经元
通常依靠经验、直觉、尝试,可能会需要领域知识。
7.Backpropagation 反向传播算法
BP算法可以更加有效地计算梯度,主要运用了链式法则,将损失函数关于权重的微分分成向前和向后两部分来计算。
向前计算的部分非常简单,如下图,正好每一层的输入xi。
向后计算的部分,为什么说是向后计算呢,如下图可以发现l对z的微分可以转变成对后一层z'和在z"的微分,所以可以一直往后推到最后一层。
实际计算时就是通过向前和向后分别把z关于a的微分和l关于z的微分全算出来,最后相乘得到,l关于w的微分。
8.keras
9. Tips for deep learning
在deep learning 中会遇到很多问题,一般首先看在训练集上的效果,再看在测试集上的效果。
如果训练集上效果都不好,就要重新选择模型;如果训练集上效果好,但是测试集上效果不好,我们需要考虑是否过拟合。
有一种情况:如果神经网络的层数多了反而不如层数少的效果好,这个不能简单地归罪于过拟合,这个很可能就是没有训练好。
对于不同的问题需要采用不同的解决办法。
9.1 训练集效果不好
1. 采用新的激活函数
在神经网络层数比较多的情况下会发生vanishing gradient problem,在越靠近输入的地方梯度比较小,学习很慢;靠近输出的地方学习得特别快。这个现象的出现是因为sigmoid函数。如下图,当w改变△w时,经过sigmoid函数后输出的变化很少,经过几层之后,损失函数的变化非常之下,所以在靠近输入的地方梯度特别小。
可以替换的激活函数:
- ReLU
当使用ReLU时实际上input关于output是线性的(注意只是在input的附近是线性的,只有input变化大了,就不是线性了)。
- ReLU variant
(Exponential Linear Unit)
- Maxout
Maxout network可以自己学习activation function。ReLU是Maxout的一种特例。
2.自适应的学习速率
- RMSProp
- momentum
模拟物理上的球滚动,将动量的因素加入。将前一次的运动方向认为是惯性。
9.2 训练集效果好,但是测试集效果不好
1. early stopping
当在validation set 上error不减少,即使在training set 上loss仍然在减少也要停止Epoch。
2. Regularization
使得参数每一次update的时候都变小。没用的参数最后变成0,但是有用的参数最后不会是0.
L1: 对所有的参数一视同仁。最后参数差距大。有些特别接近0,有些比较大。
L2:对比较大的参数惩罚强。最后参数聚集在接近0,但不会真的很靠近0的地方 。
3. Dropout
Dropout可以认为是一种ensemble的方式。 但是只有linear 时候 可以在testing的时候乘以(1-p)%。