NVidia представили городскую среду, созданную генеративной нейронной сетью

3 декабря 2018
GAN - Nvidia sreda ai

NVidia представили городскую среду, созданную генеративной нейронной сетью

Команда Nvidia обучила генеративную нейросеть (GAN) рендерингу окружающей среды после обучения на реальных видео, снятых в разных городах. Этот прорыв позволит разработчикам и художникам создавать новые интерактивные 3D-миры в виртуальной…

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

Алгоритм был разработан командой исследователей NVIDIA во главе с Брайаном Катандзаро, Вице-президентом по прикладному глубокому обучению в NVIDIA.

«Одним из главных препятствий, с которыми сталкиваются разработчики при создании виртуальных миров, будь то разработка игр или других приложений — высокая стоимость создания контента. Этот метод позволяет художникам и разработчикам создавать 3D модели с гораздо меньшими затратами, используя ИИ, который обучается сам», — сказал Катандзаро.

Исследование в настоящее время демонстрируется на конференции NeurIPS в Монреале, на которую съехались самые известные исследователи искусственного интеллекта в мире. Исследовательская группа создала простую игру для NeurIPS, которая позволяет интерактивно перемещаться по среде, созданной AI.

Демонстрация стала возможной благодаря NVIDIA Tensor Core GPU и дает людям совершенно новый способ испытать интерактивную графику.

«До появления тензорных ядер такая демонстрация была бы невозможна», — сказал Катандзаро.

Сеть работает на высокоуровневых описаниях сцены, например: карты сегментации или карты границ, которые описывают, где находятся объекты и их общие характеристики, например, содержит ли конкретная часть изображения автомобиль или здание, или где края объекта. Затем сеть заполняет детали, основываясь на том, что она узнала из реальных видеороликов.

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

Поскольку выход генерируетсясинтетически , сцена может быть легко отредактирована для удаления, изменения или добавления объектов.

Для обучения команда использовала графические процессоры NVIDIA Tesla V100 на DGX-1 на PyTorch с ускорением cuDNN и тысячами видео из наборов данных Cityscapes и Apolloscapes.

Стартап из Лондона превращает в интерфейс любую поверхность

21 ноября 2018
startup interface

Стартап из Лондона превращает в интерфейс любую поверхность

Стартап из Лондона HyperSurfaces превращает любую поверхность в пульт управления. С помощью датчиков и машинного обучения они готовы сделать из «объекта из любого материала, любой формы и размеров» пользовательский интерфейс.…

Стартап из Лондона HyperSurfaces превращает любую поверхность в пульт управления. С помощью датчиков и машинного обучения они готовы сделать из «объекта из любого материала, любой формы и размеров» пользовательский интерфейс.

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

Вот некоторые из примеров интерфейса, которые создают разработчики HyperSurfaces:

  • деревянный кухонный стол, который можно использовать для управления освещением или комнатной температурой;
  • пол, который может определить, является ли злоумышленник в вашем доме просто кошкой или потенциальным вором;
  • поверхность двери, которая превращается в один большой интерфейс;
  • внутренняя поверхность дверцы автомобиля, которая действует как пульт управления без кнопки.

Технология объединяет данные с вибрационных сенсоров с алгоритмами нейронных сетей, работающими на выделенных микрочипах. Датчики принимают на вход только вибрации.

интерфейс из любой поверхности
Датчик на двери

«Каждый раз, когда мы взаимодействуем с объектом, мы создаем отличительный вибрационный паттерн, который специализированные датчики в сочетании с нашими запатентованными алгоритмами превращают в цифровые команды», — сказал Бруно Замборлин, который возглавляет международную команду разработчиков, разделенную между Лондоном и Лос-Анджелесом.

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

Разработка системы продолжается, но вы можете увидеть, как вскоре будет выглядеть будущее интерфейса в промо-видео ниже:

«HyperSurfaces стремится революционизировать то, как мы живем, смешивая мир данных внутри любого объекта вокруг нас», — говорится в пресс-релизе компании. «Потребительская электроника, IoT, розничная торговля, транспорт, расширенная реальность, умные объекты, все эти области потенциально могут быть изменены навсегда».

