Как сумрачные программисты отличают кошек от собак |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2017-11-06 22:05 Сегодня я расскажу вам, как сумрачные программисты отличают кошек от собак, наводят ракеты по снимку со спутника, удаляют Ягоду с фотографии, рисуют упоротые здания, и всё это при помощи нейросетей! 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 Комментарии: |
|