双类神经网络

使用神经网络算法创建二元分类器

类别:机器学习/初始化模型/分类

注意

适用于:仅限机器学习 Studio (经典)

可在 Azure 机器学习设计器中获取类似的拖放模块。

模块概述

本文介绍如何在机器学习 Studio (经典) 中使用 "双类神经网络" 模块创建一个神经网络模型,该模型可用于预测只包含两个值的目标。

使用神经网络进行分类是一种监督式学习方法,因此需要一个“带标记的数据集”(其中包含一个标签列)。 例如,你可以使用此神经网络模型来预测二元结果,例如患者是否具有特定疾病,或者计算机是否可能在指定时间段内失败。

定义模型后,通过将标记的数据集和模型提供给 定型模型 的输入或 调整模型超参数来对模型进行训练。 然后,可以使用训练后的模型针对新输入来预测值。

有关神经网络的详细信息

神经网络是一组互连的层。 输入是第一层,并通过由加权边缘和节点组成的无环图连接到一个输出层。

在输入层和输出层之间,可以插入多个隐藏层。 大多数预测任务只需使用一个或几个隐藏层即可轻松完成。 不过,最近的研究表明,深层神经网络 (DNN) ,其中很多层可以在复杂任务(如图像或语音识别)中非常有效。 后续层用于为不断增加的语义深度级别建模。

输入与输出之间的关系可通过基于输入数据对神经网络进行训练来了解。 图形的方向是从输入层到隐藏层,再到输出层。 每一层中的所有节点都通过加权边缘连接到下一层中的节点。

为了针对特定输入计算网络的输出,会在隐藏层和输出层中的每个节点上计算一个值。 此值是通过计算上一层中节点的值的加权和来设置的。 然后会向该加权和应用一个激活函数。

