Как научиться делать нейросети

0
24

С учителем и без него: как обучаются нейросети

Переходим к обучению

Под искусственной нейронной сетью (ИНС) понимают математическую модель (включая ее программное либо аппаратное воплощение), которая построена и работает по принципу функционирования биологических нейросетей — речь идет о нейронных сетях нервных клеток живых организмов.

Человеческий мозг состоит из ста миллиардов клеток, которые называются нейронами. Они соединены между собой синапсами. Если через синапсы к нейрону придет достаточное количество нервных импульсов, этот нейрон сработает и передаст нервный импульс дальше. Этот процесс лежит в основе нашего мышления. Мы можем смоделировать это явление, создав нейронную сеть с помощью компьютера. Нам не нужно воссоздавать все сложные биологические процессы, которые происходят в человеческом мозге на молекулярном уровне, нам достаточно знать, что происходит на более высоких уровнях. Для этого мы используем математический инструмент — матрицы, которые представляют собой таблицы чисел. Чтобы сделать все как можно проще, мы смоделируем только один нейрон, к которому поступает входная информация из трех источников и есть только один выход. 3 входных и 1 выходной сигнал Наша задача — научить нейронную сеть решать задачу, которая изображена в ниже. Первые четыре примера будут нашим тренировочным набором. Получилось ли у вас увидеть закономерность? Что должно быть на месте вопросительного знака — 0 или 1?

Лучше обучение. Искусственные нейронные сети обучаются примерно по тому же принципу, что живые существа. Когда человек часто повторяет одни и те же действия, он учится: ездить на велосипеде, рисовать или набирать текст. Это происходит, потому что веса между нейронами в мозгу меняются: нервные клетки наращивают новые связи, по-новому начинают воспринимать сигналы и правильнее их передают. Нейронная сеть тоже изменяет веса при обучении — чем оно объемнее, тем сильнее она «запомнит» какую-то закономерность.

Только ленивый не слышал сегодня о существовании и разработке нейронных сетей и такой сфере, как машинное обучение. Для некоторых создание нейросети кажется чем-то очень запутанным, однако на самом деле они создаются не так уж и сложно. Как же их делают? Давайте попробуем самостоятельно создать нейросеть прямого распространения, которую еще называют многослойным перцептроном. В процессе работы будем использовать лишь циклы, массивы и условные операторы. Что означает этот набор данных? Только то, что нам подойдет любой язык программирования, поддерживающий вышеперечисленные возможности. Если же у языка есть библиотеки для векторных и матричных вычислений (вспоминаем NumPy в Python), то реализация с их помощью займет совсем немного времени. Но мы не ищем легких путей и воспользуемся C#, причем полученный код по своей сути будет почти аналогичным и для прочих языков программирования.

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

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

Результаты

Дабы найти значение ошибки E, надо найти сумму квадратов разности векторных значений, которые были выданы нейронной сетью в виде ответа, а также вектора, который ожидается увидеть при обучении. Еще надо будет найти дельту каждого слоя и учесть, что для последнего слоя дельта будет равняться векторной разности фактического и ожидаемого результатов, покомпонентно умноженной на векторное значение производных последнего слоя:

Больше нейронов. В нашей тренировочной нейросети только один нейрон. Но если нейронов будет больше — каждый из них сможет по-своему реагировать на входные данные, соответственно, на следующие нейроны будут приходить данные с разных синапсов. Значит — больше вариативность, «подумать» и передать сигнал дальше может не один нейрон, а несколько. Можно менять и формулу передачи, и связи между нейронами — так получаются разные виды нейронных сетей.

Один нейрон может превратить в одну точку входной вектор, но по условию мы желаем получить несколько точек, т. к. выходное Y способно иметь произвольную размерность, которая определяется лишь ситуацией (один выход для XOR, десять выходов, чтобы определить принадлежность к одному из десяти классов, и так далее). Каким же образом получить n точек? На деле все просто: для получения n выходных значений, надо задействовать не один нейрон, а n. В результате для каждого элемента выходного Y будет использовано n разных взвешенных сумм от X. В итоге мы придем к следующему соотношению:

Метод обучения с учителем ( supervised learning) аналогичен получению знаний в школе, где нейросеть выступает в качестве ученика, а человек — в роли преподавателя. Роль учителя заключается в том, чтобы подать на вход модели исходные данные и их «расшифровку » . По аналогии с математическими задачами это будет «вопрос » и «правильный «ответ » (метка). Например, при обучении задаче классификации изображений каждой отдельной картинке будет присвоена метка, означающая класс изображения (например, кошка или собака на фото). Так происходит настройка параметров для минимизации ошибок между собственными предположениями и « правильными ответами» (метками). Сопоставляя их из раза в раз, нейронная сеть б удет самос тоятельно обучаться отвечать и на последующие запросы правильно уже без помощи человека.

ЧИТАТЬ ТАКЖЕ:  Прикладная система искусственного интеллекта в которой база

Но нейронные сети — все же не человеческий мозг. Мозг сложнее, объемнее, в нем намного больше нейронов, чем в любой компьютерной нейросети. Поэтому чрезмерное обучение может сделать хуже. Например, переобученная нейросеть может начать распознавать предметы там, где их нет — так люди иногда видят лица в фарах машин и принимают пакеты за котов. А в случае с искусственной нейронной сетью такой эффект еще явнее и заметнее. Если же учить нейросеть на нескольких разнородных данных, скажем, сначала обучить считать числа, а потом — распознавать лица, она просто сломается и начнет работать непредсказуемо. Для таких задач нужны разные нейросети, разные структуры и связи.

Обучение с подкреплением (reinforcement learning) используется в ситуациях, когда нужно обучить нейро сеть задаче с четкими результатами на выходе. Этот формат подготовки ИИ-моделей проходит через взаимодействие с окружающей средой и работает следующим образом: система получает на вход некоторые неразмеченные данные и обрабатывает их случайным образом, в ответ на что получает положительные или отрицательные отзывы, в зависимости от результатов работы. Для обучения с подкреплением не нужен полный контроль человека или заранее и полностью размеченный набор данных — важно сформулировать задачу и оценить те решения, которые предпримет система.

Формула корректировки весов

Так часто происходит в реальных задачах, например, при распознавании предметов. Не у всех из них есть жесткие критерии: скажем, гипертрофированного мультяшного персонажа мы по-прежнему различаем как человека, хотя у него совсем другие пропорции. Нейронную сеть сложно научить похожему — но современные системы могут справиться и с этим.

Еще есть, например, метод обратного распространения ошибки — градиентный алгоритм для многослойных нейросетей. Сигналы ошибки, рассчитанные с помощью градиента, распространяются от выхода нейронной сети к входу, то есть идут не в прямом, а в обратном направлении.

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

Пусть у нас уже есть нейронная сеть, но ведь ее ответы являются случайными, то есть наша нейросеть не обучена. Сейчас она способна лишь по входному вектору input выдавать случайный ответ, но нам нужны ответы, которые удовлетворяют конкретной поставленной задаче. Дабы этого достичь, сеть надо обучить. Здесь потребуется база тренировочных примеров и множество пар X — Y, на которых и будет происходить обучение, причем с использованием известного алгоритма обратного распространения ошибки.

Давайте поймем почему формула имеет такой вид. Сначала нам нужно учесть то, что мы хотим скорректировать вес пропорционально размеру ошибки. Далее ошибка умножается на значение, поданное на вход нейрона, что, в нашем случае, 0 или 1. Если на вход был подан 0, то вес не корректируется. И в конце выражение умножается на градиент сигмоиды. Разберемся в последнем шаге по порядку:

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

Машинное обучение без учителя (unsupervised learning) — менее популярный формат развития навыков нейросетей . Из названия понятно, что оно предполагает самостоятельное совершенствование модели. Как это работает? На вход модели подаются неразмеченные данные и система без чьей-либо помощи ищет в них закономерности. Этот формат отличается от предыдущего тем, что модели заранее не известен «правильный ответ» и его нужно найти. Для поиска следует проанализировать все данные и обнаружить в них общие скрытые структуры или паттерны для будущей классификации, которую она проводит без явного руководства. Модель, натренированная таким образом, легко справится с задачей распределения тысяч статей по тематике в зависимости, например, от упоминаемых ключевых слов.

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

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь