Капсульная нейронная сеть или CapsNet: введение

14 декабря 2018
капсульная нейронная сеть введение

Капсульная нейронная сеть или CapsNet: введение

Сверточные сети сделали потрясающую работу, но завязли в проблемах. Настало время начать думать о новых решениях или улучшениях. Эта статья — введение в капсульные нейронные сети. После прочтения вы поймете, как…

Сверточные сети сделали потрясающую работу, но завязли в проблемах. Настало время начать думать о новых решениях или улучшениях. Эта статья — введение в капсульные нейронные сети. После прочтения вы поймете, как работают CapsNet и в чем их приципиальное отличие.

Перед вами перевод статьи Understanding Capsule Networks — AI’s Alluring New Architecture, автор — Nick Bourdakos. Ссылка на оригинал в подвале статьи. 

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

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

капсульная нейронная сеть туториал
Архитектура капсульной нейросети

Часть 0: Вход

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

Изображение в нашем примере имеет только один канал, так как оно черно-белое. Большинство известных вам изображений имеют 3 или 4 канала: RGB и, возможно, дополнительный канал альфа, отвечающий за прозрачность.

что такой купсульная нейронная сеть

Каждый из этих пикселей представлен как число в диапазоне от 0 до 255 и хранится в матрице размера [28, 28, 1]. Чем светлее пиксель, тем больше его значение.

Часть 1а: Свертка

Первая часть CapsNet — традиционный сверточный слой. Возникают вопросы:

  • Что такое сверточный слой?
  • Как он работает?
  • Зачем он вообще нужен?

Цель состоит в извлечении из входного изображения самых базовых признаков — грани или кривые.

Как можно это сделать? Посмотрим на грань:

свертка стандартная

Если посмотреть на несколько точек на изображении, можно начать улавливать паттерн. Возьмем цвета слева и справа от выбранной точки:

свертка

Можно заметить большую разницу в случае, если выбранная точка — грань:

255 - 114 = 141
114 - 153 = -39
153 - 153 = 0
255 - 255 = 0

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

Мы можем реализовать такую операцию с помощью цикла, проходя по каждому пикселю изображения:

for pixel in image {
result[pixel] = image[pixel - 1] - image[pixel + 1]
}

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

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

Окно представляет собой матрицу весов, называемую кернелом (kernel, ядро).

Нас волнуют только 2 пикселя, но когда мы направляем окно вокруг них, оно инкапсулирует пиксель между ними.

Window:
┌─────────────────────────────────────┐
│ left_pixel middle_pixel right_pixel │
└─────────────────────────────────────┘

Можете ли вы представить себе такой набор весов, на который умножаются эти пиксели, чтобы получившаяся сумма складывалась в ожидаемое значение?

Window:
┌─────────────────────────────────────┐
│ left_pixel middle_pixel right_pixel │
└─────────────────────────────────────┘
(w1 * 255) + (w2 * 255) + (w3 * 114) = 141

Можно сделать, например, так:

Window:
┌─────────────────────────────────────┐
│ left_pixel middle_pixel right_pixel │
└─────────────────────────────────────┘
(1 * 255) + (0 * 255) + (-1 * 114) = 141

С этими весами кернел будет выглядеть следующим образом:

kernel = [1 0 -1]

Однако, кернелы обычно квадратные. Можем просто заполнить пустые места нулями вот так:

kernel = [
[0 0 0]
[1 0 -1]
[0 0 0]
]

Анимация помогает разобраться в процессе:

 

операции свертки

Отметим: размерность выхода уменьшается на размер кернела и добавляется 1. Например: (7-3) + 1 = 5 (подробнее об этом речь пойдет ниже).

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

сжатое изображение

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

kernel = [
[0 1 0]
[0 0 0]
[0 -1 0]
]

Стоит сказать, что оба этих кернела не будут хорошо работать с размытыми гранями или расположенными под другими углами. По этой причине используется много кернелов (в нашей реализации CapsNet кернелов 256 штук). Для достижения большей гибкости операции кернелы обычно делаются больше чем 3х3 (наши кернелы будут иметь размер 9х9).

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

kernel = [
[ 0.02 -0.01 0.01 -0.05 -0.08 -0.14 -0.16 -0.22 -0.02]
[ 0.01 0.02 0.03 0.02 0.00 -0.06 -0.14 -0.28 0.03]
[ 0.03 0.01 0.02 0.01 0.03 0.01 -0.11 -0.22 -0.08]
[ 0.03 -0.01 -0.02 0.01 0.04 0.07 -0.11 -0.24 -0.05]
[-0.01 -0.02 -0.02 0.01 0.06 0.12 -0.13 -0.31 0.04]
[-0.05 -0.02 0.00 0.05 0.08 0.14 -0.17 -0.29 0.08]
[-0.06 0.02 0.00 0.07 0.07 0.04 -0.18 -0.10 0.05]
[-0.06 0.01 0.04 0.05 0.03 -0.01 -0.10 -0.07 0.00]
[-0.04 0.00 0.04 0.05 0.02 -0.04 -0.02 -0.05 0.04]
]

Отметим: значения матрицы кернела округлены, так как они слишком длинные. Например: 0.01783941

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

