神经网络训练中的数据编码

时间:2018-10-25 06:31:05

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

我已将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?如果没有,为什么?请引导我。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

在另一个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个年龄的宇宙   训练您的神经网络。