神经网络

关于神经网络的基础理解在知乎下面两个回答已经说的很好了
如何简单形象又有趣地讲解神经网络是什么? --王小龙
如何简单形象又有趣地讲解神经网络是什么? --YJango算法

这里就只把谷歌教程上面的知识补充一下吧,也差很少是最后一趴了。网络

激活函数

要对非线性问题进行建模,咱们能够直接引入非线性函数。咱们能够用非线性函数将每一个隐藏层节点像管道同样链接起来。在下图所示的模型中,在隐藏层 1 中的各个节点的值传递到下一层进行加权求和以前,咱们采用一个非线性函数对其进行了转换。这种非线性函数称为激活函数函数

clipboard.png

常见激活函数:学习

  • S型激活函数
  • ReLU 激活函数。

clipboard.png

相较于 S 型函数等平滑函数,如下修正线性单元激活函数(简称为 ReLU)的效果一般要好一点,同时还很是易于计算。ReLU: F(x)=max(0,x)优化

ReLU 的优点在于它基于实证发现(可能由 ReLU 驱动),拥有更实用的响应范围。S 型函数的响应性在两端相对较快地减小。google

clipboard.png

实际上,全部数学函数都可做为激活函数。假设 表示咱们的激活函数(ReLU、S 型函数等等)。所以,网络中节点的值由如下公式指定:spa

clipboard.png

训练神经网络

反向传播演示
反向传播算法是最多见的一种神经网络训练算法。借助这种算法,梯度降低法在多层神经网络中将成为可行方法。首先,反向传播确实依赖于梯度这一律念, 事物必须是可微的,这样咱们才可以进行学习。.net

反向传播算法的一些要点:3d

  • 梯度很重要,若是它是可微的,则咱们也许可以对其进行学习
  • 梯度消失,每一个额外的层都会依次下降信噪比,若是咱们的网络太过深刻, 信噪比随着您愈来愈深刻模型而变差,那么学习速度可能真的会变得很是慢。较低层(更接近输入)的梯度可能会变得很是小。在深度网络中,计算这些梯度时,可能涉及许多小项的乘积。当较低层的梯度逐渐消失到0 时,这些层的训练速度会很是缓慢,甚至再也不训练ReLU 激活函数有助于防止梯度消失。
  • 梯度爆炸,果网络中的权重过大,则较低层的梯度会涉及许多大项的乘积。在这种状况下,梯度就会爆炸:梯度过大致使难以收敛。若是学习速率过高,就会出现极不稳定的状况, 模型中就可能出现NaN。在这种状况下,就要以较低的学习速率再试一次。批标准化能够下降学习速率,于是有助于防止梯度爆炸。
  • ReLU 单元消失,这多是由于咱们将硬性上限设为0, 若是最终全部内容都低于0值, 梯度就没法反向传播, 咱们就永远没法返回存在ReLU层的位置。一旦 ReLU 单元的加权和低于 0,ReLU 单元就可能会停滞。它会输出对网络输出没有任何贡献的 0 激活,而梯度在反向传播算法期间将没法再从中流过。因为梯度的来源被切断,ReLU 的输入可能没法做出足够的改变来使加权和恢复到 0 以上。下降学习速率有助于防止 ReLU 单元消失。
  • 丢弃正则化,最后,在训练深度网络时还有一个颇有用的技巧, 即正则化的另外一种形式,叫作丢弃。应用丢弃是指,咱们针对几率P取一个节点, 而后从网络的一个梯度步长中将其移除。在其余梯度步长中重复此过程, 并随机取不一样的节点进行丢弃。丢弃的节点越多,正则化效果就越强。您能够清楚地看到,若是丢弃全部节点, 就会获得一个极为简单的模型, 这个模型基本上毫无用处。若是一个都不丢弃,则模型便具有完整的复杂性; 若是在训练过程当中的某个位置进行丢弃, 那就至关于在这个位置应用了某种有效的正则化。咱们最近取得了多项推进深度学习走向前沿的 关键进展,丢弃即是其中之一, 使咱们可以得到许多重大的成果。0.0 = 无丢弃正则化。1.0 = 丢弃全部内容。模型学不到任何规律。0.0 和 1.0 之间的值更有用。
  • 通常来说,须要考虑尽可能将模型的深度限制为最小的有效深度
  • 训练时,若是特征值在输入时就已经标准化, 这一般会对咱们很是有用。若是范围大体相同, 则有助于提升神经网络的转化速度。范围实际值并不重要;咱们一般推荐的大体范围是负1到正1。也能够是负5到正5,或者0到1, 只要全部输入的范围大体相同就能够。避免 NaN陷阱,避免离群值也会有帮助,可使用一些标准方法:线性缩放为最大值和最小值设定硬性上下限(截断)或者对数缩放