Вот так в конечном итоге выглядят 256 кернелов (для лучшего усвоения я раскрасил их как пиксели), где размер каждого кернела 9х9. Чем меньше число, тем оно голубее. 0 — зеленый цвет, положительное число — желтый:

кернелы

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

Часть 2б: ReLU

ReLU (формально известный как линейный выпрямитель) достаточно простая вещь. Это активационная функция, аргументом которой является значение. Если это значение отрицательно, ReLU зануляется, если положительное — принимает значение аргумента.

То есть:

x = max(0, x)

Графически ReLU выглядит так:

relu

Мы применяем эту функцию ко всем выходам наших сверток.

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

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

Так выглядит выход из сверточного слоя Conv1 (256 выходов размером 20х20 пикселей) после применения ReLU:

выход из сверточного слоя

Часть 2а: PrimaryCaps

Слой PrimaryCaps начинает как обычный сверточный слой, но в этот раз проводится свертывание по стеку из 256 выходов из предыдущих сверток. Вместо кернела 9х9 имеем кернел размера 9х9х256.

Что именно мы ищем? В первом сверточном слое мы искали простые грани и кривые. Сейчас же нам интересны более сложные формы, состоящие из ранее найденных граней.

Теперь шаг равен 2. Это означает, что вместо перемещения на 1 пиксель, кернел каждый раз перемещается на 2. Больший шаг был выбран, чтобы обрабатывать входные данные быстрее:

капсулы

 

Отметим: в обычном случае размерность выхода равна 12. Но мы должны разделить это число на 2 из-за шага. Например, ((20 — 9) + 1) / 2 = 6

Будем производить свертку по выходам еще 256 раз. Результатом этого шага должен стать набор из 256х6х6 выходов.

Теперь мы нарежем стек на 32 колоды по 8 карт в каждой. Будем называть каждую колоду капсульным слоем. Каждый такой слой имеет 36 капсул.

Если вы не отстаете от меня (и являетесь гением математики), то понимаете, что каждая капсула — массив из 8 значений. Можем называть этот массив вектором.

Для лучшего понимания я показал это так:

капсульная нейронная сеть capsnet

Капсулы — наши новые пиксели.

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

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

Смотря на фигуру ниже, что вы можете сказать о ней? Если бы вам пришлось объяснить человеку, ни разу не видевшему эту фигуру, как её нарисовать, чтобы вы сказали?

фигура

Хотя это изображение очень простое, отметим несколько деталей, требуемых для описания фигуры:

  • Тип фигуры
  • Положение
  • Ориентация
  • Цвет
  • Размер

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

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

Это еще одна из причин, почему традиционные нейронные сети плохо справляются с вращениями:

распознавание изображений

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

Ниже представлено упрощенное сравнение выходов 2 капсульных слоев (один для прямоугольников, другой для треугольников) против 2 традиционных пикселей:

капсульная нейросеть

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

На практике не удается (или это сделать не просто) визуализировать вектор, как это сделано сверху, так как такие вектора в 8-мерном пространстве.

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

Звучит неплохо, но как уговорить сеть начать изучать эти штуки?

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

Я более подробно опишу этот процесс в следующем разделе, а пока покажу простой пример:

capsnet

Часть 2б: Сжатие

Теперь у нас есть капсулы и есть необходимость использовать еще одну нелинейную функцию на них (можно ReLU). Только в этот раз уравнение немного сложнее. Функция преобразует значения вектора таким образом, что меняется только его длина, а углы остаются постоянными. Таким получается вектор в диапазоне от 0 до 1, что соответствует вероятности.

Так выглядит длина капсульного вектора после сжатия. На этом моменте уже практически невозможно определить, на что каждая капсула обращает внимание.

капсулы

Обратите внимание, что каждый пиксель теперь является вектором длины 8

Часть 3: Направление по соглашению

Следующий шаг — решить, какую информацию отправить в следующий слой. В традиционных сетях мы бы использовали операцию max pooling. Это отличный способ уменьшить размер при помощи отправления в следующий слой только пикселя с максимальным значением в выбранной области.

maxpooling

Однако в капсульных сетях мы собираемся реализовать другой метод — направление по соглашению (routing by agreement). Лучший пример такого метода — пример с лодкой и домом, показанный Aurélien Géron в этом замечательном видео. Каждая капсула, основываясь на самой себе, пытается предсказать активацию следующего слоя:

капсульный слой предсказание

Смотря на эти предсказания, какой бы объект вы передали в следующий слой (не зная входа)?  Лодку, правильно? И прямоугольная и треугольная капсулы сходятся во мнении, как будет выглядеть лодка. Но не могут прийти к единому мнению, как будет выглядеть дом, поэтому вряд ли объект является домом.

С routing by agreement мы передаем только полезную информацию, а плохие данные, которые добавляют шум в результат, выбрасываем. Так мы выполняем отбор значений умнее, чем просто выбор наибольшего значения, как делает max pooling.

В традиционных нейросетях, перепутанные элементы нас не беспокоят:

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

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

капсульная сеть

Надеюсь, у вас появилось интуитивное представление. Что насчет математики этой модели?

