Microsoft Cognitive Toolkit 简明教程

CNTK - Neural Network (NN) Concepts

本章介绍了有关 CNTK 的神经网络的概念。

正如我们所知,神经网络需要使用几层神经元。但是,CNTK 中可以用什么来对 NN 的层进行建模呢?这个问题的答案是 layer 模块中定义的 layer 函数。

Layer function

事实上,在 CNTK 中,使用 layer 时会有一种明确的函数式编程感觉。Layer 函数看起来就像一个普通函数,它会生成具有预定义参数集的数学函数。让我们借助 layer 函数来了解如何创建最基本类型的层,即 Dense。

Example

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

Step 1 - 首先,我们需要从 CNTK 的 layer 包中导入 Dense layer 函数。

from cntk.layers import Dense

Step 2 - 接下来需要从 CNTK 根包中导入 input_variable 函数。

from cntk import input_variable

Step 3 - 现在,我们需要使用 input_variable 函数创建一个新的输入变量。我们还需要提供它的 size。

feature = input_variable(100)

Step 4 - 最后,我们将使用 Dense 函数创建一个新层,同时提供希望的神经元数量。

layer = Dense(40)(feature)

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

Complete implementation example

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

Customizing layers

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

Steps to configure a Dense layer

NN 中的每一层都有其独特的配置选项,当我们讨论 Dense layer 时,有以下几个重要设置需要定义:

  1. shape - 如名称所暗示的那样,它定义了层的输出形状,进而确定该层中的神经元数量。

  2. activation - 它定义了该层的激活函数,以便它转换输入数据。

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

让我们借助以下步骤了解如何配置 Dense 层:

Step1 - 首先,我们需要从 CNTK 的 layer 包中导入 Dense layer 函数。

from cntk.layers import Dense

Step2 * − Next from the CNTK ops package, we need to import the *sigmoid operator 。它将被配置为激活函数。

from cntk.ops import sigmoid

Step3 * − Now, from initializer package, we need to import the *glorot_uniform 初始化器。

from cntk.initializer import glorot_uniform

Step4 * − At last, we will create a new layer using Dense function along with providing the number of neurons as the first argument. Also, provide the *sigmoid 运算符作为层函数 activationglorot_uniform 作为层函数 init

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

Complete implementation example −

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

Optimizing the parameters

到目前为止,我们已经了解了如何创建 NN 的结构以及如何配置各种设置。在此,我们将了解如何优化 NN 的参数。借助两个组成部分 learnerstrainers 的组合,我们可以优化 NN 的参数。

trainer component

用于优化神经网络参数的第一个组件为 trainer 组件。基本上实现反向传播过程。如果谈论其作用,它将数据通过神经网络进行传递以获得预测结果。

之后,它会使用名为学习器的另一个组件,以获得神经网络中参数的新值。一旦获得新值后,它会应用这些新值并重复此过程,直至满足退出条件。

learner component

用于优化神经网络参数的第二个组件为 learner 组件,它主要负责执行梯度下降算法。

Learners included in the CNTK library

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

  1. Stochastic Gradient Descent (SGD) - 此学习器表示基本的随机梯度下降,没有任何附加内容。

  2. Momentum Stochastic Gradient Descent (MomentumSGD) - 使用 SGD 时,此学习器会运用动量来克服局部极大值的问题。

  3. RMSProp - 此学习器使用衰减学习率,以控制下降速度。

  4. Adam - 此学习器使用衰减动量,以随时间推移而降低下降速度。

  5. Adagrad - 此学习器使用不同的学习率,以适应出现频率高和低的特征。