Градиентный спуск: всё, что нужно знать

20 ноября 2018
градиентный спуск метод

Градиентный спуск: всё, что нужно знать

Градиентный спуск — самый используемый алгоритм обучения, он применяется почти в каждой модели машинного обучения. Градиентный спуск — это, по сути, и есть то, как обучаются модели. Без ГС машинное обучение не…

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

В этом посте вы найдете объяснение градиентного спуска с небольшим количеством математики. Краткое содержание:

  • Смысл ГС — объяснение всего алгоритма;
  • Различные вариации алгоритма;
  • Реализация кода: написание кода на языке Phyton.

Что такое градиентный спуск

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

Итак, градиентный спуск нужен для минимизации функции потерь.

Суть алгоритма – процесс получения наименьшего значения ошибки. Аналогично это можно рассматривать как спуск во впадину в попытке найти золото на дне ущелья (самое низкое значение ошибки).

градиентный спуск пример
Поиск минимума функции

В дальнейшем, чтобы найти самую низкую ошибку (глубочайшую впадину) в функции потерь (по отношению к одному весу), нужно настроить параметры модели. Как мы их настраиваем? В этом поможет математический анализ. Благодаря анализу мы знаем, что наклон графика функции – производная от функции по переменной. Это наклон всегда указывает на ближайшую впадину!

На рисунке мы видим график функции потерь (названный «Ошибка» с символом «J») с одним весом. Теперь, если мы вычислим наклон (обозначим это dJ/dw) функции потерь относительно одного веса, то получим направление, в котором нужно двигаться, чтобы достичь локальных минимумов. Давайте пока представим, что наша модель имеет только один вес.

Функция потерь J
Функция потерь

Важно: когда мы перебираем все учебные данные, мы продолжаем добавлять значения  dJ/dw для каждого веса. Так как потери зависят от примера обучения, dJ/dw также продолжает меняться. Затем делим собранные значения на количество примеров обучения для получения среднего. Потом мы используем это среднее значение (каждого веса) для настройки каждого веса.

Также обратите внимание: Функция потерь предназначена для отслеживания ошибки с каждым примером обучениям, в то время как производная функции относительного одного веса – это то, куда нужно сместить вес, чтобы минимизировать ее для этого примера обучения. Вы можете создавать модели даже без применения функции потерь. Но вам придется использовать производную относительно каждого веса (dJ/dw).

Теперь, когда мы определили направление, в котором нужно подтолкнуть вес, нам нужно понять, как это сделать. Тут мы используем коэффициент скорости обучения, его называют гипер-параметром. Гипер-параметр – значение, требуемое вашей моделью, о котором мы действительно имеем очень смутное представление. Обычно эти значения могут быть изучены методом проб и ошибок. Здесь не так: одно подходит для всех гипер-параметров. Коэффициент скорости обучения можно рассматривать как «шаг в правильном направлении», где направление происходит от dJ/dw.

Это была функция потерь построенная на один вес. В реальной модели мы делаем всё перечисленное выше для всех весов, перебирая все примеры обучения. Даже в относительно небольшой модели машинного обучения у вас будет более чем 1 или 2 веса. Это затрудняет визуализацию, поскольку график будет обладать размерами, которые разум не может себе представить.

Подробнее о градиентах

Кроме функции потерь градиентный спуск также требует градиент, который является dJ/dw (производная функции потерь относительно одного веса, выполненная для всех весов). dJ/dw зависит от вашего выбора функции потерь. Наиболее распространена функция потерь среднеквадратичной ошибки.

Функция потерь среднеквадратической ошибки

Производная этой функции относительно любого веса (эта формула показывает вычисление градиента для линейной регрессии):

градиентный спуск формула

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

Коэффициент скорости обучения

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