Имеем 10 различных классов символов, которые хотим предсказать:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Отметим: в примере с домом и лодкой предсказывались 2 объекта, сейчас же — 10.

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

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

Вспомним, что в сети 32 капсульных слоя, в каждом из которых 36 капсул. Всего получается 1152 капсул.

cap_1 * weight_for_0 = prediction
cap_1 * weight_for_1 = prediction
cap_1 * weight_for_2 = prediction
cap_1 * ...
cap_1 * weight_for_9 = prediction
cap_2 * weight_for_0 = prediction
cap_2 * weight_for_1 = prediction
cap_2 * weight_for_2 = prediction
cap_2 * ...

В конечном итоге получаем список из 11520 предсказаний.

Каждый вес представляет собой такую матрицу 16х8, что предсказание — матричное умножение капсульного вектора и весовой матрицы:

матрица капсульной нейросети

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

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

Следующий шаг — определить, какие из 11520 предсказаний лучше других согласуются друг с другом.

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

капсульная нейронная сеть туториал

Начинаем подсчитываь среднее всех точек. В самом начале все точки имеют одинаковую важность:

капсульная сеть туториал

Далее считаем расстояние между каждой точкой и средним. Чем дальше расположена точка от среднего, тем менее важной она становится:

капсульная нейронная сеть туториал

Снова пересчитываем среднее, учитывая важность каждой точки:

что такое капсульная нейронная сеть

Проходим этот цикл 3 раза:

как работает капсульная сеть

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

Часть 4: DigitCaps

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

Так выглядят длины векторов, если подать на вход цифру 4:

длины векторов капсульной нейросети

Пятый блок самый яркий, вызывает наибольшую уверенность. Вспомним, что 0 — первый класс, тогда по вектору определяется, что предсказывается цифра 4 (5 класс).

Часть 5: Реконструкция

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

Если мы хотим воссоздать подаваемую на вход цифру 4 из её вектора, получится следующее:

капсульная нейронная сеть туториал

Манипулируя слайдером (меняя один из параметров вектора), можно проследить, как изменение параметра влияет на цифру 4:

капсульная нейронная сеть туториал

Я рекомендую скачать репозиторий с визуализацией и поиграться с параметрами, чтобы увидеть влияние их на реконструкцию:

git clone https://github.com/bourdakos1/CapsNet-Visualization.git
cd CapsNet-Visualization
pip install -r requirements.txt

Запуск инструмента:

python run_visualization.py

После этого откройте в браузере следующую ссылку: http://localhost:5000

Некоторые мысли

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

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

Компьютерная игра на основе нейронных сетей помогает учить язык жестов

14 декабря 2018

Компьютерная игра на основе нейронных сетей помогает учить язык жестов

Канадский стартап Stradigi AI представил игру на базе сверточных нейронных сетей, которая помогает учить американский вариант языка жестов. Его используют люди с нарушениями слуха в Америке и Канаде. Команде удалось создать…

Канадский стартап Stradigi AI представил игру на базе сверточных нейронных сетей, которая помогает учить американский вариант языка жестов. Его используют люди с нарушениями слуха в Америке и Канаде. Команде удалось создать самую точную модель для определения жестов, её результат99,03%. Лучший результат предыдущих разработок98,50% у алгоритма Google Inception V4.

Как работает The ASL Alphabet Game

Участники должны имитировать 26 букв алфавита американского языка жестов. За каждое правильно показанное движение им начисляются баллы. Игра работает, используя алгоритмы компьютерного зрения.

Оценка жестов производится сверточными нейросетями в три этапа:

  1. Первая нейросеть анализирует положение рук перед камерой.
  2. Затем полученные изображения обрезаются и передаются второй CNN для анализа и классификации жестов.
  3. На заключительном этапе нейросеть создает и анализирует тепловые карты изображений, чтобы классифицировать жест более точно.

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

нейросеть для распознавания жестов
Сравнение результатов с другими современными моделями распознавания жестов

Таким образом стартап поддерживает использование технологий машинного обучения для создания социально значимых разработок. В этом направлении работают и другие исследователи. Недавно американские ученые из Сaltech разработали технологию CARA на базе очков дополненной реальности Microsoft HoloLens, которая поможет слабовидящим ориентироваться в пространстве.

Нейросеть обучили создавать пиксель-арт из рисунков без учителя

7 декабря 2018
pixel-art-gan

Нейросеть обучили создавать пиксель-арт из рисунков без учителя

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

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

Как работает

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

  1. Первая нейросеть, GridNet, создает из основного рисунка три изображения с разными уровнями пикселизации.
  2. Затем нейросеть PixelNet превращает их в пиксельные рисунки.
  3. На последнем этапе DepixelNet делает изображение более сглаженным.
Алгоритм работы

Для тренировки использовалось два датасета. Первый содержал 900 рисунков в стиле пиксельной графики, второй — 900 обычных рисунков. Сеть обучалась без учителя. Это избавило исследователей от необходимости вручную создавать пары рисунков для обучения. Алгоритм учился создавать пиксель-арт из обычных изображений и, наоборот, обычные изображения из картинок с пиксельной графикой.

Сравнение с другими методами
Сравнение рисунка нейросети с ручной работой (правый столбец)
Сравнение рисунка, созданного с помощью нейросети (в центре) с ручной работой (справа)

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

