导航:首页 > 网络问题 > 前馈神经网络如何更新权重

前馈神经网络如何更新权重

发布时间:2022-11-25 00:02:00

① 如何训练自己的神经网络权重

说的确定应该就是训练方法吧,神经网络的权值不是人工给定的。而是用训练集(包括输入和输出)训练,用训练集训练一遍称为一个epoch,一般要许多epoch才行,目的是使得目标与训练结果的误差(一般采用均方误差)小到一个给定的阈值。以上所说是有监督的学习方法,还有无监督的学习方法。

② 深度前馈网络

看过西瓜书和李航的《统计学习方法》,对机器学习的基本算法算是有了初步的理解。机器学习的算法和思想固然重要,在实际中也有很多应用场景,但在超大数据集的表现上,深度学习才是当下效果最好的工具。可惜的是,花书这样一本经典着作的中文版翻译和机翻差不多水平,因此看的时候只能放慢速度。闲言少叙,下面是第六章的学习记录。

深度前馈网络(deep feedforward network) ,也叫作前馈神经网络(feedforward neural network)或者多层感知机(multilayer perceptron, MLP),是典型的深度学习模型。 前馈网络的目标是近似某个函数 。例如,对于分类器, 将输入 映射到一个类别 。前馈网络定义了一个映射 ,并且学习参数 的值使它能够得到最佳的函数近似。

下面我们把“深度前馈网络”这个词拆开来看:

那么深度前馈网络的各层之间有什么区别呢?从功能来讲,训练样本直接指明了 输出层 在每一点x上必须做什么,它必须产生一个接近 y 的值。但训练数据并没有给出其它层中的所需的输出,所以这些层被称为 隐藏层(hidden layer)

一种理解前馈网络的方式是从线性模型开始,并考虑如何克服它的局限性。如果各层的函数 都是线性函数,那么复合后的函数依然是线性的,此时我们的网络模型等价于线性模型。为了提高模型的表示能力,我们需要将各层的 设置为非线性的,从而得到一个非线性映射 。我们可以认为 提供了一组描述 的特征,或者认为它提供了 的一个新的表示。

设计和训练神经网络与使用梯度下降训练其他任何机器学习模型并没有太大不同。神经网络和线性模型等算法的最大区别,在于神经网络的非线性导致大多数我们感兴趣的代价函数都变得 非凸 。这意味着神经网络的训练通常使用迭代的、基于梯度的优化, 仅仅使得代价函数达到一个非常小的值 ;而不是像用于训练线性回归模型的线性方程求解器或者用于训练逻辑回归或 SVM 的凸优化算法那样保证全局收敛。

用于非凸损失函数的随机梯度下降没有这种收敛性保证,并且 对参数的初始值很敏感。对于前馈神经网络,将所有的权重值初始化为小随机数是很重要的。偏置可以初始化为零或者小的正值。

大多数现代的神经网络使用最大似然来训练。这意味着代价函数就是负的对数似然,它与训练数据和模型分布间的 交叉熵 等价。这个代价函数表示为

使用最大似然来导出代价函数的方法的一个优势是,它减轻了为每个模型设计代价函数的负担。明确一个模型 则自动地确定了一个代价函数 。

用于实现最大似然估计的交叉熵代价函数有一个不同寻常的特性,那就是当它被应用于实践中经常遇到的模型时,它 通常没有最小值。 如果模型可以控制输出分布的密度(例如,通过学习高斯输出分布的方差参数),那么它可能对正确的训练集输出赋予极其高的密度,这将导致交叉熵趋向负无穷。 正则化技术提供了一些不同的方法来修正学习问题,使得模型不会通过这种方式来获得无限制的收益。

一种简单的输出单元是基于仿射变换的输出单元,仿射变换不具有非线性。这些单元往往被直接称为 线性单元 。给定特征 ,线性输出层产生一个向量 ,线性输出层经常被用来 产生条件高斯分布的均值

最大化其对数似然此时等价于最小化均方误差。

许多任务需要预测二值型变量 的值。具有两个类的分类问题可以归结为这种形式。此时最大似然的方法是定义 在 条件下的 Bernoulli 分布。为保证模型给出了错误答案时,总能有一个较大的梯度。可以使用 sigmoid输出单元 结合最大似然来实现。sigmoid 输出单元定义为:

这种在对数空间里预测概率的方法可以很自然地使用最大似然学习。因为用于最大似然的代价函数是 ,代价函数中的 抵消了 中的 。如果没有这个效果,sigmoid 的饱和性会阻止基于梯度的学习做出好的改进。因此, 最大似然几乎总是训练 输出单元的优选方法。

当我们想要表示一个具有 n 个可能取值的离散型随机变量的分布时,我们可以使用 函数。它可以看作是 函数的扩展。

函数最常用作分类器的输出,来表示 个不同类上的概率分布。比较少见的是, 函数可以在模型内部使用,例如如果我们想要在某个内部变量的 个不同选项中进行选择。 函数的形式为:

和 一样,当使用最大化对数似然训练 来输出目标值 时,使用指数函数工作地非常好。

隐藏单元的设计是一个非常活跃的研究领域,并且还没有许多明确的指导性理论原则。

整流线性单元(Rectified Linear Unit, ReLU)是隐藏单元极好的默认选择。许多其他类型的隐藏单元也是可用的。决定何时使用哪种类型的隐藏单元是困难的事(尽管整流线性单元通常是一个可接受的选择)。我们这里描述对于每种隐藏单元的一些基本直觉。这些直觉可以用来建议我们何时来尝试一些单元。 通常不可能预先预测出哪种隐藏单元工作得最好。设计过程充满了试验和错误,先直觉认为某种隐藏单元可能表现良好,然后用它组成神经网络进行训练,最后用验证集来评估它的性能。

大多数的隐藏单元都接受输入向量 x,计算仿射变换 ,然后使用一个逐元素的非线性函数 。大多数隐藏单元的区别仅仅在于激活函数 的形式。

整流线性单元使用激活函数:

整流线性单元通常作用于仿射变换之上:

当初始化仿射变换的参数时,可以将 b 的所有元素设置成一个小的正值,例如 0.1。这使得整流线性单元很可能初始时就对训练集中的大多数输入呈现激活状态,并且允许导数通过。