Однако проблема у большинства моделей возникает с коэффициентом скорости обучения. Давайте взглянем на обновленное выражение для каждого веса (j лежит в диапазоне от 0 до количества весов, а Theta-j это j-й вес в векторе весов, k лежит в диапазоне от 0 до количества смещений, где B-k — это k-е смещение в векторе смещений). Здесь alpha – коэффициент скорости обучения. Из этого можно сказать, что мы вычисляем dJ/dTheta-j ( градиент веса Theta-j), и затем шаг размера alpha в этом направлении. Следовательно, мы спускаемся по градиенту. Чтобы обновить смещение, замените Theta-j на B-k.

формула градиентный спуск

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

Минимум функции - градиентный спуск

Использование градиентного спуска

Что ж, вот и всё. Это всё, что нужно знать про градиентный спуск. Давайте подытожим всё в псевдокоде.

Примечание: Весы здесь представлены в векторах. В более крупных моделях они, наверное, будут матрицами.


От i = 0 до «количество примеров обучения»

1. Вычислите градиент функции потерь для i-го примера обучения по каждому весу и смещению. Теперь у вас есть вектор, который полон градиентами для каждого веса и переменной, содержащей градиент смещения.

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

3. Подобно ситуации с весами, добавьте градиент смещения к аккумулятивной переменной.


Теперь, ПОСЛЕ перебирания всех примеров обучения, выполните следующие действия:

1. Поделите аккумулятивные переменные весов и смещения на количество примеров обучения. Это даст нам средние градиенты для всех весов и средний градиент для смещения. Будем называть их обновленными аккумуляторами (ОА).

2. Затем, используя приведенную ниже формулу, обновите все веса и смещение. Вместо dJ / dTheta-j вы будете подставлять ОА (обновленный аккумулятор) для весов и ОА для смещения. Проделайте то же самое для смещения.

Это была только одна итерация градиентного спуска.

Повторите этот процесс от начала до конца для некоторого количества итераций. Это означает, что для 1-й итерации ГС вы перебираете все примеры обучения, вычисляете градиенты, потом обновляете веса и смещения.  Затем вы проделываете это для некоторого количества итераций ГС.

Различные типы градиентного спуска

Существует 3 варианта градиентного спуска:

1. Мini-batch: тут вместо перебирания всех примеров обучения и с каждой итерацией, выполняющей вычисления только на одном примере обучения, мы обрабатываем n учебных примеров сразу. Этот выбор хорош для очень больших наборов данных.

2. Стохастический градиентный спуск: в этом случае вместо использования и зацикливания на каждом примере обучения, мы ПРОСТО ИСПОЛЬЗУЕМ ОДИН РАЗ. Есть несколько вещей замечаний:

  • С каждой итерацией ГС вам нужно перемешать набор обучения и выбрать случайный пример обучения.
  • Поскольку вы используете только один пример обучения, ваш путь к локальным минимумам будет очень шумным, как у пьяного человека, который много выпил.

3. Серия ГС: это то, о чем написано в предыдущих разделах. Цикл на каждом примере обучения.

локальный минимум градиентный спуск
Картинка, сравнивающая 3 попадания в локальные минимумы

Пример кода на python

Применимо к cерии ГС, так будет выглядеть блок учебного кода на Python.


def train(X, y, W, B, alpha, max_iters):
'''
Performs GD on all training examples,
X: Training data set,
y: Labels for training data,
W: Weights vector,
B: Bias variable,
alpha: The learning rate,
max_iters: Maximum GD iterations.
'''
dW = 0 # Weights gradient accumulator
dB = 0 # Bias gradient accumulator
m = X.shape[0] # No. of training examples
for i in range(max_iters):
dW = 0 # Reseting the accumulators
dB = 0
for j in range(m):
# 1. Iterate over all examples,
# 2. Compute gradients of the weights and biases in w_grad and b_grad,
# 3. Update dW by adding w_grad and dB by adding b_grad,
W = W - alpha * (dW / m) # Update the weights
B = B - alpha * (dB / m) # Update the bias return W, B # Return the updated weights and bias.

Вот и всё. Теперь вы должны хорошо понимать, что такое метод градиентного спуска.

ИИ в кибербезопасности: решение проблем или опасная азартная игра?

27 августа 2018
Риски искусственный интеллект безопасность

ИИ в кибербезопасности: решение проблем или опасная азартная игра?

