CNTK - 神经网络 (NN) 概念

本章介绍与 CNTK 相关的神经网络概念。

众所周知,神经网络由多层神经元组成。但是,问题来了,在 CNTK 中,我们如何对 NN 的各层进行建模?这可以通过层模块中定义的层函数来完成。

层函数

实际上,在 CNTK 中,使用层具有独特的函数式编程感觉。层函数看起来像常规函数,它会生成具有一组预定义参数的数学函数。让我们看看如何借助 layer 函数创建最基本的层类型 Dense。

示例

借助以下基本步骤,我们可以创建最基本的层类型 −

步骤 1 − 首先,我们需要从 CNTK 的 Layers 包中导入 Dense 层函数。

from cntk.layers import Dense

步骤 2 − 接下来,我们需要从 CNTK 根包中导入 input_variable 函数。

from cntk import input_variable

步骤 3 − 现在,我们需要使用 input_variable 函数创建一个新的输入变量。我们还需要提供它的大小。

feature = input_variable(100)

步骤 4 −最后,我们将使用 Dense 函数创建一个新层,并提供我们想要的神经元数量。

layer = Dense(40)(feature)

现在,我们可以调用配置的 Dense 层函数将 Dense 层连接到输入。

完整实现示例

from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)

自定义层

正如我们所见,CNTK 为我们提供了一组相当不错的默认设置来构建 NN。根据我们选择的激活函数和其他设置,NN 的行为和性能是不同的。这是另一种非常有用的词干提取算法。这就是原因,了解我们可以配置的内容是很好的。

配置密集层的步骤

NN 中的每一层都有其独特的配置选项,当我们谈论密集层时,我们有以下重要设置来定义 −

  • shape − 顾名思义,它定义了层的输出形状,这进一步决定了该层中的神经元数量。

  • activation − 它定义了该层的激活函数,因此它可以转换输入数据。

  • init − 它定义了该层的初始化函数。当我们开始训练 NN 时,它将初始化该层的参数。

让我们看看配置 Dense 层的步骤 −

步骤 1 − 首先,我们需要从 CNTK 的 Layers 包中导入 Dense 层函数。

from cntk.layers import Dense

步骤 2 − 接下来,我们需要从 CNTK ops 包中导入 sigmoid 运算符。它将用于配置为激活函数。

from cntk.ops import sigmoid

步骤 3 −现在,从初始化程序包中,我们需要导入 glorot_uniform 初始化程序。

from cntk.initializer import glorot_uniform

步骤 4 − 最后,我们将使用 Dense 函数创建一个新层,并提供神经元数量作为第一个参数。此外,提供 sigmoid 运算符作为 activation 函数,提供 glorot_uniform 作为层的 init 函数。

layer = Dense(50,activation = sigmoid, init = glorot_uniform)

完整实现示例 −

from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50,activation = sigmoid, init = glorot_uniform)

优化参数

到目前为止,我们已经了解了如何创建 NN 的结构以及如何配置各种设置。在这里,我们将看到如何优化 NN 的参数。借助两个组件(即 学习器训练器)的组合,我们可以优化 NN 的参数。

训练器组件

用于优化 NN 参数的第一个组件是 训练器 组件。它基本上实现了反向传播过程。如果我们谈论它的工作原理,它会将数据传递通过 NN 以获得预测。

之后,它使用另一个称为学习器的组件来获取 NN 中参数的新值。一旦获得新值,它就会应用这些新值并重复该过程,直到满足退出标准。

学习器组件

用于优化 NN 参数的第二个组件是学习器组件,它主要负责执行梯度下降算法。

CNTK 库中包含的学习器

以下是 CNTK 库中包含的一些有趣学习器的列表 −

  • 随机梯度下降 (SGD) − 该学习器代表基本的随机梯度下降,没有任何额外功能。

  • 动量随机梯度下降 (MomentumSGD) −借助 SGD,该学习器应用动量来克服局部最大值问题。

  • RMSProp − 为了控制下降速度,该学习器使用衰减学习率。

  • Adam − 为了随时间降低下降速度,该学习器使用衰减动量。

  • Adagrad − 对于频繁出现和不频繁出现的特征,该学习器使用不同的学习率。