В наши дни люди в Интернете более или менее знакомы с термином CAPTCHA, который означает C полностью A с автоматическим вводом P ublic« Пройдите тест , чтобы отличить компьютер и человек от А '. Основная цель CAPTCHA - предотвратить спам от ботов. В начале 2000 года CAPTCHA представляла собой простой текст с шумами, возможно, с каким-то фантастическим цветом, чтобы компьютер было труднее его распознать. На решение CAPTCHA уходит в среднем 10-15 секунд.

Потратить пару секунд на авторизацию - звучит неплохо, пока не станет немного нелогичным.

Некоторые из них действительно заставляют нас сомневаться в себе.

Очевидно, что мы жертвуем удобством использования ради безопасности, но давайте признаем, что эта слишком сложная для пользователя CAPTCHA на самом деле никоим образом не помогает. Более того, компьютер уже может их легко решить!

Примечание: эта статья будет разделена на две части. В этой первой части мы рассмотрим базовое определение CAPTCHA, то, как машинное обучение может легко решить эту проблему, интуицию на CNN, пример подхода, который мы будем использовать. Во второй части будет реализация на Python с использованием Tensorflow и Keras, экспериментальные результаты и заключение о том, остается ли использование текстовой CAPTCHA отличной идеей или нет.

Машинное обучение - один из способов справиться с CAPTCHA

Независимо от того, насколько сильно CAPTCHA развивается, всегда найдутся люди, которые придумают инструмент, чтобы сломать ее. Одним из самых известных методов является использование подхода машинного обучения, и сегодня мы сосредоточимся на особом типе нейронной сети, называемом сверточными нейронными сетями (CNN).

Мне нравится видеть в CNN имитацию мозга. Это работает аналогично тому, как наш мозг может распознавать и отличать один объект от другого. Для большей интуиции, учитывая эту картинку ниже, вы можете сразу сказать, что эти два животных не одного вида! но как?

Это связано с тем, что мы видели, возможно, миллион фотографий собак и кошек, а также видели их в реальной жизни. Когда мы были детьми, нам говорили, что они другие. Затем наш мозг постепенно начинает понимать разницу между этими двумя вещами. Следовательно, это дает нам возможность правильно распознать, кто из них собака, а кто кошка.

Используя ту же концепцию, описанную выше, мы собираемся сделать то же самое для нашей нейронной сети, и это именно то, что делают CNN. Ну, не совсем то же самое, потому что наш компьютер не воспринимает картинку так, как мы. Они видят группы чисел, которые указывают интенсивность цвета на этом конкретном пикселе. Если у нас есть изображение в формате RGB, один из способов отображения их в виде массива - [R, G, B, A]

Слои в CNN являются особенными, поскольку они организованы по трем измерениям: ширине, высоте и глубине. Этот факт позволяет нам передавать изображение в сеть. Последний слой, который является полностью связанным слоем, будет сообщать нам то, что он предсказывает.

Подача картины на CNN. Он будет использовать фильтр и объединение для извлечения функций путем математического применения к матрицам изображений. Это та часть, где наша машина изучает компоненты этого изображения, начиная с чего-то простого, например, обнаружения краев, и чтобы иметь возможность уловить шаблон, который мы ищем.

Фильтр - это просто еще одна матрица, которую мы придумали, мы будем выполнять поэлементное умножение на матрицы изображений. Применяя это к изображению, мы выполнили свертку, объединив две информации в одну.

Объединение - это когда мы хотим уменьшить разрешение входного представления, выбирая Макс или Среднее из каждой подматрицы в матрицах . Это поможет нам уменьшить размерность данных и предотвратить переобучение. Поскольку мы делаем данные более абстрактными.

Решение CAPTCHA

Теперь, когда у нас есть базовое понимание того, что делают CNN, мы воспользуемся этим методом для разбивки CAPTCHA и посмотрим, насколько точная машина может решить эту проблему.

Давайте еще раз взглянем на CAPTCHA. Для простоты предположим, что он представляет собой комбинацию из 26 английских алфавитов и числовых чисел 0–9. Мы собираемся установить длину нашей CAPTCHA равной 6.

Мы собираемся немного очистить наши данные перед подачей в нашу сеть, разбив их на отдельных символов, используя перекрывающиеся окна или обнаружение краев, чтобы найти символ. Это потому, что если бы мы позволили CNN предсказывать комбинацию из 26 английских алфавитов (как в верхнем, так и в нижнем регистре) и чисел от 0 до 9, то у нас было бы 62! х 62! х 62! х 62! х 62! х 62! возможные выходы. Наша бедная машина задохнется насмерть.

Что касается шума, мы собираемся оставить все как есть, потому что мы действительно хотим проверить, насколько точна наша машина.

Теперь, когда у нас есть рецепт, давайте подключим изображение CAPTCHA ... подождите, мы пока не можем этого сделать! Сначала мы должны обучить нашу сеть!

Да, без обучения наша сеть - не что иное, как ребенок! В этом сценарии мы собираемся использовать знаменитый MNIST, который представляет собой рукописную цифру, и EMNIST, рукописные алфавиты для обучения нашей сети.

После того, как мы выбрали желаемый набор данных для обучения, нам понадобится модель. В настоящее время большинство людей используют предварительно обученную модель и настраивают сети. Это называется трансферным обучением. Однако иногда бывает излишним, когда то, что вы делаете, не очень хорошо отражается на предварительно обученной модели, поскольку в этом случае мы просто пытаемся предсказать числа и буквы, а не животных или лица.

Это будет все для этой части. Я считаю, что мы хорошо понимаем, как выглядит наш подход, следующим будет реализация CNN на Python с использованием Tensorflow и Keras. Мы рассмотрим пошагово и сделаем вывод, действительно ли использование текстовой CAPTCHA в 2018 году помогает предотвратить рассылку спама. Спасибо, что дали шанс этой статье!