- Что такое deep learning
- История развития deep learning
- Основные термины
- Как устроена простейшая нейронная сеть
- Отличие Deep learning от Machine learning
- Контролируемое обучение
- Неконтролируемое обучение
- Как работает глубокое обучение
- Структура модели deep learning
- Функция активации
- Финальный этап
- Алгоритмы глубокого обучения
- Сверточные нейронные сети (convolutional neural networks, CNN)
- Рекуррентные нейронные сети (recurrent neural networks, RNN)
- Генеративно-состязательные сети (generative adversarial networks, GAN)
- Проблемы deep learning
- Где используется глубокое обучение
Что такое deep learning
Deep learning, или глубокое обучение, — это направление машинного обучения, основанное на использовании искусственного интеллекта (AI) с многослойной архитектурой. Основным принципом глубокого обучения является применение именно многослойных сетей, которые позволяют сформировать сложные зависимости и закономерности данных. Иногда это направление еще называют глубинным обучением, но употребление слова «глубинный» в данном контексте не совсем корректно.
История развития deep learning
История глубокого обучения начинается в 1943 году, когда двое ученых — Уоррен Маккалок (нейропсихолог и нейрофизиолог) и Уолтер Питтс (математик и логик) создали систему, которая имитировала умственную деятельность человека. В 1957 году ученый Фрэнк Розенблатт разработал первый в мире перцептрон — простую модель нейронной сети, которая уже могла обучаться на опыте. Эти два события стали основой для дальнейших исследований, но существовало несколько проблем: например, низкая скорость обработки данных из-за отсутствия мощных компьютеров и графических процессоров. Эта и другие проблемы привели к сокращению финансирования исследований, и до начала 80-ых годов работа ученых продвигалась довольно медленно.
В 1986 году Джеффри Хинтон, Дэвид Румельхарт и Рональд Уильямс описали и представили метод обратного распространения ошибки (backpropagation). Хоть разработка его основ и его изучение началось еще в 60-х годах, до 1986 года он не был популярным и не привлекал к себе столько внимания. Этот алгоритм позволял обучать нейронные сети более эффективно и возродил интерес к подобным исследованиям и самому глубокому обучению. В 1989 году Ян Лекун, задействовав метод обратного распространения ошибки, представил сеть, способную читать рукописные цифры. Примерно в это же время финансирование исследований вновь сократилось из-за уже указанных проблем, а также из-за того, что тогда метод опорных векторов посчитали более перспективным.
В 1999 году Nvidia представила первый графический процессор (GPU) GeForce 256. Это событие полностью перевернуло ход исследований, так как графические процессоры позволяли в разы увеличить скорость обработки данных. Со временем эта скорость росла из-за появления более мощных процессоров, что наконец раскрыло преимущества глубокого обучения. Уже в 2010 году deep learning применялось в области распознавания речи, а чуть позже — в области компьютерного зрения. Тогда же крупные компании начали публиковать собственные инновационные проекты и представлять сложные многослойные нейронные сети.
В наши дни глубокое обучение продолжает развиваться и применяться в самых разных областях.
Основные термины
Нейросеть (neural network) — это алгоритм/система, которая построена по принципу имитации работы нейронов в человеческом мозге. Особенностью нейросетей является то, что они могут обучаться на основе различных данных, вместо того, чтобы работать по заранее определенным алгоритмам — то есть являются самообучающимися.
Нейрон — это вычислительная единица, которая принимает данные на вход, определенным образом обрабатывает их и передает дальше.
Признаки — это характеристики или свойства данных, изучением которых нейросеть занимается сначала, а затем они помогают ей распознавать или генерировать данные. Для человека признаками, например, яблока являются форма, определенные цвета, вкус и прочее.
Синапс — это связь между двумя нейронами, которая содержит один параметр — вес.
Вес — это значимость каждого признака, на которую умножаются входные данные. Он корректируется в процессе обучения алгоритма для выявления наиболее важных признаков.
Компьютерное зрение — это направление искусственного интеллекта (AI), целью которого является распознавание и анализ визуальных данных.
Переобучение (overfitting) — это нежелательное поведение, которое характеризуется тем, что показатель средней ошибки при работе с новыми данными сильно превышает этот же показатель при работе с обучающими данными. То есть, нейросеть слишком «привыкла» к обучающим данным и не может эффективно обрабатывать новые.
Эмбеддинг (embedding) — это способ преобразования признаков в набор чисел или векторов, которые отражают взаимосвязи между этими данными.
Проблема исчезающего градиента — это явление, которое иногда возникает в процессе глубокого обучения и заключается в том, что при обратном распределении ошибки градиент становится слишком малым, чтобы веса обновлялись эффективно. Неэффективное обновление весов приводит к снижению скорости и качества обучения нейросети.
Как устроена простейшая нейронная сеть
Простейшая (однослойная) нейросеть может состоять лишь из одного нейрона, тогда система будет несложная, но точность ее предсказаний — очень низкой. В таком случае на вход сети поступают определенные данные, которые представляются набором признаков со своими весами. Нейрон посчитает взвешенную сумму этих признаков и применит функцию активации, после чего выдаст результат работы. Далее будет применена функция потерь для оценки ошибки предсказания и метод обратного распространения ошибки, что позволит скорректировать веса и смещения для более правдивых результатов работы. Все это будет повторяться многократно: до тех пор, пока не будут достигнуты оптимальные значения весов. Если чуть усложнить систему, добавив еще несколько нейронов, то можно получить более точные результаты работы, так как нейросеть сможет анализировать другие признаки и формировать более сложные взаимосвязи.
Таким образом, алгоритм работы простейшей нейронной сети можно описать так:
- Во входной слой поступают определенные данные или запрос, которые преобразуются в числовой вид и передаются нейронам.
- Нейрон выполняет несколько математических операций.
- Формируется окончательный отклик сети на данные или запрос, полученные в начале.
Отличие Deep learning от Machine learning
Говоря об отличиях, стоит сказать, что deep learning — это один из видов машинного обучения (machine learning), поэтому мы можем сравнивать только все машинное обучение с его отдельным направлением. Определение глубокого обучения было дано в начале. Теперь поговорим о том, что такое машинное обучение — это направление искусственного интеллекта, целью которого является научить компьютер решать различные задачи на основании полученного опыта путем применения разных подходов, например, deep learning.
Теперь можно перейти непосредственно к изучению различий между этими двумя направлениями.
Глубокое обучение | Машинное обучение |
Требуются большие объемы данных | Может проводиться на основании сравнительно небольших объемов данных |
Для обучения необходимы мощные компьютеры, есть сильная зависимость от GPU | Высокопроизводительных компьютеров не требуется |
Длительное время обучения, так как структура многослойная | Может занимать короткое время |
Выходные данные могут быть представлены в разных форматах, например, в текстовом | Выходные данные, как правило, представляют числовое значение |
Процесс конструирования признаков автоматизирован: вмешательство специалистов сводится к минимуму | Конструирование признаков осуществляется вручную специалистами |
Контролируемое обучение
Контролируемое обучение (Supervised learning), или обучение с учителем — это тип обучения, при котором система обучается на размеченных/маркированных данных. Это означает, что в обучающей выборке входные данные связаны с правильными выходными данными — у сети есть учитель. Если сильно упростить этот процесс, то можно сказать, что нейросеть делает определенный прогноз на основе входных данных, а затем сравнивает его с правильным прогнозом. Затем с помощью применения функции потерь и метода обратного распространения ошибки веса пересчитываются так, чтобы наиболее значимые взаимосвязи имели больший вес, а наименее значимые — меньший. Через множество повторений веса будут скорректированы оптимально, что улучшит алгоритм и позволит нейросети выдавать правдивые предсказания. К преимуществам обучения с учителем можно отнести высокую точность предсказаний и относительно высокую интерпретируемость модели. Минусами этого способа являются риск переобучения и необходимость маркировки данных, которая чаще всего выполняется вручную.
Неконтролируемое обучение
Неконтролируемое обучение (Unsupervised learning), или обучение без учителя — это тип обучения, при котором алгоритм обучается на немаркированных данных. В таком случае сеть сама должна найти взаимосвязи и закономерности вместо того, чтобы сравнивать свои прогнозы с реальными — у нее нет учителя. Отсюда вытекают как преимущества, так и недостатки такого вида обучения. Преимуществами является отсутствие необходимости в разметке данных, а также возможность обнаружения неочевидных взаимосвязей — таких, которые не видит человек. К недостаткам данного способа относится относительно низкая точность предсказаний и сложности с интерпретацией, так как никто не знает, почему нейросеть сделала именно такой выбор.
Как работает глубокое обучение
Структура модели deep learning
Структуру глубокого обучения можно разделить на три слоя:
- входной слой — принимает исходные данные, которые должны быть обработаны. Каждый нейрон в этом слое представляет отдельный признак данных. Например, если на вход поступает картинка, то количество нейронов будет определяться количеством пикселей картинки: если размер картинки 10 на 10 пикселей, то необходимо 100 нейронов. Входной слой передает полученные данные следующему слою;
- скрытые слои располагаются между входным и выходным слоями. Такие слои могут быть разными. О них мы поговорим позже. Именно здесь происходит основная часть вычислительных операций: входные данные обрабатываются в соответствии с весовыми коэффициентами, затем эти результаты суммируются и проходят через определенные функции активации. Итог вычислений передается в выходной слой;
- выходной слой (нейроны этого слоя тоже производят обработку данных) определенным образом представляет окончательный результат работы нейронной сети. Количество нейронов в этом слое варьируется в зависимости от конкретной задачи. Например, для решения задачи классификации используется один нейрон.
Важно отметить, что общее количество слоев в реальности практически никогда не равняется трем, так как количество скрытых слоев в сложных нейронных сетях может измеряться в сотнях.
Функция активации
Функции активации добавляют системе нелинейность, что позволяет ей учиться более эффективно и запоминать сложные зависимости данных. Нейроны могут выполнять только линейные преобразования на основании весов и смещения, поэтому функции активации играют ключевую роль в решении сложных задач, которые ставятся перед современными нейросетями.
Основные функции активации:
- сигмоидная функция. Определяется как f(x) = 1 / (1 + e^-x) и преобразует входное значение в число между нулем и единицей. Ранее сигмоидная функция являлась наиболее распространенной функцией активации, но сейчас используется достаточно редко из-за своего существенного недостатка: в большей части точек производная данной функции близка к нулю, что затрудняет процесс улучшения весов и, соответственно, обучения сети. Это и есть проблема исчезающего градиента. Сигмоидная функция может быть задействована в выходных слоях, так как она эффективно справляется с задачами бинарной классификации;
- tanh, или гиперболический тангенс. Определяется как tanh(x) = 2/(1+e^(-2x)) -1 и преобразует входное значение в число между -1 и 1. Фактически tanh является скорректированным вариантом сигмоидной функции и «наследует» от нее проблему исчезающего градиента. При этом tanh имеет значительное преимущество: область ее определения центрирована относительно нуля, то есть, среднее значение для скрытого слоя приближается к нулю, что облегчает обучение следующего слоя. Чаще всего tanh используется в скрытых слоях;
- ReLU (Rectified Linear Unit) — наверное, самая популярная функция активации в данный момент. Определяется как f(x) = max(0, x). То есть если на вход поступило отрицательное значение, то функция вернет ноль, а если положительное — само значение. К плюсам функции можно отнести быстрые вычисления, так как она выполняет простую математическую операцию, и решение проблемы исчезающего градиента. Но есть и значительный минус: из-за того, что все отрицательные входные значения приравниваются к нулю, во время обратного спуска обновление весов для некоторых нейронов может не происходить, что приводит к появлению «мертвых» нейронов — тех, что не задействованы в обучении. Эта проблема решается в функции Leaky ReLU, которая определяется как f(x) = max(0,1x, x);
- softmax. Отличие этой функции от других заключается в том, что она принимает на вход набор чисел, то есть, работает не с одним нейроном. Далее она преобразует этот набор в вероятностное распределение, в котором сумма вероятностей равна 1. Формула выглядит следующим образом:
Например, функция применяется к набору чисел [2, 1, 0.1], тогда e2 ≈ 7,389, e1 ≈ 2,718, e0,1 ≈ 1,105. Знаменатель будет равен сумме этих значений — ≈ 11,212. Результатом применения функции станет набор чисел [0.659, 0.242, 0.099]. Softmax часто используют в выходных слоях для задач классификации.
Таким образом, выбор функции активации полностью зависит от задачи, которую она должна решать.
Финальный этап
На финальном этапе формируется окончательный результат работы сети — это может быть определенный прогноз, который анализируется и оценивается по различным параметрам: точности, полноте и так далее. Здесь применяется функция потерь и происходит оптимизация работы сети.
Алгоритмы глубокого обучения
В зависимости от задачи и области применения используются различные алгоритмы, основными из которых являются сверточные (CNN), рекуррентные (RNN) и генеративно-состязательные (GAN) нейронные сети. Стоит отметить, что для создания сложных нейросетей, таких как, например, Chat GPT или Midjourney требуется больше, чем один алгоритм. Помимо этого, используются кодировщики и декодировщики.
Сверточные нейронные сети — convolutional neural networks
Сверточные нейронные сети (CNN) используются преимущественно для обработки изображений и других визуальных наборов данных и, соответственно, распространены в областях компьютерного зрения, распознавания и классификации объектов.
В основе таких алгоритмов лежит наличие нескольких сверточных слоев, которые выполняют свертку для поиска ключевых признаков входных данных. Цель использования нескольких слоев свертки состоит в том, что каждый слой должен изучать все более сложные признаки данных, полученных на входе.
Например, на первых слоях могут быть выделены края объектов, а на более глубоких — уже детали изображенных элементов. К выходным данным слоев свертки обычно применяется функция ReLU или ее вариации — Leaky ReLU и PReLU. Также используются слои пулинга (pooling layer) — это слои, которые удаляют наименее важные из тех признаков, которые выделили слои свертки. Это нужно для ускорения вычислений и избежания переобучения. Затем выполняется нормализация, и уже нормализованные данные передаются в полносвязный слой, в котором окончательно решается задача классификации или регрессии путем объединения всех полученных признаков.
Рекуррентные нейронные сети — recurrent neural networks, или RNN
Рекуррентные нейронные сети (RNN) — это нейросетевые системы, предназначенные для обработки последовательных данных. Это может быть, например, текст или аудио.
Рекуррентная нейронная сеть предназначена для анализа и генерации текстов, распознавания речи и ее перевода в текстовый формат, машинного перевода и решения других задач, требующих учета предыдущих элементов последовательности. Такое поведение очень схоже, например, с процессом восприятия речи человеком. Люди слушают определенную реплику другого человека, запоминают ее и только так способны понять основную идею и содержание этой реплики.
В основе рекуррентных нейросетей лежит использование скрытых слоев, которые содержат нейроны с рекуррентными связями, что обеспечивает сохранение информации и возможность ее использования для будущих прогнозов. Обычно применяются такие функции активации, как tanh и ReLU. На RNN сильно влияет проблема исчезающего градиента.
Генеративно-состязательные сети — generative adversarial networks, или GAN
Генеративно-состязательные нейронные сети (GAN) состоят из двух элементов: генератора и дискриминатора, которые как бы соревнуются между собой. Генератор создает/генерирует новые данные: фото, видео, текст и другие, которые будут максимально реалистичны. Целью обучения генератора является генерации таких данных, которые дискриминатор не сможет отличить от реальных. Дискриминатор же принимает на вход реальные и сгенерированные данные, после чего сопоставляет их и делает вывод о схожести или различии. Целью обучения дискриминатора является улучшение способности к поиску различий между реальными и сгенерированными данными. Обучение устраивается в такой состязательной манере и продолжается до достижения состояния равновесия. Несложно догадаться, что генеративно-состязательные сети используются для генерации изображений, текста, видео и обработки этих данных: улучшение качества видео или фото, доработка текстов и так далее.
Проблемы deep learning
У глубокого обучения, как направления, есть существенные проблемы, которые замедляют и усложняют процесс обучения:
- требования к данным. Для действительно эффективного обучения требуются большие объемы данных, при этом данные должны соответствовать этическим нормам и быть качественными. Сбор таких данных чаще всего является непростой задачей;
- сложности интерпретации. Специалист не всегда может понять, почему результат работы нейросети получился именно таким, так как он построен на сложных внутренних представлениях сети. Тем не менее специалисты должны искать ответ на этот вопрос по многим причинам: это нужно для корректировки и улучшения алгоритма, а если речь идет, например, о нейросети в области медицины, то от понимания оснований для результатов ее работы буквально может зависеть чья-то жизнь или здоровье;
- необходимость в применении мощных компьютеров и графических процессоров;
- переобучение и недообучение. В первом случае нейросеть настолько «привыкла» к тренировочным данным, что не может взаимодействовать с новыми данными. Во втором случае модель нейросети недостаточно сложна, чтобы эффективно обрабатывать данные;
- большие временные затраты на обучение. Так происходит из-за достаточно сложной «настройки» архитектуры сети (количества слоев, нейронов и так далее), поиска подходящих данных и, конечно же, само по себе обучение нейросетей — это длительный процесс.
Где используется глубокое обучение
Сферы применения deep learning:
- компьютерное зрение. В общем смысле под компьютерным зрением подразумевается распознавание и анализ любых визуальных данных. В частности, это могут быть системы, например, для работы с визуальными результатами медицинских обследований: МРТ, КТ и другие. Такие нейросетевые системы уже показывают большую эффективность и точность в изучении и анализе подобных данных, чем врачи;
- различные рекомендательные системы. Это могут быть рекомендации фильмов/сериалов в онлайн-кинотеатрах на основе просмотренного кино, рекомендации товаров на маркетплейсах на основании данных о том, за чем пользователь заходил на данный маркетплейс в прошлый раз, и любые другие вариации рекомендаций;
- в области образования глубокое обучение используется для отслеживания и оценки прогресса учеников и студентов, а также для формирования индивидуальных программ обучения на основе текущих знаний учащегося;
- обработка естественного языка. Сюда входит распознавание речи, машинный перевод, анализ тональности (настроения, которое передается), голосовые помощники, как, например, Алиса или Салют от Сбера;
- игровая индустрия, в которой могут быть разработаны ИИ-персонажи — они более реалистичные и адаптированные под игрока.
В реальности же методы глубокого обучения применяются и в других областях, не все из которых очевидны. Вероятно, в будущем глубокое обучение будет проникать во все большее количество областей.