神经网络

aaJamesJones 2019-06-27

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

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

激活函数

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

神经网络

常见激活函数:

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

神经网络

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

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

神经网络

实际上,所有数学函数均可作为激活函数。假设 表示我们的激活函数(ReLU、S 型函数等等)。因此,网络中节点的值由以下公式指定:

神经网络

训练神经网络

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

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

  • 梯度很重要,如果它是可微的,则我们也许能够对其进行学习
  • 梯度消失,每个额外的层都会依次降低信噪比,如果我们的网络太过深入, 信噪比随着您越来越深入模型而变差,那么学习速度可能真的会变得非常慢。较低层(更接近输入)的梯度可能会变得非常小。在深度网络中,计算这些梯度时,可能涉及许多小项的乘积。当较低层的梯度逐渐消失到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陷阱,避免离群值也会有帮助,可以使用一些标准方法:线性缩放为最大值和最小值设定硬性上下限(截断)或者对数缩放

多类别神经网络

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

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

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

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

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

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

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

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

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

神经网络

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

神经网络

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

在训练多类别分类时,我们有几个选项可以选择。

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

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

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

一个标签与多个标签

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

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

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

相关推荐