U-Net: нейросеть для сегментации изображений

30 ноября 2018
u-net

U-Net: нейросеть для сегментации изображений

U-Net считается одной из стандартных архитектур CNN для задач сегментации изображений, когда нужно не только определить класс изображения целиком, но и сегментировать его области по классу, т. е. создать маску,…

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

Пример сегментации мозга

Сеть обучается сквозным способом на небольшом количестве изображений и превосходит предыдущий наилучший метод (сверточную сеть со скользящим окном) на соревновании ISBI по сегментации нейронных структур в электронно-микроскопических стеках. Используя ту же сеть, которая была обучена на изображениях световой микроскопии пропускания (фазовый контраст и DIC), U-Net заняла первое место в конкурсе ISBI 2015 года по трекингу клеток в этих категориях с большим отрывом. Кроме того, эта сеть работает быстро. Сегментация изображения 512×512 занимает менее секунды на современном графическом процессоре.

Для U-Net хатактерно:

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

Архитектура U-Net

архитектура u-net
Рисунок 1. Архитектура U-net (пример изображения с разрешением 32×32 пикселя — самым низким). Каждый синий квадрат соответствует многоканальной карте свойств. Количество каналов приведено в верхней части квадрата. Размер x-y приведен в нижнем левом краю квадрата. Белые квадраты представляют собой копии карты свойств. Стрелки обозначают различные операции.

Архитектура сети приведена на рисунке 1. Она состоит из сужающегося пути (слева) и расширяющегося пути (справа). Сужающийся путь — типичная архитектуре сверточной нейронной сети. Он состоит из повторного применения двух сверток 3×3, за которыми следуют инит ReLU и операция максимального объединения (2×2 степени 2) для понижения разрешения.

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

  • свертка 2×2, которая уменьшает количество каналов свойств;
  • объединение с соответствующим образом обрезанной картой свойств из стягивающегося пути;
  • две 3×3 свертки, за которыми следует ReLU.

Обрезка необходима из-за потери граничных пикселей при каждой свертке.

Схема U-Net
Схема сети U-net

На последнем слое используется свертка 1×1 для сопоставления каждого 64-компонентного вектора свойств с желаемым количеством классов. Всего сеть содержит 23 сверточных слоя.

Обучение U-Net

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

кросс-энтропия u-net

Граница разделения вычисляется с использованием морфологических операций. Затем вычисляется карта весовых коэффициентов:

где wc — карта весов для балансировки частот классов, d1 — расстояние до границы ближайшей ячейки, а d2 — расстояние до границы второй ближайшей ячейки.

Примеры использования и реализации

U-net неоднократно использовалась для сегментации изображений. Ниже приведены некоторые из них:

Как видно из примера, эта сеть универсальна и может использоваться для любой разумной задачи сегментации изображений. Высокая точность достигается при условии надлежащего обучения, подходящего датасета и правильного выбора времени обучения. Если мы рассмотрим список более продвинутых примеров U-net, можно увидеть еще несколько паттернов применения:

[Pytorch][Tensorflow][Keras]

Результаты

Рисунок 2. Результаты сегментации (IOU) на соревновании ISBI 2015 года по трекингу клеток.

U-Net применялся в задаче сегментации клеток на изображениях с оптического микроскопа. Эта задача сегментации является частью конкурсов ISBI 2014 и 2015 годов по трекингу клеток.

Датасет PhC-U373 содержит изображения клетки U373 Glioblastoma-astrocytoma на полиакриламидной подложке, записанные методом фазово-контрастной микроскопии. Он содержит 35 частично помеченных изображений для обучения. В этом случае U-Net достигла среднего значения IOU (пересечение по объединению), равного 92%, что значительно лучше предыдущего результата: 83% (см. рис. 2).

Второй датасет DIC-HeLa содержит фотографии клеток HeLa на плоском стекле, записанные с помощью микроскопии дифференциального интерференционного контраста (DIC) (см. рисунки ниже). Он содержит 20 частично помеченных изображений для обучения. В этом случае U-Net достигла среднего значения IOU 77,5%, что значительно лучше, чем последующий алгоритм с его 46%.

результаты работы u-net
Результаты соревнования ISBI по трекингу клеток. (a) Часть входного изображения датасета PhC-U373. (b) Результат сегментации (голубая маска) и метка (желтая граница). (c) Входное изображение датасета DIC-HeLa. (d) Результат сегментации (цветные маски) и метки (желтая рамка).

Архитектура U-net достигает выдающейся производительности и точности в самых разных приложениях биомедицинской сегментации. Метод требует лишь нескольких помеченных изображений для тренировки и имеет приемлемое время обучения: всего лишь 10 часов на графическом процессоре NVidia Titan (6 ГБ).

AlexNet — свёрточная нейронная сеть для классификации изображений

1 ноября 2018

AlexNet — свёрточная нейронная сеть для классификации изображений

AlexNet — сверточная нейронная сеть, которая оказала большое влияние на развитие машинного обучения, в особенности — на алгоритмы компьютерного зрения. Сеть с большим отрывом выиграла конкурс по распознаванию изображений ImageNet LSVRC-2012…

