我应该规范化神经网络中的输入吗?

时间:2017-02-16 04:02:05

标签: machine-learning neural-network normalization genetic-algorithm chess

首先是一些背景。

我正在进行一个非常有抱负的项目,使神经网络能够以相当的水平玩国际象棋。我可能没有成功,但我主要是为了学习如何进行这种机器学习。

我决定在不同的神经网络在几场国际象棋比赛中相互争斗后,我想用遗传算法训练网络来微调权重。

每个神经元利用双曲正切(-1,1)在数据处理后对数据进行标准化,但在进入网络之前尚未对输入进行标准化。

我从长颈鹿国际象棋引擎中获得了一些灵感,特别是输入。

它们看起来有点像这样:

第一层:

  • 剩余白色棋子数(0-8)

  • 剩余黑棋子数(0-8)

  • 剩下的白骑士数量(0-2)

  • 剩下的黑骑士人数(0-2)

...

第二层仍与第一层处于同一水平:

  • Pawn 1的位置(可能有2个值,x [0-7]和y [0-7])
  • Pawn 2的位置

...

  • 女王1的位置
  • 女王2的位置

...

第三层,再次与前两层相同。在下一层抽象之后,数据才会“串扰”。

  • Pawn1攻击的碎片值(这将在0-12范围内)
  • Pawn2攻击的碎片值

...

  • Bishop1袭击事件的价值

你明白了。

如果你在这里没有一个可怕的Paint表示我的意思:

Neural Net Representation

问题是:我应该在输入数据被神经网络读取之前对其进行标准化吗?

我觉得压缩数据可能不是一个好主意,但我真的没有能力做出决定性的电话。

我希望这里有人能够启发我的主题,如果你认为我应该对数据进行规范化,我希望你能提出一些方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

您不需要规范化内部网络中的任何内容。机器学习的重点是训练权重和偏见以学习非线性函数,在你的例子中它是静态的国际象棋评估。因此,您的第二个标准化蓝色垂直条(在最终输出附近)是不必要的。

注意: Hidden layers是一个比abstraction layer更好的术语,所以我会改用它。

隐藏图层之前的其他标准化是可选的,但建议使用。它还取决于我们正在谈论的输入

长颈鹿论文在第18页写道:

  

“每个插槽都有标准化的x坐标,标准化的y坐标......”

国际象棋有64个方格,没有标准化,范围将是[0,1,...... 63]。这是非常离散的,范围远远高于其他输入(稍后更多)。将它们规范化为更易于管理且与其他输入相当的东西是有意义的。本文没有说它是如何完全标准化,但我不明白为什么[0 ... 1]范围不起作用。 规范棋方(或坐标)是有意义的。

其他输入,例如板上是否有王后是真还是假,因此不需要归一化。例如,长颈鹿论文在第18页写道:

  

......无论是存在还是缺席......

显然,你不会将其标准化。

回答您的问题

  • 如果您在Giraffe中表示计件层,则无需进行标准化。但如果您更喜欢[0..8]中的离散表示(因为国际象棋中可能有9个皇后),您可能需要进行标准化。
  • 如果您使用国际象棋方块代表棋子位置图层,您应该像长颈鹿一样正常化。
  • Giraffe没有标准化Piece Attack Defense Layer可能它代表的信息为the lowest-valued attacker and defender of each square。不幸的是,该文件没有明确说明如何做到这一点。您的实现可能需要规范化,因此请使用您的常识。

如果没有任何先验假设哪些特征与模型更相关,则应将它们标准化为可比较的缩放。

<强> EDITED

让我回答你的评论。规范化不是正确的术语,你所说的是激活函数(https://en.wikipedia.org/wiki/Activation_function)。规范化和激活功能不是一回事。