В Лас-Вегасе 3-7 августа проходила конференция по кибербезопасности Black Hat. На ней выявилась одна четкая тенденция — крупные компании готовы доверить защиту против хакерских атак искусственному интеллекту. Для этого есть…

В Лас-Вегасе 3-7 августа проходила конференция по кибербезопасности Black Hat. На ней выявилась одна четкая тенденция — крупные компании готовы доверить защиту против хакерских атак искусственному интеллекту. Для этого есть две причины:

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

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

Конференция Black Hat 2018
Конференция Black Hat 2018

Риск №1: Ложное чувство безопасности

Кажущаяся устойчивость ИИ к вредоносному ПО заставляет ослабить контроль за системами безопасности. Машинное обучение показывает отличные результаты во многих областях, и предприниматели ищут возможности применить его для обеспечения безопасности своего бизнеса. Они досконально не изучают возможные риски от передачи обязанностей программе, полностью полагаясь на поставщиков ИИ. Злоумышленники, как внедрясь в ряды сотрудников компании-разрабочика, так и удаленно, смогут «заражать» такое ПО.

Риск №2: Датасеты, размеченные с ошибками

Для обучении ИИ необходим набор данных, который требует предварительной разметки (supervised learning). Из желания как можно скорее вывести продукт на рынок и сэкономить, компании начнут обучать свои ИИ на наборах, из которых не были до конца удалены аномальные данные. На выходе это приведет к непредсказуемым ошибкам в работе. Например, гражданская техника будет по ошибке размечена как военная, а в ходе конфликта ИИ примет решения об уничножении этого «военного объекта».

Риск №3: Уязвимости мастер-алгоритма

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

Вывод

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

Слайд с конференции Black Hat 2018
Слайд с конференции Black Hat 2018

По материалу MIT Technology Review.

Туториал Nvidia для разработчиков: оптимизация RNN с помощью TensorRT

22 августа 2018
tensorrt tutorial

Туториал Nvidia для разработчиков: оптимизация RNN с помощью TensorRT

Видео демонстрирует, как настроить простую рекуррентную нейронную сеть (RNN) на основе языковой модели на уровне символов. Хотя этот образец построен с использованием C ++, вы можете реализовать его на Python…

Видео демонстрирует, как настроить простую рекуррентную нейронную сеть (RNN) на основе языковой модели на уровне символов. Хотя этот образец построен с использованием C ++, вы можете реализовать его на Python с помощью TensorRT Python API.

При помощи NVIDIA TensorRT вы можете быстро оптимизировать и развертывать натренированные нейронные сети для проведения инференса. TensorRT обеспечивает повышение производительности инференса до 40 раз при задержках менее 7 миллисекунд по сравнению с системами на базе CPU.

К 2030 году ЕГЭ будет полностью проверяться искусственным интеллектом

16 августа 2018
проверка ЕГЭ искусственный интеллект

К 2030 году ЕГЭ будет полностью проверяться искусственным интеллектом

Единый государственный экзамен (ЕГЭ) намерены усовершенствовать, привлекая искусственный интеллект к проверке. Пока выбран 2030 год, разработчики считают, что к тому времени удастся создать вычислительную технику, способную проверить в не только части экзамена с…

Единый государственный экзамен (ЕГЭ) намерены усовершенствовать, привлекая искусственный интеллект к проверке. Пока выбран 2030 год, разработчики считают, что к тому времени удастся создать вычислительную технику, способную проверить в не только части экзамена с тестовыми заданиями, но и развернутые ответы из части С.

Сейчас машинам доверяют только тестовые задания, а остальные проверяют 40 000 преподавателей и экспертов.

Внедрение уже началось

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

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

В Российской Федерации уже развиваются компьютерные технологии, которые предлагают логические алгоритмы или готовые решения, а через 12 лет они станут значительно лучше, поделилась своими рассуждениями Ирина Абранкина – директор института развития образования. Специально написанная программа будет составлять новые задания для экзамена. Разработчики предложат вопросы, а искусственный интеллект подберет свои, аналогичной сложности.

Не высока ли цена за объективность?

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

