deep learning это в машинном обучении
Deep Learning: как это работает? Часть 1
В этой статье вы узнаете
-В чем суть глубокого обучения
-Для чего нужны функции активации
-Какие задачи может решать FCNN
-Каковы недостатки FCNN и с помощью чего с ними бороться
Небольшое вступление
Это начало цикла статей о том, какие задачи есть в DL, сети, архитектуры, принципы работы, как решаются те или иные задачи и почему одно лучше другого.
Какие предварительные навыки для понимания всего нужны? Сказать сложно, но если вы умеете гуглить или правильно задавать вопросы, то, я уверен, мой цикл статей поможет разобраться во многом.
В чем вообще суть глубокого обучения?
Суть в том, чтобы построить некий алгоритм, который принимал бы на вход X и предсказывал Y. Если мы пишем алгоритм Евклида для поиска НОД, то мы просто напишем циклы, условия, присваивания и вот это вот все — мы знаем как построить такой алгоритм. А как построить алгоритм, который на вход принимает изображение и говорит собака там или кошка? Или вовсе ничего? А алгоритм, на вход которого мы подаем текст и хотим узнать — какого он жанра? Вот так просто ручками написать циклы и условия тут не выйдет — тут на помощь и приходят нейронные сети, глубокое обучение и все вот эти модные слова.
Более формально и чуть-чуть о функциях активации
Выражаясь формально, мы хотим построить функцию от функции от функции…от входного параметра X и весов нашей сети W, которая выдавала бы нам некий результат. Тут важно отметить, что мы не можем взять просто много линейных функций, т.к. суперпозиция линейных функций — линейная функция. Тогда любая глубокая сеть аналогична сети с двумя слоями (входом и выходом). Для чего нам нелинейность? Наши параметры, которые мы хотим научиться предсказывать, могут нелинейно зависеть от входных данных. Нелинейность достигается путем использования различных функций активаций на каждом слое.
Fully-connected neural networks(FCNN)
Просто полносвязная нейронная сеть. Выглядит как-то так:
Суть в том, что каждый нейрон одного слоя связан с каждым нейроном следующего и предыдущего (если они есть).
Первый слой — входной. Например, если мы хотим подать изображение 256x256x3 на вход такой сети, то ровно 256x256x3 нейронов во входном слое нам и понадобится (каждый нейрон будет принимать 1 компоненту (R, G или B) пикселя). Если хотим подать рост человека, его вес и еще 23 признака, то понадобится 25 нейронов во входном слое. Кол-во нейронов на выходе — кол-во признаков, которые мы хотим предсказать. Это может быть как 1 признак, так и все 100. В общем случае по выходному слою сети можно почти наверняка сказать — какую задачу она решает.
Каждая связь между нейронами — вес, который тренируется алгоритмом backpropagation, о котором я писал тут.
Какие задачи может решать FCNN
-Задача регрессии. Например, предсказание стоимости магазина по каким-то входным критериям типа страны, города, улицы, проходимости и т.п.
-Задача классификации. Например, классика — MNIST classification.
-Насчет задачи сегментации и обнаружения объектов с помощью FCNN я сказать не возьмусь. Быть может, кто-то поделится в комментариях 🙂
Недостатки FCNN
Глубокое обучение (Deep Learning): краткий туториал
Первым шагом к пониманию того, как работает глубокое обучение, является понимание различий между несколькими важными терминами.
Нейронная сеть (искусственная нейронная сеть) — это попытка воспроизведения работы человеческого мозга на компьютере при помощи слоев нейронов.
Искусственный интеллект — способность машины или программы находить решения при помощи вычислений.
Во время первых исследований в области ИИ ученые пытались воспроизвести человеческий интеллект для решения конкретных задач — например, игры с человеком. Было введено большое количество правил, которым должен следовать компьютер. На основе этих правил компьютер принимал решения в согласии с конкретным списком возможных действий.
Машинное обучение — это попытка научить компьютеры самостоятельно обучаться на большом количестве данных вместо жестко постулированных правил.
Машинное обучение позволяет компьютерам самостоятельно обучаться. Это возможно благодаря вычислительной мощности современных компьютеров, которые могут легко обрабатывать большие наборы данных.
Контролируемое и неконтролируемое обучение
Контролируемое обучение (обучение с учителем, supervised learning) подразумевает использование помеченных наборов данных, содержащих входные данные и ожидаемые выходные результаты. Когда вы обучаете нейронную сеть с помощью контролируемого обучения, вы подаете как входные данные, так и ожидаемые выходные результаты.
Если результат, генерируемый нейронной сетью, неверен, она скорректирует свои вычисления. Это итерационный процесс, оканчивающийся тогда, когда сеть перестает совершать ошибки.
Примером задачи с контролируемым обучением является предсказание погоды. Нейросеть учится делать прогноз погоды с использованием исторических данных. Обучающие данные включают в себя входные данные (давление, влажность, скорость ветра) и выходные результаты (температура).
Неконтролируемое обучение (обучение без учителя, unsupervised learning) — это машинное обучение с использованием наборов данных без определенной структуры.
Когда вы обучаете нейросеть неконтролируемо, она самостоятельно проводит логическую классификацию данных. Примером задачи с неконтролируемым обучением является предсказание поведения посетителей интернет-магазинов. В этом случае сеть не обучается на размеченных даннх. Вместо этого она самостоятельно классифицирует входные данные и отвечает на вопрос, какие пользователи чаще всего покупают различные товары.
Глубокое обучение
Теперь вы подготовлены к изучению того, что такое глубокое обучение и как оно работает.
Глубокое обучение — это метод машинного обучения. Глубокое обучение позволяет обучать модель предсказывать результат по набору входных данных. Для обучения сети можно использовать как контролируемое, так и неконтролируемое обучение.
Разница между машинным и глубоким обучением
Рассмотрим, как работает глубокое обучение, на примере сервиса по оценке стоимости авиабилета. Мы будем обучать его контролируемым образом.
Мы хотим, чтобы наш сервис предсказывал цену на авиабилет по следующим входным данным:
Нейронные сети глубокого обучения
Давайте заглянем внутрь нашей модели. Как и у животных, искусственная нейронная сеть содержит взаимосвязанные нейроны. На диаграмме они представлены кругами:
Глубокая нейронная сеть (с двумя скрытыми слоями)
Нейроны сгруппированы в три различных типа слоев:
Входной слой принимает входные данные. В нашем случае имеется четыре нейрона на входном слое: аэропорт вылета, аэропорт назначения, дата вылета и авиакомпания. Входной уровень передает эти данные в первый скрытый слой.
Скрытые слои выполняют математические вычисления со входными данными. Одна из задач при создании нейронных сетей — определение количества скрытых слоев и нейронов на каждом слое.
Слово «глубина» в термине «глубокое обучение» означает наличие более чем одного скрытого слоя.
Выходной слой выдает результат. В нашем случае это прогноз цены на билет.
Итак, как же вычисляется цена? Здесь вступает в силу магия глубокого обучения. Нейроны связаны между собой с определенным весом. Вес определяет важность элемента входных данных. Исходные веса задаются случайным образом.
При прогнозировании цены на билет дата вылета является одним из наиболее важных факторов. Следовательно, связи нейрона времени вылета будут иметь большой вес.
Каждый нейрон имеет функцию активации. Ее смысл трудно понять без привлечения математических рассуждений. Одной из ее целей является «стандартизация» данных на выходе из нейрона.
После того, как набор входных данных прошел через все слои нейронной сети, функция активации возвращает выходные результаты через выходной уровень.
Обучение глубокой сети
Обучение нейросети — самая сложная часть глубокого обучения. Почему?
Для оценки стоимости билета нужно найти исторические данные о ценах на билеты. Из-за большого количества возможных комбинаций аэропортов и дат вылета нам нужен очень большой список цен на билеты.
Для обучения сети нужно подать в нее подготовленные данные и сравнить сгенерированные ей выходные результаты с результатами из нашего тестового набора данных. Поскольку сеть еще не обучена, результаты будут неверными.
После пропуска всех данных можно определить функцию, которая будет показывать нам, насколько результаты работы алгоритма отличаются от реальных данных. Эта функция называется функцией потерь.
В идеале мы хотим, чтобы функция потерь была равна нулю. В этом случае выходные результаты работы сети полностью совпадают с результатами тестового набора данных.
Как уменьшить значение функции потерь?
Нужно менять веса между нейронами. Можно делать это случайным образом до тех пор, пока функция потерь не станет равной нулю, но это не очень эффективно.
Вместо этого мы будем использовать метод градиентного спуска. Градиентный спуск — это метод, который позволяет найти минимум функции. В нашем случае мы ищем минимум функции потерь.
Суть метода состоит в небольшом изменении весов после каждой итерации. Вычисляя производную (или градиент) функции потерь при определенном наборе весов, можно определить, в каком направлении находится минимум.
Для минимизации функции потерь нужно многократно перебирать данные. Именно поэтому нам требуется большая вычислительная мощность. Уточнение весов с помощью градиентного спуска выполняется автоматически. В этом и состоит магия глубокого обучения!
После обучения можно использовать разработанный нами сервис для прогнозирования цен на авиабилеты.
Deep Learning
Deep learning (глубокое обучение) — это вид машинного обучения с использованием многослойных нейронных сетей, которые самообучаются на большом наборе данных.
Основная логика
Искусственный интеллект с глубоким обучением сам находит алгоритм решения исходной задачи, учится на своих ошибках и после каждой итерации обучения дает более точный результат. Deep learning используют в компьютерном зрении (для извлечения информации из изображений), машинном переводе и распознавании человеческой речи на аудиозаписях.
Кратчайшая история
Первые компьютерные модели нейронных сетей появились в 1943 году. Американские ученые Уолтер Питтс и Уоррен Маккалок создали аналог нейронных сетей человеческого мозга и написали алгоритмы для имитации мыслительного процесса. Позднее исследователи изучали алгоритмы работы искусственных нейросетей, но у технологии были ограничения: для полноценной работы в те годы не хватало мощных компьютеров и объемы имеющихся данных были слишком малы.
В 1970-x появились первые графические процессоры – GPU. Компьютеры с этими компонентами обрабатывали графические данные в сотни раз быстрее, так как GPU специально были заточены только для этой задачи. В будущем это помогло нейронным сетям выиграть конкуренцию у других моделей искусственного интеллекта, например, машины опорных векторов, так как для обучения нейросети нужно быстро перемножить большое количество матриц, а GPU с этим справляются лучше всего.
Современный этап развития глубокого обучения наступил в начале 2010-х годов. Этому помогли рост производительности графических процессоров и появление сверточных нейронных сетей, при создании которых вдохновлялись устройством человеческого глаза. В 2012 году применение deep learning позволило снизить долю ошибок при распознавании объектов на изображениях в рамках проекта ImageNet до 16%. Сегодня нейросети справляются с подобными задачами с точностью до 94-99%, что превышает возможности человека.
Сегодня нейросети применяют и для анализа активности в человеческом мозге. В 2020 году исследователи использовали deep learning для поиска отделов височной доли мозга, отвечающих за распознавание образов у человека.
Machine Learning и Deep Learning
Освойте самую востребованную технологию искусственного интеллекта. Дополнительная скидка 5% по промокоду BLOG.
Как устроены многослойные нейронные сети
Функционально нейросети делят на слои — структуры нейронов с общей задачей.
Входной слой получает набор данных. В простейшем случае каждый нейрон отвечает за один параметр. Например, в нейросетях для прогнозирования цен номеров в отеле это будут название отеля, категория номера и дата заезда. Информацию по этим параметрам входной слой отдает на скрытые слои.
Скрытые слои производят вычисления на основе входящих параметров. В глубоком обучении у нейронных сетей несколько скрытых слоев. Это позволяет нейросети находить больше взаимосвязей во входных данных. Связи между нейронами имеют свой вес — долю значимости параметра среди всехданных. Например, в подсчете цен номеров большой вес будет иметь дата заезда, поскольку отели меняют цены в зависимости от спроса в конкретный день.
Выходной слой выводит результат вычислений, например, цены номеров в отелях.
В глубоком обучении используется больше одного скрытого слоя. Такие модели называют глубокими нейронными сетями (deep neural network). Например, в компьютерном зрении используют сверточные нейросети. В архитектуре таких нейросетей используют множество слоев, подбирая их количество под каждую задачу. Чем дальше информация со входного изображения продвигается по нейросети, тем более абстрактные детали находит нейросеть. Например, на первых слоях модель находит палочки и круги, из которых состоит любое изображение, а в конце сеть уже может найти хвосты и уши для распознавания животных на фотографиях.
Как обучают нейросети в deep learning
Глубокая нейросеть тренируется проводить точные вычисления на больших наборах данных. Например, для обучения расчету цен в отелях нужны массивы данных о ценах за предыдущие годы. Нейросеть будет находить закономерности в параметрах и с каждой итерацией будет прогнозировать цены в определенный день точнее.
В deep learning есть два основных способа тренировки нейросети: с учителем и без учителя. В первом случае нейросети задают эталонный результат вычислений. При ответах с ошибкой она перенастраивает свои параметры и проводит вычисления снова, пока ответ не приблизится к эталону. Пример – определение стоимости дома.
При обучении без учителя глубокая нейросеть сама классифицирует входящие данные и вычисляет эталонный результат. Пример – кластеризация пользователей сайта по разным группам.
Data Science с нуля
Освойте машинное и глубокое обучение и научитесь применять их для решения бизнес-задач. Дополнительная скидка 5% по промокоду BLOG.
Где применяется deep learning
Машинный перевод
В технологии нейронного машинного перевода (NMT) нейросети обучают на миллионах примеров пар фрагментов текста и их переводов. Глубокое обучение позволяет модели анализировать контекст употребления слов и грамматику. Один из самых известных примеров — GNMT, нейронный машинный перевод от Google.
Компьютерное зрение
В технологиях компьютерного зрения deep learning помогает распознавать объекты на изображениях. Для этого нейронные сети анализируют области на фото, находя в них закономерности, полученные при обучении. Например, компьютерное зрение используют в поисковиках: алгоритмы Яндекс и Google способны находить похожие на заданные фотографии. Также глубокое обучение применяют для распознавания лиц на камерах видеонаблюдения и для редактирования фотографий.
Синтез и распознавание речи
Благодаря глубокому обучению технологии обработки и синтеза речи стали очень точными. Обучение многослойных нейросетей позволяет компьютеру распознавать голос с учетом речевых особенностей: произношения, акцента, скорости речи, возраста говорящего. В синтезе речи, например, в голосовых помощниках Siri и Алиса, глубокое обучение позволяет объединять записанные фрагменты так, чтобы голос казался естественным.
Освойте востребованную профессию за 13 месяцев. На курсе вы изучите необходимый набор компетенций для уровня Junior.
Введение в глубокое обучение: пошаговое руководство
Вы когда-нибудь задумывались, как работает Amazon Alexa или Google Translate? В основе работы этих и многих других систем лежит глубокое обучение.
Глубокое обучение (англ. Deep Learning, DL), будучи разновидностью машинного обучения (англ. Machine Learning, ML), произвело революцию в мире технологий и нашло свое применение во всех сферах бизнеса.
В этом вступлении в глубокое обучение мы рассмотрим следующие темы:
Что такое глубокое обучение?
Прежде чем мы углубимся в глубокое обучение, его приложения и платформы, нам сперва нужно понять, что вообще из себя представляет глубокое обучение.
Глубокое обучение — это подраздел машинного обучения, который занимается алгоритмами, основанными на структуре и функциях мозга. Глубокое обучение — это разновидность машинного обучения, которое, в свою очередь, является частью сферы искусственного интеллекта (ИИ).
Искусственный интеллект — это способность машины имитировать разумное поведение человека. Машинное обучение позволяет системе автоматически обучаться и улучшать свой собственный опыт. Глубокое обучение — это разновидность машинного обучения, которая использует сложные алгоритмы и глубокие нейронные сети для обучения моделей.
Применение глубокого обучения
Теперь давайте познакомимся с несколькими вариантами применения глубокого обучения на практике.
Глубокое обучение vs. машинное обучение
Что такое нейронные сети?
Теперь, когда вы знаете, что такое глубокое обучение, где оно применяется и чем отличается от машинного обучения, давайте рассмотрим нейронные сети и их работу.
Нейронная сеть — это система, смоделированная на основе человеческого мозга, состоящая из входного слоя, нескольких скрытых слоев и выходного слоя. Данные поступают на вход нейронной сети. Далее информация передается на следующий уровень с применением соответствующих весов и смещений. На выходе сети оказывается окончательное значение, предсказанное искусственным нейроном.
Каждый нейрон в нейронной сети выполняет следующие операции:
Функция потерь
Функция потерь — один из важнейших компонентов нейронной сети. Потери — это разность между полученным результатом нейронной сети и правильным ответом из размеченного набора обучающих данных. Минимизация функции потерь посредством корректировки весов и смещений производится на протяжении всего процесса обучения.
Как работают нейронные сети?
В этом разделе мы рассмотрим, как нейронная сеть обучается распознавать различные формы. Формы представляют собой изображения размером 28 х 28 пикселей.
Каждый пиксель подается на вход нейронов первого слоя, а скрытые слои будут повышать точность вывода. Данные передаются от слоя к слою по каналам, где они умножаются на разные веса. Причем каждый нейрон в одном слое имеет разные веса по отношению к каждому нейрону в следующем слое.
Каждый нейрон в первом скрытом слое принимает подмножество входных данных и обрабатывает их. Все входные данные умножаются на соответствующие веса и к ним еще добавляется смещение. Результаты функции активации определяют, данные из каких нейронов будут переданы в следующий слой.
Шаг 1: x1*w1 + x2*w2 + b1
Шаг 2: Φ(x1* w1 + x2*w2 + b1)
(Ф — это функция активации).
Вышеупомянутые шаги выполняются снова во втором скрытом слое, после чего информация достигает выходного слоя. А затем один из нейронов в выходном слое должен активироваться (в зависимости от значения функции активации).
Как видите, наш правильный результат был квадратом, но нейронная сеть предсказала круг. Итак, что-то пошло не так?
Нейронную сеть необходимо обучать до тех пор, пока прогнозируемые выходные данные не будут совпадать с правильными. Сравнение осуществляется путем вычисления функции потерь.
Функция потерь определяет ошибку прогноза и сообщает об этом нейронной сети. Это называется алгоритмом обратного распространения ошибки (backpropagation).
Чтобы уменьшить ошибку, мы корректируем веса, и сеть продолжает обучение с ними.
Снова вычисляется функция потерь, и процедура обратного распространения ошибки запускается вновь — до тех пор, пока ошибки не перестанут уменьшаться.
Точно так же нашу сеть можно обучить предсказывать круги и треугольники.
Марк Лутц «Изучаем Python»
Скачивайте книгу у нас в телеграм
Платформы глубокого обучения
Теперь, когда вы хорошо понимаете, как работают нейронные сети, давайте кратко рассмотрим некоторые из основных платформ глубокого обучения.
Torch
Torch был разработан с использованием языка LUA и реализован на языке C. Реализация на языке Python называется PyTorch.
Keras
Keras — это фреймворк Python для глубокого обучения. Его большим плюсом является возможность использовать код как на CPU, так и на GPU.
TensorFlow
TensorFlow — это библиотека глубокого обучения с открытым исходным кодом, созданная Google. Она разработана на C++ и реализована на Python. Keras можно запускать поверх TensorFlow.
Deep Learning for Java (DL4J) — первая библиотека глубокого обучения, написанная для Java и Scala. Она интегрирована с Hadoop и Apache Spark.
Введение в TensorFlow
TensorFlow от Google в настоящее время является самой популярной библиотекой глубокого обучения в мире. Она основана на концепции тензоров, которые являются векторами или матрицами в n-мерном пространстве.
Ниже приведен пример одномерного, двухмерного и трехмерного тензоров.
Все вычисления, выполняемые с использованием TensorFlow, включают в себя тензоры.
Ниже представлена простая архитектура работы TensorFlow:
Реализация кейса при помощи TensorFlow
Давайте воспользуемся набором данных из репозитория машинного обучения UCI и предскажем (на основе определенных критериев), превышает ли доход человека 50 тысяч долларов в год.
Этот набор данных имеет следующие атрибуты:
Приступим к демонстрации:
2. Определим пути, где расположены наши данные, а также зададим переменные столбцов.
3. При помощи библиотеки Pandas создадим тестовый и обучающий набор данных:
4. Выведем на экран размер тестового и обучающего набора данных:
5. Установим для столбца label значение 0 — если оно = 50 000.
6. Подсчитаем общее количество уникальных значений в наборах данных:
7. Проверим типы данных в наших столбцах:
8. Разделим переменные на категориальные и числовые (непрерывные):
9. Создадим непрерывные переменные:
11. Создаем модель с двумя классами и непрерывными и категориальными переменными:
12. Присваиваем значения и определяем функцию:
14. Оцениваем модель:
15. Возводим переменную age в квадрат:
16. Создаем новый датафрейм, состоящий из обучающих и тестовых данных:
17. Заново определяем категориальные и непрерывные переменные:
18. Создаем модель с линейным классификатором:
19. Присваиваем новые значения и заново определяем функцию:
21. Оцениваем модель:
22. Осуществляем предсказание при помощи обученной модели:
23. Проверяем предсказание на тестовом наборе данных:
Как видите, модель успешно смогла предсказать два результата из набора тестовых данных.
Заключение
Надеемся, что после прочтения этой статьи вы уже лучше понимаете, как работают нейронные сети, что такое веса, смещения и функции активации. Также вы узнали о TensorFlow и о том, как работают тензоры. Наконец, вы знаете, как использовать TensorFlow для классификации людей по их заработной плате на основе конкретных характеристик.