Как сумрачные программисты отличают кошек от собак

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Сегодня я расскажу вам, как сумрачные программисты отличают кошек от собак, наводят ракеты по снимку со спутника, удаляют Ягоду с фотографии, рисуют упоротые здания, и всё это при помощи нейросетей!

TRIGGER WARNING: математические термины

Предыдущие части:

1. https://vk.com/wall-86559535_539529 На заре

2. https://vk.com/wall-86559535_541471 Возрождение нейросетей

3. https://vk.com/wall-86559535_543896 Основные виды нейросетей

Итак, картиночки. Стандартом в области обработки картиночек на протяжении последних 20 лет остаются Convolutional Neural Networks, они же Свёрточные нейронные сети, они же CNN. Основная идея, предложенная Яном Лекуном еще в 1989, состоит в расположении большого числа свёрточных слоёв нейронов друг за другом, объединенных в группы: первый слой обрабатывает блоки по 5х5 пикселей и ищет там палочки, следующий — блоки по 5х5 палочек и ищет завитушки, следующий формирует из завитушек контуры, и так далее. Таким образом, последний слой работает уже не с пикселями, а с деревьями, хвостами и колёсами.

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

Первым прорывом (2010 г.) был Rectified Linear Unit или ReLU. Математически это функция f(x)=max(0,x), довольно простая по сравнению со всякими гиперболическими тангенсами и сигмоидами. Используя её для обработки сигналов в нейронах, мы избегает т.н. Vanishing Gradient Problem (отеч. Проблема исчезающего градиента), которая заключается в том, что очень глубокие сети обучаются неравномерно, а значит медленно и неоптимально. ReLU стал стандартом, который повысил качество работы CNN до коммерчески приемлемого и вернул к ним интерес исследователей.

Вновь остро встал вопрос переобучения. Переобучение — это такая распространенная проблема в Machine Learning, когда модель "притирается" к обучающей выборке: например, если вы учите нейронку искать кошек на изображениях, и на всех обучающих картинках, которые вы использовали, кошки имеют серую окраску, то рыжих кошек ваша сеть воспринимать не будет. В общем решения этой проблемы (пока) не существует, но существуют отдельные методы, которые иногда работают. Один из них — предложенный в 2012 году Dropout, механизм, который "выбивает", выключает случайные нейроны в сети, заставляя модель искать новые пути обхода. Можно сравнивать её со случайными мутациями, с естественным отбором, с изменением климата, биологические параллели — вообще дело неблагодарное, но важно тут одно: Dropout работает.

Если крепко подумать над основным принципом CNN, то возникает закономерный вопрос: а оно работает, если кошечка сидит не прямо, а под углом? Нет, не работает. Очевидно что в реальных задачах будут и смазанные, и повернутые, и искаженные кошки, что делать с ними? Самый простой подход, Data Augmentation, заключается в том, чтобы все исходные картинки ("обучающая выборка") повращать и поискажать. Таким образом мы расширяем обучающую выборку, а заодно увеличиваем время обучения в несколько раз. Практическим воплощением всех вышеперечисленных подходов была AlexNet, созданная, что характерно, командой Алекса Крижевского в 2012 году. Для практики, конечно, сойдёт, но сердце просит чего-нибудь простого, красивого и элегантного...

Потом, в 2015, появилась VGGNet, которая не внесла ничего нового, но зато была очень, ОЧЕНЬ большой. История творилась на наших глазах, масоны, а мы как обычно.

В том же году Гугл сказал "we need to go deeper" и выпустил статью о GoogLeNet — сети, которая состоит из нескольких CNN соединенных параллельно. Все эти CNN имеют разные размеры фильтров (те самые NxN блоки) и некоторые другие параметры, для каждого запроса выдаётся лучший возможный результат.

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

Наконец, в 2016 появилась DenseNet. Это вполне себе обычная CNN, но с более плотными связями практически между всеми слоями. Больше про неё и сказать нечего.

Если смотреть на это в перспективе, можно заметить тенденции: сети становятся всё глубже и глубже, всё плотнее и плотнее. Тем временем основные проблемы остаются нерешенными:

1)Отсутствие позиционирования. CNN работает по принципу "глаза, нос и рот == человек", хотя мы то знаем, что если рот над глазами, а нос между ними, то никакой это не человек.

2)Data Augmentation. Некрасиво это, да и зачастую нет достаточного количества ресурсов, чтобы в лоб просчитать все варианты. Эту проблема сейчас стоит особенно остро, а последняя статья на эту тему датируется аж 24 октября! "A pixel attack for fooling deep neural networks", если кому интересно.

И вот, 26 октября этого же года была опубликована статья Джеффри Хинтона (а также Николаса Фросста и Сары Сабор) "Dynamic Routing Between Capsules" о Capsule Networks. Джеффри Хинтон, к слову, тот человек, который придумал Backpropagation (сов. Обратное распространение ошибки), самый популярный ныне метод обучения нейронных сетей, он же стоял у истоков CNN, он же соавтор статьи про Dropout, перечислять его заслуги можно довольно долго. Пусть этой статье чуть больше недели, она уже успела вызвать огромный резонанс в ML-коммьюнити: описаный им подход одним махом решает обе проблемы CNN.

Идея состоит в том, чтобы растить сеть не вглубь, а "внуть", помещая одни слои внутри других. Такой "слой в слое" называется Capsule (капсула), и именно из таки capsules состоит сеть. Это даёт сразу несколько преимуществ. Например, мы можем использовать более сложные чем ReLU (помните, помните ReLU?) функции активации внутри капсул, а значит увеличим их эффективность. Кроме того, капсульная сеть действительно похожа на сеть, а не на цепь связанных последовательно слоёв. Распределенность и нелинейность — то, чего раньше не было, а если было, то мало.

На этом у меня все. С радостью отвечу на вопросы в комментариях.


Источник: vk.com

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