Привет всем

Кибенематика - математическая кибернетика с намеком на отсыл к едреней фене__(АБС)__

среда, 20 января 2021 г.

Глубокие нейронные сети: пути применения


2021-01-19 19:01

     Этот материал — часть курса «Глубокое обучение», который мы делаем вместе с организаторами технологического конкурса UpGreat ПРО//ЧТЕНИЕ. Специалист по Computer Science Виктор Лемпицкий рассказывает о глубоких нейронных сетях и задачах, которые они решают.

       Глубокая нейронная сеть представляет собой сложную программу, состоящую из большого количества внутренних (скрытых) слоев с настраиваемыми параметрами — весовыми коэффициентами искусственных нейронов, составляющих каждый слой сети. На первый, входной слой сеть принимает вектор признаков, описывающих объект — данные в виде сигналов. На внутренних слоях происходит их обработка: входной вектор умножается на матрицу связей, и сформированный таким образом вектор новых признаков передается в следующий слой. Результат обработки сигнала отправляется на выходной слой сети.

       Каждая нейросеть содержит множество параметров, которые невозможно настроить вручную, и поэтому мы обучаем нейросеть на массиве данных: в процессе обучения и переобучения весовые коэффициенты нейронов непрерывно меняются и настраиваются так, что результат вычислений и обработки сигналов становится осмысленным. Настройка весовых коэффициентов производится при помощи простого алгоритма оптимизации, основанного на методе градиентного спуска, используя который можно проследить, как меняется результат обработки сигналов нейросетью при небольшом изменении каждого ее весового коэффициента. Настройка весов происходит в каждом слое нейросети — именно поэтому ее и называют глубокой.

       Чем сложнее устроена нейросеть, то есть чем больше слоев и нейронов она имеет и чем больше вычислительных операций она выполняет, тем, как правило, лучший результат она выдает, но и тем труднее нам понять, что происходит в ее внутренних слоях. Но последнее время мы стали лучше разбираться в том, как выполняются операции в скрытых слоях нейронной сети, благодаря появлению новых алгоритмов, помогающих визуализировать все процессы внутри нее.