多类别神经网络

前面您已经了解了二元分类模型,该模型可从两个可能的选项中选择其一,例如:blog

  • 特定电子邮件是垃圾邮件仍是非垃圾邮件。
  • 特定肿瘤是恶性肿瘤仍是良性肿瘤

在本单元中,咱们将研究多类别分类,这种模型可从多种可能的状况中进行选择。例如

  • 这是一张苹果、熊、糖果、狗狗仍是鸡蛋的图片

当类别总数较少时,这种方法比较合理,但随着类别数量的增长,其效率会变得愈来愈低下。

用Softmax激活函数解决单标签多类别分类

咱们已经知道,逻辑回归可生成介于 0 和 1.0 之间的小数。例如,某电子邮件分类器的逻辑回归输出值为 0.8,代表电子邮件是垃圾邮件的几率为 80%,不是垃圾邮件的几率为 20%。很明显,一封电子邮件是垃圾邮件或非垃圾邮件的几率之和为 1.0

Softmax本质上就是对咱们所使用的这种逻辑回归的泛化, 只不过泛化成了多个类别。在遇到单一标签的多类别分类问题时,咱们使用会Softmax。也就是说,在多类别问题中,Softmax 会为每一个类别分配一个用小数表示的几率。这些用小数表示的几率相加之和必须是 1.0。与其余方式相比,这种附加限制有助于让训练过程更快速地收敛

例如,Softmax 可能会得出图片属于某一特定类别的如下几率:

clipboard.png

Softmax 层是紧挨着输出层以前的神经网络层。Softmax 层必须和输出层拥有同样的节点数。

clipboard.png

关于Softmax:
详解softmax函数以及相关求导过程 - 忆臻的文章 - 知乎
https://zhuanlan.zhihu.com/p/...
Softmax 函数的特色和做用是什么? - 杨思达zzzz的回答 - 知乎
https://www.zhihu.com/questio...

在训练多类别分类时,咱们有几个选项能够选择。

  • 完整 SoftMax(就是以前将的SoftMax):暴力破解,针对全部类别进行计算, 此时训练成本相对昂贵。
  • 候选采样:针对全部正类别标签进行计算,但仅针对负类别标签的随机样本进行计算。 此时,咱们要针对输出节点所属的类别来训练输出节点, 而后对负分类进行采样,而且只更新输出节点的采样。这种方式在训练时效率更高一些,并且在许多状况下 彷佛都不会对效果产生很大影响;但显而易见的是, 咱们在推理时仍然须要评估每个输出节点。

类别数量较少时,完整 Softmax 代价很小,但随着类别数量的增长,它的代价会变得极其高昂。候选采样能够提升处理具备大量类别的问题的效率。

候选采样:
一种训练时进行的优化,会使用某种函数(例如 softmax)针对全部正类别标签计算几率,但对于负类别标签,则仅针对其随机样本计算几率。例如,若是某个样本的标签为“小猎犬”和“狗”,则候选采样将针对“小猎犬”和“狗”类别输出计算预测几率和相应的损失项,但没必要针对每一个非狗狗样本提供几率。这种采样基于的想法是,只要正类别始终获得适当的正加强,负类别就能够从频率较低的负加强中进行学习,这确实是在实际中观察到的状况。候选采样的目的是,经过不针对全部负类别计算预测结果来提升计算效率。

一个标签与多个标签

Softmax 假设每一个样本只是一个类别的成员。可是,一些样本能够同时是多个类别的成员。对于此类示例:

  • 不能使用 Softmax。
  • 列表项目

例如,假设您的样本是只包含一项内容(一块水果)的图片。Softmax 能够肯定该内容是梨、橙子、苹果等的几率。若是您的样本是包含各类各样内容(几种不一样种类的水果)的图片,您必须改用多个逻辑回归。

相关文章
相关标签/搜索