Что такое нейросеть
Нейронная сеть, или нейросеть, — это компьютерная модель, вдохновленная работой человеческого мозга. Она состоит из множества взаимосвязанных узлов, называемых нейронами, которые обрабатывают и передают информацию друг другу. Именно так работают и нейроны головного мозга человека. Нейросеть способна обучаться на основе данных и принимать решения, анализируя входные сигналы. И именно способность к обучению на больших объемах данных и обусловила широкое распространение нейросетей, ведь это позволяет им решать сложные задачи, которые ранее были недоступны для традиционных компьютерных моделей.
Из чего состоит нейронная сеть
- Входной слой;
- Скрытые (вычислительные) слои;
- Выходной слой.
- Прямое распространение ошибки;
- Обратное распространение ошибки.
Во время прямого распространения ошибки делается предсказание ответа. При обратном распространении ошибка между фактическим ответом и предсказанным минимизируется.
Обучение: прямое распространение ошибки
- w1
- w2
- w3
- h1 = (x1 * w1) + (x2 * w1)
- h2 = (x1 * w2) + (x2 * w2)
- h3 = (x1 * w3) + (x2 * w3)
Выходные данные из скрытого слоя передается через нелинейную функцию (функцию активации), для получения выхода сети:
Обратное распространение
- Суммарная ошибка (total_error) вычисляется как разность между ожидаемым значением «y» (из обучающего набора) и полученным значением «y_» (посчитанное на этапе прямого распространения ошибки), проходящих через функцию потерь (cost function).
- Частная производная ошибки вычисляется по каждому весу (эти частные дифференциалы отражают вклад каждого веса в общую ошибку (total_loss)).
- Затем эти дифференциалы умножаются на число, называемое скорость обучения или learning rate (η).
- w1 = w1 — (η * ∂(err) / ∂(w1))
- w2 = w2 — (η * ∂(err) / ∂(w2))
- w3 = w3 — (η * ∂(err) / ∂(w3))
То, что мы предполагаем и инициализируем веса случайным образом, и они будут давать точные ответы, звучит не вполне обоснованно, тем не менее, работает хорошо.
Если вы знакомы с рядами Тейлора, обратное распространение ошибки имеет такой же конечный результат. Только вместо бесконечного ряда мы пытаемся оптимизировать только его первый член.
Смещения – это веса, добавленные к скрытым слоям. Они тоже случайным образом инициализируются и обновляются так же, как скрытый слой. Роль скрытого слоя заключается в том, чтобы определить форму базовой функции в данных, в то время как роль смещения – сдвинуть найденную функцию в сторону так, чтобы она частично совпала с исходной функцией.
Частные производные
Частные производные можно вычислить, поэтому известно, какой был вклад в ошибку по каждому весу. Необходимость производных очевидна. Представьте нейронную сеть, пытающуюся найти оптимальную скорость беспилотного автомобиля. Eсли машина обнаружит, что она едет быстрее или медленнее требуемой скорости, нейронная сеть будет менять скорость, ускоряя или замедляя автомобиль. Что при этом ускоряется/замедляется? Производные скорости.
Предположим, детей попросили бросить дротик в мишень, целясь в центр. Вот результаты:
Теперь, если мы найдем общую ошибку и просто вычтем ее из всех весов, мы обобщим ошибки, допущенные каждым. Итак, скажем, ребенок попал слишком низко, но мы просим всех детей стремиться попадать в цель, тогда это приведет к следующей картине:
Ошибка нескольких детей может уменьшиться, но общая ошибка все еще увеличивается.
Найдя частные производные, мы узнаем ошибки, соответствующие каждому весу в отдельности. Если выборочно исправить веса, можно получить следующее:
Функция активации (activation function) нейронной сети
Функция активации — это один из самых мощных инструментов, который влияет на силу, приписываемую нейронным сетям. Отчасти, она определяет, какие нейроны будут активированы, другими словами и какая информация будет передаваться последующим слоям.
Без функций активации глубокие сети теряют значительную часть своей способности к обучению. Нелинейность этих функций отвечает за повышение степени свободы, что позволяет обобщать проблемы высокой размерности в более низких измерениях. Ниже приведены примеры распространенных функций активации:
Функция потери (loss function)
Функция потерь находится в центре нейронной сети. Она используется для расчета ошибки между реальными и полученными ответами. Наша глобальная цель — минимизировать эту ошибку. Таким образом, функция потерь эффективно приближает обучение нейронной сети к этой цели.
Функция потерь измеряет «насколько хороша» нейронная сеть в отношении данной обучающей выборки и ожидаемых ответов. Она также может зависеть от таких переменных, как веса и смещения.
Функция потерь одномерна и не является вектором, поскольку она оценивает, насколько хорошо нейронная сеть работает в целом.
- Квадратичная (среднеквадратичное отклонение);
- Кросс-энтропия;
- Экспоненциальная (AdaBoost);
- Расстояние Кульбака-Лейблера или прирост информации.
Cреднеквадратичное отклонение – самая простая функция потерь и наиболее часто используемая. Она задается следующим образом:
- Функция потерь должна быть записана как среднее;
- Функция потерь не должна зависеть от каких-либо активационных значений нейронной сети, кроме значений, выдаваемых на выходе.
Гиперпараметры нейронной сети
Нейронная сеть используется для автоматизации отбора признаков, но некоторые параметры настраиваются вручную.
Скорость обучения (learning rate) нейросети
Скорость обучения является очень важным гиперпараметром. Если скорость обучения слишком мала, то даже после обучения нейронной сети в течение длительного времени она будет далека от оптимальных результатов. Результаты будут выглядеть примерно так:
С другой стороны, если скорость обучения слишком высока, то сеть очень быстро выдаст ответы. Получится следующее:
Глубокая нейронная сеть
Глубокое обучение (deep learning) – это класс алгоритмов машинного обучения, которые учатся глубже (более абстрактно) понимать данные. Популярные алгоритмы нейронных сетей глубокого обучения представлены на схеме ниже.
- Используется каскад (пайплайн, как последовательно передаваемый поток) из множества обрабатывающих слоев (нелинейных) для извлечения и преобразования признаков;
- Основывается на изучении признаков (представлении информации) в данных без обучения с учителем. Функции более высокого уровня (которые находятся в последних слоях) получаются из функций нижнего уровня (которые находятся в слоях начальных слоях);
- Изучает многоуровневые представления, которые соответствуют разным уровням абстракции; уровни образуют иерархию представления.
Пример простой нейронной сети
Здесь, обучается первый слой (зеленые нейроны), он просто передается на выход.
В то время как в случае двухслойной нейронной сети, независимо от того, как обучается зеленый скрытый слой, он затем передается на синий скрытый слой, где продолжает обучаться:
Следовательно, чем больше число скрытых слоев, тем больше возможности обучения сети.
В этом случае большое число нейронов в одном слое не приводит к глубокому пониманию данных. Но это приводит к изучению большего числа признаков.
Изучая английскую грамматику, требуется знать огромное число понятий. В этом случае однослойная широкая нейронная сеть работает намного лучше, чем глубокая нейронная сеть, которая значительно меньше.
В случае изучения преобразования Фурье, ученик (нейронная сеть) должен быть глубоким, потому что не так много понятий, которые нужно знать, но каждое из них достаточно сложное и требует глубокого понимания.
Главное — баланс
Очень заманчиво использовать глубокие и широкие нейронные сети для каждой задачи. Но это может быть плохой идеей, потому что:
- Обе требуют значительно большего количества данных для обучения, чтобы достичь минимальной желаемой точности;
- Обе имеют экспоненциальную сложность;
- Слишком глубокая нейронная сеть попытается сломать фундаментальные представления, но при этом она будет делать ошибочные предположения и пытаться найти псевдо-зависимости, которые не существуют;
- Слишком широкая нейронная сеть будет пытаться найти больше признаков, чем есть. Таким образом, подобно предыдущей, она начнет делать неправильные предположения о данных.
Проклятье размерности нейросети
Проклятие размерности относится к различным явлениям, возникающим при анализе и организации данных в многомерных пространствах (часто с сотнями или тысячами измерений), и не встречается в ситуациях с низкой размерностью.
Грамматика английского языка имеет огромное количество аттрибутов, влияющих на нее. В машинном обучении мы должны представить их признаками в виде массива/матрицы конечной и существенно меньшей длины (чем количество существующих признаков). Для этого сети обобщают эти признаки. Это порождает две проблемы:
- Из-за неправильных предположений появляется смещение. Высокое смещение может привести к тому, что алгоритм пропустит существенную взаимосвязь между признаками и целевыми переменными. Это явление называют недообучение.
- От небольших отклонений в обучающем множестве из-за недостаточного изучения признаков увеличивается дисперсия. Высокая дисперсия ведет к переобучению, ошибки воспринимаются в качестве надежной информации.
Компромисс
На ранней стадии обучения смещение велико, потому что выход из сети далек от желаемого. А дисперсия очень мала, поскольку данные имеет пока малое влияние.
В конце обучения смещение невелико, потому что сеть выявила основную функцию в данных. Однако, если обучение слишком продолжительное, сеть также изучит шум, характерный для этого набора данных. Это приводит к большому разбросу результатов при тестировании на разных множествах, поскольку шум меняется от одного набора данных к другому.
алгоритмы с большим смещением обычно в основе более простых моделей, которые не склонны к переобучению, но могут недообучиться и не выявить важные закономерности или свойства признаков. Модели с маленьким смещением и большой дисперсией обычно более сложны с точки зрения их структуры, что позволяет им более точно представлять обучающий набор. Однако они могут отображать много шума из обучающего набора, что делает их прогнозы менее точными, несмотря на их дополнительную сложность.
Как правило, невозможно иметь маленькое смещение и маленькую дисперсию одновременно.
Есть множество инструментов, с помощью которых можно легко создать сложные модели машинного обучения, переобучение занимает центральное место. Поскольку смещение появляется, когда сеть не получает достаточно информации. Но чем больше примеров, тем больше появляется вариантов зависимостей и изменчивостей в этих корреляциях.
Какими бывают нейросети
Существует несколько типов нейронных сетей, среди которых наиболее известны перцептрон, сверточная нейронная сеть и рекуррентная нейронная сеть.
- Перцептрон — это один из самых простых типов нейронных сетей. Такая сеть состоит из одного или нескольких нейронов, которые принимают входные данные, вычисляют их взвешенную сумму и передают результат дальше. Кстати, первая нейросеть, созданная Фрэнком Розенблаттом в 1957 году, была именно перцептроном.
- Сверточные нейронные сети были специально разработаны для обработки изображений. Это уже более сложные модели, в которых слои нейронов чередуются, что значительно повышает возможности таких моделей к самообучению — а именно эту функцию в них закладывает каждый разработчик. Сверточные нейронные сети широко применяются в задачах компьютерного зрения, распознавания образов и других, где важно анализировать пространственные структуры данных.
- Рекуррентные нейронные сети — это модели, способные учитывать последовательность данных. Они имеют обратные связи, которые позволяют им запоминать предыдущие состояния и использовать их для прогнозирования будущих состояний. Рекуррентные нейронные сети часто используются при обработке естественного языка, машинном переводе и различных прогностических задачах, где важно учитывать контекст и зависимости в определенной последовательности данных.
Практическое применение нейросетей
Нейронные сети сегодня используются очень широко — можно сказать, что уже почти не осталось областей знаний, отраслей промышленности и вообще сфер деятельности человека, где так или иначе не находили бы применения эти прогрессивные модели. Поэтому мы составили список наиболее популярных задач, которые специалисты решают с помощью нейросетей.
Компьютерное зрение
Нейронные сети используются для распознавания и классификации изображений. Они могут автоматически определять объекты на фотографиях, различать лица людей, анализировать медицинские изображения. А еще эти модели помогают в автоматическом контроле качества на производстве.
Обработка естественного языка
Нейросети уже хорошо справляются с автоматическим переводом текстов, что нетрудно проверить, вбив какой-нибудь небольшой текст на английском в автопереводчике Яндекса или Гугла. Также с их помощью программисты создают голосовых ботов, поскольку нейросети очень эффективны при синтезе голоса, «достраивая» его на основе полученных образцов.
Распознавание речи
Нейронные сети позволяют создавать системы, способные точно распознавать и интерпретировать человеческую речь. Поэтому их применяют для транскрибации аудио файлов, управления голосовыми помощниками, определения эмоциональной окраски речи.
Медицинская диагностика
Нейронные сети активно используют для анализа медицинских изображений, диагностики, прогнозирования заболеваний. Они помогают врачам ставить более точные диагнозы и, что еще важнее, делать это своевременно. Так, правильно обученная нейронка способна определить зарождающуюся онкологию, когда другие средства диагностики еще бесполезны.
Финансовый анализ
В финансовой сфере нейросети применяют для прогнозирования цен на акции, определения трендов на рынке и управления инвестиционными портфелями. Они позволяют автоматизировать процессы анализа финансовых данных и принимать более обоснованные инвестиционные решения.
Беспилотные автомобили
Обработка данных с камер и радаров, анализ окружения, распознавание дорожных знаков и разметки — всему этому уже обучены нейронные сети. Поэтому они способны самостоятельно принимать решения в режиме реального времени, обеспечивая безопасность движения транспортных средств. Правда, здесь стоит уточнить, что стопроцентной гарантии безопасности таких машин пока еще не может дать ни одна компания, занимающаяся беспилотными автомобилями. Однако у них уже отличные перспективы, например, при езде по выделенным трассам, где можно исключить влияние человеческого фактора.
Прогнозирование временных рядов
Нейронные сети могут анализировать большие объемы информации и, выявляя закономерности и тренды, делать прогнозы на основе прошлых данных. Поэтому нейросети помогают значительно улучшить точность прогнозирования в метеорологии, экономике, торговле и в других сферах, где прогнозы имеют важное значение.
Игровая индустрия
В играх разработчики используют нейросети для создания более реалистичных, «умных» персонажей. Кроме того, эти модели могут улучшать графику и звук, а также адаптировать игровой процесс к стилю и предпочтениям игрока. Нейронные сети уже сегодня позволяют генерировать увлекательные игровые миры, хотя и не без шероховатостей, что мы увидели на примере нашумевшего Starfield.
Рекомендательные системы
Персонализированные рекомендации товаров, фильмов, музыки — это тоже делается при помощи нейросетей. Они анализируют предпочтения пользователя, его историю покупок или просмотров, взаимодействие с продуктами и на основе этих данных предлагают наиболее подходящий контент. Пока, разумеется, такие рекомендации тоже несовершенны, но с повышением качества обучения моделей рекомендательные функции нейросетей также будут улучшены.
Кибербезопасность
А вот где нейронные сети уже показывают себя во всей красе — это при защите ценных данных. Они используются для обнаружения вредоносных программ, защиты от хакерских атак, мониторинга сетевой активности, анализа потенциально опасных событий и реагирования на угрозы в режиме реального времени. Нейросети помогают в разы повышать уровень безопасности информационных систем, защищая их даже от комбинированных киберугроз. И это возможно благодаря тому, что грамотно обученная нейронка способна разглядеть подозрительные паттерны (последовательности данных), недоступные человеку — точно так же, как и не различимые для хирурга болезни на рентгеновском снимке.
Генерация контента
Написать текст, похожий на настоящий, или создать фотореалистичное изображение? Легко. Тем более сервисов (в том числе и бесплатных) в интернете для этого уже очень много. Правда, написанные одной нейронкой тексты и сгенеренные другой изображения в подавляющем большинстве будут требовать редактирования. Уже сейчас такие нейросети (например, ChatGPT, Midjourney) — потрясающие инструменты для вдохновения. Но при решении серьезных задач без специалистов всё равно не обойтись и, подозреваем, это так и останется, так что профессионалы в своих областях могут не переживать. Почему? А об этом в заключительной главе.
Что дальше
Заявлять о том, что совсем скоро миром будет править ИИ (искусственный интеллект), мы не станем. Здесь уместно вспомнить так называемую «кривую Гартнера» — согласно этой теории, регулярно подтверждаемой на практике, любая прогрессивная технология переживает три стадии развития:
- Период завышенных ожиданий. Именно это мы и наблюдаем сейчас применительно к нейросетям, ведь статьи о том, что нейронка вот-вот заменит представителей той или иной профессии, появляются с завидной регулярностью.
- Период разочарования. Сами разработчики нейросетей почти всегда предупреждают, что их модели несовершенны: они всё равно не могут отойти от шаблонности и порой серьезно ошибаются. И скоро шаблонность «мышления» того же ChatGPT или Midjourney заметит и массовый пользователь.
- Реальная оценка возможностей. Рано или поздно наступит и этот период, и люди поймут, что технология эта не всемогуща, но очень полезна, и найдут ей правильное применение. А многие уже находят, чего мы желаем и вам, ведь подсказки, где можно успешно применять нейросети, мы вам дали.
Часто задаваемые вопросы о нейросетях
Вопрос: Чем нейросеть отличается от обычной компьютерной программы?
Ответ: Обычная программа выполняет строгий алгоритм, написанный человеком. Нейросеть обучается на данных, выявляя закономерности и создавая собственную внутреннюю логику для решения задачи.
Вопрос: Нужно ли быть программистом, чтобы использовать нейросети?
Ответ: Не обязательно. Существует множество сервисов с готовыми моделями и простыми интерфейсами (например, для генерации изображений или текста), доступных обычным пользователям. Однако для создания и тонкой настройки моделей требуются специализированные знания.
Вопрос: Что такое «обучение» нейросети?
Ответ: Это процесс настройки внутренних параметров (весов) сети на большом наборе данных. Сеть многократно обрабатывает примеры, постепенно уменьшая ошибку своих предсказаний.
Вопрос: Что такое «переобучение» нейросети?
Ответ: Ситуация, когда сеть слишком точно «запоминает» обучающие данные, включая их шум и случайные особенности, и плохо работает на новых, незнакомых данных.
Вопрос: Все ли нейросети одинаковы?
Ответ: Нет. Существуют разные архитектуры нейросетей (сверточные, рекуррентные, трансформеры и др.), каждая из которых оптимально подходит для определенного типа задач: обработки изображений, текста, последовательностей данных.
Вопрос: Может ли нейросеть мыслить или осознавать себя?
Ответ: Нет. Современные нейросети — это сложные математические модели, способные к распознаванию образов и прогнозированию, но у них нет сознания, понимания или целей в человеческом смысле.
Вопрос: Откуда нейросети берут данные для обучения?
Ответ: Данные собираются из открытых и коммерческих наборов (датасетов), могут парситься из интернета (тексты, изображения) или генерироваться искусственно. Качество данных критически важно для результата.
Вопрос: Что такое GPT и как она связана с нейросетями?
Ответ: GPT (Generative Pre-trained Transformer) — это конкретная архитектура большой языковой модели, основанная на нейросетях-трансформерах. Она специализируется на генерации и понимании текста.
Вопрос: Какие основные проблемы и риски связаны с нейросетями?
Ответ: Ключевые проблемы: смещение в данных (bias), «черный ящик» (сложность интерпретации решений), высокие вычислительные затраты, риски создания дезинформации и нарушения авторских прав.
Вопрос: Как начать изучать нейросети с нуля?
Ответ: Рекомендуется начать с основ математики (линейная алгебра, математический анализ, теория вероятностей), затем освоить язык Python и библиотеки для машинного обучения (например, TensorFlow или PyTorch) на простых практических примерах.
Краткая памятка: ключевые понятия о нейросетях
- Нейросеть — это математическая модель, вдохновленная работой биологического мозга.
- Основные элементы: нейроны, слои, веса соединений и функция активации.
- Сеть обучается на данных путем настройки весов для минимизации функции потерь.
- Ключевой алгоритм обучения — обратное распространение ошибки.
- Гиперпараметры (например, скорость обучения) задаются до обучения и влияют на его процесс.
- Глубокие нейросети имеют много скрытых слоев, что позволяет решать сложные задачи.
- Существует множество архитектур сетей, каждая для своих задач (CV, NLP и др.).
- Нейросети применяются в компьютерном зрении, обработке языка, медицине, финансах и т.д.
- Важно избегать переобучения, когда модель работает только на тренировочных данных.
- Развитие упирается в вычислительные мощности, качество данных и новые алгоритмы.
- Нейросеть не обладает сознанием, это инструмент для поиска закономерностей.
- Для старта в теме нужна базовая математика, Python и практика на простых проектах.



