如何配置 Two-Class 神经网络

  1. 双类神经网络 模块添加到 Studio 中的试验 (经典) 。 可以在“机器学习”、“初始化”下的“分类”类别中找到此模块。

  2. 通过设置“创建训练程序模式”选项,指定要如何对模型进行训练。

    • 单个参数:如果已知如何配置模型,请选择此选项。

    • 参数范围:如果不确定最佳参数,请选择此选项。 然后,指定一系列值,并使用 调谐模型超参数 模块循环访问这些组合并找到最佳配置。

  3. 对于“隐藏层规范”,请选择要创建的网络体系结构的类型。

    • 完全连接事例:使用为双类神经网络定义的默认神经网络体系结构,如下所示:

      • 有一个隐藏层。

      • 输出层完全连接到隐藏层,并且隐藏层完全连接到输入层。

      • 输入层中的节点数等于训练数据中的特征数。

      • 隐藏层中的节点数是由用户设置的。 默认值为 100。

      • 节点数等于类的数目。 对于双类神经网络,这意味着所有输入都必须映射到输出层中的两个节点之一。

    • 自定义定义脚本:选择此选项可以使用Net #语言创建自定义神经网络体系结构。 利用此选项,可以定义隐藏层的数量、它们的连接以及层之间的映射。

    选择 "自定义脚本" 选项之后,在 " 神经网络定义 " 文本框中,键入或粘贴定义网络的 Net # 语句。 有关示例,请参阅 Net # 神经网络规范语言指南

  4. 如果不使用 "脚本" 选项,请使用 " 隐藏节点数",并键入隐藏节点的数目。 默认为一个隐藏层,其中包含 100 个节点。

  5. 对于“学习比率”,请定义更正之前每次迭代要执行的步幅。 学习比率的值越大,模型的汇聚速度就越快,但它可以超过本地最小值。

  6. 对于“学习迭代数”,请指定算法处理训练事例的最大次数。

  7. 对于“初始学习权重直径”,在学习过程开始时,指定节点权重。

  8. 对于“动力”,指定在学习过程中要应用到之前迭代中的节点的权重。

  9. 规范化器的类型中,选择要用于功能规范化的方法。 支持以下规范化方法:

    • 装箱规范化器:装箱规范化器创建大小相等的箱,然后对每个箱中的每个值进行规范化,除以储箱总数。

    • 高斯规范化器:高斯规范化器重新缩放每个特征的值的平均值为0,方差为1。 这是通过计算每个特征的平均值和方差来实现的。 对于每个实例,将减去平均值,并将结果除以) 标准偏差 (方差的平方根。

    • 最小值-最大值规范化器:线性重新缩放每个特征的最小值规范化器([0,1] 间隔)。

      移动每个特征的值以重缩放为 [0,1] 区间,使最小值为 0,然后除以新的最大值(这是初始最大值和初始最小值之间的差异)。

    • 规范化:不执行规范化。

  10. 选择“随机选择示例”选项可在迭代间随机选择事例。 如果取消选择此选项,则每次运行试验时,都将按完全相同的顺序处理事例。

  11. 对于“随机数种子”,键入一个值来用作种子。

    如果你想要确保每次运行相同的试验都获得相同的结果,则指定种子值会很有用。 否则,系统时钟值将用作种子,每次运行试验时,这可能会导致结果略有不同。

  12. 选择 " 允许未知分类级别 " 选项,为定型集和验证集中的未知值创建分组。 对于已知值,该模型可能不太准确,但对新的 (未知) 值提供更好的预测。

    如果取消选择此选项,该模型只会接受训练数据中包含的值。

  13. 向试验中添加标记的数据集,并连接其中一个 定型模块

    • 如果将“创建训练程序模式”设置为“单个参数”,请使用训练模型模块。

    • 如果将“创建训练程序模式”设置为“参数范围”,请使用优化模型超参数模块 。

    注意

    如果将参数范围传递给训练模型模块,则它只使用参数范围列表中的第一个值。

    如果将一组参数值传递给优化模型超参数模块,则当它期望每个参数有一系列设置时,它会忽略这些值,并为学习器使用默认值。

    如果选择 " 参数范围 " 选项并为任何参数输入单个值,则会在整个扫描中使用单个值,即使其他参数在一系列值中发生了更改。

  14. 运行试验。

结果

在训练完成后:

  • 若要查看模型参数的摘要,以及从定型中获知的功能权重和神经网络的其他参数,请右键单击 训练模型 的输出或 微调模型超参数,然后选择 " 可视化"。

  • 要保存已训练模型的快照,请右键单击“已训练模型”输出,选择“另存为已训练模型”。 此模型在连续运行相同实验时不会更新。

  • 若要对标记的数据集执行交叉验证,请将未经训练的模型连接到 交叉验证模型

示例

有关如何使用此学习算法的示例,请参阅 Azure AI 库。 这些试验在从基本配置到高级配置的单个文档中进行了关联和说明:

技术说明

本部分包含实现详情、使用技巧和常见问题解答。

网络详细信息#

在机器学习 Studio (经典) ,可以使用 Net # 语言自定义神经网络模型的体系结构。 Net # 语言支持的自定义项包括:

  • 指定隐藏层数和每个层中的节点数
  • 指定层之间的映射
  • 定义卷积和权重共享捆绑
  • 选择激活函数

神经网络模型由其图形结构定义,包括以下属性:

  • 隐藏层的数目
  • 每个隐藏层中的节点数
  • 如何连接层
  • 使用哪种激活函数
  • 图形边缘的权重

重要

关系图的整体结构以及激活函数可以由用户指定。 但是,不能指定边缘上的权重,并且必须在对输入数据定型神经网络时进行学习。

通常,网络具有以下默认值:

  • 第一层称始终是输入层。
  • 最后一层始终是输出层。
  • 输出层中的节点数应等于的类的数目。

你可以定义任意数量的中间层(有时称为隐藏层,因为它们包含在模型内,并不直接显示为端点)。

Net # 参考指南解释了相关语法,并提供了示例网络定义。 其中说明了如何使用 Net# 添加隐藏层,以及定义彼此交互的各个层。

例如,下面的脚本使用 auto 关键字,该关键字为输入层和输出层自动设置功能的数目,并使用隐藏层的默认值。

input Data auto;  
hidden Hidden auto from Data all;  
output Result auto from Hidden all;   

有关更多脚本示例,请参阅 Net # 神经网络规范语言指南

提示

由于许多超参数和引入了自定义网络拓扑,神经网络可能会消耗大量计算资源。 尽管在很多情况下,神经网络产生的结果比其他算法更好,但获得此类结果可能会涉及到超参数上) 大量的扫描 (迭代。

模块参数

名称 范围 类型 默认 说明
隐藏层规范 列表 神经网络拓扑 完全连接用例 指定一个或多个隐藏层的体系结构
初始学习权重直径 >=double.Epsilon Float 0.1 指定学习过程初期的节点权重
学习速率 [double.Epsilon;1.0] Float 0.1 指定学习过程中每个步骤的大小
动量 [0.0;1.0] Float 0.0 指定在学习到节点来自以前的迭代过程中应用的权重
神经网络定义 任意 StreamReader 选择“自定义定义脚本”时,在每一行键入一个有效的脚本表达式来定义自定义神经网络的层、节点和行为。
规范化器的类型 列表 规范化方法 最小-最大值规范化器 选择要应用到学习示例的规范化类型
学习迭代数 >=1 Integer 100 指定学习时执行的迭代次数
随机排列示例 任意 布尔 选择此选项可以更改学习迭代之间的实例顺序
随机数种子 任意 Integer 指定用于生成随机数的数字种子。 留空将使用默认种子。
允许未知的分类级别 任意 布尔 True 指示是否应为未知类别创建附加级别。 如果测试数据集包含的类别不在训练数据集中,则这些类别将映射到此未知级别。

输出

名称 类型 说明
未训练的模型 ILearner 接口 未训练的二元分类模型

另请参阅

分类
神经网络回归
多类神经网络
A-Z 模块列表