深度学习小白专场-深度前馈网络和反向传播的重点及基本思想总结

深度前馈网络

  • 深度前馈网络也叫做前馈神经网络或者多层感知机(MLP),是典型的深度学习模型。链的全长称为模型的深度,网络的每个隐藏层通常都是向量值的,这些隐藏层的维数决定了模型的宽度。

这种通过学习特征来改善模型的一般化原则是深度学习中反复出现的主题。

  • 整流线性激活函数是被推荐用于大多数前馈神经网络的默认激活函数。我们可以从整流线性函数构建一个万能函数近似器。
  • 用于线性模型的权重衰减方法也直接适用于深度神经网络,而且是最流行的正则化策略之一。
  • 神经网络设计一个反复出现的主题就是代价函数的梯度必须足够的大和具有足够的预测性,来为学习算法提供一个好的指引。
  • 均方误差和平均绝对误差在使用基于梯度的优化方法时往往成效不佳。一些饱和的输出单元当结合这些代价函数时会产生非常小的梯度。这就是交叉熵代价函数比均方误差和平均绝对误差更受欢迎的原因。

1.输出单元

  • 用于高斯输出分布的线性单元
  • 用于Bernoulli输出分布的sigmoid单元
    我们可以认为sigmoid输出单元具有两个部分。首先它使用一个线性层来计算z=w^T +b 其次它使用sigmoid激活函数将z转化成概率。
  • 用于Multinoulli输出分布的softmax单元
    softmax函数最常用分类器的输出,来表示n个不同类上的概率分布。

一般而言,如果我们定义了一个条件分布p(y|x;sita),最大似然原则建议我们使用-log p(y|x;sita)作为代价函数
大多数现代的神经网络使用最大似然来训练,这意味着代价函数就是负的对数似然,它与训练数据和模型分布间的交叉熵等价。

2.隐藏单元

  • 整流线性单元是隐藏单元极好的默认选择。

神经网络训练算法通常不会达到代价函数的局部最小值,而仅仅是显著减小它的值。所以代价函数的最小值对应于梯度未定义的点事可以接受的。

  • 整流线性单元使用激活函数g(z)=max{0,z},整流线性单元易于优化,因为他们和线性单元非常类似。线性单元和整流线性单元唯一的区别就是整流线性单元在其一半的定义域还是那个输出为0.但是它的一个缺陷是不能利用基于梯度的学习方法学习那些使得他们激活为零的样本。
  • sigmoid单元在其大部分定义域内都饱和-当z取绝对值很大的正值时,他们饱和到一个高值,当z取绝对值很大的负值时,他们饱和到一个低值,并且仅仅当z接近0时他们才对输入强烈敏感。因而广泛的饱和性使得我们不鼓励将他们用作前馈网络中的隐藏单元。
  • 线性隐藏单元提供了一种减少网络中参数数量的有效方法。

万能近似定理表明:一个前馈神经网络只要具有一层线性输出层和至少一层任何一种具有挤压性质的激活函数,只要给你网络足够的数量,他可以以任意的精度来接近任何一个从一个有限维空间到另一个有限维空间的borel可测函数。
在很多情况下使用更深的模型能够减少表示期望函数所需的单元的数量,并且可以减少泛化误差。

  • 反向传播通常被称为backprop,允许来自代价函数的信息通过网络向后流动,以便计算梯度。反向传播算法仅指用于计算梯度的方法。反向传播不仅仅适用于多层神经网络。原则上他可以计算任何函数的导数。
  • 反向传播算法被设计为减少公共子表达式的数量而不考虑存储的开销,具体来说,它大约对图中的每个节点执行一次Jacobian乘积反向传播算法访问了图中的每条边一次,以获得相关的偏导数。反向传播因此避免了重复子表达式的指数爆炸。
  • 一些反向传播的方法采用计算图和一组用于图的输入的数值,然后返回在这些输入值处梯度的一组数值,我们将这种方法称为符号到数值的方法
  • 基于符号到符号的方法的描述包含了符号到数值的方法。符号到数值的犯法可以理解为执行了与符号到符号的方法中构建图的过程中完全相同的计算。关键的区别是符号到数值的方法中不会显示出计算图。

张量通常可以使任意维度,并且包含标量,向量和矩阵。

  • 这里介绍的反向传播算法只是自动微分的一种方法。它是一种称为反向模式累加的更广泛类型的技术的特殊情况。
  • 前馈网络可以被视为一种高效的非线性函数近似器,它可以使用梯度下降来最小化函数近似误差为基础。
  • 神经网络性能在改善由于算法的因素,其中一个算法的变化是用交叉熵损失函数替代均方误差函数。使用交叉熵损失大大提高了具有sigmoid和softmax输出的模型的性能,而当使用均方误差损失时会存在饱和和学习缓慢的问题。

反向传播思想及总结

神经网络处理信息的核心机制正是一层的激活值是通过怎样的运算算出下一层的激活值的
权重告诉你上一层的神经元关注什么样的像素图案,而偏置则告诉你加权和得有多大才能让神经元的激发变的有意义。神经网络的学习实际上就是让代价函数的值最小,代价函数是非常有必要时平滑的,这样才能每次挪动一点点,最后找到一个局部最小值。这也顺便解释了人工神经元的激活值为什么是连续的。
sigmoid函数主要是将其挤压在0和1之间,同时模仿生物神经元的激活的意义,在什么情况下被激发,现在这个函数在深度学习用的比较少了用的比较多的是整流线性单元(ReLU)因为在深度网络中训练的效果非常好。

  • 计算梯度的算法是神经网络的核心,叫做反向传播算法(BP)
  • 关于梯度下降法:负梯度中的每一项都告诉了我们两件事:1.正负号很明显在告诉我们输入向量的这一项该调大还是该调小 2.每一项的相对大小更告诉了我们改变哪个值的影响更大。当看到负梯度向量时就可以把它理解为各个权重偏置的相对重要度,标记出来改变哪个参数性价比最高。
  • 反向算法算的是单个训练样本想怎么修改权重和偏置。不仅仅是说每个参数应该变大还是变小还包括了这些变化的比例是多大才能最快的降低代价。真正的梯度下降需要对好几万个训练范例都这么做然后对这些变化值取平均。但是这样可能算起来太慢了,所以会先把样本分到各个minibatch中去,计算一个minibatch来作为梯度下降的一步,计算每个minibatch的梯度调整参数不断循环,最终就会收敛到代价函数的一个局部最小值上。

你可能感兴趣的:(深度学习)