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) 将预测的代码与原始单词相关联。