整流线性单元的一个缺陷是它们不能通过基于梯度的方法学习那些使它们激活为零的样本。整流线性单元的各种扩展保证了它们能在各个位置都接收到梯度。

整流线性单元的三个扩展基于当 时使用一个非零的斜率 :

绝对值整流(absolute value rectification) 固定 来得到: ,它用于图像中的对象识别 (Jarrett et al., 2009a); 渗漏整流线性单元(Leaky ReLU) (Maas et al., 2013) 将 固定成一个类似 0.01 的小值; 参数化整流线性单元(parametric ReLU) 将 作为学习的参数 (He et al., 2015)。

maxout 单元(maxout unit) (Goodfellow et al., 2013a) 进一步扩展了整流线性单元。maxout单元将 划分为每组有 个值的组,而不是使用作用于每个元素的函数 。每个maxout单元则输出每组中的最大元素:

这里 是组 的输入索引集 。因为激活函数中有了max操作,所以整个maxout网络也是一种非线性的变换。

maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合,而maxout又是取k个隐隐含层节点的最大值,这些”隐隐含层"节点也是线性的,所以在不同的取值范围下,最大值也可以看做是分段线性的(分段的个数与k值有关)。

整流线性单元和它们的这些扩展都是基于一个原则,那就是如果它们的行为更接近线性,那么模型更容易优化。

在引入整流线性单元之前,大多数神经网络使用 logistic sigmoid 激活函数:

或者是双曲正切激活函数:

这些激活函数紧密相关,因为:

我们已经看过 sigmoid 单元作为输出单元用来预测二值型变量取值为 1 的概率。与分段线性单元不同,sigmoid 单元在其大部分定义域内都饱和——当 z 取绝对值很大的正值时,它们饱和到一个高值,当 z 取绝对值很大的负值时,它们饱和到一个低值,并且仅仅当 z 接近 0 时它们才对输入强烈敏感。sigmoid 单元的广泛饱和性会使得基于梯度的学习变得非常困难。因为这个原因,现在不鼓励将它们用作前馈网络中的隐藏单元。当使用一个合适的代价函数来抵消 sigmoid 的饱和性时,它们作为输出单元可以与基于梯度的学习相兼容。

当必须要使用 sigmoid 激活函数时,双曲正切激活函数通常要比 logistic sigmoid 函数表现更好。在 而 的意义上,它更像是单位函数。因为 tanh 在 0 附近与单位函数类似。

架构(architecture) 一词是指网络的整体结构: 它应该具有多少单元,以及这些单元应该如何连接

在链式架构中,主要的架构考虑是选择网络的深度和每一层的宽度。我将会看到,即使只有一个隐藏层的网络也足够适应训练集。 更深层的网络通常能够对每一层使用更少的单元数和更少的参数,并且经常容易泛化到测试集,但是通常也更难以优化。 对于一个具体的任务,理想的网络架构必须通过实验,观测在验证集上的误差来找到。

万能近似定理(universal approximation theorem)

一个前馈神经网络如果具有线性输出层和至少一层具有任何一种 ‘‘挤压’’ 性质的激活函数(例如logistic sigmoid激活函数)的隐藏层,只要给予网络足够数量的隐藏单元,它可以 以任意的精度来近似任何从一个有限维空间到另一个有限维空间的 Borel 可测函数 。前馈网络的导数也可以任意好地来近似函数的导数 (Hornik et al., 1990)。

万能近似定理意味着无论我们试图学习什么函数,我们知道一个大的MLP一定能够表示这个函数。

然而,我们不能保证训练算法能够学得这个函数。即使 MLP能够表示该函数,学习也可能因两个不同的原因而失败。 首先,用于训练的优化算法可能找不到用于期望函数的参数值。其次,训练算法可能由于过拟合而选择了错误的函数。

总之,具有单层的前馈网络足以表示任何函数,但是网络层可能大得不可实现,并且可能无法正确地学习和泛化。在很多情况下,使用更深的模型能够减少表示期望函数所需的单元的数量,并且可以减少泛化误差。

存在一些函数族能够在网络的深度大于某个值d时被高效地近似,而当深度被限制到小于或等于d时需要一个远远大于之前的模型。在很多情况下,浅层模型所需的隐藏单元的数量是n的指数级。

Montufar et al. (2014) 的主要定理指出, 具有 个输入深度为 每个隐藏层具有 个单元的深度整流网络可以描述的线性区域的数量是

根据经验,更深的模型似乎确实在广泛的任务中泛化得更好。

目前为止,我们都将神经网络描述成层的简单链式结构,主要的考虑因素是网络的深度和每层的宽度。在实践中,神经网络显示出相当的多样性。

一般的,层不需要连接在链中,尽管这是最常见的做法。许多架构构建了一个主链,但随后又添加了额外的架构特性,例如从层 i 到层 i + 2 或者更高层的 跳跃连接 。这些跳跃连接使得梯度更容易从输出层流向更接近输入的层。

架构设计考虑的另外一个关键点是如何将层与层之间连接起来。默认的神经网络层采用矩阵 W 描述的线性变换,每个输入单元连接到每个输出单元。许多专用网络具有较少的连接,使得输入层中的每个单元仅连接到输出层单元的一个小子集。这些用于 减少连接数量 的策略减少了参数的数量以及用于评估网络的计算量,但通常高度依赖于问题。

当我们使用前馈神经网络接收输入 并产生输出 时,信息通过网络向前流动。输入 提供初始信息,然后传播到每一层的隐藏单元,最终产生输出 。这称之为 前向传播(forward propagation) 。在训练过程中,前向传播可以持续向前直到它产生一个标量代价函数 。 反向传播(back propagation) 算法 (Rumelhart et al., 1986c),经常简称为backprop,允许来自代价函数的信息通过网络向后流动,以便计算梯度。

将计算形式化为图形的方法有很多。这里,我们使用图中的每一个节点来表示一个变量。变量可以是标量、向量、矩阵、张量、或者甚至是另一类型的变量。为了形式化我们的图形,我们还需引入操作(operation)这一概念。操作是指一个或多个变量的简单函数。我们的图形语言伴随着一组被允许的操作。我们可以通过将多个操作复合在一起来描述更为复杂的函数。

