2

Я только начал изучать хеширование функций, поэтому мне нужна помощь в понимании, могу ли я применить функцию хэша, выраженную математически как https://en.wikipedia.org/wiki/Tent_map.О применении хэш-функций в криптографии против функции

и один из таких приложений карты Палатка в криптографию - Бумага 1: Реализация хэш-функции На основе На Neural Cryptography 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() или просто случайная выборка для получения гиперплоскостей. Другой выбор - использовать функции ядра, когда данные не являются линейно разделяемыми. Такая хэширующая функция/метод реализуется с использованием ядер, и одним из популярных способов является использование Gaussian RBF в качестве функции ядра.


  • Вопрос: В статье 1, авторы использовали Asymmetric Палатка Карта https://en.wikipedia.org/wiki/Tent_map, кусочно-линейную на единичном интервале в качестве передаточной функции. Для меня формулировка хеширования в этой статье с использованием карты теней выглядит аналогично хэш-уравнению (1). Как я могу применить кусочно-линейную функцию, т. Е. Применить это отображение для создания гиперплоскостей, чтобы сделать хэширование функций?

    Или я смешиваю два понятия?

+0

Argh, я слишком устал, или вам нужно перефразировать ваш вопрос. – gsamaras

ответ

2

Feature hashing нуждается в хэш-функцию, так что он будет в состоянии сделать ... его хеширования трюк!

Он будет отображать каждое изображение, поэтому вы хотите использовать функцию хеширования, которая будет принимать изображение (т. Е. Элемент/вектор измерений D) и создать одно целое значение.


Примечание: Я думаю, вы путать с второй одноразрядной выход хэш-функции £, w.r.t. к тому, что результат будет двоичным. ξ() легко понять, как только вы получите поток начального подхода, так как это просто оптимизация для уменьшения хеш-коллизий.


Теперь давайте посмотрим на то, как ведет себя Tent_map_2:

enter image description here

, который, как вы видите, является вещественную функцию.

Он принимает один номер в качестве входного сигнала и дает один номер в качестве выхода. В результате наивная карта теней не может хешировать вектор (изображение в нашем случае).Существует множество способов увеличить карту теней для обработки вектора, причем наиболее простым является:

Внедрение функции карты теней, например. tentMap(), который будет реализовывать логику карты теней. Вы можете обрабатывать возвращаемые значения карты теней, которые меньше 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() должен заменить hash() в реализации Википедии. Вы можете прочитать его example, очень полезно.


Это не похоже, Feature требует снижения размерности, она должна работу без снижения, но когда вы данные оставляют в высоком пространстве, которое, как правило, в случае с изображениями, вы должны попытаться уменьшить размеры (например, от 256 до 128).

Вы можете, например, использовать PCA() от scikit-learn или любую другую библиотеку.

+0

Спасибо за ваш ответ, но многие вещи не ясны. (1) Не могли бы вы рассказать о своем последнем предложении: «Поскольку вы хотите, чтобы ваши функции отображались в 0 или 1, вы могли бы обрабатывать значения, которые меньше 0,5, равно 0, а остальные (то есть> = 0,5) равны 1." Математически, если входной шаблон изображения равен x в R^D, то как я могу применить карту теней для сопоставления функций с 0 и 1? (2) Документы, которые вы связываете, применяют карту теней для криптографии, тогда как хеширование функций различно - включает в себя 2 шага (a) уменьшение размера (b) отображает результат (a) в {0,1}. – Sm1

+0

У меня трудное время для картирования/подключения карты теней для хэширования функций. Будем действительно ценить больше информации от вас. Спасибо за ваши усилия. – Sm1

+0

@ Sm1 простите меня за то, что я слишком долго отвечал, но моя девушка сбрасывает меня, и вы знаете ... Во всяком случае! Рад дать мне хорошую обратную связь, вы видите, что я действительно не знаю ответ наизусть, но я еду, чтобы открыть его с вами, поэтому я поддержал ваш вопрос. Итак, вот что я знаю по моему опыту: изображение является D-мерным вектором в R^D. Мы хотим применить уменьшение размерности к этому вектору, а затем получить dim-reduced вектор и передать его на карту палатки, правильно? Однако я не уверен, почему мы хотим, чтобы результат карты теней был двоичным? Я не вижу этого в Feature Hash Wikipe – gsamaras