AlexNet — сверточная нейронная сеть, которая оказала большое влияние на развитие машинного обучения, в особенности — на алгоритмы компьютерного зрения. Сеть с большим отрывом выиграла конкурс по распознаванию изображений ImageNet LSVRC-2012 в 2012 году (с количеством ошибок 15,3% против 26,2% у второго места).

Архитектура AlexNet схожа с созданной Yann LeCum сетью LeNet. Однако у AlexNet больше фильтров на слое и вложенных сверточных слоев. Сеть включает в себя свертки, максимальное объединение, дропаут, аугментацию данных, функции активаций ReLU и стохастический градиентный спуск.

Особенности AlexNet

  1. Как функция активации используется Relu вместо арктангенса для добавления в модель нелинейности. За счет этого при одинаковой точности метода скорость становится в 6 раз быстрее.
  2. Использование дропаута вместо регуляризации решает проблему переобучения. Однако время обучения удваивается с показателем дропаута 0,5.
  3. Производится перекрытие объединений для уменьшения размера сети. За счет этого уровень ошибок первого и пятого уровней снижаются до 0,4% и 0,3%, соответственно.

Датасет ImageNet

ImageNet — набор из 15 миллионов помеченных изображений с высоким разрешением, разделенных на 22 000 категорий. Изображения собраны в интернете и помечены вручную с помощью краудсорсинга Amazon’s Mechanical Turk. Начиная с 2010 года проводится ежегодный конкурс ImageNet Large-Scale Visual Recognition Challenge (ILSVRC), являющийся частью Pascal Visual Object Challenge. В челлендже используется часть датасета ImageNet с 1000 изображений в каждой из 1000 категорий. Всего получается 1,2 миллиона изображений для обучения, 50 000 изображений для проверки и 150 000 — для тестирования. ImageNet состоит из изображений с разным разрешением. Поэтому для конкурса их масштабируют до фиксированного разрешения 256 × 256. Если изначально изображение было прямоугольным, то его обрезают до квадрата в центре изображения.

Архитектура

Рисунок 1

Архитектура сети приведена на рисунке 1. AlexNet содержит восемь слоев с весовыми коэффициентами. Первые пять из них сверточные, а остальные три — полносвязные. Выходные данные пропускаются через функцию потерь softmax, которая формирует распределение 1000 меток классов. Сеть максимизирует многолинейную логистическую регрессию, что эквивалентно максимизации среднего по всем обучающим случаям логарифма вероятности правильной маркировки по распределению ожидания. Ядра второго, четвертого и пятого сверточных слоев связаны только с теми картами ядра в предыдущем слое, которые находятся на одном и том же графическом процессоре. Ядра третьего сверточного слоя связаны со всеми картами ядер второго слоя. Нейроны в полносвязных слоях связаны со всеми нейронами предыдущего слоя.

Таким образом, AlexNet содержит 5 сверточных слоев и 3 полносвязных слоя. Relu применяется после каждого сверточного и полносвязного слоя. Дропаут применяется перед первым и вторым полносвязными слоями. Сеть содержит 62,3 миллиона параметров и затрачивает 1,1 миллиарда вычислений при прямом проходе.  Сверточные слои, на которые приходится 6% всех параметров, производят 95% вычислений.

Обучение

AlexNet проходит 90 эпох. Обучение занимает 6 дней одновременно на двух графических процессорах Nvidia Geforce GTX 580, что является причиной того, что сеть разделена на две части. Используется стохастический градиентный спуск со скоростью обучения 0,01, импульсом 0,9 и распадом весовых коэффициентов 0,0005. Скорость обучения делится на 10 после насыщения точности и снижается в 3 раза в течение обучения. Схема обновления весовых коэффициентов w имеет вид:

где i — номер итерации, v — переменная импульса, а epsilon — скорость обучения. В ходе всего этапа обучения скорость обучения выбиралась равной для всех слоев и корректировалась вручную. Последующая эвристика заключалась в том, чтобы разделить скорость обучения на 10, когда количество ошибок при проверке переставало уменьшаться.

Примеры использования и реализация

Результаты показывают, что большая, глубокая сверточная нейронная сеть способна достигать рекордных результатов на очень сложных датасетах, используя только обучение с учителем. Через год после публикации AlexNet все участники конкурса ImageNet стали использовать сверточные нейронные сети для решения задачи классификации. AlexNet была первой реализацией сверточных нейронных сетей и открыла новую эру исследований. Сейчас реализовать AlexNet стало проще с помощью библиотек глубокого обучения: PyTorch, TensorFlow, Keras.

Результат

Сеть достигает следующего уровня ошибок первого и пятого уровней: 37,5% и 17,0%, соответственно. Лучшая производительность, достигнутая в ходе конкурса ILSVRC-2010, составляла 47,1% и 28,2% при использовании подхода, в котором усредняются предсказания, полученные шестью моделями с разреженным кодированием, обученных на различных векторах свойств.  С тех пор достигнуты результаты: 45,7% и 25,7% при использовании подхода, в котором усредняются предсказания двух классификаторов, обучаемых на векторах Фишера. Результаты ILSVRC-2010 приведены в таблице 1.

 

 

 

