Нейронные сети – это следующая большая вещь, когда речь идет о тяжелых вычислениях и умных алгоритмах. Вот как они работают и почему они так удивительны
Если вы следите за технологическими новостями, вы, вероятно, сталкивались с концепцией нейронных сетей (также известных как нейросети)
Например, в 2016 году нейронная сеть AlphaGo компании Google обыграла одного из лучших профессиональных игроков в го в серии со счетом 4:1. YouTube также объявил, что будет использовать нейронные сети для лучшего понимания своих видео. На ум могут прийти десятки других историй
Но что такое нейронная сеть? Как она работает? И почему она так популярна в машинном обучении?
Компьютер как мозг
Современные неврологи часто обсуждают мозг как разновидность компьютера. Нейронные сети стремятся сделать обратное: создать компьютер, функционирующий как мозг
Конечно, мы имеем лишь беглое представление о чрезвычайно сложных функциях мозга, но, создав упрощенную симуляцию того, как мозг обрабатывает данные, мы можем построить тип компьютера, который функционирует совсем не так, как обычный
Компьютерные процессоры обрабатывают данные последовательно (‘по порядку’). Они выполняют множество операций над набором данных по одной за раз. Параллельная обработка (‘обработка нескольких потоков одновременно’) значительно ускоряет работу компьютера за счет последовательного использования нескольких процессоров
На изображении ниже для примера параллельной обработки требуется пять различных процессоров:
Image Credit: ExplainThatStuff.
Искусственная нейронная сеть (названная так, чтобы отличить ее от реальных нейронных сетей в мозге) имеет принципиально иную структуру. Она сильно взаимосвязана. Это позволяет ей очень быстро обрабатывать данные, учиться на них и обновлять свою внутреннюю структуру для повышения производительности
Однако высокая степень взаимосвязанности дает поразительные результаты. Например, нейронные сети очень хорошо распознают непонятные закономерности в данных
Способность к обучению
Способность нейронной сети к обучению является ее самой сильной стороной. В стандартной вычислительной архитектуре программист должен разработать алгоритм, который указывает компьютеру, что делать с поступающими данными, чтобы убедиться, что компьютер выдает правильный ответ
Реакция ввода-вывода может быть как простой: ‘при нажатии клавиши A вывести на экран ‘A”, так и сложной: выполнить сложную статистику. Нейронные сети, с другой стороны, не нуждаются в такого рода алгоритмах. Благодаря механизмам обучения они могут создавать свои собственные алгоритмы, которые обеспечивают их правильную работу
Важно отметить, что поскольку нейронные сети являются программным обеспечением, написанным на машинах, использующих стандартные аппаратные средства последовательной обработки, текущая технология все еще накладывает ограничения. Фактическое создание аппаратной версии нейронной сети – это совсем другая проблема
От нейронов к узлам
Теперь, когда мы заложили основы функционирования нейронных сетей, мы можем приступить к рассмотрению некоторых особенностей. Базовая структура искусственной нейронной сети выглядит следующим образом:
Каждый из кружков называется ‘узел’ и имитирует один нейрон. Слева находятся входные узлы, в середине – скрытые узлы, а справа – выходные узлы
В самых общих чертах, входные узлы принимают входные значения, которые могут быть двоичными 1 или 0, частью значения цвета RGB, состоянием шахматной фигуры или чем-либо еще. Эти узлы представляют информацию, поступающую в сеть
Каждый входной узел соединен с некоторым количеством скрытых узлов (иногда с каждым скрытым узлом, иногда с некоторым подмножеством). Входные узлы принимают полученную информацию и передают ее на скрытый слой
Например, входной узел может послать сигнал (‘выстрелить’, говоря языком нейронауки), если он получает единицу, и остаться бездействующим, если он получает ноль. Каждый скрытый узел имеет порог: если все его суммарные входы достигают определенного значения, он срабатывает
От синапсов к связям
Каждой связи, эквиваленту анатомического синапса, также присваивается определенный вес, что позволяет сети делать больший акцент на действии конкретного узла. Вот пример:
Как вы можете видеть, вес соединения B выше, чем вес соединений A и C. Скажем, скрытый узел 4 сработает только в том случае, если он получит суммарный вход 2 или больше. Это означает, что если 1 или 3 сработают сами по себе, то 4 не сработает, но 1 и 3 вместе приведут узел в действие. Узел 2 также может самостоятельно запустить узел через соединение B
Рассмотрим погоду в качестве практического примера. Допустим, вы разрабатываете простую нейронную сеть для определения необходимости предупреждения о зимнем шторме
Используя приведенные выше связи и веса, узел 4 может сработать только при температуре ниже 0 F и ветре более 30 MPH, или сработать, если вероятность снега составляет более 70 процентов. Температура будет подаваться в узел 1, ветер – в узел 3, а вероятность снега – в узел 2. Теперь узел 4 может учесть все эти факторы при определении того, какой сигнал послать на выходной слой
Лучше, чем простая логика
Конечно, эта функция может быть реализована простыми логическими воротами AND/OR. Но более сложные нейронные сети, такие как представленная ниже, способны выполнять значительно более сложные операции
Image Credit: Нейронные сети и глубокое обучение от Michael A.Nielsen.
Узлы выходного слоя функционируют так же, как и узлы скрытого слоя: выходные узлы суммируют входные данные от скрытого слоя, и если они достигают определенного значения, выходные узлы срабатывают и посылают определенные сигналы. В конце процесса выходной слой будет посылать набор сигналов, который указывает на результат ввода
Хотя показанная выше сеть является простой, глубокие нейронные сети могут иметь множество скрытых слоев и сотни узлов
Image Credit: Neural networks and deep learning by Michael A.Nielsen
Исправление ошибок
Пока что этот процесс относительно прост. Но где нейронные сети действительно сияют, так это в обучении. Большинство нейронных сетей используют процесс, называемый обратным распространением , который посылает сигналы в обратном направлении через сеть
Прежде чем программисты развернут нейронную сеть, они проводят ее через этап обучения, в ходе которого она получает набор входных данных с известными результатами. Например, программист может научить нейронную сеть распознавать изображения. Входом может быть изображение автомобиля, а правильным выходом будет слово ‘автомобиль’
Программист подает изображение на вход и смотрит, что выходит из выходных узлов. Если сеть отвечает ‘самолет’, программист сообщает компьютеру, что это неверно
Затем сеть вносит коррективы в свои собственные связи, изменяя веса различных связей между узлами. Этим действием руководит специальный алгоритм обучения, добавленный в сеть. Сеть продолжает корректировать веса связей, пока не обеспечит правильный выход
Это упрощение, но нейронные сети могут обучаться очень сложным операциям, используя аналогичные принципы
Постоянное совершенствование
Даже после обучения обратное распространение продолжается – и именно здесь нейронные сети становятся по-настоящему крутыми. Они продолжают учиться в процессе использования, интегрируя новую информацию и изменяя веса различных связей, становясь все более эффективными и действенными в решении задач, для которых они были созданы
Это может быть как простое распознавание образов, так и сложная игра в Го
Таким образом, нейронные сети постоянно меняются и совершенствуются. И это может иметь неожиданные последствия, приводя к тому, что сети отдают предпочтение тому, чему программист и не подумал бы отдавать предпочтение
Помимо описанного выше процесса, который называется supervised learning , существует и другой метод: неконтролируемое обучение
В этой ситуации нейронные сети берут входной сигнал и пытаются воссоздать его в точности на своем выходе, используя обратное распространение для обновления своих связей. Это может показаться бесплодным занятием, но таким образом сети учатся извлекать полезные особенности и обобщать их для улучшения своих моделей
Вопросы глубины
Обратное распространение – очень эффективный способ обучения нейронных сетей.когда их глубина составляет всего несколько слоев. По мере увеличения количества скрытых слоев эффективность обратного распространения снижается. Это является проблемой для глубоких сетей. При использовании обратного распространения они часто не более эффективны, чем простые сети
Ученые придумали ряд решений этой проблемы, специфика которых довольно сложна и выходит за рамки этой вводной статьи. Проще говоря, многие из этих решений пытаются уменьшить сложность сети, обучая ее ‘сжимать’ данные
Image Credit: Song Han.
Для этого сеть учится извлекать меньшее количество идентифицирующих признаков входного сигнала, в конечном итоге становясь более эффективной в своих вычислениях. По сути, сеть делает обобщения и абстракции, подобно тому, как человек учится
После такого обучения сеть может отсеивать узлы и связи, которые она считает менее важными. Это делает сеть более эффективной, и обучение становится проще
Приложения нейронных сетей
Нейронные сети имитируют процесс обучения мозга, используя несколько слоев узлов – входной, скрытый и выходной – и способны обучаться как в контролируемых, так и в неконтролируемых ситуациях. Сложные сети способны к абстракции и обобщению, что делает их более эффективными и способными к обучению
Для чего мы можем использовать эти удивительные системы?
Теоретически, нейронные сети можно использовать практически для чего угодно. И вы, вероятно, использовали их, даже не подозревая об этом. Например, они очень распространены в распознавании речи и визуальных образов, потому что они могут научиться выделять специфические черты, которые объединяют звуки или изображения
Поэтому, когда вы спрашиваете Siri, где находится ближайшая заправка, ваш iPhone пропускает вашу речь через нейронную сеть, чтобы понять, что вы хотите сказать. Возможно, существует еще одна нейронная сеть, которая учится предсказывать, какие вещи вы, скорее всего, попросите
Самоуправляемые автомобили могут использовать нейронные сети для обработки визуальных данных, тем самым соблюдая правила дорожного движения и избегая столкновений. Роботы всех типов могут воспользоваться нейронными сетями, которые помогут им научиться эффективно выполнять задачи. Компьютеры могут научиться играть в такие игры, как шахматы, го и классические игры Atari. Если вы когда-нибудь общались с чат-ботом, есть вероятность, что он использовал нейронную сеть, чтобы предложить подходящие ответы
Нейронные сети могут принести большую пользу интернет-поиску, поскольку высокоэффективная модель параллельной обработки данных позволяет быстро обрабатывать большое количество данных. Нейронная сеть также может изучать ваши привычки, чтобы персонализировать результаты поиска или предсказать, что вы собираетесь искать в ближайшем будущем. Такая модель предсказания, очевидно, была бы очень ценной для маркетологов (и всех остальных, кому необходимо предсказывать сложное поведение человека)
Распознавание изображений, оптическое распознавание символов, прогнозирование фондового рынка, поиск маршрутов, обработка больших данных, анализ медицинских расходов, прогнозирование продаж, ИИ видеоигр.возможности практически безграничны. Способность нейронных сетей изучать закономерности, делать обобщения и успешно прогнозировать поведение делает их ценными в бесчисленных ситуациях
Будущее нейронных сетей
Нейронные сети прошли путь от очень простых моделей до сложнейших обучающих симуляторов. Они находятся в наших телефонах, планшетах и работают во многих веб-сервисах, которыми мы пользуемся. Существует множество других систем машинного обучения
Но нейронные сети, благодаря их сходству (в очень упрощенном виде) с человеческим мозгом, являются одними из самых увлекательных. По мере того как мы продолжаем разрабатывать и совершенствовать модели, невозможно предугадать, на что они будут способны
Знаете ли вы какие-нибудь интересные способы применения нейронных сетей? Есть ли у вас собственный опыт работы с ними? Что вы находите наиболее интересным в этой технологии? Поделитесь своими мыслями в комментариях ниже!
Комментировать