Кроме этого, компьютеризация проверки ЕГЭ снизит творческий потенциал учеников, считает Сергей Комков:

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

По мнению руководителя отрасли Института современного развития «Финансы и экономика» Никиты Масленникова, создание подобного алгоритма обойдется государству в миллиарды рублей.

Видео: как писать научные статьи на тему Computer vision

15 августа 2018
как писать статьи computer vision

Видео: как писать научные статьи на тему Computer vision

Рассказывает Виктор Лемпицки из Оксфордского университета: какие пункты обязательны в статье на тему Computer Vision, на что обращают внимание рецензенты при оценке статьи, и что нужно сделать, чтобы повысить шансы…

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

Supervision-by-Registration: метод детекции лицевых лендмарок без учителя

14 августа 2018
supervision-by-registration-compressor

Supervision-by-Registration: метод детекции лицевых лендмарок без учителя

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

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

  1. Недостаток обучающих примеров;
  2. Неточные описания,

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

В исследовании описывается подход к обучению без учителя для решения описанной проблемы. Обучение регистрацией (Supervision-by-Registration или SBR) улучшает функцию потерь обучением на данных, автоматически полученных из неразмеченных видео. Для этого предлагается согласовать:

  1. положение точки в смежных кадрах;
  2. регистрацию (оптического потока), как способа обучения.

 Фреймворк

Архитектура метода
Рис. 1. Сеть принимает размеченные изображения и неразмеченные видео в качестве входных данных для обучения основанной на изображениях модели распознавания лицевых точек

SBR представляет собой сквозную обучаемую модель, состоящую из двух компонентов: общего детектора, построенного на сверточных нейронных сетях и дифференциального метода Лукаса – Канаде (LK). Во время прямого прохода LK принимает обнаруженные точки из предыдущего кадра и оценивает их местоположения в текущем кадре. Затем отслеживаемые точки сравниваются с обнаруженными на текущем кадре. Функция регистрационных потерь (registration loss) определяется как смещение между ними. При обратном проходе градиент от функции потерь обратно распространяется через LK для поддержания временной согласованности в детекторе. Конечный результат метода — улучшенная основанная на изображениях модель обнаружения лицевых точек, которая использует большое количество неразмеченных видео для достижения более высокой точности как на изображениях, так и на видео, а также для получения более стабильных прогнозов в случае с видео. SBR вносит более обучающие сигналы из регистрации, что повышает точность детектора. Суммируя, SBR имеет следующие преимущества:

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

Архитектура нейросети

SBR состоит из двух дополнительных частей: детектор, распознающий основные точки лица, и алгоритм LK. Обучение SBR с двумя дополнительными функциями потерь выглядит следующим образом. Функция потерь на первом этапе использует информацию из одного изображения для создания разметки и обучения наилучшей версии модели. Все детекторы принимают на вход изображение l и выдают координаты лицевых точек, то есть D(I) = L.  Квадратичная функция потерь (L^2) рассчитывается на полученных координатах L и реальных метках L*.

facial landmarks

Используя метод Лукаса – Канаде (LK), можно оценить временную согласованность при помощи функции регистрационных потерь (registration loss). Эти потери могут быть рассчитаны методом обучения без учителя для усиления детектора. Это реализуется методом обратного распространения ошибки между входными данными и выходными из LK алгоритма. Во время прямого прохода вычисляется функция регистрационных потерь, в то время как во время обратного оценивается надежность работы алгоритма LK. Функция потерь имеет следующий вид:

лэндмарки

Полная функция потерь: Пусть N – число объектов для обучения с реальными метками. Для краткости, предположим, есть только одно неразмеченное видео с T кадрами. Тогда полная функция потерь SBR выглядит следующим образом:

face landmarks

Первым детектором является CPM, который использует предварительно обученные модели ImageNet для извлечения признаков. Для генерации признаков используются первые четыре сверточных слоя VGG- и только три слоя CPM осуществляют прогноз тепловой карты. Изображения лиц обрезаются и изменяются до размеров 256 × 256 для предварительной обработки. Мы обучали CPM с батчами (сериями) размера 8 в течение 40 эпох (циклов) в общей сложности. Скорость обучения начиналась с 0,00005 и уменьшалась на 0,5 в 20-й и 30-й эпохах.