Слева: восемь тестовых изображений ILSVRC-2010 и пять ярлыков, которые наиболее вероятны по мнению модели. Правильная метка записывается под каждым изображением, а вероятность показана красной полосой, если она находится в верхней пятерке. Справа: пять тестовых изображений ILSVRC-2010 в первом столбце. В остальных столбцах показаны шесть обучающих изображений.

Selfie ID: подтверждение личности с помощью глубокого обучения

22 октября 2018
Selfie Matching DocFace+ DWI

Selfie ID: подтверждение личности с помощью глубокого обучения

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

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

DocFace+ Selfie Matching
Примеры автоматических систем сопоставления фотографий в документах при пересечении международных границ.

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

Современные исследования

Ранее были предприняты как успешные, так и безуспешные попытки реализовать автоматизированную систему подтверждения личности. Успешным примером является австралийская SmartGate. Это автоматизированная система пограничного контроля с самообслуживанием, управляемая австралийскими пограничными войсками и расположенная на контрольно-пропускных иммиграционных пунктах в залах прибытия восьми австралийских международных аэропортов. В ней используется камера для захвата контрольного изображения и выполняется попытка его сопоставления с фотографией в документах. В Китае такие системы были установлены на вокзалах и в аэропортах.

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

Новый метод

В своей новой статье исследователи из Мичиганского университета предложили улучшенную версию DocFace — метода глубокого обучения для сопоставления документов с селфи.

В работе показано, что методы оптимизации на основе градиентного спуска сходятся медленно, если у большого числа классов мало выборок — как в случае существующих датасетов «документы-селфи». Для решения этой проблемы ученые предложили метод, названный Dynamic Weight Imprinting (DWI). Кроме того, они разработали новую систему распознавания для обучения единым представлениям на основе пар «документ-селфи» и проект с открытым исходным кодом под названием DocFace+ для сопоставления пар «документ-селфи».

Суть метода

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

Две основными проблемы: 

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

Метод целиком основан на transfer learning. Модель основной нейронной сети обучается на большом датасете (MS-Celeb 1M), а затем свойства переносятся в целевой домен пар «документ-селфи».

DocFace+

Утверждая, что алгоритм сходится крайне медленно и часто обучение «застревает» в локальных минимумах при работе со многими классами, имеющими малую выборку, исследователи предлагают использовать функцию потерь Additive Margin Softmax (AM-Softmax) наряду с новым методом оптимизации, который они называют DWI.

Обобщающая способность различных функций потерь.
Обобщающая способность различных функций потерь

Dynamic Weight Imprinting

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

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

функция потерь AM Softmax vs Diam Softmax
Сравнение функций потерь AM-Softmax и DIAM.

Исследователи обучили популярную архитектуру Face-ResNet с использованием стохастического градиентного спуска и функции потерь AM-Softmax. Затем они точно настроили модель на датасет пар «документ-селфи», связывая предлагаемый метод оптимизации DWI с AM-Softmax. Наконец, на специфических для документов и селфи свойствах была обучена пара одноуровневых сетей, обменивающихся параметрами высокого уровня.

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

Результаты

DWI демонстрирует превосходные результаты, давая в координатах TAR 97,51 ± 0,40%. Авторы утверждают, что их подход с использованием датасета MS-Celeb-1M и функции потерь AM-Softmax дает 99,67% точности в стандартном протоколе проверки LFW и скорости верификации 99,60% при FAR, равному 0,1% по протоколу BLUFR.

DocFace+
Примеры неверно классифицированных новой моделью изображений в датасете пар «документ-селфи».
Средняя производительность сдерживания различных модулей, которыми обмениваются одноуровневые сети
Сравнение SWI и DWI в координатах TAR

Сравнение с другими подходами

Dynamic Weight Imprinting был сопоставлен с другими методами поиска совпадений лиц, так как на данный момент не существует подходов сопоставления пар «документ-селфи». Сравнение с этими методами проводилось в координатах TAR и FAR и приведено в таблице:

Средняя производительность и стандартное отклонение различных методов сопоставления пар документ-селфи
Результаты оценки различных методов на датасете Public-IvS

Заключение

Метод DocFace+ для сопоставления пар документ-селфи показывает потенциал transfer learning, особенно в случае недостатка данных. Высокая точность сопоставления пар документ-селфи доказывает, что алгоритм может потенциально использоваться в системах подтверждения личности. Кроме того, представлен новый метод оптимизации DWI с быстрой сходимостью и высокой обобщающей способностью.

7 архитектур нейронных сетей для решения задач NLP

14 октября 2018
neural network nlp architectures

7 архитектур нейронных сетей для решения задач NLP

Искусственная нейронная сеть (ИНС) — вычислительная нелинейная модель, в основе которой лежит нейронная структура мозга, способная обучаться выполнению задач классификации, предсказания, принятия решений, визуализации и некоторых других только благодаря рассмотрению…

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

Любая архитектура ИНС состоит из искусственных нейронов — элементов обработки, имеющих структуру 3 связанных друг с другом слоев: входным, состоящим из одного или более слоев скрытым и выходным.

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

Искусственная нейронная сеть с 4 входами
Искусственная нейронная сеть с 4 входами

