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 连接到输入。
Customizing layers
正如我们所见,CNTK 为我们提供了一组相当不错的默认值来构建 NN。基于 activation 函数和其他我们选择的设置,NN 的行为和性能是不同的。这是另一种非常有用的词干算法。因此,最好了解我们可以配置的内容。
Steps to configure a Dense layer
NN 中的每一层都有其独特的配置选项,当我们讨论 Dense layer 时,有以下几个重要设置需要定义:
-
shape - 如名称所暗示的那样,它定义了层的输出形状,进而确定该层中的神经元数量。
-
activation - 它定义了该层的激活函数,以便它转换输入数据。
-
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 运算符作为层函数 activation 和 glorot_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 的参数。借助两个组成部分 learners 和 trainers 的组合,我们可以优化 NN 的参数。
Learners included in the CNTK library
以下是 CNTK 库中提供的一些有趣的学习器的列表 −
-
Stochastic Gradient Descent (SGD) - 此学习器表示基本的随机梯度下降,没有任何附加内容。
-
Momentum Stochastic Gradient Descent (MomentumSGD) - 使用 SGD 时,此学习器会运用动量来克服局部极大值的问题。
-
RMSProp - 此学习器使用衰减学习率,以控制下降速度。
-
Adam - 此学习器使用衰减动量,以随时间推移而降低下降速度。
-
Adagrad - 此学习器使用不同的学习率,以适应出现频率高和低的特征。