如果变量 y 是变量 x 通过一个操作计算得到的,那么我们画一条从 x 到 y 的有向边。我们有时用操作的名称来注释输出的节点,当上下文很明确时,有时也会省略这个标注。计算图的实例如下:

使用符号到符号的方法计算导数的示例如下。在这种方法中,反向传播算法不需要访问任何实际的特定数值。相反,它将节点添加到计算图中来描述如何计算这些导数。通用图形求值引擎可以在随后计算任何特定数值的导数。 本例从表示 的图开始,运行反向传播算法,指导它构造表达式 对应的图。

这部分花书上讲了很多内容……我看得有些失去耐心……可能是讲得太细致了吧……我对反向传播算法的认识很简单,就是一个链式法则,一层一层计算梯度然后向后传播。这里根据之前上课时候的课件内容做下简单回顾:

总之反向传播算法的要点就是 以恰当的顺序计算梯度,从而充分利用链式法则来提高计算效率 。我个人认为理解BP的最佳方式就是自己画个图手推一遍。

③ 入门 | 一文简述循环神经网络

入门 | 一文简述循环神经网络

本文简要介绍了什么是循环神经网络及其运行原理,并给出了一个 RNN 实现示例。

什么是循环神经网络(RNN)?它们如何运行?可以用在哪里呢?本文试图回答上述这些问题,还展示了一个 RNN 实现 demo,你可以根据自己的需要进行扩展。

循环神经网络架构

基础知识。Python、CNN 知识是必备的。了解 CNN 的相关知识,是为了与 RNN 进行对比:RNN 为什么以及在哪些地方比 CNN 更好。

我们首先从“循环”(Recurrent)这个词说起。为什么将其称为循环?循环的意思是:

经常或重复出现

将这类神经网络称为循环神经网络是因为它对一组序列输入重复进行同样的操作。本文后续部分将讨论这种操作的意义。

我们为什么需要 RNN?

也许你现在想的是,已经有像卷积网络这样表现非常出色的网络了,为什么还需要其他类型的网络呢?有一个需要用到 RNN 的特殊例子。为了解释 RNN,你首先需要了解序列的相关知识,我们先来讲一下序列。

序列是相互依赖的(有限或无限)数据流,比如时间序列数据、信息性的字符串、对话等。在对话中,一个句子可能有一个意思,但是整体的对话可能又是完全不同的意思。股市数据这样的时间序列数据也是,单个数据表示当前价格,但是全天的数据会有不一样的变化,促使我们作出买进或卖出的决定。

当输入数据具有依赖性且是序列模式时,CNN 的结果一般都不太好。CNN 的前一个输入和下一个输入之间没有任何关联。所以所有的输出都是独立的。CNN 接受输入,然后基于训练好的模型输出。如果你运行了 100 个不同的输入,它们中的任何一个输出都不会受之前输出的影响。但想一下如果是文本生成或文本翻译呢?所有生成的单词与之前生成的单词都是独立的(有些情况下与之后的单词也是独立的,这里暂不讨论)。所以你需要有一些基于之前输出的偏向。这就是需要 RNN 的地方。RNN 对之前发生在数据序列中的事是有一定记忆的。这有助于系统获取上下文。理论上讲,RNN 有无限的记忆,这意味着它们有无限回顾的能力。通过回顾可以了解所有之前的输入。但从实际操作中看,它只能回顾最后几步。

本文仅为了与人类大体相关联,而不会做任何决定。本文只是基于之前关于该项目的知识做出了自己的判断(我甚至尚未理解人类大脑的 0.1%)。

何时使用 RNN?

RNN 可用于许多不同的地方。下面是 RNN 应用最多的领域。

1. 语言建模和文本生成

给出一个词语序列,试着预测下一个词语的可能性。这在翻译任务中是很有用的,因为最有可能的句子将是可能性最高的单词组成的句子。

2. 机器翻译

将文本内容从一种语言翻译成其他语言使用了一种或几种形式的 RNN。所有日常使用的实用系统都用了某种高级版本的 RNN。

3. 语音识别

基于输入的声波预测语音片段,从而确定词语。

4. 生成图像描述

RNN 一个非常广泛的应用是理解图像中发生了什么,从而做出合理的描述。这是 CNN 和 RNN 相结合的作用。CNN 做图像分割,RNN 用分割后的数据重建描述。这种应用虽然基本,但可能性是无穷的。

5. 视频标记

可以通过一帧一帧地标记视频进行视频搜索。

深入挖掘

本文按照以下主题进行。每一部分都是基于之前的部分进行的,所以不要跳着读。

前馈网络循环网络循环神经元基于时间的反向传播(BPTT)RNN 实现

前馈网络入门

前馈网络通过在网络的每个节点上做出的一系列操作传递信息。前馈网络每次通过每个层直接向后传递信息。这与其他循环神经网络不同。一般而言,前馈网络接受一个输入并据此产生输出,这也是大多数监督学习的步骤,输出结果可能是一个分类结果。它的行为与 CNN 类似。输出可以是以猫狗等作为标签的类别。

前馈网络是基于一系列预先标注过的数据训练的。训练阶段的目的是减少前馈网络猜类别时的误差。一旦训练完成,我们就可以用训练后的权重对新批次的数据进行分类。

一个典型的前馈网络架构

还有一件事要注意。在前馈网络中,无论在测试阶段展示给分类器的图像是什么,都不会改变权重,所以也不会影响第二个决策。这是前馈网络和循环网络之间一个非常大的不同。

与循环网络不同,前馈网络在测试时不会记得之前的输入数据。它们始终是取决于时间点的。它们只会在训练阶段记得历史输入数据。

循环网络

也就是说,循环网络不仅将当前的输入样例作为网络输入,还将它们之前感知到的一并作为输入。

我们试着建立了一个多层感知器。从简单的角度讲,它有一个输入层、一个具备特定激活函数的隐藏层,最终可以得到输出。

多层感知器架构示例

如果在上述示例中的层数增加了,输入层也接收输入。那么第一个隐藏层将激活传递到下一个隐藏层上,依此类推。最后到达输出层。每一个隐藏层都有自己的权重和偏置项。现在问题变成了我们可以输入到隐藏层吗?

