关于密码学与特征中的哈希函数应用
Posted
技术标签:
【中文标题】关于密码学与特征中的哈希函数应用【英文标题】:On hash functions application in cryptography vs feature 【发布时间】:2017-01-30 10:32:18 【问题描述】:我才刚刚开始学习特征散列,所以我需要帮助来了解我是否可以应用数学上表示为 https://en.wikipedia.org/wiki/Tent_map 的散列函数。
Tent map 的一个这样的应用是在密码学中——论文 1:基于哈希函数的实现 关于神经 密码学download link。
在特征哈希中,
令 x 为 D 维的数据点,即它有 D 个元素。在特征散列中,使用线性散列函数将 D 维数据点转换为较低的 k 维数据点,从而保留降维特征空间中的距离。
通过运算得到哈希位k,
h_k(x) = sign(y(x)) = sign(f(w_k^Tx +b))
。输出h(x)
为 0 或 1 位。
本质上,我们是通过创建随机超平面来对数据点 x 属于 0 类还是 1 类进行分类。
在降维的特征散列中有多种散列函数选择:f = tanh()
或简单地随机抽样以获得超平面。另一种选择是在数据不是线性可分时使用核函数。这种散列函数/技术是使用内核实现的,一种流行的选择是使用高斯 RBF 作为内核函数。
问题:在论文 1 中,作者使用了在单位间隔上分段线性的非对称帐篷图 https://en.wikipedia.org/wiki/Tent_map 作为传递函数。对我来说,本文中使用 Tent Map 的散列公式看起来类似于散列方程 (1)。如何应用分段线性函数,即应用此地图创建超平面以进行特征散列?
或者我是在混合这两个概念吗?
【问题讨论】:
哎呀,我要么太累了,要么你需要改写你的问题。 【参考方案1】:Feature hashing 需要一个散列函数,这样它才能做……它的散列技巧!
它将散列每张图像,因此您需要一个散列函数来获取图像(即 D 维的特征/向量)并产生单个整数值。
注意:我认为您对第二个单比特输出哈希函数 ξ 感到困惑,w.r.t.结果将是二进制的事实。一旦掌握了初始方法的流程,ξ() 就很容易掌握,因为这只是减少哈希冲突的优化。
现在让我们看看 Tent_map_2 的行为:
如您所见,它是一个实值函数。
它将一个数字作为输入,并给出一个数字作为输出。结果,一个简单的帐篷地图不能散列一个向量(在我们的例子中是一个图像)。有很多方法可以增加帐篷地图来处理向量,最简单的方法是:
实现一个帐篷地图功能,例如tentMap(),它将实现帐篷地图的逻辑。您可以将 Tent Map 的返回值小于 0.5 视为 0,其余(即 >= 0.5)视为 1,但如果您愿意,您可以做更复杂的事情。
现在对于图像,您可以这样做:
def tentMapVector(image):
results = []
for i in image:
results.append(tentMap(i))
# now 'results' contains D integers
# it needs to be hashed to a single integer
# you could treat 'results' as a string and
# use one of the numerous hash function to hash that string
return hashString(results)
你准备好了! tentMapVector()
应该在 Wikipedia 的实现中替换 hash()
。您可能想阅读它的example,真的很有帮助。
Feature 似乎不需要降维,它应该在没有降维的情况下工作,但是当您将数据留在高维空间中时,即通常是图像的情况,您应该尝试减小尺寸(例如从 256 到 128)。
例如,您可以使用来自scikit-learn 的 PCA() 或任何其他库。
【讨论】:
感谢您的回答,但很多事情还不清楚。 (1) 请您详细说明您的最后一句话,“既然您希望您的特征映射到 0 或 1,您可以将小于 0.5 的值视为 0,将其余(即 >= 0.5)的值视为 1。”从数学上讲,如果图像的输入模式是 R^D 中的 x ,那么我如何应用 Tent Map 将特征映射到 0 和 1 ? (2) 您链接的论文将 Tent Map 应用于密码学,而特征哈希不同 - 涉及 2 个步骤 (a) 降维 (b) 将 (a) 的结果映射到 0,1。 我很难描绘/连接帐篷地图以进行特征散列。将非常感谢您的更多见解。感谢您的努力。 @Sm1 原谅我回答的时间太长,但我的女朋友正在向我倾诉,你知道......无论如何!很高兴给我一个很好的反馈,你看我真的不知道答案,但我正在开车和你一起发现它,这就是为什么我赞成你的问题。所以这是我从我的经验中知道的:图像是一个 D 维向量,在 R^D 中。我们想对那个向量应用降维,然后得到降低了维度的向量并将其提供给 Tent 地图,对吧?但是,我不确定为什么我们希望帐篷地图的结果是二进制的?我在 Feature Hash Wikipe 中没有看到这一点 @Sm1 你也可以阅读我链接到的***页面吗?我的意思是这就是我的感觉,但如果你愿意,我们最终可以专门成为二进制代码。你关于帐篷地图输入的句子似乎是“想要的”,据我了解,它接受一个数字并输出一个数字。你同意吗?我不明白你的最后一句话。 这是一个不同的问题@Sm1,我想你问的是如何使用帐篷地图进行特征散列,对吧?如果是这样,请告诉我,以便我可以更新我的答案! ;)以上是关于关于密码学与特征中的哈希函数应用的主要内容,如果未能解决你的问题,请参考以下文章