深度学习(花书)学习笔记——第六章 深度前馈网络

深度前馈网络又称多层感知机、前馈神经网络。即只有从x向y方向的传播,最终输出y。

主要包括输入层、隐藏层和输出层。神经网络的模型可以解决非线性问题。

计算网络的参数通过反向传播;如果每一层隐藏层都只有wx+b的运算,则多层累加变为w1*(w2*(w3*x))+a = W*x +a,失去了非线性能力。故每一层后面会加上一个激活层。

实例:学习XOR

单个线性函数无法解决XOR的问题,但是多个线性函数的组合,每个线性函数理解为一个神经元,就可以表示XOR运算。

这里提到了RELU激活函数g(x) = max{0,x},也叫整流线性单元,是大多前馈神经网络的默认激活函数。主要优势运算简单。后面有专门章节介绍和比较各个激活函数。

基于梯度的学习:

代价函数:和其他机器学习使用方式类似。

使用最大似然学习条件分布:

学习条件统计量:

输出单元:

主要就是sigmoid 和softmax两种,都存在饱和的问题,前者在输入过大和过小时,后者在有某个预测特别大时。

sigmoid:主要用于二分类,或输出概率。 这边提到softplus:ζ(x)=ln(1+exp(x))

softmax:

输出每个类可能的概率。多分类以及预测自然语言处理中预测下一句话之类时可以用到。但是如果可能性太多的话,运算过大,可以通过树状结构减少运算。

隐藏单元:

隐藏单元主要包括仿射变换 wx+b 和激活函数g(x),重点研究激活函数:

下面介绍几种常见激活函数:

ReLU族

ReLU:整流线性单元 g(z0) = max(0,z),最常用。

优势:计算方便,大于0部分不存在梯度饱和。

计算时通常将仿射变换的b初始设置一个较小的正数,如0.1,这样开始时大多数样本都可以通过。

缺点:无法学习小于0的样本。

针对上述缺点出现了很多变种:

LeakReLU:

这样可以学习小于0的部分。

PReLU:同LeakReLU,但是a参数是根据数据确定的,而非事先指定

学习方式如下:

RReLU:

RReLU:训练时是波动的,测试时就固定下来了。

ELU:

SReLU:

è¿éåå¾çæè¿°

激活后样本均值为0,方差为1,相当于自归一化,效果比batchnormlize好。

è¿éåå¾çæè¿°

参考别人的一幅图再。

补充一个softplus:

ζ(x)=ln(1+exp(x)):

softplus相当于平滑版的ReLU。

再回忆一下这些激活函数的性质:

Sigmoid族

在整流线性单元之前,主要使用Sigmoid激活函数和tanh激活函数

Sigmoid: g(z) = \sigma (z)

将实数压缩到0到1,适用于输出概率

导数

tanh:g(z) = tanh(z) = 2\sigma(2z)-1

将实数压缩到-1到1

导数

sigmoid函数容易饱和,不适合前馈神经网络中隐藏层的激活。但是在诸如LSTM的网络中有用。

二分类问题,一般隐藏层用tanh。因为其均值为0,保持整个网络始终输入0均值的数据,较易优化。


 

其他都不常用了。也没有什么优势就不介绍了。

架构设计:

理论上深度学习网络可以近似实数空间中的所有函数,只要神经元足够多。

深度学习之所以优越,就是因为同等的表达能力,深层网络需要的神经元小于浅层网络且相对不容易过拟合。

深度网络不单单是一层层的依次链接,后面章节会有介绍多种变种的深度学习网络。

反向传播和其他的微分算法:

从x到y时前向传播,产生一个标量代价函数:J(\theta )

反过来从y计算梯度调整参数称为反向传播。

通过计算图来看数据流向:

主要通过链式法则计算。

这里花书的略深奥了,看了bilibili的一篇视频很不错,链接如下:

https://www.bilibili.com/video/av16577449?from=search&seid=6361052292273718140

大概的意思如下:

反向传播是一层层传播的,比如最后一层往倒数第二层传播,而后第二层继续往第三层传播。不是像我之前一个同事理解的,先计算最后一层相对倒数第二层的偏导,然后计算最后一层相对倒数第三层的偏导,即每次都是最后一层往上传播,这个是不对的。

我们可以理解最后一层的输出为a_{L},这个是经过神经网络后最后得到的输出。而实际的输出为y。那么这里的误差就是^{(a-y)^{2}},我们设他为Z。这里的Z是输出层所有输出和预期的均方差之和。即:

Z = \sum (ai_{L}-y)^{2}

这个a_{L}是怎么来的呢,就是经过前面一层所有的权重相乘后相加再加上偏移获得:

a_{L} =\sigma (w_{1}a1_{L-1} +w_{2}a2_{L-1} + w_{3}a3_{L-1} + ... + w_{n}an_{L-1} + b)

这里a1表示前一层和w1对应的那个权重在上一层得到的激活值。

得到前面的Z,而后即可针对w,a,以及b分别求他们的偏导,更新他们的新的值。w和b更新为新的值,a的值可以认为是上一层的预期输出,其差值正好可以作为再上一层的均方误差进行训练。

这里每一次更新不是一个样本,而是一个打乱的小批次,这就是随机梯度下降。

这就是根据自己理解的反向传播算法了。

猜你喜欢

转载自blog.csdn.net/leichangqing/article/details/89020631
今日推荐