回答一些关于深度神经网络的基本问题

来源:互联网 发布:linux telnet 安装 编辑:程序博客网 时间:2024/06/01 08:50

Deep Neural Network

个人认为,可以在不了解dnn背后原理的情况下,使用dnn解决问题(黑箱),但是想要更好的使用dnn,还是要下功夫了解dnn是怎么work的。

什么是DNN?

DNN 是一种以输入输出单元为基本组成成分,以连接这些单元的有向网络为主要算法结构,并最终构建一个可以接受输入数据,输出预测结果的有向图。它有两个重要的特性:1. 网络结构可以被修改,工程师可以根据任务需要,对网络结构进行调整,以提升预测效果;2. 目前有不少非常优秀的工具和平台,可以很好的将DNN应用到各种机器学习任务中。

为什么DNN可以比传统机器学习效果好?

首先,DNN有坚实的数学理论,universal approximation threom在理论上证明了任何连续函数都可以用DNN进行拟合。思路很简单:为了逼近任意的连续函数,我们只需要能在极小的区间,产生任意大小的凸起就可以了(最终我们可以把所有这样的小区间拼接在一起,就得到所需的函数)。和积分的思想差不多。
其次,DNN可以更好的提取原始数据的特征,而不像传统机器学习那样,需要人工提取。最后,DNN也不是万能的,并不是在所有问题上都比传统的机器学习方法好,要依情况而论。

DNN的back-propagation如何工作的?

DNN通过剃度下降算法对网络进行优化。它的优化过程就是反向传播。
首先,我们最终希望计算的是CwljkCblj,但是又不能直接一个一个参数的计算,因此我们通过一个中间变量来描述两个剃度:

jlkl1zlj=kwljkal1k+bljalj=σ(zlj) ()δlj=Czljδlj=kCalkalkzljCwljk=Czljzljwljk=δlj(wljkal1k)wljk=δljal1kCblj=δlj()δl+1jδljδlj=Czlj=kCzl+1kzl+1kzlj=kzl+1kzljδl+1kzl+1k=jwl+1kjalj+bl+1k=jwl+1kjσ(zlj)+bl+1kzl+1kzlj=wl+1kjσ(zlj)δl=((wl+1)Tδl+1)σ(zl)δljδlj=kCalkalkzljCalkalkalkalkzljzlj

什么是DNN的过拟合

举一个非常典型的例子,具体可以看链接
假设我们有N个二维的数据点:
error
我们可以用一个复杂的多项式去逼近这些数据点,
error
我们也可以用一个较为简单的接近线性的函数去逼近这些数据点,
error
从误差来说,复杂的多项式拟合的效果要比简单的多项式拟合的好得多。
但从另一个角度来说,现实世界中的事物规律,往往都是由简单的模型或者过程产生的,因此简单的模型可以更好的泛化,从而更好的适应新的数据。复杂的模型为了更好的拟合数据,倾向于制造非常多的特例以解释每个数据发生的原因,然而简单的模型则是用简单的理由去解释,如果有误差,可以归结于数据收集的误差。

正则化的目的也就在于此,通过对w进行约束,从而让整个模型变得更简单一点。
以下是常用的L2和L1正则化约束项对w的剃度下降更新过程的影响:

L2w2wwwηC0wηλnw=(1ηλn)wηC0w

L1|w|ww=wηλnsgn(w)ηC0www00

也就是,不管L2还是L1,目的都在于让w衰减,从而变得更小一点。
那么为什么w变小了之后,模型会变得更简单呢?
可以从两个角度来说,当w变小了之后,w所对应的x的变化x,所产生的影响也会相应变得小,从而限制模型尝试用特例来拟合数据点;另一方面,当w接近于0时,对应的x的取值几乎对整个模型产生不了影响了,相当于是被常数化了。

为什么训练DNN是困难的

训练DNN的过程中,有一个非常常见的困难,那就是gradient vanishing。以下是对neuralnetworksanddeeplearning中对gradient vanishing的解释的总结,更多细节参见官网:
首先看下图,既可以看作是DNN中的一条传播路径,也可以看作是一个只有单个神经元的多层神经网络,以及对应节点b1的剃度。

事实上,一个DNN正是由非常多的这样的路径所组成的。
我们假设这个网络使用的激活函数都是sigmoid,

从sigmoid的剃度值变化函数可以看出本身sigmoid的剃度取值范围就是比较低的,而且在0-1范围内,衰减速度很快。而经过多层的累乘之后,一个节点的数值变化对损失函数的影响会变得很小,导致层级越低的节点训练越慢越困难。
tanh的剃度取值变化稍微比sigmoid好一点:

但同样会让剃度变得很小。
RELU可以比较好的解决这个问题,因为RELU不设定上限。
不过RELU依然有一个下限,这也是Leaky RELU试图解决的。

原创粉丝点击