Второй детектор – обычная регрессионная сеть, обозначаемая Reg. VGG-16 используется как базовая модель, она меняет выходные нейроны последнего полносвязного слоя на K × 2, где K – число локаций лицевых точек. Входные изображения обрезаются до размера 224 × 224 для этой регрессии.

Используемые для сравнения наборы данных: 300-W, AFLW, youtube-face, 300-VW и YouTube Celebrities. Результаты SBR, показанные на рисунке ниже, получены как при помощи Reg (на основе регрессии), так и с использованием CPM (на основе тепловой карты) на AFLW и 300-W. Для оценки качества работы алгоритмов на изображениях была выбрана нормализованная средняя ошибка (NME).

Результаты

результаты метода нахождения лэндмарок

results

В сухом остатке

SBR демонстрирует результаты современного уровня на выбранных датасетах со следующими преимуществами:

  1. Модель не полагается на сделанные вручную аннотации, которые могут быть неточными;
  2. Детектор больше не ограничивается количеством и качеством аннотаций.
  3. Метод обратного распространения через слой LK позволяет получать более точные градиентные обновления, чем при самообучении.

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

Рекуррентные нейронные сети: типы, обучение, примеры и применение

11 августа 2018
рекуррентные нейронные сети

Рекуррентные нейронные сети: типы, обучение, примеры и применение

Рекуррентные нейронные сети (Recurrent Neural Networks, RNNs) — популярные модели, используемые в обработке естественного языка (NLP). Во-первых, они оценивают произвольные предложения на основе того, насколько часто они встречались в текстах. Это…

Рекуррентные нейронные сети (Recurrent Neural Networks, RNNs) — популярные модели, используемые в обработке естественного языка (NLP). Во-первых, они оценивают произвольные предложения на основе того, насколько часто они встречались в текстах. Это дает нам меру грамматической и семантической корректности. Такие модели используются в машинном переводе. Во-вторых, языковые модели генерируют новый текст. Обучение модели на поэмах Шекспира позволит генерировать новый текст, похожий на Шекспира.

Что такое рекуррентные нейронные сети?

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

Рекуррентная нейронная сеть и ее развертка (unfolding)
Рекуррентная нейронная сеть и ее развертка (unfolding)

На диаграмме выше показано, что RNN разворачивается в полную сеть. Разверткой мы просто выписываем сеть для полной последовательности. Например, если последовательность представляет собой предложение из 5 слов, развертка будет состоять из 5 слоев, по слою на каждое слово. Формулы, задающие вычисления в RNN следующие:

  • x_t — вход на временном шаге t. Например x_1 может быть вектором с одним горячим состоянием  (one-hot vector), соответствующим второму слову предложения.
  • s_t — это скрытое состояние на шаге t. Это «память» сети. s_t зависит, как функция, от предыдущих состояний и текущего входа x_t: s_t=f(Ux_t+Ws_{t-1}). Функция f обычно нелинейная, например tanh или ReLU. s_{-1}, которое требуется для вычисление первого скрытого состояния, обычно инициализируется нулем (нулевым вектором).
  • o_t — выход на шаге t. Например, если мы хотим предсказать слово в предложении, выход может быть вектором вероятностей в нашем словаре. o_t = softmax(Vs_t)

Несколько заметок:

  • Можно интерпретировать s_t как память сети. s_t содержит информацию о том, что произошло на предыдущих шагах времени. Выход o_t вычисляется исключительно на основе «памяти» s_t. На практике все немного сложнее: s_t не может содержать информацию слишком большого количества предшествующих шагов;
  • В отличие от традиционной глубокой нейронной сети, которая использует разные параметры на каждом слое, RNN имеет одинаковые (U, V, W) на всех этапах. Это отражает тот факт, что мы выполняем одну и ту же задачу на каждом шаге, используя только разные входы. Это значительно уменьшает общее количество параметров, которые нам нужно подобрать;
  • Диаграмма выше имеет выходы на каждом шаге, но, в зависимости от задачи, они могут не понадобиться. Например при определении эмоциональной окраски предложения, целесообразно заботиться только о конечном результате, а не о окраске после каждого слова. Аналогично, нам может не потребоваться ввод данных на каждом шаге. Основной особенностью RNN является скрытое состояние, которое содержит некоторую информацию о последовательности.