Функция активации

Взвешенная сумма со входов — активационный сигнал — проходит через функцию активации для вывода данных из нейрона. Есть несколько видов функции активации: линейная, ступенчатая, сигмоидная, тангенциальная, выпрямительная (Rectified linear unit, ReLu).

Линейная функция

f(x)=ax

Ступенчатая функция

Сигмоида

Функция гиперболического тангенса

Функция линейного выпрямителя

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

С помощью дополнительных скрытых слоев возможно сделать систему более гибкой и мощной. ИНС с многими скрытыми слоями называются глубокими нейронными сетями (deep neural network, DNN); они создают сложные нелинейные связи.

Рассмотрим популярные архитектуры нейронных сетей, которые хорошо показали себя в задачах NLP и рекомендуются к использованию.

1. Многослойный перцептрон

Перцептрон
Перцептрон

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

2. Сверточная нейронная сеть

применение сверточной нейросети

Сверточная нейронная сеть (Convolutional neural network, CNN) содержит один или более объединенных или соединенных сверточных слоев. CNN использует вариацию многослойного перцептрона, рассмотренного выше. Сверточные слои используют  операцию свертки для входных данных и передают результат в следующий слой. Эта операция позволяет сети быть глубже с меньшим количеством параметров.

Сверточные сети показывают выдающиеся результаты в приложениях к картинкам и речи. В статье Convolutional Neural Networks for Sentence Classification автор описывает процесс и результаты задач классификации текста с помощью CNN. В работе представлена модель на основе word2vec, которая проводит эксперименты, тестируется на нескольких бенчмарках и демонстрирует блестящие результаты.

В работе Text Understanding from Scratch авторы показывают, что сверточная сеть достигает выдающихся результатов даже без знания слов, фраз предложений и любых других синтаксических или семантических структур присущих человеческому языку. Семантический разбор, поиск парафраз, распознавание речи — тоже приложения CNN.

3. Рекурсивная нейронная сеть

рекурсивная нейронная сеть

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

4. Рекуррентная нейронная сеть

Рекуррентная нейронная сеть, в отличие от прямой нейронной сети, является вариантом рекурсивной ИНС, в которой связи между нейронами — направленные циклы. Последнее означает, что выходная информация зависит не только от текущего входа, но также от состояний нейрона на предыдущем шаге. Такая память позволяет пользователям решать задачи NLP: распознание рукописного текста или речи. В статье Natural Language Generation, Paraphrasing and Summarization of User Reviews with Recurrent Neural Networks авторы показывают модель рекуррентной сети, которая генерирует новые предложения и краткое содержание текстового документа.

Siwei Lai, Liheng Xu, Kang Liu, и Jun Zhao в своей работе Recurrent Convolutional Neural Networks for Text Classification создали рекуррентную сверточную нейросеть для классификации текста без рукотворных признаков. Модель сравнивается с существующими методами классификации текста — Bag of Words, Bigrams + LR, SVM, LDA, Tree Kernels, рекурсивными и сверточными сетями. Описанная модель превосходит по качеству традиционные методы для всех используемых датасетов.

5. LSTM

LSTM блок с входным, выходным затворами и гейтом забывания
LSTM блок с входным, выходным и гейтом забывания

Сеть долгой краткосрочной памяти (Long Short-Term Memory, LSTM) — разновидность архитектуры рекуррентной нейросети, созданная для более точного моделирования временных последовательностей и их долгосрочных зависимостей, чем традиционная рекуррентная сеть. LSTM-сеть не использует функцию активации в рекуррентных компонентах, сохраненные значения не модифицируются, а градиент не стремится исчезнуть во время тренировки. Часто LSTM применяется в блоках по несколько элементов. Эти блоки состоят из 3 или 4 затворов (например, входного, выходного и гейта забывания), которые контролируют построение информационного потока по логистической функции.

В Long Short-Term Memory Recurrent Neural Network Architectures for Large Scale Acoustic Modeling авторы показывают архитектуру глубокой LSTM рекуррентной сети, которая достигает хороших результатов для крупномасштабного акустического моделирования.

В работе Part-of-Speech Tagging with Bidirectional Long Short-Term Memory Recurrent Neural Network представлена модель для автоматической морфологической разметки. Модель показывает точность 97.4 % в задаче разметки. Apple, Amazon, Google, Microsoft и другие компании внедрили в продукты LSTM-сети как фундаментальный элемент.

6. Sequence-to-sequence модель

Часто Sequence-to-sequence модели состоят из двух рекуррентных сетей: кодировщика, который обрабатывает входные данные, и декодера, который осуществляет вывод.

Читайте: Оценка глубины на изображении при помощи Encoder-Decoder сетей

Sequence-to-Sequence модели часто используются в вопросно-ответных системах, чат-ботах и машинном переводе. Такие многослойные ячейки успешно использовались в sequence-to-sequence моделях для перевода в статье Sequence to Sequence Learning with Neural Networks study.

В Paraphrase Detection Using Recursive Autoencoder представлена новая рекурсивная архитектура автокодировщика, в которой представления — вектора в n-мерном семантическом пространстве, где фразы с похожими значением близки друг к другу.

