CNTK - 神经网络 (NN) 概念

  • 简述

    本章处理与 CNTK 相关的神经网络的概念。
    众所周知,神经网络使用了几层神经元。但是,问题出现了,在 CNTK 中,我们如何对 NN 的层进行建模?它可以在层模块中定义的层函数的帮助下完成。
  • 图层功能

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

    例子

    借助以下基本步骤,我们可以创建最基本的图层类型 -
    第 1 步- 首先,我们需要从 CNTK 的图层包中导入 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 时,它将初始化层的参数。
    让我们看看我们可以配置密集层的步骤 -
    第 1 步 - 首先,我们需要从 CNTK 的图层包中导入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运算符作为激活函数,并将glorot_uniform作为层的初始化函数。
    
    
    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 参数的第二个组件是学习器组件,它主要负责执行梯度下降算法。
  • CNTK 库中包含的学习者

    以下是 CNTK 库中包含的一些有趣的学习者的列表 -
    • Stochastic Gradient Descent (SGD) - 这个学习器代表基本的随机梯度下降,没有任何额外的。
    • Momentum Stochastic Gradient Descent (MomentumSGD) - 使用 SGD,该学习器应用动量来克服局部最大值的问题。
    • RMSProp - 这个学习器,为了控制下降率,使用衰减学习率。
    • Adam - 这个学习器,为了随着时间的推移降低下降率,使用衰减动量。
    • Adagrad - 这个学习器,对于经常和不经常出现的特征,使用不同的学习率。