Где используют рекуррентные нейросети?

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

Языковое моделирование и генерация текстов

Учитывая последовательность слов, мы хотим предсказать вероятность каждого слова (в словаре). Языковые модели позволяют нам измерить вероятность выбора, что является важным вкладом в машинный перевод (поскольку предложения с большой вероятностью правильны). Побочным эффектом такой способности является возможность генерировать новые тексты путем выбора из выходных вероятностей. Мы можем генерировать и другие вещи, в зависимости от того, что из себя представляют наши данные. В языковом моделировании наш вход обычно представляет последовательность слов (например, закодированных как вектор с одним горячим состоянием (one-hot)), а выход — последовательность предсказанных слов. При обучении нейронной сети, мы подаем на вход следующему слою предыдущий выход o_t=x_{t+1}, поскольку хотим, чтобы результат на шаге t был следующим словом.

Исследования по языковому моделированию и генерации текста:

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

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

Рекуррентные нейронные сети для машинного перевода
RNN для машинного перевода

Распознавание речи

По входной последовательности акустических сигналов от звуковой волны, мы можем предсказать последовательность фонетических сегментов вместе со своими вероятностями.

Генерация описания изображений

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

Рекуррентные нейронные сети
Глубокие визуально-семантические совмещения для генерации описания изображений. Источник: http://cs.stanford.edu/people/karpathy/deepimagesent/

Обучение RNN

Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем алгоритм обратного распространения ошибки (backpropagation), но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов. Например, чтобы вычислить градиент при t = 4, нам нужно было бы «распространить ошибку» на 3 шага и суммировать градиенты. Этот алгоритм называется «алгоритмом обратного распространения ошибки сквозь время» (Backpropagation Through Time, BPTT). Если вы не видите в этом смысла, не беспокойтесь, у нас еще будет статья со всеми кровавыми подробностями. На данный момент просто помните о том, что рекуррентные нейронные сети, прошедшие обучение с BPTT, испытывают трудности с изучением долгосрочных зависимостей (например, зависимость между шагами, которые находятся далеко друг от друга) из-за затухания/взрывания градиента. Чтобы обойти эти проблемы, существует определенный механизм, были разработаны специальные архитектуры PNN (например LSTM).

Модификации RNN

На протяжении многих лет исследователи разрабатывали более сложные типы RNN, чтобы справиться с некоторыми из недостатков классической модели. Мы рассмотрим их более подробно в другой статье позже, но я хочу, чтобы этот раздел послужил кратким обзором, чтобы познакомить вас с классификацией моделей.

Двунаправленные рекуррентные нейронные сети (Bidirectional RNNs) основаны на той идее, что выход в момент времени t может зависеть не только от предыдущих элементов в последовательности, но и от будущих. Например, если вы хотите предсказать недостающее слово в последовательности, учитывая как в левый, так и в правый контекст. Двунаправленные рекуррентные нейронные сети довольно просты. Это всего лишь два RNN, уложенных друг на друга. Затем выход вычисляется на основе скрытого состояния обоих RNN.

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

Сети LSTM довольно популярны в наши дни, мы кратко говорили о них выше. LSTM не имеют принципиально отличающейся архитектуры от RNN, но они используют другую функцию для вычисления скрытого состояния. Память в LSTM называется ячейками, и вы можете рассматривать их как черные ящики, которые принимают в качестве входных данных предыдущее состояние h_ {t-1} и текущий входной параметр x_t. Внутри, эти ячейки, решают, какую память сохранить и какую стереть. Затем они объединяют предыдущее состояние, текущую память и входной параметр. Оказывается, эти типы единиц очень эффективны в захвате (хранении) долгосрочных зависимостей.