Методы обучения нейронной сети

       Перед тем как начать обучать нейросеть, чтобы с ее помощью решить новую задачу, которой до того никто не занимался, необходимо собрать и подготовить обучающую выборку, и обычно на это уходит бо?льшая часть времени.

      В области компьютерного зрения большинство задач уже известны, и почти для любой из них существует обучающая выборка, с которой можно начать работу с нейросетью. Но чтобы решить задачу более эффективно, приходится собирать новые данные (картинки, видео и так далее) и либо размечать их, либо оставлять для нейросети определенные подсказки, как ей эти данные обрабатывать.

      Важно собрать большой массив данных, поскольку, даже имея нейросеть с простой архитектурой, вы получите лучший результат, чем если бы ту же задачу решала нейросеть со сложной архитектурой, но обучаясь на выборке меньшего размера. Однако сейчас на первый план выдвигается обучение на смешанных наборах данных, например когда сеть обучается на двух наборах данных, один из которых большой и разнообразный, но либо имеющий ошибки в разметке данных, либо вообще неразмеченный, а другой набор данных правильно обработан и размечен, но маленький и недостаточно разнообразный. В таком случае необходимо придумать новый, нестандартный алгоритм, с помощью которого можно будет обучать нейросеть по обеим таким выборкам одновременно.

      Среди парадигм обучения искусственных нейронных сетей различают алгоритмы обучения с учителем и без учителя. Первый предполагает наличие обучающей выборки данных, которая состоит из пар входных и целевых векторов (то есть известны условия задачи и само решение) и которую предъявляют нейронной сети. Каждый обучающий пример подается на вход сети, далее во внутренних слоях происходит его обработка, вычисляется выходной сигнал сети, и он сравнивается со значением целевого вектора — ожидаемым результатом. На основе этого вычисляется сигнал ошибки, который учитывается при дальнейшей перенастройке весовых коэффициентов нейронов сети. Процесс такой корректировки весов происходит до тех пор, пока значение ошибки по всему множеству входных векторов обучающего массива не станет минимальным на отложенном (валидационном) наборе данных. Благодаря этому сеть учится.повторять разметку данных, сделанную учителем, и, как следствие, делать разумные предсказания для новых данных.

       Обучение без учителя происходит тогда, когда известны только входные векторы, на основе которых нейронная сеть учится искать в этих данных какие-то закономерности и давать лучший результат — значение выходного сигнала. Какие именно векторы будут сформированы на выходе, зависит от конкретного типа обучения без учителя.

      Работа с нейросетью организуется наиболее эффективно, если обучение без учителя свести к обучению с учителем. Очень много прорывов последних пяти лет в этом направлении связано с использованием именно такой схемы, суть которой заключается в следующем. Мы отдаем нейросети поврежденные данные — это могут быть фразы, в которых отсутствует слово или его части, и тогда нейросеть пытается восстановить эти пробелы. Или показываем нейросети черно-белые фотографии, и она должна восстановить их цвет. Перед тем как поставить нейросети подобную задачу и запустить обучение, нам не нужно размечать данные, определяя, какой итоговый результат должен быть: у нас уже есть в огромном количестве подобные картинки, которые можно скачать из интернета. Но с точки зрения самой нейросети такое обучение похоже на обучение с учителем, поскольку на вход дается черно-белая картинка или фраза с закрытым словом и ей нужно восстановить данные известным на момент обучения образом.

      Промежуточным звеном между обучением с учителем, когда после каждого шага нейросети эксперт указывает ей, ошиблась ли она или выдала правильный результат, и обучением без учителя, при котором нейросети не приходит из внешней среды никаких явных подсказок, является обучение с подкреплением. Оно помогает научить нейросеть не предсказывать нужные значения, а вести себя определенным образом, например создавать тексты определенного жанра. Это очень похоже на то, как учится человек: нейросеть, учитывая собственный опыт и последствия тех или иных собственных действий, меняет модель принятия решений.

       Удобнее всего прибегать к обучению с учителем, но только когда есть хороший источник размеченных данных либо когда мы можем необходимые данные собрать и разметить. Но обычно ситуация такова, что объем выборки слишком велик и потому данные сложнее подготовить. Тогда проводится обучение без учителя, а затем нейросеть доучивается на небольшом размеченном наборе данных. В связи с этим можно вспомнить один из методов в машинном обучении — это перенос данных, когда нейросеть, обученную решать конкретную задачу, переключают на новую задачу, имея ограниченное количество новых данных. Допустим, нейросеть научилась распознавать породы собак, а теперь мы хотим, чтобы она разбиралась и в породах кошек. И поскольку собаки и кошки чем-то похожи, например шерстью, то опыт, который нейросеть получила, когда научилась распознавать собак, можно использовать при решении этой новой задачи.

       Однако здесь мы сталкиваемся с принципиальным ограничением, которое исследователи еще не преодолели. Дело в том, что, хотя за последнее время нейросети сильно выросли по вычислительным мощностям и объему настраиваемых параметров, алгоритмы позволяют переносить данные только между похожими задачами. В рамках компьютерного зрения создаются нейросети, которые учатся решать одновременно все большее количество разнообразных задач, но в конце концов любой нейросети в какой-то момент перестает хватать вычислительных ресурсов, и эффективность ее работы на каждой конкретной задаче начинает падать. Скорее всего, это говорит о несовершенстве существующих алгоритмов, и пока нейронные сети уступают человеческому мозгу в способности переносить данные при решении разных задач.