每一层都有自己的权重(W)、偏置项(B)和激活函数(F)。这些层的行为不同,合并它们从技术层面上讲也极具挑战性。为了合并它们,我们将所有层的权重和偏置项替换成相同的值。如下图所示:

现在我们就可以将所有层合并在一起了。所有的隐藏层都可以结合在一个循环层中。所以看起来就像下图:

我们在每一步都会向隐藏层提供输入。现在一个循环神经元存储了所有之前步的输入,并将这些信息和当前步的输入合并。因此,它还捕获到一些当前数据步和之前步的相关性信息。t-1 步的决策影响到第 t 步做的决策。这很像人类在生活中做决策的方式。我们将当前数据和近期数据结合起来,帮助解决手头的特定问题。这个例子很简单,但从原则上讲这与人类的决策能力是一致的。这让我非常想知道我们作为人类是否真的很智能,或者说我们是否有非常高级的神经网络模型。我们做出的决策只是对生活中收集到的数据进行训练。那么一旦有了能够在合理时间段内存储和计算数据的先进模型和系统时,是否可以数字化大脑呢?所以当我们有了比大脑更好更快的模型(基于数百万人的数据训练出的)时,会发生什么?

另一篇文章(https://deeplearning4j.org/lstm.html)的有趣观点:人总是被自己的行为所困扰。

我们用一个例子来阐述上面的解释,这个例子是预测一系列字母后的下一个字母。想象一个有 8 个字母的单词 namaskar。

namaskar(合十礼):印度表示尊重的传统问候或姿势,将手掌合起置于面前或胸前鞠躬。

如果我们在向网络输入 7 个字母后试着找出第 8 个字母,会发生什么呢?隐藏层会经历 8 次迭代。如果展开网络的话就是一个 8 层的网络,每一层对应一个字母。所以你可以想象一个普通的神经网络被重复了多次。展开的次数与它记得多久之前的数据是直接相关的。

循环神经网络的运作原理

循环神经元

这里我们将更深入地了解负责决策的实际神经元。以之前提到的 namaskar 为例,在给出前 7 个字母后,试着找出第 8 个字母。输入数据的完整词汇表是 {n,a,m,s,k,r}。在真实世界中单词或句子都会更复杂。为了简化问题,我们用的是下面这个简单的词汇表。

在上图中,隐藏层或 RNN 块在当前输入和之前的状态中应用了公式。在本例中,namaste 的字母 n 前面什么都没有。所以我们直接使用当前信息推断,并移动到下一个字母 a。在推断字母 a 的过程中,隐藏层应用了上述公式结合当前推断 a 的信息与前面推断 n 的信息。输入在网络中传递的每一个状态都是一个时间步或一步,所以时间步 t 的输入是 a,时间步 t-1 的输入就是 n。将公式同时应用于 n 和 a 后,就得到了一个新状态。

用于当前状态的公式如下所示:

h_t 是新状态,h_t-1 是前一个状态。x_t 是时间 t 时的输入。在对之前的时间步应用了相同的公式后,我们已经能感知到之前的输入了。我们将检查 7 个这样的输入,它们在每一步的权重和函数都是相同的。

现在试着以简单的方式定义 f()。我们使用 tanh 激活函数。通过矩阵 W_hh 定义权重,通过矩阵 W_xh 定义输入。公式如下所示:

上例只将最后一步作为记忆,因此只与最后一步的数据合并。为了提升网络的记忆能力,并在记忆中保留较长的序列,我们必须在方程中添加更多的状态,如 h_t-2、h_t-3 等。最后输出可以按测试阶段的计算方式进行计算:

其中,y_t 是输出。对输出与实际输出进行对比,然后计算出误差值。网络通过反向传播误差来更新权重,进行学习。本文后续部分会对反向传播进行讨论。

基于时间的反向传播算法(BPTT)

本节默认你已经了解了反向传播概念。如果需要对反向传播进行深入了解,请参阅链接:?http://cs231n.github.io/optimization-2/?。

现在我们了解了 RNN 是如何实际运作的,但是在实际工作中如何训练 RNN 呢?该如何决定每个连接的权重呢?如何初始化这些隐藏单元的权重呢?循环网络的目的是要准确地对序列输入进行分类。这要靠误差值的反向传播和梯度下降来实现。但是前馈网络中使用的标准反向传播无法在此应用。

与有向无环的前馈网络不同,RNN 是循环图,这也是问题所在。在前馈网络中可以计算出之前层的误差导数。但 RNN 的层级排列与前馈网络并不相同。

答案就在之前讨论过的内容中。我们需要展开网络。展开网络使其看起来像前馈网络就可以了。

展开 RNN

在每个时间步取出 RNN 的隐藏单元并复制。时间步中的每一次复制就像前馈网络中的一层。在时间步 t+1 中每个时间步 t 层与所有可能的层连接。因此我们对权重进行随机初始化,展开网络,然后在隐藏层中通过反向传播优化权重。通过向最低层传递参数完成初始化。这些参数作为反向传播的一部分也得到了优化。

展开网络的结果是,现在每一层的权重都不同,因此最终会得到不同程度的优化。无法保证基于权重计算出的误差是相等的。所以每一次运行结束时每一层的权重都不同。这是我们绝对不希望看到的。最简单的解决办法是以某种方式将所有层的误差合并到一起。可以对误差值取平均或者求和。通过这种方式,我们可以在所有时间步中使用一层来保持相同的权重。

RNN 实现

本文试着用 Keras 模型实现 RNN。我们试着根据给定的文本预测下一个序列。

代码地址:?https://gist.github.com/.git?

该模型是 Yash Katariya 建的。我对该模型做了一些细微的改动以适合本文的要求。

④ 【神经网络原理】如何利用梯度下降法更新权重与偏置

损失函数的值减小,意味着神经网络的预测值(实际输出)和标签值(预期的输出)越接近。
损失函数通常为 多元函数 ,其自变量包括网络中包含的所有的权重w、以及所有的偏置b,有的地方也将其称作代价函数(Cost function)或价值函数(Value function),这里只介绍均方误差损失函数(MSE):

多元函数的梯度类似于一元函数导数 :对多元函数各变量依次求一阶偏导,然后将各偏导值组合成一个一维列向量,就得到了该多元函数梯度。损失函数通常为 多元函数 ,其梯度如下:

对于神经网络结构 & 符号约定有疑惑的可以参考我的这篇文章—— 【神经网络原理】神经网络结构 & 符号约定

梯度的负方向 :因为梯度是一个向量,具有方向性。这里的 下降 是指损失函数值的减小。
那么为什么沿梯度的负方向损失函数值减小最快呢?这里主要利用 多元函数的一阶泰勒展开 (一阶形式还是比较简单的)和 向量点积公式 来证明:

这里只给出了第 l 层的网络参数——权重(矩阵)与偏置(向量)的梯度下降更新公式,其他层网络参数的更新公式同理可得,对符号有疑惑的请参考: 【神经网络原理】神经网络结构 & 符号约定 。

有了各层网络参数(向量/矩阵)的更新公式,其中损失函数对各参数的梯度又该如何求解呢?事实上由于神经网络中参数(权重W和偏置b)通常较多,要想直接求解损失函数对这些参数的梯度,难度极大,所以在实际训练网络时,我们通常采用 反向误差传播,即BP算法 ,巧妙地利用预测值与标签值的残差,从输出层到输入层反向地求解出损失函数对各层网络参数的梯度。

⑤ BP原理(前馈神经网络)

公式中的e叫自然常数,也叫欧拉数,e=2.71828…。e是个很神秘的数字,它是“自然律”的精髓,其中暗藏着自然增长的奥秘,它的图形表达是旋涡形的螺线。

e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + 1/6! + 1/7! + … = 1 + 1 + 1/2 + 1/6 + 1/24 + 1/120+ … ≈ 2.71828

bp基本原理是:
利用前向传播最后输出的结果来计算误差的偏导数,再用这个偏导数和前面的隐藏层进行加权求和,如此一层一层的向后传下去,直到输入层(不计算输入层),最后利用每个节点求出的偏导数来更新权重。

注意:隐藏层和输出层的值,都需要前一层加权求和之后 再代入激活函数 获得。

残差(error term) : 表示误差的偏导数

(注意:激活函数的导数中代入的值是前一层的加权值)
如果输出层用Purelin作激活函数,Purelin的导数是1,输出层→隐藏层:残差 = -(输出值-样本值)

如果用Sigmoid(logsig)作激活函数,那么: Sigmoid导数 = Sigmoid*(1-Sigmoid)
(Sigmoid指的是Sigmoid函数代入前一层的加权值得到的值,即输出值)
输出层→隐藏层:

残差 = -(输出值-样本值) * Sigmoid*(1-Sigmoid) = -(输出值-样本值)输出值(1-输出值)
隐藏层→隐藏层:
残差 = (右层每个节点的残差加权求和)* 当前节点的Sigmoid*(1-当前节点的Sigmoid)

如果用tansig作激活函数,那么:tansig导数 = 1 - tansig^2

残差全部计算好后,就可以更新权重了:

学习率是一个预先设置好的参数,用于控制每次更新的幅度。

此后,对全部数据都反复进行这样的计算,直到输出的误差达到一个很小的值为止。

这里介绍的是计算完一条记录,就马上更新权重,以后每计算完一条都即时更新权重。实际上批量更新的效果会更好,方法是在不更新权重的情况下,把记录集的每条记录都算过一遍,把要更新的增值全部累加起来求平均值,然后利用这个平均值来更新一次权重,然后利用更新后的权重进行下一轮的计算,这种方法叫批量梯度下降(Batch Gradient Descent)。

⑥ 神经网络模型-27种神经网络模型们的简介

​ 

【1】Perceptron(P) 感知机

【1】感知机 

感知机是我们知道的最简单和最古老的神经元模型,它接收一些输入,然后把它们加总,通过激活函数并传递到输出层。

【2】Feed Forward(FF)前馈神经网络

 【2】前馈神经网络

前馈神经网络(FF),这也是一个很古老的方法——这种方法起源于50年代。它的工作原理通常遵循以下规则:

1.所有节点都完全连接

2.激活从输入层流向输出,无回环

3.输入和输出之间有一层(隐含层)

在大多数情况下,这种类型的网络使用反向传播方法进行训练。

【3】Radial Basis Network(RBF) RBF神经网络

 【3】RBF神经网络

RBF 神经网络实际上是 激活函数是径向基函数 而非逻辑函数的FF前馈神经网络(FF)。两者之间有什么区别呢?

逻辑函数--- 将某个任意值映射到[0 ,... 1]范围内来,回答“是或否”问题。适用于分类决策系统,但不适用于连续变量。

相反, 径向基函数--- 能显示“我们距离目标有多远”。 这完美适用于函数逼近和机器控制(例如作为PID控制器的替代)。

简而言之,RBF神经网络其实就是, 具有不同激活函数和应用方向的前馈网络 。

【4】Deep Feed Forword(DFF)深度前馈神经网络

【4】DFF深度前馈神经网络 

DFF深度前馈神经网络在90年代初期开启了深度学习的潘多拉盒子。 这些依然是前馈神经网络,但有不止一个隐含层 。那么,它到底有什么特殊性?

在训练传统的前馈神经网络时,我们只向上一层传递了少量的误差信息。由于堆叠更多的层次导致训练时间的指数增长,使得深度前馈神经网络非常不实用。 直到00年代初,我们开发了一系列有效的训练深度前馈神经网络的方法; 现在它们构成了现代机器学习系统的核心 ,能实现前馈神经网络的功能,但效果远高于此。

【5】Recurrent Neural Network(RNN) 递归神经网络

【5】RNN递归神经网络 

RNN递归神经网络引入不同类型的神经元——递归神经元。这种类型的第一个网络被称为约旦网络(Jordan Network),在网络中每个隐含神经元会收到它自己的在固定延迟(一次或多次迭代)后的输出。除此之外,它与普通的模糊神经网络非常相似。

当然,它有许多变化 — 如传递状态到输入节点,可变延迟等,但主要思想保持不变。这种类型的神经网络主要被使用在上下文很重要的时候——即过去的迭代结果和样本产生的决策会对当前产生影响。最常见的上下文的例子是文本——一个单词只能在前面的单词或句子的上下文中进行分析。

【6】Long/Short Term Memory (LSTM) 长短时记忆网络

【6】LSTM长短时记忆网络 

LSTM长短时记忆网络引入了一个存储单元,一个特殊的单元,当数据有时间间隔(或滞后)时可以处理数据。递归神经网络可以通过“记住”前十个词来处理文本,LSTM长短时记忆网络可以通过“记住”许多帧之前发生的事情处理视频帧。 LSTM网络也广泛用于写作和语音识别。

存储单元实际上由一些元素组成,称为门,它们是递归性的,并控制信息如何被记住和遗忘。

【7】Gated Recurrent Unit (GRU)

 【7】GRU是具有不同门的LSTM

GRU是具有不同门的LSTM。

听起来很简单,但缺少输出门可以更容易基于具体输入重复多次相同的输出,目前此模型在声音(音乐)和语音合成中使用得最多。

实际上的组合虽然有点不同:但是所有的LSTM门都被组合成所谓的更新门(Update Gate),并且复位门(Reset Gate)与输入密切相关。

它们比LSTM消耗资源少,但几乎有相同的效果。

【8】Auto Encoder (AE) 自动编码器

 【8】AE自动编码器

Autoencoders自动编码器用于分类,聚类和特征压缩。

当您训练前馈(FF)神经网络进行分类时,您主要必须在Y类别中提供X个示例,并且期望Y个输出单元格中的一个被激活。 这被称为“监督学习”。

另一方面,自动编码器可以在没有监督的情况下进行训练。它们的结构 - 当隐藏单元数量小于输入单元数量(并且输出单元数量等于输入单元数)时,并且当自动编码器被训练时输出尽可能接近输入的方式,强制自动编码器泛化数据并搜索常见模式。

【9】Variational AE (VAE)  变分自编码器

 【9】VAE变分自编码器

变分自编码器,与一般自编码器相比,它压缩的是概率,而不是特征。

尽管如此简单的改变,但是一般自编码器只能回答当“我们如何归纳数据?”的问题时,变分自编码器回答了“两件事情之间的联系有多强大?我们应该在两件事情之间分配误差还是它们完全独立的?”的问题。

【10】Denoising AE (DAE) 降噪自动编码器

 【10】DAE降噪自动编码器

虽然自动编码器很酷,但它们有时找不到最鲁棒的特征,而只是适应输入数据(实际上是过拟合的一个例子)。

降噪自动编码器(DAE)在输入单元上增加了一些噪声 - 通过随机位来改变数据,随机切换输入中的位,等等。通过这样做,一个强制降噪自动编码器从一个有点嘈杂的输入重构输出,使其更加通用,强制选择更常见的特征。

【11】Sparse AE (SAE) 稀疏自编码器

【11】SAE稀疏自编码器 

稀疏自编码器(SAE)是另外一个有时候可以抽离出数据中一些隐藏分组样试的自动编码的形式。结构和AE是一样的,但隐藏单元的数量大于输入或输出单元的数量。

【12】Markov Chain (MC) 马尔科夫链

 【12】Markov Chain (MC) 马尔科夫链

马尔可夫链(Markov Chain, MC)是一个比较老的图表概念了,它的每一个端点都存在一种可能性。过去,我们用它来搭建像“在单词hello之后有0.0053%的概率会出现dear,有0.03551%的概率出现you”这样的文本结构。

这些马尔科夫链并不是典型的神经网络,它可以被用作基于概率的分类(像贝叶斯过滤),用于聚类(对某些类别而言),也被用作有限状态机。

【13】Hopfield Network (HN) 霍普菲尔网络

【13】HN霍普菲尔网络 

霍普菲尔网络(HN)对一套有限的样本进行训练,所以它们用相同的样本对已知样本作出反应。

在训练前,每一个样本都作为输入样本,在训练之中作为隐藏样本,使用过之后被用作输出样本。

在HN试着重构受训样本的时候,他们可以用于给输入值降噪和修复输入。如果给出一半图片或数列用来学习,它们可以反馈全部样本。

【14】Boltzmann Machine (BM) 波尔滋曼机

【14】 BM 波尔滋曼机 

波尔滋曼机(BM)和HN非常相像,有些单元被标记为输入同时也是隐藏单元。在隐藏单元更新其状态时,输入单元就变成了输出单元。(在训练时,BM和HN一个一个的更新单元,而非并行)。

这是第一个成功保留模拟退火方法的网络拓扑。

多层叠的波尔滋曼机可以用于所谓的深度信念网络,深度信念网络可以用作特征检测和抽取。

【15】Restricted BM (RBM) 限制型波尔滋曼机

【15】 RBM 限制型波尔滋曼机 

在结构上,限制型波尔滋曼机(RBM)和BM很相似,但由于受限RBM被允许像FF一样用反向传播来训练(唯一的不同的是在反向传播经过数据之前RBM会经过一次输入层)。

【16】Deep Belief Network (DBN) 深度信念网络

【16】DBN 深度信念网络 

像之前提到的那样,深度信念网络(DBN)实际上是许多波尔滋曼机(被VAE包围)。他们能被连在一起(在一个神经网络训练另一个的时候),并且可以用已经学习过的样式来生成数据。

【17】Deep Convolutional Network (DCN) 深度卷积网络

【17】 DCN 深度卷积网络

当今,深度卷积网络(DCN)是人工神经网络之星。它具有卷积单元(或者池化层)和内核,每一种都用以不同目的。

卷积核事实上用来处理输入的数据,池化层是用来简化它们(大多数情况是用非线性方程,比如max),来减少不必要的特征。

他们通常被用来做图像识别,它们在图片的一小部分上运行(大约20x20像素)。输入窗口一个像素一个像素的沿着图像滑动。然后数据流向卷积层,卷积层形成一个漏斗(压缩被识别的特征)。从图像识别来讲,第一层识别梯度,第二层识别线,第三层识别形状,以此类推,直到特定的物体那一级。DFF通常被接在卷积层的末端方便未来的数据处理。

【18】Deconvolutional Network (DN) 去卷积网络

 【18】 DN 去卷积网络

去卷积网络(DN)是将DCN颠倒过来。DN能在获取猫的图片之后生成像(狗:0,蜥蜴:0,马:0,猫:1)一样的向量。DNC能在得到这个向量之后,能画出一只猫。

【19】Deep Convolutional Inverse Graphics Network (DCIGN) 深度卷积反转图像网络

【19】 DCIGN 深度卷积反转图像网络

深度卷积反转图像网络(DCIGN),长得像DCN和DN粘在一起,但也不完全是这样。

事实上,它是一个自动编码器,DCN和DN并不是作为两个分开的网络,而是承载网路输入和输出的间隔区。大多数这种神经网络可以被用作图像处理,并且可以处理他们以前没有被训练过的图像。由于其抽象化的水平很高,这些网络可以用于将某个事物从一张图片中移除,重画,或者像大名鼎鼎的CycleGAN一样将一匹马换成一个斑马。

【20】Generative Adversarial Network (GAN) 生成对抗网络

 【20】 GAN 生成对抗网络

生成对抗网络(GAN)代表了有生成器和分辨器组成的双网络大家族。它们一直在相互伤害——生成器试着生成一些数据,而分辨器接收样本数据后试着分辨出哪些是样本,哪些是生成的。只要你能够保持两种神经网络训练之间的平衡,在不断的进化中,这种神经网络可以生成实际图像。

【21】Liquid State Machine (LSM) 液体状态机

 【21】 LSM 液体状态机

液体状态机(LSM)是一种稀疏的,激活函数被阈值代替了的(并不是全部相连的)神经网络。只有达到阈值的时候,单元格从连续的样本和释放出来的输出中积累价值信息,并再次将内部的副本设为零。

这种想法来自于人脑,这些神经网络被广泛的应用于计算机视觉,语音识别系统,但目前还没有重大突破。

【22】Extreme  Learning Machine (ELM) 极端学习机

【22】ELM 极端学习机 

极端学习机(ELM)是通过产生稀疏的随机连接的隐藏层来减少FF网络背后的复杂性。它们需要用到更少计算机的能量,实际的效率很大程度上取决于任务和数据。

【23】Echo State Network (ESN) 回声状态网络

【23】 ESN 回声状态网络

回声状态网络(ESN)是重复网络的细分种类。数据会经过输入端,如果被监测到进行了多次迭代(请允许重复网路的特征乱入一下),只有在隐藏层之间的权重会在此之后更新。

据我所知,除了多个理论基准之外,我不知道这种类型的有什么实际应用。。。。。。。

【24】Deep Resial Network (DRN) 深度残差网络

​【24】 DRN 深度残差网络 

深度残差网络(DRN)是有些输入值的部分会传递到下一层。这一特点可以让它可以做到很深的层级(达到300层),但事实上它们是一种没有明确延时的RNN。

【25】Kohonen Network (KN) Kohonen神经网络

​ 【25】 Kohonen神经网络

Kohonen神经网络(KN)引入了“单元格距离”的特征。大多数情况下用于分类,这种网络试着调整它们的单元格使其对某种特定的输入作出最可能的反应。当一些单元格更新了, 离他们最近的单元格也会更新。

像SVM一样,这些网络总被认为不是“真正”的神经网络。

【26】Support Vector Machine (SVM)

​【26】 SVM 支持向量机 

支持向量机(SVM)用于二元分类工作,无论这个网络处理多少维度或输入,结果都会是“是”或“否”。

SVM不是所有情况下都被叫做神经网络。

【27】Neural Turing Machine (NTM) 神经图灵机

​【27】NTM 神经图灵机 

神经网络像是黑箱——我们可以训练它们,得到结果,增强它们,但实际的决定路径大多数我们都是不可见的。

神经图灵机(NTM)就是在尝试解决这个问题——它是一个提取出记忆单元之后的FF。一些作者也说它是一个抽象版的LSTM。

记忆是被内容编址的,这个网络可以基于现状读取记忆,编写记忆,也代表了图灵完备神经网络。

⑦ 多层前馈网络模型及BP算法

多层前馈网中,以单隐层网的应用最为普遍,如图6.1所示。习惯上将其称为三层前馈网或三层感知器,所谓三层即输入层、隐层和输出层。

图6.1 三层前馈神经网络结构

Fig.6.1 BP neural network structure

三层前馈网中,输入向量为X=(x1,x2,…,xi,…,xn)T,如加入x0=-1,可为输出层神经元引入阈值;隐层输出向量为Y=(y1,y2,…,yl,…,ym)T,如加入y0=-1,可为输出层神经元引入阈值;输出层输出向量为O=(o1,o2,…,ok,…,ol)T。输入层到隐层之间的权值阵用V表示,V=(V1,V2,…,Vj,…,Vm),其中列向量Vj为隐层第j个神经元对应的权向量;隐层到输出层之间的权值矩阵用W 表示,W=(W1,W2,…,Wk,…,Wl),其中列向量Wk为输出层第k个神经元对应的权向量。下面分析各层信号之间的数学关系。

输出层:

ok=f(netk)k=1,2,…,ι(6-1)

煤层开采顶板导水裂隙带高度预测理论与方法

隐层:

yj=f(netj)j=1,2,…,m(6-3)

煤层开采顶板导水裂隙带高度预测理论与方法

以上两式中,转移函数f(x)均为单极性Sigmoid函数

煤层开采顶板导水裂隙带高度预测理论与方法

f(x)具有连续、可导的特点,且有

煤层开采顶板导水裂隙带高度预测理论与方法

根据应用需要,也可以采用双极性Sigmoid函数(或称双曲线正切函数)

煤层开采顶板导水裂隙带高度预测理论与方法

式6-1~式6-6共同构成了三层前馈网的数学模型。

BP学习算法中按以下方法调整其权重与误差:

当网络输出与期望输出不相等时,存在输出误差E,定义如下:

煤层开采顶板导水裂隙带高度预测理论与方法

将以上误差定义式展开到隐层,

煤层开采顶板导水裂隙带高度预测理论与方法

进一步展开到输入层,

煤层开采顶板导水裂隙带高度预测理论与方法

由上式可以看出,网络输入误差是各层权值ωjk、υij的函数,因此调整权值可改变误差E。

显然,调整权值的原则是使误差不断减小,因此权值的调整量与误差的负梯度成正比,即

煤层开采顶板导水裂隙带高度预测理论与方法

煤层开采顶板导水裂隙带高度预测理论与方法

式中负号表示梯度下降,常数η∈(0,1)表示比例系数,在训练中反映了学习速率。可以看出BP法属于δ学习规则类,这类算法常被称为误差的梯度下降(GradientDescent)算法。

⑧ 2.前馈型神经网络与反馈型神经网络

       随着神经网络的不断发展,越来越多的人工神经网络模型也被创造出来了,其中,具有代表性的就是前馈型神经网络模型以及反馈型神经网络模型。

      1.前馈型神经网络模型

      前馈神经网络(Feedforward Neural Network),简称前馈网络,是人工神经网络的一种。在此种神经网络中,各神经元从输入层开始,接收前一级输入,并输出到下一级,直至输出层。整个网络中无反馈,可用一个有向无环图表示。

      前馈神经网络采用一种单向多层结构,其拓扑结构如图1所示。其中每一层包含若干个神经元,同一层的神经元之间没有互相连接,层间信息的传送只沿一个方向进行。其中第一层称为输入层。最后一层为输出层.中间为隐含层,简称隐层。隐层可以是一层。也可以是多层

      2.反馈型神经神经网络

       反馈神经网络是一种反馈动力学系统。在这种网络中,每个神经元同时将自身的输出信号作为输入信号反馈给其他神经元,它需要工作一段时间才能达到稳定。Hopfield神经网络是反馈网络中最简单且应用广泛的模型,它具有联想记忆的功能,如果将李雅普诺夫函数定义为巡游函数,Hopfield神经网络还可以用来解决快速寻优问题,Hopfield网络可以分为离散型Hopfield网络和连续型Hopfield网络,其中,离散型Hopfield网络拓扑结构如图2所示。

⑨ CNN(卷积神经网络)算法

基础知识讲解:
卷积:通过两个函数f 和g 生成第三个函数的一种数学算子,表征函数f 与g经过翻转和平移的重叠部分函数值乘积对重叠长度的积分。
前馈神经网络:各神经元分层排列,每个神经元只与前一层的神经元相连,接收前一层的输出,并输出给下一层.各层间没有反馈。
卷积神经网络:是一类包含卷积计算且具有深度结构的前馈神经网络
卷积核:就是图像处理时,给定输入图像,输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素,其中权值由一个函数定义,这个函数称为卷积核。
下采样:对于一个样值序列间隔几个样值取样一次,这样得到新序列就是原序列的下采样。
结构介绍
输入层:用于数据输入
卷积层:利用卷积核进行特征提取和特征映射
激励层:非线性映射,卷积是线性映射,弥补不足
池化层:进行下采样,对特征图稀疏处理,减少数据运算量
全连接层:在CNN的尾部进行重新拟合,减少特征信息的损失

输入层:
在CNN的输入层中,(图片)数据输入的格式 与 全连接神经网络的输入格式(一维向量)不太一样。CNN的输入层的输入格式保留了图片本身的结构。
对于黑白的 28×28 的图片,CNN的输入是一个 28×28 的的二维神经元:
而对于RGB格式的28×28图片,CNN的输入则是一个 3×28×28 的三维神经元(RGB中的每一个颜色通道都有一个 28×28 的矩阵)

卷积层:

左边是输入,中间部分是两个不同的滤波器Filter w0、Filter w1,最右边则是两个不同的输出。
ai.j=f(∑m=02∑n=02wm,nxi+m,j+n+wb)
wm,n:filter的第m行第n列的值
xi,j: 表示图像的第i行第j列元素
wb:用表示filter的偏置项
ai,j:表示Feature Map的第i行第j列元素
f:表示Relu激活函数

激励层:
使用的激励函数一般为ReLu函数:
f(x)=max(x,0)
卷积层和激励层通常合并在一起称为“卷积层”。

池化层:
当输入经过卷积层时,若感受视野比较小,布长stride比较小,得到的feature map (特征图)还是比较大,可以通过池化层来对每一个 feature map 进行降维操作,输出的深度还是不变的,依然为 feature map 的个数。
池化层也有一个“池化视野(filter)”来对feature map矩阵进行扫描,对“池化视野”中的矩阵值进行计算,一般有两种计算方式:
Max pooling:取“池化视野”矩阵中的最大值
Average pooling:取“池化视野”矩阵中的平均值

训练过程:
1.前向计算每个神经元的输出值aj( 表示网络的第j个神经元,以下同);
2.反向计算每个神经元的误差项σj,σj在有的文献中也叫做敏感度(sensitivity)。它实际上是网络的损失函数Ed对神经元加权输入的偏导数
3.计算每个神经元连接权重wi,j的梯度( wi,j表示从神经元i连接到神经元j的权重)
1.最后,根据梯度下降法则更新每个权重即可。
参考: https://blog.csdn.net/love__live1/article/details/79481052

⑩ 梯度下降法怎么改变神经网络中的权重

梯度下降算法是神经网络在每代更新网络权值的一种方法。
神经网络还有很多其他更新权值的方法,不只这一种

阅读全文

与前馈神经网络如何更新权重相关的资料

热点内容
网络共享中心没有网卡 浏览:521
电脑无法检测到网络代理 浏览:1373
笔记本电脑一天会用多少流量 浏览:574
苹果电脑整机转移新机 浏览:1376
突然无法连接工作网络 浏览:1057
联通网络怎么设置才好 浏览:1224
小区网络电脑怎么连接路由器 浏览:1032
p1108打印机网络共享 浏览:1211
怎么调节台式电脑护眼 浏览:694
深圳天虹苹果电脑 浏览:931
网络总是异常断开 浏览:612
中级配置台式电脑 浏览:989
中国网络安全的战士 浏览:630
同志网站在哪里 浏览:1413
版观看完整完结免费手机在线 浏览:1459
怎样切换默认数据网络设置 浏览:1110
肯德基无线网无法访问网络 浏览:1286
光纤猫怎么连接不上网络 浏览:1472
神武3手游网络连接 浏览:965
局网打印机网络共享 浏览:1000