我最近开始研究 ANN,我一直试图找出一些我似乎无法找到答案的东西(可能是因为它太琐碎或者因为我正在搜索错误的关键字......)。
什么时候使用多个输出而不是单个输出?我猜在 1/0 分类的最简单情况下,它最容易使用“符号”作为输出激活函数。但是在哪种情况下你会使用多个输出?例如,如果您有一个多分类问题,那么您想将某物分类为例如 A、B 或 C,并且您为每个类选择 1 个输出神经元?你如何确定它属于哪个类?
我最近开始研究 ANN,我一直试图找出一些我似乎无法找到答案的东西(可能是因为它太琐碎或者因为我正在搜索错误的关键字......)。
什么时候使用多个输出而不是单个输出?我猜在 1/0 分类的最简单情况下,它最容易使用“符号”作为输出激活函数。但是在哪种情况下你会使用多个输出?例如,如果您有一个多分类问题,那么您想将某物分类为例如 A、B 或 C,并且您为每个类选择 1 个输出神经元?你如何确定它属于哪个类?
在分类上下文中,使用多个输出单元可能会有所帮助:多类分类和显式置信度估计。
对于多类情况,正如您在问题中所写,对于您感兴趣的每一类数据,您的网络中通常都有一个输出单元。因此,如果您尝试将数据分类为 A、B 或 C 之一,您可以在标记数据上训练您的网络,但将所有“A”标签转换为 [1 0 0],将所有“B”标签转换为 [0 1 0],将“C”标签转换为 [0 0 1 ]。(这称为“one-hot”编码。)您可能还想在输出单元上使用逻辑激活来将它们的激活值限制在区间 (0, 1) 内。
然后,当你训练你的网络时,优化“交叉熵”损失(相对于更直观的欧几里得距离损失)通常很有用,因为你基本上是在尝试教你的网络输出概率给定输入的每个类。通常使用“softmax”(有时也称为玻尔兹曼)分布来定义这个概率。
欲了解更多信息,请查看http://www.willamette.edu/~gorr/classes/cs449/classify.html(理论性稍强)和http://deeplearning.net/tutorial/logreg.html(更多针对事物的代码方面)。
多输出的另一个很酷的用途是使用一个输出作为标准分类器(例如,只有一个输出单元生成 0 或 1),第二个输出表示该网络对输入信号分类的置信度(例如,另一个输出单元生成区间 (0, 1)) 中的值。
如果您在每个 A、B 和 C 类数据上训练了一个单独的网络,这可能会很有用,但随后还将来自 D 类(或其他)的数据呈现给系统——在这种情况下,您'希望每个网络都表明他们不确定输出,因为他们以前从未见过 D 类的东西。
例如,看看 softmax 层。这一层的最大输出是你的班级。它有很好的理论依据。
简而言之:您获取前一层的输出并将其解释为 m 维空间中的向量。之后,您将 K 高斯拟合到它,它们共享协方差矩阵。如果你对它建模并写出方程,它就相当于 softmax 层。有关更多详细信息,请参阅 Kevin Murphy 的“机器学习。概率视角”。
这只是使用最后一层进行多类分类的一个例子。您也可以将多个输出用于其他用途。例如,您可以训练 ANN 来“压缩”您的数据,即计算从 N 维到 M 维空间的函数,以最大限度地减少信息丢失(此模型称为自动编码器)