Возможности нейросетей

      Есть задачи, которые нейросети решают на том же уровне, что и человек, и даже лучше: например, они распознают хорошо освещенные, хорошо сфотографированные лица, точнее предсказывают структуру белка, обыгрывают людей в шахматы и го. Уже сейчас им поручено отсматривать камеры видеонаблюдения и реагировать на ситуации, влекущие за собой опасность для человека.

      Но нейросети пока хуже, чем люди, оценивают степень точности собственных предсказаний, и если человек может признать свою неуверенность в чем-либо, то нейросеть никогда такого не скажет. Допустим, если мы покажем нейросети, обученной решать задачу распознавания пород кошек, овцу, то она уверенно отнесет ее к какой-нибудь породе кошек. Отсюда вытекает следующая проблема: если в разметке данных допущены ошибки, то нейросеть их просто не задумываясь выучит.

      Но все-таки наибольшая эффективность в решении большинства задач достигается благодаря сотрудничеству человека и нейросети, которые дополняют друг друга. Например, лучшими игроками в го или шахматы являются «кентавры» — команды, состоящие из нейросети и человека; хотя последнее время, возможно, некоторые нейросети получают уже меньше преимуществ от партнерства с человеком. Однако игра в шахматы или го — это иску Нсственно созданная ситуация, а в реальном мире с тем, что связано с пониманием нужд других людей

и подразумевает common sense («здравый смысл»), человек справляется гораздо лучше нейросетей.

Глубокая нейронная сеть-->

Компьютерное зрение

      Почти все задачи компьютерного зрения лучше всего решаются при помощи сверточных нейросетей, которые являются универсальной, гибкой архитектурой, обрабатывающей разные типы сигналов: одномерные (голос), двухмерные (изображение), трехмерные (3D-объекты). Особенностью таких сетей являются слои свертки, в которых информация, поступающая от предыдущего слоя, обрабатывается локально, по фрагментам. Параметры слоев сверток (так называемые ядра) определяются самой нейросетью уже в процессе обучения.

      Вычисления активации каждого следующего слоя бывают двух основных типов. Прежде всего, это собственно свертка — вычисление линейной комбинации активаций нейронов предыдущего слоя, благодаря которому формируется карта признаков, которая показывает наличие конкретного признака в обрабатываемом слое. Каждая свертка создает новое описание объекта (поэтому на выходе сети мы имеем массив изображений). После этого происходят вычисления в слое пулинга — изображение становится в несколько раз меньше, поскольку активация расположенных рядом друг с другом нейронов заменяется на их максимум или среднее значение. Слои свертки и пулинга чередуются друг с другом, и таким образом два этих типа вычислений происходят попеременно. Результатом обработки данных сверточной сетью является изображение минимального размера, но большой размерности, в котором закодирована вся интересующая нас информация об объектах на снимке.

      Применение сверточных сетей в компьютерном зрении позволяет извлекать из изображений полезную информацию и создавать распознающие алгоритмы, а также анализировать собираемые данные. Это в том числе важно в распознавании и обработке биомедицинских изображений (например, снимков, полученных магнитно-резонансным томографом) для более точной диагностики заболеваний.

      Нейросети широко используются в задачах навигации беспилотного транспорта. Основная проблема, с которой мы здесь сталкиваемся, связана с повышением уровня надежности и безопасности работы беспилотников. Пока он не выше, чем у человека, и повысить его средствами только лишь машинного обучения, как оказалось, очень сложно, и поэтому общество пока не согласно принять беспилотные автомобили.

       Возможно, главная сложность связана с построением модели поведения людей — пешеходов, водителей, — чтобы у беспилотника была возможность предсказывать действия других участников движения. Беспилотные автомобили оснащены различными системами распознавания, например, дорожных знаков и автопилотирования, благодаря которым получают определенный набор информации об окружающем мире, расположении и движении объектов, и на основе этого корректируют свое движение: скорость, траекторию и так далее. Тем не менее это не уберегает их от ошибок.

      Известна история, когда Tesla ехала по дороге, собирая с камер информацию об окружающей среде, и на полной скорости врезалась в белый грузовик, перегородивший путь. Оказалось, что система распознавания никогда не получала подобного обучающего примера, приняла белый трейлер за ярко освещенное облако и потому не стала тормозить. При этом и сам водитель грузовика допустил ошибку, нарушив правила, рассчитывая, что автомобили на главной дороге остановятся (в такой ситуации человек бы быстро все проанализировал и среагировал правильным образом).

      Как избежать подобных аварий — сложный вопрос. Есть экстенсивный путь решения проблемы — показывать нейросети очень много примеров ситуаций, когда люди нарушают правила дорожного движения. Допустим, мы построим фотореалистичный мир, симуляцию, которая будет генерировать такие примеры сама или получать их извне — скажем, от компаний, занимающихся разработкой и тестированием систем автономного вождения. Однако все равно остается вероятность того, что какое-то сочетание факторов, которое может привести к аварии, мы не учтем и не отдадим нейросети на изучение.