7. Неглубокие (shallow) нейронные сети

Неглубокие модели, как и глубокие нейронные сети, тоже популярные и полезные инструменты. Например, word2vec — группа неглубоких двухслойных моделей, которая используется для создания векторных представлений слов (word embeddings). Представленная в Efficient Estimation of Word Representations in Vector Space, word2vec принимает на входе большой корпус текста и создает векторное пространство. Каждому слову в этом корпусе приписывается соответствующий вектор в этом пространстве. Отличительное свойство — слова из общих текстов в корпусе расположены близко друг к другу в векторном пространстве.


В статье описаны архитектуры нейронных сетей: глубокий многослойный перцептрон, сверточная, рекурсивная, рекуррентная сети, нейросети долгой краткосрочной памяти, sequence-to-sequence модели и неглубокие (shallow) сети, word2vec для векторных представлений слов. Кроме того, было показано, как функционируют эти сети, и как различные модели справляются с задачами обработки естественного языка. Также отмечено, что сверточные нейронные сети в основном используются для задач классификации текста, в то время как рекуррентные сети хорошо работают с воспроизведением естественного языка или машинным переводом. В следующих части серии будут описаны существующие инструменты и библиотеки для реализации описанных типов нейросетей.


Интересные статьи:

Приложение для смартфона диагностирует болезнь Паркинсона с точностью 85%

9 октября 2018
нейросеть диагностирует болезнь паркинсона

Приложение для смартфона диагностирует болезнь Паркинсона с точностью 85%

По данным ВОЗ, 5-10 человек на каждые 10 000 людей в мире страдают болезнью Паркинсона. Видимые признаки болезни появляются у людей старше 45 лет. Раннее выявление могло бы предотвратить появление…

По данным ВОЗ, 5-10 человек на каждые 10 000 людей в мире страдают болезнью Паркинсона. Видимые признаки болезни появляются у людей старше 45 лет. Раннее выявление могло бы предотвратить появление серьезных симптомов, однако пока не существует универсального теста для диагностики болезни Паркинсона. Учёные создают приложения на основе искусственного интеллекта, которые помогут распознать ранние признаки заболевания. Рассказываем о последних разработках.

Приложение для диагностики на смартфоне

Команда из Швейцарской высшей технической школы Цюриха создала приложение, которое диагностирует болезнь Паркинсона с точностью 85%. Для диагностики пациенту нужно пройти четыре коротких теста. Программа поочередно анализирует походку, голос, движения рук и память.

В основе приложения сверточная нейронная сеть и двунаправленная рекуррентная нейронная сеть с LTSM. Первая анализирует результаты тестов походки, голоса и движений, а вторая — тесты на запоминание. Ещё одна рекуррентная нейросеть генерирует итоговый диагноз. Для обучения модели команда использовала данные результатов тестов 1853 участников исследования mPower.

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

Программное обеспечение для больниц

Tencent и медицинская компания Medopad объединились для разработки ПО, которое сможет обнаруживать признаки болезни Паркинсона в течение нескольких минут (сейчас оценка занимает полчаса) и улучшить точность диагностики.

Технология Medopad использует камеру смартфона для наблюдения за движениями пациентов. Человек сжимает и разжимает кулак, приложение измеряет амплитуду и частоту движения пальцев. Результаты предоставляются врачам в виде графика. Цель состоит в том, чтобы в конечном итоге с помощью ИИ автоматически вычислять показатель серьезности симптомов. В случае успеха Tencent и Medopad намерены провести тестирование технологии в США, Новой Зеландии и Китае в конце 2018 года.

Google Assistant научился распознавать музыку с помощью сверточной нейросети

19 сентября 2018

Google Assistant научился распознавать музыку с помощью сверточной нейросети

В 2017 Google представила функцию для распознавания музыки Now Playing для смартфона Pixel 2. Теперь компания усовершенствовала разработку используя глубокое обучение и добавила её в Google Assistant в качестве инструмента Sound Search.…

В 2017 Google представила функцию для распознавания музыки Now Playing для смартфона Pixel 2. Теперь компания усовершенствовала разработку используя глубокое обучение и добавила её в Google Assistant в качестве инструмента Sound Search. Говорите «Окей, Google, какая это песня?», и получаете ответ меньше чем за 10 секунд.

В основе технологии свёрточная нейросеть, которая создаёт «отпечаток» песни и ищет его соответствие в базе данных. Sound Search работает быстрее и находит больше музыки, чем Now Playing, потому что операции осуществляются в облаке — инструмент не сталкивается с ограничениями при обработке и хранении данных. Это также позволило увеличить базу данных песен в 1000 раз.

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

Google увеличили размерность эмбеддинга с 96 до 128, уменьшив объем работы, которую нейронная сеть должна делать, чтобы обработать входные данные. Качество распознавания при этом не ухудшается, но второй этап обработки проходит быстрее. Также разработчики увеличили плотность эмбеддингов: нейросеть создает уникальный отпечаток аудиоданных каждые пол секунды вместо одной секунды. Это удвоило количество эмбеддингов, которые можно использовать, чтобы найти участок записи.

Функция доступна для смартфонов на Android. Подробнее о разработке в блоге Google.