Изучаем нейронные сети: как создать нейросеть за 4 шага?
В этой статье вы получите ряд разъяснений и рекомендаций, которые пригодятся вам при создании нейронной сети. Также будут предоставлены полезные ссылки для самостоятельного изучения.
Шаг 1. Поговорим о нейронах и методах прямого распространения
Прежде чем начать разговор о нейросетях и о том, как создать и обучить нейросеть, нужно сначала немного разобраться с тем, что такое один нейрон. Здесь всё достаточно просто: нейрон принимает несколько значений, а возвращает только одно, что значит, что он похож на функцию.
Теперь для наилучшего понимания давайте посмотрим на картинку ниже. Там показан круг — это искусственный нейрон. Что он делает? Он получает 5, а возвращает 1. Под вводом понимается сумма трёх синапсов, соединённых с нейроном (это три стрелки слева).
В левой части у нас находятся два входных значения (выделены зелёным цветом) и одно смещение (выделено коричневым цветом).
Входные данные могут быть численными представлениями 2-х различных свойств. К примеру, когда создаёшь спам-фильтр, они могут означать наличие больше чем одного слова, написанного прописными буквами, и наличие слова «Виагра».
Также следует понимать, что входные значения умножаются на собственные так называемые «веса» — в нашем случае это 7 и 3 (выделены синим).
Позже полученные значения складываются со смещением, и получается число 5, которое у нас выделено красным. Именно так и выглядит ввод искусственного нейрона.
Идём далее. Нейрон выполняет вычисление, выдавая выходное значение. Мы получили 1, так как именно единице равно округлённое значение сигмоиды в точке 5. Если, опять же, вспомнить про спам-фильтр, то факт вывода единицы означал бы, что текст был помечен нейроном в качестве спама.
Объединив эти нейроны, вы получите в итоге прямо распространяющуюся нейросеть. В ней процесс идёт от ввода к выводу и через нейроны, которые соединены синапсами.
Для наилучшего понимания этого процесса посмотрите серию видео на английском, от Welch Labs.
Шаг 2. Сигмоида
Прежде чем приступить к следующему шагу, было бы неплохо ознакомиться с 4-й неделей курса по Machine Learning от Coursera — она как раз посвящена нейросетям и помогла бы вам разобраться в особенностях и принципах их работы. Да, этот курс слишком сильно углубляется в математику, плюс основан на Octave, хотя многие предпочитают язык программирования Python. Но все же там можно почерпнуть много полезных знаний.
Вернёмся к нашей сигмоиде. Дело в том, что она фигурирует во многих аспектах нейронных сетей. Её описание вы можете посмотреть, к примеру, здесь. Но на одной теории, сами понимаете, далеко не уедешь. Именно поэтому для наилучшего понимания следует создавать её самостоятельно. Чтобы это сделать, необходимо написать реализацию алгоритма логистической регрессии, использующего сигмоиду.
Если честно, это может занять целый день, причём результат будет далёк от идеального. Вот, к примеру, как с этим справился Per Harald Borgen, англоязычная статья которого стала основой материала, который вы сейчас читаете. Но главное здесь не в том, чтобы сделать всё идеально, а в том, чтобы разобраться, как всё работает. И понять, как устроена сигмоида.
Шаг 3. О методе обратного распространения ошибки
Понимание принципа работы нейронной сети, начиная от ввода, заканчивая выводом, вряд ли вызовет у вас затруднения. Намного тяжелее понять, каким образом нейронная сеть обучается, используя для этого наборы данных. Один из применяемых принципов называют методом обратного распространения ошибки.
Если говорить коротко, то вы оцениваете, насколько сильно ошиблась нейросеть, а потом изменяете вес входных значений (на первой картинке это синие числа).
Собственно говоря, процесс движется от конца к началу, ведь мы начинаем с конца сети и смотрим, как сильно догадка сети отклоняется от истины. Затем мы двигаемся назад, изменяя веса, и так до тех пор, пока не дойдём до ввода. А для вычисления всего этого вручную вам потребуется знание математического анализа. Однако вы можете на заморачиваться и использовать библиотеки, которые всё посчитают за вас.
Если вас интересуют англоязычные источники, которые помогут разобраться в данном методе, то хорошо известны следующие: • A Step by Step Backpropagation Example; • Hacker’s guide to Neural Networks; • Using neural nets to recognize handwritten digits.
Однако учтите, что читая первые 2 статьи, вам обязательно придётся кодить самому, что поможет в дальнейшем. Избегать этого не рекомендуется, ведь в нейронных сетях невозможно разобраться, не практикуя. В 3-й статье находится материал размером с книгу, больше напоминающую энциклопедию. Зато в ней даны подробные разъяснения важнейших принципов работы нейронных сетей. К примеру, вы изучите такие определения, как функция стоимости, градиентный спуск, функция активации, скрытые слои, выходные и входные слои и т. д. После освоения такого материала вы достигнете более высокого уровня понимания.
Шаг 4. Создание своей нейросети. Как написать нейронную сеть? Пишем и обучаем
Читая разные статьи и руководства, вы так или иначе будете создавать небольшие нейросети. Сегодня сказано и рассказано много о соответствующих моделях, задачах и способах их решения. Некоторые статьи являются сложными, а некоторые простыми, понятными для любого человека. И все это очень эффективно для процесса обучения.
Пример очень полезной информации можно найти здесь. В этом материале удивительное количество знаний сжато до 11 строк кода.
Прочитав вышеупомянутую статью и реализовав приведённые в ней примеры самостоятельно, вы закроете много пробелов в знаниях, а когда всё получится, почувствуете себя суперчеловеком)).
Что ещё? Ну, при реализации многих примеров используются векторные вычисления, поэтому понимание линейной алгебры тоже потребуется. Если же интересуют нейронные сети посложнее, то вот вам новое руководство.
С его помощью вы сможете как написать свою нейросеть, так и поэкспериментировать с уже созданными. Довольно забавным бывает найти нужный набор данных, а потом проверить разные предположения с помощью нескольких нейросетей.
Кстати, если интересуют хорошие наборы данных, вы можете посетить этот сайт.
Чем раньше вы начнёте свои эксперименты, тем лучше. Будет кстати и изучение Python-библиотек для программирования нейронных сетей: Theano, Lasagne, Nolearn. А ещё лучше — попробовать записаться на курс «Нейронные сети на Python» в OTUS. С его помощью вы освоите архитектуру нейронных сетей, узнаете методы их обучения и общие особенности реализации. Остается лишь решиться и приняться за дело.
По материалам статьи «Learning How To Code Neural Networks».