Синтез изображений и мультипликация

       Не так давно стало известно, что нейросети могут не только распознавать, но и синтезировать изображения — это делать нейросетям сложнее, поскольку, чтобы генерировать новые изображения лиц, компьютер должен лучше понимать, что такое лицо, чем при решении обычной задачи распознавания. Первые работы в этой области появились в начале 2010-х годов — в частности, в 2014 году была опубликована статья Алексея Досовицкого, посвященная синтезу изображений стульев (очень разнообразного класса объектов). Это вызвало большой интерес у исследователей, и методы нейросетевого синтеза изображений стали активно развиваться.Сейчас разрабатывается большой класс алгоритмов, включающих как элементы классических методов компьютерной графики, не связанных с машинным обучением, так и собственно глубокое обучение, и они дают новые интересные результаты.

      Одним из применений подобных нейросетей, синтезирующих изображения, будут системы телеприсутствия, с помощью которых люди смогут общаться на расстоянии, видя трехмерное изображение друг друга, используя для того различные технические средства: трехмерные мониторы, очки виртуальной и дополненной реальности и так далее. Вопрос состоит в том, как рисовать аватары людей с максимальной реалистичностью: внешность, мимику, движения, жестикуляцию, чтобы сохранить невербальную часть общения, благодаря которой разговор становится интереснее и создается эффект присутствия. Чтобы решить эту задачу, мы должны обучить нейросеть на огромном массиве видеозаписей, а также фотографий людей.

      Перспективной сферой применения нейросетей является мультипликация и кинематограф. Сейчас нейросети могут генерировать мультфильмы по текстовому описанию, пусть и допуская ошибки, но тем не менее облегчая работу мультипликаторам, и писать музыку к фильмам и даже сценарии. Кроме того, они удешевляют и упрощают процесс создания визуальных спецэффектов в фильмах там, где обычно используется традиционная компьютерная графика.

Машинный перевод

       Задача машинного перевода сводится к работе с последовательностями: у нас есть некоторая входная последовательность слов на одном языке, например фраза или целый абзац, и нам нужно получить ту же последовательность слов на другом языке. Одна фраза, как правило, включает не более ста слов, что гораздо меньше, чем содержится пикселей в одной картинке. Но при этом каждый ее элемент гораздо сложнее, чем пиксель, — большинство алгоритмов работает на уровне слов, где слово приходит из словаря большого размера.

        В подобных ситуациях лучше всего работает трансформер — архитектура, которая появилась в середине 2010-х годов и уже получила наилучшие результаты в анализе текстов и машинном переводе. Суть работы нейросети-трансформера заключается в том, что каждый элемент текста по отдельности обрабатывается и записывается как вектор, сохраняя свое положение в последовательности. На каждой стадии обработки включается так называемый механизм внимания: при обновлении вектора, описывающего конкретное слово, трансформер фокусируется на некоторых словах фразы, причем степень фокусировки (внимания) предсказывается самим трансформером исходя из векторов-представлений, подсчитанных на предыдущих шагах. Векторы слов, на которых трансформер обратил внимание, складываются друг с другом, умножаются на матрицу, и получившийся вектор (так называемый вектор контекста) используется для обновления представления нашего слова. Обновления представлений для разных слов происходят не последовательно, как в рекуррентных сетях, а параллельно. 

      Несмотря на преимущества трансформера перед другими нейросетями, например рекуррентными и сверточными, нейросети сложно создать качественный художественный перевод, поскольку она пока не улавливает тонкости, что составляют суть такого перевода. И лучше всего нейросеть делает перевод юридической литературы и похожих типов текста, где легко можно собрать обучающие данные и распространены шаблонные речевые обороты.


Источник: . postnauka.ru


Комментариев нет:

Отправить комментарий