Нейросеть
Искусственная нейросеть (нейронная сеть или нейросеть) — это программа, которая повторяет модель человеческих нейронных связей. На их основе создают обучаемые программы, которые можно научить распознавать или генерировать контент.
Освойте профессию «Data Scientist»
Принцип действия нейросети не похож на классическую программу. Такой сети не дают четкого алгоритма: ее обучают, чтобы она могла самостоятельно выполнять ту или иную задачу. В результате деятельность программы становится менее предсказуемой, но более вариативной и даже творческой.
Благодаря такому подходу современные мощные нейросети умеют рисовать картины, писать стихи и отвечать на сложные вопросы. Они используются в огромном количестве программных продуктов: от роботов-помощников до сложных медицинских систем диагностики.
Профессия / 24 месяца
Data Scientist
Дата-сайентисты решают поистине амбициозные задачи. Научитесь создавать искусственный интеллект, обучать нейронные сети, менять мир и при этом хорошо зарабатывать. Программа рассчитана на новичков и плавно введет вас в Data Science.
Где применяют нейросети и кто с ними работает
Нейронными сетями занимаются специалисты по машинному обучению. Они не пишут программы, основанные на алгоритмах: вместо этого они создают модель и обучают ее, а потом тестируют, насколько хорошо она работает. Есть отдельные компании, специализирующиеся на разработке нейросетей, а есть продуктовые отделы крупных IT-организаций, например Google.
Готовыми нейросетями могут пользоваться специалисты разных сфер. Сейчас нейронные сети можно встретить в любых областях:
- поисковые системы;
- анализ данных, классификация и статистика;
- подсчеты и прогнозирование;
- создание контента;
- системы распознавания лиц;
- монтаж видеороликов и т.д.
В последние годы с развитием нейронных сетей их стали использовать в том числе в SMM. Уже сейчас есть блоги, где изображения и другой контент частично генерируются нейросетями. Применяют их и в развлекательных целях: различные сервисы «перерисовывают» лица людей, делают из них картины, персонажей мультфильмов, вставляют лица в отрывки из кино. Все это возможно благодаря машинному обучению и нейросетям.
Например, блогер Илона Нейро — гламурная девушка, которая на самом деле является нейросетью. Даже двумя: одна генерирует тексты постов, другая создает фотографии Илоны на основе женской версии лица Илона Маска.
Читайте также Востребованные IT-профессии 2023 года: на кого учиться онлайн
Три задачи нейронных сетей
Сейчас принято разделять задачи, которые решают нейронные сети, на три категории:
Классификация Такие нейросети берут заданные данные и классифицируют их. Например, могут догадаться, к какому жанру относится текст, или оценить платежеспособность человека по его банковскому профилю Предсказание Эти сети делают какие-то выводы на основе заданной информации. Сюда можно отнести как предсказание будущих доходов по текущим данным, так и «дорисовывание» картинки Распознавание Часто применяемая задача — распознавать те или иные объекты. Такие нейросети используются в умных камерах, при наложении фотофильтров, в камерах видеонаблюдения и других подобных программах и устройствах.
Некоторые задачи объединяют в себе несколько типов. Например, популярная нейронная сеть Midjourney создает рисунки на основе текстового описания — это и распознавание, и в какой-то степени предсказание.
Начните карьеру в Data Science.
Онлайн-магистратура МФТИ с практикой на реальных проектах
Как устроена нейросеть
В основе искусственной нейронной сети лежит устройство нервной ткани человека. Она состоит из нервных клеток, связанных между собой длинными отростками. В клетках происходят нервные импульсы, они передаются по отросткам в другие клетки. Таким образом нервная ткань обрабатывает или генерирует информацию. Сами импульсы очень сложно расшифровать: это не понятные человеку данные, а набор слабых электрических токов, которые нейроны воспринимают как информацию.
Нейросеть повторяет этот же принцип, но программно. Нейроны — это программные объекты, внутри которых хранится какая-то формула. Они соединены синапсами — связями, у которых есть веса: некоторые числовые значения. Веса отражают накопленную нейросетью информацию, но сами по себе, в отрыве от сети, не несут информационной ценности.
Признаки. Информация, важная для нейросети, — это какие-то признаки, которые нужны ей для распознавания, генерации или структурирования данных. Можно привести пример из работы человеческого мозга:
- когда мы видим кошку, мы понимаем, что это кошка, по ряду признаков: треугольные уши, большие глаза, четыре лапы, определенные пропорции;
- когда нас просят представить себе дерево, у нас в голове визуализируется картинка. Дерево в нашем разуме может выглядеть по-разному, но у него наверняка будут ствол, ветки и корни, возможно — листья.
Для нейросети это работает примерно так же. Только если усвоенные людьми признаки кодируются в виде слабых электрических импульсов в нервной ткани, то нейросеть хранит их в виде числовых значений.
Интересно то, что конкретные признаки, нужные для узнавания, неизвестны. Мы не можем точно сказать, почему понимаем, что кот — это кот, даже если он нарисован в необычном стиле и не похож на настоящего. У нейросетей так же. Разработчики до конца не знают, какие именно признаки «запомнила» нейросеть, — поэтому даже работающий и протестированный программный продукт может выдавать ошибки. Например, воспринимать человека с ободком в виде кошачьих ушек как кота.
Структура. Нейросеть состоит из искусственных нейронов, которые соединяются между собой. У самой примитивной нейронной сети один слой нейронов, у более сложных — несколько. Часто каждый слой занимается своей задачей, например, один распознает, другой преобразует.
Нейроны могут быть по-разному соединены друг с другом. Различаются и способы передачи данных, и формулы, которые их описывают. Все это уже зависит от типа нейронной сети.
Кроме того, есть входной и выходной слои. Входной принимает информацию и преобразовывает ее, например переводит картинку в матрицу из чисел. Выходной обрабатывает результат и представляет его в понятном человеку виде. Например, результат 0,77827273 он представит как «с точностью в 78% это такой-то предмет».
Нейроны. Нейрон — это простая вычислительная единица. Он не делает чего-то сверхсложного: просто получает на вход информацию, производит над ней какие-то вычисления согласно лежащей в нем формуле и передает дальше по сети.
Нейрон может быть входным, выходным и скрытым, также есть нейроны смещения и контекстные — они различаются функцией и назначением. Основную работу выполняют скрытые нейроны — те, которые расположены на внутренних слоях сети.
Станьте аналитиком данных и получите востребованную специальность
Синапсы. Синапс — это связь между нейронами. У каждого синапса есть веса — числовые коэффициенты, от которых как раз и зависит поведение нейронной сети. В самом начале, при инициализации сети, эти коэффициенты расставляются случайным образом. Но в ходе обучения они меняются и подстраиваются так, чтобы сеть эффективнее решала задачу.
Это опять же свойство, взятое из человеческого мозга. Нейронные связи в нашей нервной системе укрепляются, когда мы что-то выучиваем, — в итоге мы помним и делаем это лучше. Так появляются знания и навыки. У искусственных нейронных сетей так же: просто вместо физического изменения нервной ткани здесь происходит изменение числовых значений.
Веса. Веса — числовые значения внутри синапсов нейронов. Нейросеть подсчитывает их самостоятельно в ходе обучения. Когда нейронная сеть сталкивается в ходе обучения с каким-то признаком, который нужно запомнить, она пересчитывает веса. При этом доподлинно неизвестно, какие именно числовые значения отвечают за те или иные признаки — и как именно признаки в них преобразуются.
Но по какой логике пересчитываются веса, понять можно. В ходе обучения нейросеть анализирует данные, а потом ей дают правильный ответ. Этот ответ для нее — числовое значение. Поэтому она подгоняет веса так, чтобы в своей работе сеть приближалась к эталонному значению. Мы подробнее расскажем об этом процессе ниже, когда поговорим про обучение.
Задача разработчика — создать нейроны, связать между собой и установить правила и формулы для пересчета весов. Кажется, будто это просто, но на самом деле за созданием нейросети лежит огромная работа: модели бывают масштабными и сложными.
Как работает нейронная сеть
- На вход поступает какая-то информация или запрос. Входной слой нейронной сети обрабатывает ее и переводит в понятный машине вид — в числовые наборы. Затем эти наборы передаются нейронам.
- Нейроны по формулам, которые в них заложены, обрабатывают информацию. Как именно реагировать на разные детали этих данных, определяют коэффициенты — их нейросеть разработала при обучении. По сути, эти коэффициенты работают как память: нейросеть «вспоминает», как следует реагировать на похожие кластеры информации с известными ей признаками.
- Данные передаются дальше по нейронной сети, проходит разные слои и типы нейронов. В конечном итоге на последнем слое нейросеть может сделать вывод. На выход подается ее финальная «реакция» на запрос.
Нейросеть — аналог мозга?
Искусственная нейронная сеть — не модель человеческого мозга: даже самые мощные из существующих сетей не могут достигнуть таких мощностей и подобного количества нейронов. В человеческом мозгу огромное количество нервных клеток — десятки миллиардов. В искусственных нейросетях намного меньше нейронов. Для создания нейронной сети, по возможностям равной человеческому мозгу, сейчас нет мощностей.
Но разработки в этом направлении ведутся — правда, пока такие проекты находятся на стадии исследований. И даже с небольшим по сравнению с мозгом количеством нейронов нейросети могут достигать поразительных результатов в обучении. Некоторые даже проходят тест Тьюринга, но с оговоркой: сознания у них нет, просто они хорошо научились имитировать его наличие. Иногда даже человек не всегда способен распознать в своем собеседнике нейронную сеть.
Какими бывают нейросети
Современная классификация нейросетей огромна и насчитывает десятки разных структур, способов связей и формул. Но можно выделить основные несколько типов:
Перцептроны — Это классические нейронные сети, изначально однослойные, позже многослойные. Сейчас используются в основном для вычислений. Сверточные нейронные сети — Это многослойные сети, которые состоят из чередующихся сверточных и субдискретизирующих слоев и предназначены специально для работы с изображениями. Рекуррентные нейронные сети Их особенность в возможности последовательно обрабатывать цепочки данных и «запоминать» предыдущую информацию. Поэтому их применяют для работы с изменяющимися сведениями или длинными цепочками данных, например рукописными текстами. Генеративные нейронные сети Предназначены для создания контента. Иногда используются генеративно-состязательные нейросети — связка из двух сетей, где одна создает контент, а другая оценивает его качество.
Это только четыре примера. В реальности видов нейронных сетей намного больше. При создании модели разработчик сначала обдумывает, какой тип сети подойдет для выбранной задачи, а после этого реализует нейронную сеть с нужной архитектурой.
Как обучают нейросети
Когда нейронная сеть готова и инициализирована, у нее случайные веса — они еще не настроились под нужный результат. Такая нейросеть называется необученной. Ее надо обучить на определенные действия.
Процесс обучения бывает ручным и автоматическим и выглядит обычно так. Нейросети дают на вход разные данные, она анализирует их, а потом ей сообщают, каким должен быть правильный ответ. Сеть устроена так, что будет «стремиться» подогнать веса синапсов, чтобы выдавать верные результаты.
Для эффективного обучения нужно много повторений. Иначе нейронная сеть будет работать неточно — ведь входные данные могут серьезно различаться, а она окажется натренирована только на один возможный вариант. Поэтому обучение проводится в несколько итераций и эпох.
Итерация — это одно прохождение тренировочного сета. Эпоха — это количество полных прохождений всех сетов. Чем больше эпох, тем лучше натренирована нейросеть.
После обучения можно давать нейронной сети входные данные уже без подсказок. Она будет давать ответы на основе весов, которые подсчитала в процессе обучения.
Переобучение и другие ошибки
Обучение не так просто, как кажется. В нейронных сетях есть эффект переобучения: если тренировочных сетов слишком много и они слишком разные, нейросеть «теряется» и перестает эффективно выделять признаки. В результате она может, например, воспринять артефакт графики как чье-то лицо или перепутать мужчину с женщиной. Это происходит из-за размытия весов. И это не единственная ошибка, просто самая известная.
Эффект переобучения наблюдается и у людей — он выражен в явлении апофении, из-за которого люди видят взаимосвязи в случайных наборах информации.
Чтобы не допустить переобучения, специалисты стараются оптимизировать процесс обучения, не давать нейронным сетям слишком масштабных для их структуры задач и грамотно подходить к построению модели.
*Организация, запрещенная на территории РФ
Data Scientist
Дата-сайентисты решают поистине амбициозные задачи. Научитесь создавать искусственный интеллект, обучать нейронные сети, менять мир и при этом хорошо зарабатывать. Программа рассчитана на новичков и плавно введет вас в Data Science.
Статьи по теме:
Нейронные сети, перцептрон
Искусственная нейронная сеть (ИНС) (англ. Artificial neural network (ANN)) — упрощенная модель биологической нейронной сети, представляющая собой совокупность искусственных нейронов, взаимодействующих между собой.
Основные принципы работы нейронных сетей были описаны еще в 1943 году Уорреном Мак-Каллоком и Уолтером Питтсом [1] . В 1957 году нейрофизиолог Фрэнк Розенблатт разработал первую нейронную сеть [2] , а в 2010 году большие объемы данных для обучения открыли возможность использовать нейронные сети для машинного обучения.
На данный момент нейронные сети используются в многочисленных областях машинного обучения и решают проблемы различной сложности.
Структура нейронной сети
Рисунок 2. Схема искусственного нейрона
Хорошим примером биологической нейронной сети является человеческий мозг. Наш мозг — сложнейшая биологическая нейронная сеть, которая принимает информацию от органов чувств и каким-то образом ее обрабатывает (узнавание лиц, возникновение ощущений и т.д.). Мозг же, в свою очередь, состоит из нейронов, взаимодействующих между собой.
Для построения искусственной нейронной сети будем использовать ту же структуру. Как и биологическая нейронная сеть, искусственная состоит из нейронов, взаимодействующих между собой, однако представляет собой упрощенную модель. Так, например, искусственный нейрон, из которых состоит ИНС, имеет намного более простую структуру: у него есть несколько входов, на которых он принимает различные сигналы, преобразует их и передает другим нейронам. Другими словами, искусственный нейрон — это такая функция [math]\mathbb^n \rightarrow \mathbb[/math] , которая преобразует несколько входных параметров в один выходной.
Как видно на рисунке справа, у нейрона есть [math]n[/math] входов [math]x_i[/math] , у каждого из которого есть вес [math]w_i[/math] , на который умножается сигнал, проходящий по связи. После этого взвешенные сигналы [math]x_i \cdot w_i[/math] направляются в сумматор, который аггрегирует все сигналы во взвешенную сумму. Эту сумму также называют [math]net[/math] . Таким образом, [math]net = \sum_^ w_i \cdot x_i = w^T \cdot x[/math] .
Просто так передавать взвешенную сумму [math]net[/math] на выход достаточно бессмысленно — нейрон должен ее как-то обработать и сформировать адекватный выходной сигнал. Для этих целей используют функцию активации, которая преобразует взвешенную сумму в какое-то число, которое и будет являться выходом нейрона. Функция активации обозначается [math]\phi(net)[/math] . Таким образом, выходов искусственного нейрона является [math]\phi(net)[/math] .
Для разных типов нейронов используют самые разные функции активации, но одними из самых популярных являются:
- Функция единичного скачка. Если [math]net \gt threshold[/math] , [math]\phi(net) = 1[/math] , а иначе [math]0[/math] ;
- Сигмоидальная функция. [math]\phi(net) = \frac[/math] , где параметр [math]a[/math] характеризует степень крутизны функции;
- Гиперболический тангенс. [math]\phi(net) = tanh(\frac)[/math] , где параметр [math]a[/math] также определяет степень крутизны графика функции;
- Rectified linear units (ReLU). [math]ReLU(x) = \begin x & x \geq 0 \\ 0 & x \lt 0 \end = \max(x, 0)[/math] .
Виды нейронных сетей
Разобравшись с тем, как устроен нейрон в нейронной сети, осталось понять, как их в этой сети располагать и соединять.
Как правило, в большинстве нейронных сетей есть так называемый входной слой, который выполняет только одну задачу — распределение входных сигналов остальным нейронам. Нейроны этого слоя не производят никаких вычислений. В остальном нейронные сети делятся на основные категории, представленные ниже.
Однослойные нейронные сети
Рисунок 3. Схема однослойной нейронной сети
Однослойная нейронная сеть (англ. Single-layer neural network) — сеть, в которой сигналы от входного слоя сразу подаются на выходной слой, который и преобразует сигнал и сразу же выдает ответ.
Как видно из схемы однослойной нейронной сети, представленной справа, сигналы [math]x_1, x_2, \ldots x_n[/math] поступают на входной слой (который не считается за слой нейронной сети), а затем сигналы распределяются на выходной слой обычных нейронов. На каждом ребре от нейрона входного слоя к нейрону выходного слоя написано число — вес соответствующей связи.
Многослойные нейронные сети
Рисунок 4. Схема многослойной нейронной сети
Многослойная нейронная сеть (англ. Multilayer neural network) — нейронная сеть, состоящая из входного, выходного и расположенного(ых) между ними одного (нескольких) скрытых слоев нейронов.
Помимо входного и выходного слоев эти нейронные сети содержат промежуточные, скрытые слои. Такие сети обладают гораздо большими возможностями, чем однослойные нейронные сети, однако методы обучения нейронов скрытого слоя были разработаны относительно недавно.
Работу скрытых слоев нейронов можно сравнить с работой большого завода. Продукт (выходной сигнал) на заводе собирается по стадиям на станках. После каждого станка получается какой-то промежуточный результат. Скрытые слои тоже преобразуют входные сигналы в некоторые промежуточные результаты.
Сети прямого распространения
Сети прямого распространения (англ. Feedforward neural network) (feedforward сети) — искусственные нейронные сети, в которых сигнал распространяется строго от входного слоя к выходному. В обратном направлении сигнал не распространяется.
Все сети, описанные выше, являлись сетями прямого распространения, как следует из определения. Такие сети широко используются и вполне успешно решают определенный класс задач: прогнозирование, кластеризация и распознавание.
Однако сигнал в нейронных сетях может идти и в обратную сторону.
Сети с обратными связями
Рисунок 5. Схема сети с обратными связями
Сети с обратными связями (англ. Recurrent neural network) — искусственные нейронные сети, в которых выход нейрона может вновь подаваться на его вход. В более общем случае это означает возможность распространения сигнала от выходов к входам.
В сетях прямого распространения выход сети определяется входным сигналом и весовыми коэффициентами при искусственных нейронах. В сетях с обратными связями выходы нейронов могут возвращаться на входы. Это означает, что выход какого-нибудь нейрона определяется не только его весами и входным сигналом, но еще и предыдущими выходами (так как они снова вернулись на входы).
Обучение нейронной сети
Обучение нейронной сети — поиск такого набора весовых коэффициентов, при котором входной сигнал после прохода по сети преобразуется в нужный нам выходной.
Это определение «обучения нейронной сети» соответствует и биологическим нейросетям. Наш мозг состоит из огромного количества связанных друг с другом нейросетей, каждая из которых в отдельности состоит из нейронов одного типа (с одинаковой функцией активации). Наш мозг обучается благодаря изменению синапсов — элементов, которые усиливают или ослабляют входной сигнал.
Если обучать сеть, используя только один входной сигнал, то сеть просто «запомнит правильный ответ», а как только мы подадим немного измененный сигнал, вместо правильного ответа получим бессмыслицу. Мы ждем от сети способности обобщать какие-то признаки и решать задачу на различных входных данных. Именно с этой целью и создаются обучающие выборки.
Обучающая выборка — конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит обучение сети.
После обучения сети, то есть когда сеть выдает корректные результаты для всех входных сигналов из обучающей выборки, ее можно использовать на практике. Однако прежде чем сразу использовать нейронную сеть, обычно производят оценку качества ее работы на так называемой тестовой выборке.
Тестовая выборка — конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит оценка качества работы сети.
Само обучение нейронной сети можно разделить на два подхода: обучение с учителем [на 28.01.19 не создан] и обучение без учителя [на 28.01.19 не создан] . В первом случае веса меняются так, чтобы ответы сети минимально отличались от уже готовых правильных ответов, а во втором случае сеть самостоятельно классифицирует входные сигналы.
Перцептрон
Рисунок 6. Схема перцептрона
Перцептрон (англ. Perceptron) — простейший вид нейронных сетей. В основе лежит математическая модель восприятия информации мозгом, состоящая из сенсоров, ассоциативных и реагирующих элементов.
История
Идею перцептрона предложил нейрофизиолог Фрэнк Розенблатт. Он предложил схему устройства, моделирующего процесс человеческого восприятия, и назвал его «перцептроном» (от латинского perceptio — восприятие). В 1960 году Розенблатт представил первый нейрокомпьютер — «Марк-1», который был способен распознавать некоторые буквы английского алфавита.
Таким образом перцептрон является одной из первых моделей нейросетей, а «Марк-1» — первым в мире нейрокомпьютером.
Описание
В основе перцептрона лежит математическая модель восприятия информации мозгом. Разные исследователи по-разному его определяют. В самом общем своем виде (как его описывал Розенблатт) он представляет систему из элементов трех разных типов: сенсоров, ассоциативных элементов и реагирующих элементов.
Принцип работы перцептрона следующий:
- Первыми в работу включаются S-элементы. Они могут находиться либо в состоянии покоя (сигнал равен 0), либо в состоянии возбуждения (сигнал равен 1);
- Далее сигналы от S-элементов передаются A-элементам по так называемым S-A связям. Эти связи могут иметь веса, равные только -1, 0 или 1;
- Затем сигналы от сенсорных элементов, прошедших по S-A связям, попадают в A-элементы, которые еще называют ассоциативными элементами;
- Одному A-элементу может соответствовать несколько S-элементов;
- Если сигналы, поступившие на A-элемент, в совокупности превышают некоторый его порог [math]\theta[/math] , то этот A-элемент возбуждается и выдает сигнал, равный 1;
- В противном случае (сигнал от S-элементов не превысил порога A-элемента), генерируется нулевой сигнал;
- Далее сигналы, которые произвели возбужденные A-элементы, направляются к сумматору (R-элемент), действие которого нам уже известно. Однако, чтобы добраться до R-элемента, они проходят по A-R связям, у которых тоже есть веса (которые уже могут принимать любые значения, в отличие от S-A связей);
- R-элемент складывает друг с другом взвешенные сигналы от A-элементов, а затем
- если превышен определенный порог, генерирует выходной сигнал, равный 1;
- eсли порог не превышен, то выход перцептрона равен -1.
Для элементов перцептрона используют следующие названия:
- S-элементы называют сенсорами;
- A-элементы называют ассоциативными;
- R-элементы называют реагирующими.
Классификация перцептронов
Рисунок 7. Схема однослойного перцептрона
Перцептрон с одним скрытым слоем (элементарный перцептрон, англ. elementary perceptron) — перцептрон, у которого имеется только по одному слою S, A и R элементов.
Однослойный персептрон (англ. Single-layer perceptron) — перцептрон, каждый S-элемент которого однозначно соответствует одному А-элементу, S-A связи всегда имеют вес 1, а порог любого А-элемента равен 1. Часть однослойного персептрона соответствует модели искусственного нейрона.
Его ключевая особенность состоит в том, что каждый S-элемент однозначно соответствует одному A-элементу, все S-A связи имеют вес, равный +1, а порог A элементов равен 1. Часть однослойного перцептрона, не содержащая входы, соответствует искусственному нейрону, как показано на картинке. Таким образом, однослойный перцептрон — это искусственный нейрон, который на вход принимает только 0 и 1.
Однослойный персептрон также может быть и элементарным персептроном, у которого только по одному слою S,A,R-элементов.
Многослойный перцептрон по Розенблатту (англ. Rosenblatt multilayer perceptron) — перцептрон, который содержит более 1 слоя А-элементов.
Многослойный перцептрон по Румельхарту (англ. Rumelhart multilater perceptron) — частный случай многослойного персептрона по Розенблатту, с двумя особенностями:
- S-A связи могут иметь произвольные веса и обучаться наравне с A-R связями;
- Обучение производится по специальному алгоритму, который называется обучением по методу обратного распространения ошибки.
Обучение перцептрона
Задача обучения перцептрона — подобрать такие [math]w_0, w_1, w_2, \ldots, w_n[/math] , чтобы [math]sign(\sigma(w_0 + w_1 \cdot x_1 + w_2 \cdot x_2 + \ldots + w_n \cdot x_n))[/math] как можно чаще совпадал с [math]y(x)[/math] — значением в обучающей выборке (здесь [math]\sigma[/math] — функция активации). Для удобства, чтобы не тащить за собой свободный член [math]w_0[/math] , добавим в вектор $x$ лишнюю «виртуальную размерность» и будем считать, что [math]x = (1, x_1, x_2, \ldots, x_n)[/math] . Тогда [math]w_0 + w_1 \cdot x_1 + w_2 \cdot x_2 + \ldots + w_n \cdot x_n[/math] можно заменить на [math]w^T \cdot x[/math] .
Чтобы обучать эту функцию, сначала надо выбрать функцию ошибки, которую потом можно оптимизировать градиентным спуском. Число неверно классифицированных примеров не подходит на эту кандидатуру, потому что эта функция кусочно-гладкая, с массой разрывов: она будет принимать только целые значения и резко меняться при переходе от одного числа неверно классифицированных примеров к другому. Поэтому использовать будем другую функцию, так называемый критерий перцептрона: [math]E_P(w) = -\sum_ y(x)(\sigma(w^T \cdot x))[/math] , где [math]M[/math] — множество примеров, которые перцептрон с весами [math]w[/math] классифицирует неправильно.
Иначе говоря, мы минимизируем суммарное отклонение наших ответов от правильных, но только в неправильную сторону; верный ответ ничего не вносит в функцию ошибки. Умножение на [math]y(x)[/math] здесь нужно для того, чтобы знак произведения всегда получался отрицательным: если правильный ответ −1, значит, перцептрон выдал положительное число (иначе бы ответ был верным), и наоборот. В результате у нас получилась кусочно-линейная функция, дифференцируемая почти везде, а этого вполне достаточно.
Теперь [math]E_P(w)[/math] можно оптимизировать градиентным спуском. На очередном шаге получаем: [math]w^ = w^ − \eta\triangledown_w E_P(w)[/math] .
Алгоритм такой — мы последовательно проходим примеры [math]x_1, x_2, \ldots[/math] из обучающего множества, и для каждого [math]x_n[/math] :
- если он классифицирован правильно, не меняем ничего;
- а если неправильно, прибавляем [math]\eta \triangledown_w E_P(w)[/math] .
Ошибка на примере [math]x_n[/math] при этом, очевидно, уменьшается, но, конечно, совершенно никто не гарантирует, что вместе с тем не увеличится ошибка от других примеров. Это правило обновления весов так и называется — правило обучения перцептрона, и это было основной математической идеей работы Розенблатта.
Применение
- Решение задач классификации, если объекты классификации обладают свойством линейной разделимости;
- Прогнозирование и распознавание образов;
- Управление агентами [3] .
Примеры кода
Пример использования с помощью scikit-learn [4]
Будем классифицировать с помощью перцептрона датасет MNIST [5] .
# Load required libraries from sklearn import datasets from sklearn.preprocessing import StandardScaler from sklearn.linear_model import Perceptron #Single-layer perceptron from sklearn.neural_network import MLPClassifier #Multilayer perceptron from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import numpy as np
# Load the mnist dataset mnist = datasets.load_digits()
# Create our X and y data n_samples = len(mnist.images) X = mnist.images.reshape((n_samples, -1)) y = mnist.target
# Split the data into 70% training data and 30% test data X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# Train the scaler, which standarizes all the features to have mean=0 and unit variance sc = StandardScaler() sc.fit(X_train)
# Apply the scaler to the X training data X_train_std = sc.transform(X_train)
# Apply the SAME scaler to the X test data X_test_std = sc.transform(X_test)
# Create a single-layer perceptron object with the parameters: 40 iterations (epochs) over the data, and a learning rate of 0.1 ppn = Perceptron(n_iter=40, eta0=0.1, random_state=0) # Create a multilayer perceptron object mppn = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(256, 512, 128), random_state=1)
# Train the perceptrons ppn.fit(X_train_std, y_train) mppn.fit(X_train_std, y_train)
# Apply the trained perceptrons on the X data to make predicts for the y test data y_pred = ppn.predict(X_test_std) multi_y_pred = mppn.predict(X_test_std)
# View the accuracies of the model, which is: 1 - (observations predicted wrong / total observations) print('Single-layer perceptron accuracy: %.4f' % accuracy_score(y_test, y_pred)) print('Multilayer perceptron accuracy: %.4f' % accuracy_score(y_test, multi_y_pred))
Single-layer perceptron accuracy: 0.9574 Multilayer perceptron accuracy: 0.9759
Пример использования с помощью tensorflow [6]
Будем классифицировать цифры из того же датасета MNIST.
# Load required libraries import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data
#Load MNIST dataset mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
#placeholder for test data x = tf.placeholder(tf.float32, [None, 784]) #placeholder for weights and bias W = tf.Variable(tf.zeros([784, 10])) b = tf.Variable(tf.zeros([10])) #tensorflow model y = tf.nn.softmax(tf.matmul(x, W) + b) #loss function y_ = tf.placeholder(tf.float32, [None, 10]) cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
#gradient descent step train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) for i in range(1000): batch_xs, batch_ys = mnist.train.next_batch(100) sess.run(train_step, feed_dict=) correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) print("Accuracy: %s" % sess.run(accuracy, feed_dict=))
Рисунок 8.
Правильные метки — 5, 4, 9, 7.
Результат классификации — 6, 6, 4, 4.
Accuracy: 0.9164
На рисунке справа показаны четыре типичных изображения, на которых классификаторы ошибаются. Согласитесь, случаи действительно тяжелые.
Пример на языке Java
Пример классификации с применением weka.classifiers.functions.MultilayerPerceptron [7]
nz.ac.waikato.cms.weka weka-stable 3.8.0
import weka.classifiers.functions.MultilayerPerceptron; import weka.core.converters.CSVLoader; import java.io.File;
// read train & test datasets and build MLP classifier var trainds = new DataSource("etc/train.csv"); var train = trainds.getDataSet(); train.setClassIndex(train.numAttributes() - 1); var testds = new DataSource("etc/test.csv"); var test = testds.getDataSet(); test.setClassIndex(test.numAttributes() - 1); var mlp = new MultilayerPerceptron(); mlp.buildClassifier(train); // Test the model var eTest = new Evaluation(train); eTest.evaluateModel(mlp, test); // Print the result à la Weka explorer: var strSummary = eTest.toSummaryString(); System.out.println(strSummary);
См. также
- Сверточные нейронные сети
- Рекуррентные нейронные сети
- Рекурсивные нейронные сети [на 28.01.19 не создан]
Примечания
- ↑Artificial neuron, Wikipedia
- ↑Perceptron, Wikipedia
- ↑Применения перцептрона, Wikipedia
- ↑Библиотека scikit-learn для Python
- ↑Датасет MNIST
- ↑Библиотека tensorflow для Python
- ↑Weka, MLP
Источники информации
- Сергей Николенко, Артур Кадурин, Екатерина Архангельская. Глубокое обучение. Погружение в мир нейронных сетей. — «Питер», 2018. — С. 93-123.
- Нейронные сети — учебник
Что такое нейросеть: как устроен человеческий мозг «в цифре»
В последние годы нейронные сети прошли путь от простых сортировщиков картинок на смартфонах до помощников в решении глобальных задач в науке. Современные нейросети способны заменить или дополнить работу человека во всех случаях, когда решение нужно принимать на основе предыдущего опыта. «РБК Тренды» разбирался, как устроены и работают нейросети, как их обучают и в каких сферах применяют.
Что такое нейросеть
Нейросеть — это тип машинного обучения, при котором компьютерная программа имитирует работу человеческого мозга. Подобно тому, как нейроны в мозге передают сигналы друг другу, в нейросети информацией обмениваются вычислительные элементы.
Идею нейронных сетей впервые предложили исследователи из Чикагского университета Уоррен Маккалоу и Уолтер Питтс в 1944 году. Первую обучаемую нейросеть в 1957 году продемонстрировал психолог Корнеллского университета Фрэнк Розенблатт. Она была примитивной (одноуровневой).
В 1980-х годах, когда появились более мощные компьютеры для вычислений, исследователи смогли разработать нейросети с двумя и тремя уровнями обучения.
Однако возрождение интереса к нейронным сетям и революция в глубоком обучении произошли лишь в последние годы благодаря индустрии компьютерных игр. Современные игры требуют сложных вычислений для обработки большого числа операций. В итоге производители начали выпускать графические процессоры (GPU), которые объединяют тысячи относительно простых вычислительных ядер на одном чипе. Исследователи вскоре поняли, что архитектура графического процессора очень похожа на архитектуру нейросети.
Современные GPU позволили развивать «глубокое обучение» — повышать глубину слоев нейросети. Именно благодаря ему появились самообучаемые нейросети, которые не требуют специальной настройки, а самостоятельно обрабатывают входящую информацию.
Как работает нейросеть
Каждая нейронная сеть состоит из искусственных нейронов, которые имитируют работу человеческих. Это программные модули или узлы, которые взаимодействуют и обмениваются информацией для решения задачи.
Базовая нейронная сеть содержит три слоя искусственных нейронов:
- входной — обрабатывает информацию извне, анализирует или классифицирует ее и передает на следующий слой;
- скрытый (их может быть несколько) — анализирует выходные данные предыдущего слоя, обрабатывает их и передает на следующий;
- выходной — выдает окончательный результат после обработки всех данных.
Глубокие нейронные сети отличаются тем, что искусственные нейроны в них связаны друг с другом, а каждой такой связи присваивается определенный вес, который отражает ее значимость. Кроме того, связь между нейронами может быть «упреждающей». Это означает, что данные проходят через них только в одном направлении. Такое происходит, если значение «веса» соединения ниже заданного.
При обучении нейронной сети все ее «веса» изначально задаются случайными значениями. Обучающие данные подаются на нижний, или входной, слой. Затем они проходят через последующие слои, пока не достигают выходного. Во время обучения «веса» и пороговые значения постоянно корректируются до тех пор, пока данные обучения не будут постоянно давать одинаковые результаты.
Как устроена примитивная нейросеть (Фото: neuralnet.info)
Эти «веса» помогают определить важность той или иной переменной во входных данных. При прохождении каждого слоя входные данные умножаются на их «веса», а затем суммируются. Если получившееся значение выше заданного порога, то нейрон активируется и передает данные на следующий уровень.
Приведем пример — попросим нейросеть ответить на вопрос, стоит ли заняться серфингом (варианты ответа «да» — 1 и «нет» — 0. Предположим, что на это решение (y-hat) влияют три фактора. Сформулируем их в виде вопросов:
- хорошие ли волны? («да» — 1 и «нет» — 0);
- свободен ли пляж? («да» — 1 и «нет» — 0);
- фиксировались ли в последнее время нападения акул? («да» — 0 и «нет» — 1).
Затем предположим следующее, используя входные данные:
- X1 = 1, так как волны есть;
- X2 = 0, так как на пляже нет толпы;
- X3 = 1, так как нападений акул не фиксировалось.
Теперь нам нужно присвоить этим значениям некоторые «веса», чтобы определить их важность. Расположим приоритеты следующим образом:
- W1 = 5, так как большие волны на этом пляже возникают нечасто;
- W2 = 2, так как вы не боитесь толпы;
- W3 = 4, так как вы боитесь акул.
За пороговое значение мы примем 3, соответственно, значение смещения составит –3. Теперь можно начать подставлять значения в формулу, чтобы получить желаемый результат:
Y-hat = (1*5) + (0*2) + (1*4) – 3 = 6.
Поскольку полученное значение выше 3, то решение о серфинге будет положительным.
В зависимости от архитектуры нейросети делятся на типы:
- прямого распространения — обрабатывают входные данные и сразу выдают результат. Чаще всего применяются для распознавания образов и текста, а также классификации данных;
- рекуррентные — перенаправляют информацию туда и обратно по слоям, пока не получат конечный результат. Этот тип обычно используется для прогнозирования;
- сверточные — обрабатывают каждый признак в отдельном слое. Такой тип применяется в классификации изображений, обработке языка и т.д.
Помимо основных типов встречаются десятки подтипов нейросетей. Например, модульные — это, по сути, совокупность нейросетей, которые работают независимо друг от друга, чтобы ускорить вычисления.
Какие бывают архитектуры нейросетей (Фото: habr.com)
Как применяются нейросети
Нейронные сети широко используются в самых разных областях — от медицины и до сферы развлечений. Они выполняют несколько основных типов задач.
Автоматическая генерация контента
- Чат-бот ChatGPT от OpenA может отвечать на вопросы, поддерживать диалог, искать ошибки в коде, сочинять стихи, писать сценарии и т.д.
- Нейросети DALL-E, Midjourney, Stable Diffusion генерируют картинки по текстовому описанию.
- Нейросеть Imaginary soundscape создает фоновую музыку по изображению.
- VALL-E озвучивает текст, точно имитируя голос человека и его интонации.
- Нейросеть MARZ позволяет омолаживать лица актеров в фильмах.
Как работает нейросеть MARZ
(Видео: YouTube)
В этой группе есть и нейросети с необычными задачами. Например, Different Dimension Me позволяет сгенерировать изображение в стиле аниме по фотографии или картинке.
Распознавание и обработка естественного языка
- Чат-бот ChatGPT способен вести диалог, искать ошибки в коде, сочинять стихи, писать сценарии и даже давать медицинские советы. Нейросеть можно встраивать в любые сайты и сервисы, а Microsoft уже внедрила чат-бота в свой поисковик Bing для получения более точных результатов поиска.
- Чат-бот LaMDA может вести диалог на любую тему и отвечать на любые вопросы пользователя. В перспективе его внедрение позволит создавать новые категории приложений.
- Нейросеть Yandex Cloud распознает более десяти языков одновременно и переводит ответы на вопросы. На ее базе можно создавать многоязычных голосовых помощников и роботов для call-центров.
Как работает нейросеть Yandex Cloud
(Видео: YouTube)
Классификация объектов
- Нейросеть российской компании NTechLab, которая работает с городской сетью камер в Москве, позволяет выявлять нарушителей. Также ее можно оптимизировать для идентификации по лицу в общественном транспорте для оплаты и организации безопасной системы пропусков на предприятиях.
- Нейросеть Google Cloud AutoML анализирует исследования биопсии лимфатических узлов в поиске раковых клеток в молочных железах у женщин. А нейросеть SkinVision диагностирует рак кожи по фото с камеры телефона.
- Нейросеть в основе системы помощи водителю Ford BlueCruise распознает объекты на дороге, что позволяет контролировать работу автопилота.
Как работает Ford BlueCruise
(Видео: YouTube)
- Российский сервис YouScan с помощью нейросетей отслеживает упоминание брендов в соцсетях и сегментирует их для аналитики.
Кроме того, нейросети применяются для более узкоспециализированных задач:
- регрессии. Нейронные сети помогают прогнозировать биржевые курсы, оценивать стоимость имущества и так далее;
- прогнозирования. Например, нейросети широко применяются в банкинге, чтобы оценить платежеспособность новых заемщиков;
- кластеризации. Нейросети помогают исследователям и специалистам big data сортировать большие объемы данных в условиях, когда конечное количество классов неизвестно. Например, кластеризация применяется для выявления классов картинок.
Нейросеть CLIP от OpenIA распознает и описывает изображения (Фото: openai.com)
На простейшем уровне такая функция реализована в любом современном смартфоне, она позволяет автоматически сортировать фото и видео по папкам и выдавать пользователям тематические подборки.
Способности нейросетей постоянно эволюционируют. Так, существующая система StyleGAN уже содержит базовые знания о 3D-моделировании. После дообучения ее можно будет применять для создания 3D-объектов и новых возможностей в 3D-печати.
Как обучают нейросети
Стандартный процесс обучения нейросетей включает в себя несколько этапов.
- Отправка информации. Для старта обучения нейросети требуется выборка данных. Чем больше задач в итоге должна выполнять нейросеть, тем эта выборка должна быть больше. В процессе обучения алгоритмы отвечают на поставленный вопрос с помощью формул и числовых коэффициентов.
- Преобразование информации. Когда входные нейроны нейросети получают выборку, они преобразуют ее и передают дальше. При этом содержание информации превращается в числовые коэффициенты. Для этого применяются формулы с коэффициентами, которые устанавливают авторы обучения. Именно они решают, сколько будет «весить» каждый обучающий признак и т.д.
- Обработка информации. Каждому нейрону также присваивается «вес», который показывает, насколько важны его ответы. Во время обучения «веса» автоматически меняются и балансируются.
- Получение результата. Нейросеть выдает набор формул и чисел, которые преобразуются в ответ. При этом он не конкретный, а скорее показывает вероятность. Например, если для изображения мужчины установлено значение 0, а женщины — 1, то результат 0,67 будет означать «скорее всего, это женщина».
Само обучение бывает контролируемым и глубоким. В первом случае специалисты по работе с данными загружают для обучения нейросети помеченные наборы данных, которые заранее содержат правильный ответ. В процессе обучения нейросеть накапливает знания, а затем получает новые данные, чтобы построить уже свои предположения.
При глубоком обучении специалист по работе с данными предоставляет нейросети только необработанные данные, а та самостоятельно извлекает функции и обучается независимо. Если результат неудовлетворительный, то цикл обучения повторяется снова, пока нейросеть не будет давать корректные ответы.
Специалисты по нейросетям
Разработчик нейронных сетей — это специалист, который создает архитектуру, а также решает теоретические и прикладные задачи систем искусственного интеллекта. Он, в частности, проектирует методики машинного обучения и ведет аналитическую работу в области специализированного программного обеспечения.
Чем занимается специалист по нейронным сетям
Основные задачи такого специалиста включают:
- разработку архитектуры нейросетей для решения конкретных задач;
- обучение нейросетей;
- реализацию алгоритмов машинного обучения;
- визуализацию данных;
- оптимизацию уже работающих моделей;
- поиск максимально соответствующей определенной задаче архитектуры нейросетей с ее последующей адаптацией;
- изучение и аналитику сферы работы нейросети, просчет рисков ее внедрения;
- разработку программ для поддержания работы нейронной сети;
- разработку и внедрение новых функций для существующих продуктов или услуг с использованием методов ИИ.
Как стать специалистом по нейросетям
Нейросети и ИИ представляют собой узкую специализацию в направлении Data Science. Поэтому процесс обучения должен стартовать с изучения науки больших данных. Обучение может быть:
- самостоятельным. Плюс такого метода — дешевизна и доступность источников. Так, на YouTube можно найти видеокурсы по нейросетям. Минусы: в таком подходе нет системности, а полученные навыки могут оказаться невостребованными у работодателя;
- в онлайн- или офлайн-формате. Выучиться на дата-сайентиста можно как в университете, так и на специализированном курсе.
Для работы в отрасли потребуются знания в области математики, статистики и основ программирования: знание языка Python, навыки работы с Linux, библиотеками Python для Data Science, в том числе Numpy, Matplotlib, Scikit-learn, навыки работы с базами данных, библиотеками машинного обучения PyTorch и TensorFlow.
Специалист по нейросетям должен быть знаком с передовыми методами разработки программного обеспечения, особенно с теми, которые касаются проектирования системы, контроля версий, тестирования и анализа требований. Также ему потребуются знания в области Data Science, такие как моделирование данных, оценка алгоритмов и моделей прогнозирования. Наконец, для презентации работы нейросети потребуется пользоваться технологиями пользовательского интерфейса, использовать диаграммы или визуализации.
Поскольку дисциплины искусственного интеллекта, глубокого обучения, машинного обучения и науки о данных развиваются быстро, любой профессионал, который хочет оставаться востребованным, должен непрерывно учиться новому.
Востребованность специалиста по нейросетям
Аналитики International Data Corporation подсчитали, что мировой рынок решений в сфере искусственного интеллекта будет расти в среднем на 18,6% ежегодно в период с 2022 по 2026 год. По мнению авторов исследования McKinsey, именно прикладной искусственный интеллект и внедрение машинного обучения стали двумя наиболее значимыми технологическими тенденциями на рынке ИИ. В 2022 году компании, занимающиеся генеративным искусственным интеллектом, привлекли $1,37 млрд — это почти столько же, сколько за предыдущие пять лет.
Востребованность специалистов по нейросетям постоянно растет. По данным сервиса по поиску работы HeadHunter за 2022 год, на российском рынке наблюдается нехватка соискателей на должности разработчиков систем искусственного интеллекта — на одну вакансию в этой сфере претендуют не больше двух кандидатов. По словам представителей рынка, проблема сохраняется уже в течение трех лет.
Начинающий специалист может претендовать на зарплату от 40 тыс. руб. в месяц, а профессионал — от 150 тыс. руб.
Нейронные сети для начинающих. Часть 1
Привет всем читателям Habrahabr, в этой статье я хочу поделиться с Вами моим опытом в изучении нейронных сетей и, как следствие, их реализации, с помощью языка программирования Java, на платформе Android. Мое знакомство с нейронными сетями произошло, когда вышло приложение Prisma. Оно обрабатывает любую фотографию, с помощью нейронных сетей, и воспроизводит ее с нуля, используя выбранный стиль. Заинтересовавшись этим, я бросился искать статьи и «туториалы», в первую очередь, на Хабре. И к моему великому удивлению, я не нашел ни одну статью, которая четко и поэтапно расписывала алгоритм работы нейронных сетей. Информация была разрознена и в ней отсутствовали ключевые моменты. Также, большинство авторов бросается показывать код на том или ином языке программирования, не прибегая к детальным объяснениям.
Поэтому сейчас, когда я достаточно хорошо освоил нейронные сети и нашел огромное количество информации с разных иностранных порталов, я хотел бы поделиться этим с людьми в серии публикаций, где я соберу всю информацию, которая потребуется вам, если вы только начинаете знакомство с нейронными сетями. В этой статье, я не буду делать сильный акцент на Java и буду объяснять все на примерах, чтобы вы сами смогли перенести это на любой, нужный вам язык программирования. В последующих статьях, я расскажу о своем приложении, написанном под андроид, которое предсказывает движение акций или валюты. Иными словами, всех желающих окунуться в мир нейронных сетей и жаждущих простого и доступного изложения информации или просто тех, кто что-то не понял и хочет подтянуть, добро пожаловать под кат.
Первым и самым важным моим открытием был плейлист американского программиста Джеффа Хитона, в котором он подробно и наглядно разбирает принципы работы нейронных сетей и их классификации. После просмотра этого плейлиста, я решил создать свою нейронную сеть, начав с самого простого примера. Вам наверняка известно, что когда ты только начинаешь учить новый язык, первой твоей программой будет Hello World. Это своего рода традиция. В мире машинного обучения тоже есть свой Hello world и это нейросеть решающая проблему исключающего или(XOR). Таблица исключающего или выглядит следующим образом:
a | b | c |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Соответственно, нейронная сеть берет на вход два числа и должна на выходе дать другое число — ответ. Теперь о самих нейронных сетях.
Что такое нейронная сеть?
Нейронная сеть — это последовательность нейронов, соединенных между собой синапсами. Структура нейронной сети пришла в мир программирования прямиком из биологии. Благодаря такой структуре, машина обретает способность анализировать и даже запоминать различную информацию. Нейронные сети также способны не только анализировать входящую информацию, но и воспроизводить ее из своей памяти. Заинтересовавшимся обязательно к просмотру 2 видео из TED Talks: Видео 1, Видео 2). Другими словами, нейросеть это машинная интерпретация мозга человека, в котором находятся миллионы нейронов передающих информацию в виде электрических импульсов.
Какие бывают нейронные сети?
Пока что мы будем рассматривать примеры на самом базовом типе нейронных сетей — это сеть прямого распространения (далее СПР). Также в последующих статьях я введу больше понятий и расскажу вам о рекуррентных нейронных сетях. СПР как вытекает из названия это сеть с последовательным соединением нейронных слоев, в ней информация всегда идет только в одном направлении.
Для чего нужны нейронные сети?
Нейронные сети используются для решения сложных задач, которые требуют аналитических вычислений подобных тем, что делает человеческий мозг. Самыми распространенными применениями нейронных сетей является:
Классификация — распределение данных по параметрам. Например, на вход дается набор людей и нужно решить, кому из них давать кредит, а кому нет. Эту работу может сделать нейронная сеть, анализируя такую информацию как: возраст, платежеспособность, кредитная история и тд.
Предсказание — возможность предсказывать следующий шаг. Например, рост или падение акций, основываясь на ситуации на фондовом рынке.
Распознавание — в настоящее время, самое широкое применение нейронных сетей. Используется в Google, когда вы ищете фото или в камерах телефонов, когда оно определяет положение вашего лица и выделяет его и многое другое.
Теперь, чтобы понять, как же работают нейронные сети, давайте взглянем на ее составляющие и их параметры.
Что такое нейрон?
Нейрон — это вычислительная единица, которая получает информацию, производит над ней простые вычисления и передает ее дальше. Они делятся на три основных типа: входной (синий), скрытый (красный) и выходной (зеленый). Также есть нейрон смещения и контекстный нейрон о которых мы поговорим в следующей статье. В том случае, когда нейросеть состоит из большого количества нейронов, вводят термин слоя. Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3), которые ее обрабатывают и выходной слой, который выводит результат. У каждого из нейронов есть 2 основных параметра: входные данные (input data) и выходные данные (output data). В случае входного нейрона: input=output. В остальных, в поле input попадает суммарная информация всех нейронов с предыдущего слоя, после чего, она нормализуется, с помощью функции активации (пока что просто представим ее f(x)) и попадает в поле output.
Важно помнить, что нейроны оперируют числами в диапазоне [0,1] или [-1,1]. А как же, вы спросите, тогда обрабатывать числа, которые выходят из данного диапазона? На данном этапе, самый простой ответ — это разделить 1 на это число. Этот процесс называется нормализацией, и он очень часто используется в нейронных сетях. Подробнее об этом чуть позже.
Что такое синапс?
Синапс это связь между двумя нейронами. У синапсов есть 1 параметр — вес. Благодаря ему, входная информация изменяется, когда передается от одного нейрона к другому. Допустим, есть 3 нейрона, которые передают информацию следующему. Тогда у нас есть 3 веса, соответствующие каждому из этих нейронов. У того нейрона, у которого вес будет больше, та информация и будет доминирующей в следующем нейроне (пример — смешение цветов). На самом деле, совокупность весов нейронной сети или матрица весов — это своеобразный мозг всей системы. Именно благодаря этим весам, входная информация обрабатывается и превращается в результат.
Важно помнить, что во время инициализации нейронной сети, веса расставляются в случайном порядке.
Как работает нейронная сеть?
В данном примере изображена часть нейронной сети, где буквами I обозначены входные нейроны, буквой H — скрытый нейрон, а буквой w — веса. Из формулы видно, что входная информация — это сумма всех входных данных, умноженных на соответствующие им веса. Тогда дадим на вход 1 и 0. Пусть w1=0.4 и w2 = 0.7 Входные данные нейрона Н1 будут следующими: 1*0.4+0*0.7=0.4. Теперь когда у нас есть входные данные, мы можем получить выходные данные, подставив входное значение в функцию активации (подробнее о ней далее). Теперь, когда у нас есть выходные данные, мы передаем их дальше. И так, мы повторяем для всех слоев, пока не дойдем до выходного нейрона. Запустив такую сеть в первый раз мы увидим, что ответ далек от правильно, потому что сеть не натренирована. Чтобы улучшить результаты мы будем ее тренировать. Но прежде чем узнать как это делать, давайте введем несколько терминов и свойств нейронной сети.
Функция активации
Функция активации — это способ нормализации входных данных (мы уже говорили об этом ранее). То есть, если на входе у вас будет большое число, пропустив его через функцию активации, вы получите выход в нужном вам диапазоне. Функций активации достаточно много поэтому мы рассмотрим самые основные: Линейная, Сигмоид (Логистическая) и Гиперболический тангенс. Главные их отличия — это диапазон значений.
Линейная функция
Эта функция почти никогда не используется, за исключением случаев, когда нужно протестировать нейронную сеть или передать значение без преобразований.
Это самая распространенная функция активации, ее диапазон значений [0,1]. Именно на ней показано большинство примеров в сети, также ее иногда называют логистической функцией. Соответственно, если в вашем случае присутствуют отрицательные значения (например, акции могут идти не только вверх, но и вниз), то вам понадобиться функция которая захватывает и отрицательные значения.
Гиперболический тангенс
Имеет смысл использовать гиперболический тангенс, только тогда, когда ваши значения могут быть и отрицательными, и положительными, так как диапазон функции [-1,1]. Использовать эту функцию только с положительными значениями нецелесообразно так как это значительно ухудшит результаты вашей нейросети.
Тренировочный сет
Тренировочный сет — это последовательность данных, которыми оперирует нейронная сеть. В нашем случае исключающего или (xor) у нас всего 4 разных исхода то есть у нас будет 4 тренировочных сета: 0xor0=0, 0xor1=1, 1xor0=1,1xor1=0.
Итерация
Это своеобразный счетчик, который увеличивается каждый раз, когда нейронная сеть проходит один тренировочный сет. Другими словами, это общее количество тренировочных сетов пройденных нейронной сетью.
Эпоха
При инициализации нейронной сети эта величина устанавливается в 0 и имеет потолок, задаваемый вручную. Чем больше эпоха, тем лучше натренирована сеть и соответственно, ее результат. Эпоха увеличивается каждый раз, когда мы проходим весь набор тренировочных сетов, в нашем случае, 4 сетов или 4 итераций.
Важно не путать итерацию с эпохой и понимать последовательность их инкремента. Сначала n
раз увеличивается итерация, а потом уже эпоха и никак не наоборот. Другими словами, нельзя сначала тренировать нейросеть только на одном сете, потом на другом и тд. Нужно тренировать каждый сет один раз за эпоху. Так, вы сможете избежать ошибок в вычислениях.
Ошибка
Ошибка — это процентная величина, отражающая расхождение между ожидаемым и полученным ответами. Ошибка формируется каждую эпоху и должна идти на спад. Если этого не происходит, значит, вы что-то делаете не так. Ошибку можно вычислить разными путями, но мы рассмотрим лишь три основных способа: Mean Squared Error (далее MSE), Root MSE и Arctan. Здесь нет какого-либо ограничения на использование, как в функции активации, и вы вольны выбрать любой метод, который будет приносить вам наилучший результат. Стоит лишь учитывать, что каждый метод считает ошибки по разному. У Arctan, ошибка, почти всегда, будет больше, так как он работает по принципу: чем больше разница, тем больше ошибка. У Root MSE будет наименьшая ошибка, поэтому, чаще всего, используют MSE, которая сохраняет баланс в вычислении ошибки.
Root MSE
Arctan
Принцип подсчета ошибки во всех случаях одинаков. За каждый сет, мы считаем ошибку, отняв от идеального ответа, полученный. Далее, либо возводим в квадрат, либо вычисляем квадратный тангенс из этой разности, после чего полученное число делим на количество сетов.
Задача
Теперь, чтобы проверить себя, подсчитайте результат, данной нейронной сети, используя сигмоид, и ее ошибку, используя MSE.
Данные: I1=1, I2=0, w1=0.45, w2=0.78 ,w3=-0.12 ,w4=0.13 ,w5=1.5 ,w6=-2.3.
Решение
H1input = 1*0.45+0*-0.12=0.45
H1output = sigmoid(0.45)=0.61
H2input = 1*0.78+0*0.13=0.78
H2output = sigmoid(0.78)=0.69
O1input = 0.61*1.5+0.69*-2.3=-0.672
O1output = sigmoid(-0.672)=0.33
O1ideal = 1 (0xor1=1)
Результат — 0.33, ошибка — 45%.
Большое спасибо за внимание! Надеюсь, что данная статья смогла помочь вам в изучении нейронных сетей. В следующей статье, я расскажу о нейронах смещения и о том, как тренировать нейронную сеть, используя метод обратного распространения и градиентного спуска.
- нейронные сети
- алгоритмы
- для начинающих
- для новичков
- туториал