【问题标题】:Data Encoding for Training in Neural Network用于神经网络训练的数据编码
【发布时间】:2019-03-29 16:17:55
【问题描述】:

我已将 349,900 单词从字典文件转换为 md5 哈希。示例如下:

74b87337454200d4d33f80c4663dc5e5
594f803b380a41396ed63dca39503542
0b4e7a0e5fe84ad35fb5f95b9ceeac79
5d793fc5b00a2348c3fb9ab59e5ca98a
3dbe00a167653a1aaee01d93e77e730e
ffc32e9606a34d09fca5d82e3448f71f
2fa9f0700f68f32d2d520302906e65ce
1c9b32ff1b53bd892b87578a11cbd333
26a10043bba821303408ebce568a2746
c3c32ff3481e9745e10defa7ce5b511e 

我想训练一个神经网络来解密散列,只使用像多层感知器这样的简单架构。由于所有哈希值的长度都是 32,我想输入节点的数量是 32,但这里的问题是输出节点的数量。由于输出是字典中的单词,它没有任何特定的长度。它可以是各种长度。这就是为什么我对我应该拥有多少个输出节点感到困惑的原因。

我将如何编码我的数据,以便我可以拥有特定数量的输出节点?

我在此链接中找到了一篇论文here,它实际上使用神经网络解密了哈希。论文说

神经网络的输入是要解码的加密文本。这以双极或二进制格式输入神经网络。然后,它穿过隐藏层到达最终输出层,该输出层也是双极或二进制格式(如输入中给出的)。然后将其转换回纯文本以进行进一步处理。

我将如何实施论文中所说的内容。我正在考虑限制要解密的字符数。最初,我可以将其限制为最多 4 个字符(仅用于测试目的)。

我的输入节点将是32 节点,代表散列的每个字符。每个输入节点都将具有(each_hash_character/256 的 ASCII 值)。我的输出节点将有 32 个节点也代表二进制格式。由于 8 位/8 个节点代表一个字符,我的网络将能够解密最多 4 个字符的字符,因为 (32/8) = 4。(如果我愿意,我可以增加它。)我计划使用 33 个节点.我的网络架构可行吗? 32 x 33 x 32?如果不是,为什么?请指导我。

【问题讨论】:

标签: machine-learning encoding neural-network backpropagation perceptron


【解决方案1】:

您可以将字典中的单词映射到向量空间中(例如词袋、word2vec、..)。在这种情况下,单词以固定长度编码。输出层的神经元数量将匹配该长度。

【讨论】:

  • 如果您对理论感兴趣,我建议您在 youtube 上观看斯坦福课程:youtube.com/watch?v=OQQ-W_63UgQ 一个很好的教程在这里:mccormickml.com/2016/04/19/… 最后,如果您使用 python 编程,请查找 gensim 库.它充满了简单的教程,展示了如何使用 word2vec
  • 在您的情况下,我相信 Bag of words 是一种更好的方法,因为您不必假设单词之间的句法关系。所以请看这里:machinelearningmastery.com/gentle-introduction-bag-words-model
  • 你的方法很有趣。我从未见过使用字母表作为输出的神经网络。我不知道它是否可以工作:)。内部设计取决于您,但我会使用比输入层更少的神经元来避免对恒等函数进行建模。我会使用标准方法对具有固定长度和唯一代码的 BOW 进行编码,所以我不知道如何帮助您解决歧义问题。
  • 是的,我了解到您打算使用输出层直接映射字母表。只是我不确定它将如何工作。帮助我更好地理解。您期望的输出(字典中的单词)与哈希键一对一映射?即“哈希键”->“单词”
  • 好的,那么 19 位 (2^19~500,000+) 应该足以对您的单词进行编码。然后你的输出层将有 19 个节点。所以方法可能是 1)为每个单词分配一个 19 位代码(对于更精细的方法,您应该使用汉明编码)。 2) 使用输入:哈希(32 个神经元)输出:二进制代码(19 个节点)训练您的模型。 3) 将预测代码与原词相关联。
【解决方案2】:

在另一个 Stack Exchange 论坛中,关于使用神经网络破解 SHA256 哈希的可能性进行了很好的讨论:https://security.stackexchange.com/questions/135211/can-a-neural-network-crack-hashing-algorithms

接受的答案是:

没有。

神经网络是模式匹配器。他们是很好的模式 匹配器,但模式匹配器是一样的。不比先进 他们打算模仿的生物大脑。更彻底,更 不知疲倦,但并不复杂。

模式必须存在才能被发现。必须有偏见 要梳理的数据。但是加密哈希是明确的并且 非常精心设计,以消除输出中的任何偏差。不 一位比其他位更有可能,没有一个输出更有可能 与任何给定的输入相关。如果这种相关性是可能的,那么 哈希将被视为“损坏”,并且新算法将采用它 地点。

Flaws in hash functions have been found before,但绝不需要帮助 的神经网络。相反,它一直在仔细应用 某些数学原理。

下面的答案也做了一个有趣的比较:

SHA256 的输出空间为 2^256,输入空间为 本质上是无限的。作为参考,大爆炸以来的时间是 估计是50亿年,大约是1.577 x 10^27 纳秒,大约为 2^90 ns。所以假设每次训练 迭代需要 1 ns,你需要 2^166 个宇宙年龄 训练你的神经网络。

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2012-04-02
    • 2018-08-19
    • 2010-11-20
    • 2019-09-15
    相关资源
    最近更新 更多