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

Machine learning 神经网络训练中的数据编码,machine-learning,encoding,neural-network,backpropagation,perceptron,Machine Learning,Encoding,Neural Network,Backpropagation,Perceptron,我已将349900单词从字典文件转换为md5哈希。样本如下: 74b87337454200d4d33f80c4663dc5e5 594f803b380a41396ed63dca39503542 0b4e7a0e5fe84ad35fb5f95b9ceeac79 5d793fc5b00a2348c3fb9ab59e5ca98a 3dbe00a167653a1aaee01d93e77e730e ffc32e9606a34d09fca5d82e3448f71f 2fa9f0700f68f32d2d520

我已将
349900
单词从字典文件转换为md5哈希。样本如下:

74b87337454200d4d33f80c4663dc5e5
594f803b380a41396ed63dca39503542
0b4e7a0e5fe84ad35fb5f95b9ceeac79
5d793fc5b00a2348c3fb9ab59e5ca98a
3dbe00a167653a1aaee01d93e77e730e
ffc32e9606a34d09fca5d82e3448f71f
2fa9f0700f68f32d2d520302906e65ce
1c9b32ff1b53bd892b87578a11cbd333
26a10043bba821303408ebce568a2746
c3c32ff3481e9745e10defa7ce5b511e 
我想训练一个神经网络,用简单的结构,比如多层感知器来解密散列。因为所有哈希值的长度都是32,所以我认为输入节点的数量是32,但这里的问题是输出节点的数量。由于输出是字典中的单词,因此没有任何特定的长度。它可以有不同的长度。这就是为什么我对我应该有多少个输出节点感到困惑的原因

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

我在这个链接中发现了一篇论文,它实际上是用神经网络解密散列。报纸说

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

我将如何实施文件中所说的内容。我想限制要解密的字符数。最初,我只能将其限制为
4
个字符(仅用于测试目的)


我的输入节点将是代表散列中每个字符的
32
节点。每个输入节点将具有(每个散列字符的ASCII值/256)。我的输出节点将有32个节点也代表二进制格式。由于8位/8个节点代表一个字符,因此我的网络最多可以解密4个字符,因为(32/8)=4。(我可以增加它,如果我想。)我计划使用33个节点。我的网络架构可行吗<代码>32 x 33 x 32?若否,原因为何?请指导我。

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

在另一个堆栈交换论坛上,关于使用神经网络破解SHA256哈希的可能性进行了大量讨论:

公认的答案是:

没有

神经网络是模式匹配器。它们是很好的图案 匹配器,但模式匹配器是一样的。不比 他们打算模仿的生物大脑。更彻底,更安全 不知疲倦,但不是更老练

模式必须在那里才能找到。这里面一定有偏见 需要梳理的数据。但是加密散列是显式的,并且 非常仔细地设计以消除输出中的任何偏差。不 一位比任何其他位更有可能,没有一个输出更可能 关联到任何给定的输入。如果这种相关性是可能的,那么 散列将被认为是“坏的”,一个新的算法将采用它 地点

,但在有帮助的情况下永远不会 一个神经网络的模型。取而代之的是谨慎地应用 某些数学原理

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

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


仅供参考,@JuliusVainora-->是的,我知道,但我必须这样做作为概念证明。事实上,一篇论文已经做到了这一点。如果你对这个理论感兴趣的话,我建议你在youtube上观看斯坦福大学的课程:这里有一个很好的教程:最后,如果你是用python编程的话,请查找gensim库。这本书充满了简单的教程,展示了如何在你的案例中使用单词,我相信单词袋是一个更好的方法,因为你不必假设单词之间的语法关系。请看这里:你的方法很有趣。我从未见过NN使用字母表作为输出。我没有线索,如果它可以工作:)。内部设计由您决定,但我会使用比输入层更少的神经元来避免对身份函数建模。我会使用标准方法对弓进行固定长度和唯一代码编码,因此我不知道如何帮助您解决歧义问题。是的,我知道您计划使用输出层直接映射字母表。只是我不确定它将如何工作。帮助我更好地理解。您期望的输出(字典中的单词)用哈希键一一映射?i、 e.“哈希键”->“单词”Ok,那么19位(2^19~500000+)应该足以对单词进行编码。然后输出层将由19个节点组成。因此,方法可以是1)为每个单词分配一个19位的代码(为了更精确的方法,您应该使用汉明编码)。2) 使用输入:散列(32个神经元)输出:二进制代码(19个节点)训练模型。3) 将预测的代码与原始单词相关联。