机器学习多分类:为什么使用'one-hot'编码而不是数字
Machine learning multi-classification: Why use 'one-hot' encoding instead of a number
我目前正在处理 tensorflow 的分类问题,我是机器学习领域的新手,但我什么都不懂。
我已经成功地尝试训练输出 y
张量的模型,如下所示:
y = [0,0,1,0]
但是我看不懂背后的原理...
为什么不训练同一个模型输出类比如y = 3
或者y = 4
这似乎更灵活,因为我可以想象有一个可能有 200 万的多分类问题 类,输出 0-2,000,000 之间的数字比输出一个数字要高效得多每个结果有 2,000,000 个项目的张量。
我错过了什么?
答案在于如何计算最终张量或单个值。在 NN 中,您的 y=3
将通过对前一层的值进行加权求和来构建。
尝试针对单个值进行训练将意味着 none 存在的类别 ID 之间存在线性关系:对于真实值 y=4
,输出 y=3
会被认为更好比 y=1
即使类别是随机的,并且可能是 1: dogs, 3: cars, 4: cats
理想情况下,您可以训练模型以 class 化输入实例并生成单个输出。像
y=1
表示input=dog
,y=2
表示input=airplane
。然而,这样的做法带来了很多问题:
- 如何解释输出
y=1.5
?
- 为什么我要尝试 回归 一个数字,就像我在处理连续数据,而实际上我在处理离散数据?
事实上,您正在做的是将多 class class化问题 视为回归问题。
这是局部错误的(除非你正在做二进制 classification,在那种情况下,正负输出就是你需要的一切)。
为了避免这些(和其他)问题,我们使用最后一层神经元并将高激活关联到右侧 class。
one-hot 编码代表这样一个事实,即当存在特定输入时,您希望强制您的网络具有单个高激活输出。
这样,每个 input=dog
都会有 1, 0, 0
作为输出等等。
通过这种方式,您可以正确地处理离散的 class化问题,产生离散的输出并且可以很好地解释(事实上,您将始终使用 [=17 提取具有最高激活的输出神经元=],即使你的网络还没有学会产生完美的单热编码,你将能够毫无疑问地提取最可能正确的输出)
神经网络使用梯度下降来优化损失函数。反过来,这个损失函数需要是可微的。
离散输出将(确实)是分类网络的完全有效且有价值的输出。问题是,我们不知道如何有效地优化这个网络。
相反,我们依赖于连续损失函数。该损失函数通常基于与每个标签的概率或多或少相关的东西——为此,您需要一个每个标签有一个值的网络输出。
通常,您描述的输出是通过采用这些伪概率的 argmax 从这个软的、连续的输出中推导出来的。
我目前正在处理 tensorflow 的分类问题,我是机器学习领域的新手,但我什么都不懂。
我已经成功地尝试训练输出 y
张量的模型,如下所示:
y = [0,0,1,0]
但是我看不懂背后的原理...
为什么不训练同一个模型输出类比如y = 3
或者y = 4
这似乎更灵活,因为我可以想象有一个可能有 200 万的多分类问题 类,输出 0-2,000,000 之间的数字比输出一个数字要高效得多每个结果有 2,000,000 个项目的张量。
我错过了什么?
答案在于如何计算最终张量或单个值。在 NN 中,您的 y=3
将通过对前一层的值进行加权求和来构建。
尝试针对单个值进行训练将意味着 none 存在的类别 ID 之间存在线性关系:对于真实值 y=4
,输出 y=3
会被认为更好比 y=1
即使类别是随机的,并且可能是 1: dogs, 3: cars, 4: cats
理想情况下,您可以训练模型以 class 化输入实例并生成单个输出。像
y=1
表示input=dog
,y=2
表示input=airplane
。然而,这样的做法带来了很多问题:
- 如何解释输出
y=1.5
? - 为什么我要尝试 回归 一个数字,就像我在处理连续数据,而实际上我在处理离散数据?
事实上,您正在做的是将多 class class化问题 视为回归问题。 这是局部错误的(除非你正在做二进制 classification,在那种情况下,正负输出就是你需要的一切)。
为了避免这些(和其他)问题,我们使用最后一层神经元并将高激活关联到右侧 class。
one-hot 编码代表这样一个事实,即当存在特定输入时,您希望强制您的网络具有单个高激活输出。
这样,每个 input=dog
都会有 1, 0, 0
作为输出等等。
通过这种方式,您可以正确地处理离散的 class化问题,产生离散的输出并且可以很好地解释(事实上,您将始终使用 [=17 提取具有最高激活的输出神经元=],即使你的网络还没有学会产生完美的单热编码,你将能够毫无疑问地提取最可能正确的输出)
神经网络使用梯度下降来优化损失函数。反过来,这个损失函数需要是可微的。
离散输出将(确实)是分类网络的完全有效且有价值的输出。问题是,我们不知道如何有效地优化这个网络。
相反,我们依赖于连续损失函数。该损失函数通常基于与每个标签的概率或多或少相关的东西——为此,您需要一个每个标签有一个值的网络输出。
通常,您描述的输出是通过采用这些伪概率的 argmax 从这个软的、连续的输出中推导出来的。