深度神经网络以及正则化
前面我们介绍了简单的线性模型,但是它仍有局限性,接下来介绍非线性模型。首先介绍,偷懒的工程师最喜欢的非线性模型ReLU(Rectified Linear Units)
ReLU
ReLU的函数形式为:
它的导数也非常简单,小于0的时候,导数为0,大于0的时候,导数为1。
用ReLU在前面的逻辑分类器的基础上构建简单的非线性模型:
- 第一层由一组X的权重和偏差组成并通过ReLU函数激活。这一层的输出会提供给下一层,但是在神经网络外部不可见,因此称为隐藏层。
- 第二层由隐藏层的权重和偏差组成,隐藏层的输入即为第一层的输出,然后由softmax函数生成概率。
- H对应的是分类器中ReLU的个数,H越大,网络越复杂。
2-layer的神经网络只有乘法、加法和ReLU操作,深度学习可以实现这些操作,实现的关键就是:链式法则
链式法则
链式法则就是将上一层的输出作为下一层的输入,这种方法求导很方便。
例如:
在计算链式法则的倒数的时候,用到的正是反向传播方法。如图:
第一行方框是前向传播,根据输入X计算得到的预测值y。
第二行方框是后向传播,计算偏导数,数据流动方向正好相反。
梯度下降算法也是集成了链式法则来计算梯度,通过后向传播,得到参数w的更新。
正则化
当数据量足够大,模型训练得很好的时候,就要防止过拟合。通常避免过拟合的方法有:
方法一:观察
通过观察模型在验证集上的表现,当出现过拟合的时候停止训练模型。
方法二:Regularization
采用添加正则化的方法,施加额外的限制,间接地减少自由变量的参数数量。例如,L2正则。
通过添加权重矩阵的L2范数作为正则项。对于L2求导:
方法三:Dropout
dropout是近期出现的,功能很强大的方法(hilton提出的哦)!
实现机理:从前layer到后layer的值,叫做激活值。在训练的时候,对每个样例,随机选所有激活值中的一半,把他们设为0(丢弃不用)。这样,神经网络就不会依赖任何激活值了。