А что действительно скрывают нейронные сети?

    Несколько дней назад на хабре вышла статья Что скрывают нейронные сети?. Она является вольным пересказом английской статьи The Flaw Lurking In Every Deep Neural Net, а та в свою очередь рассказывает о конкретном исследовании некоторых свойств нейронных сетей (Интригующие свойства нейронных сетей).

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

    Содержание исходной статьи

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

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

    Давайте попробуем разобраться подробнее, что же эти два свойства значат.

    Значение конкретных нейронов

    Первое свойство постараемся разобрать побыстрее.

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

    Проверяется это утверждение обычно визуальным просмотром:

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

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

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

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


    Пример изображений с одинаковым свойством из оригинальной статьи.

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

    Слепые пятна сети

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

    В результате эксперимента получилось следующее:

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

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

    • «В исследовании используются очень простые нейросети, сейчас такими никто не пользуется» — нет, в исследовании использовалось 6 разных типов сетей, от простой однослойной до больших глубоких сетей, все из других известных работ последних 2-3 лет. Не все эксперименты были поставлены на всех типах сетей, но все основные выводы в статье от типа сети не зависят.
    • «Исследователи используют нейронную сеть, которая на вход принимает растровые изображения, а не выделенные на них признаки – это изначально неэффективно» — в статье на самом деле ни разу явно не написано, что именно они передают на вход нейронной сети. При этом их нейронные сети показывают хорошее качество на больших базах изображений, поэтому в неэффективности исходной системы их обвинить трудно.
    • «Исследователи взяли очень переученную нейронную сеть – закономерно получили плохие результаты вне обучающей выборки» — нет, результаты которые они приводят показывают, что сети, которые они обучали, не были переучены. В частности, в статье есть результат работы сети на исходной выборке с добавленным случайным шумом, на котором нет никакого падения качества. При переобученной системе таких результатов не было бы.
    • «Искажения, которые добавляются к сетям сильно специальные и в реальной жизни встретится не могут» — не совсем так. С одной стороны, эти искажения неслучайны, с другой они меняют картинку очень незначительно, в среднем на порядок меньше, чем случайный шум, незаметный для человеческого глаза – в статье есть соответствующие цифры. Так что утверждать, что таких искажений не получить в реальности, я бы не стал – вероятность этого мала, но исключать такие возможности нельзя.


    Что здесь реально новость?

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

    Есть методы классификации (к примеру Support Vector Machines), которые в основе своего обучения ставят максимальное отделение объектов обучающей выборки от границ изменения классов. В нейронных сетях никаких требований подобного рода нет, более того в силу сложности нейронных сетей итоговое разделение исходного множества обычно не поддается нормально интерпретации и исследованию. Поэтому то, что в сетях можно найти области локальной нестабильности, – это не новость, а подтверждение факта, который и так был достаточно известен.

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

    Действительно ли нейросети это тупик?

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

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

    • Теорема сходимости перцептрона Розенблатта – под любую обучающую выборку можно подобрать архитектуру и веса нейронной сети с одним внутренним слоем, такую чтобы обучающая выборка классифицировалась с 100% точностью.
    • Практически все процессы в обучении нейронной сети (в последнее время включая подбор архитектуры) полностью автоматизируются.

    Поэтому нейросеть – это средство быстро получать приемлемые решения для очень сложных задач распознавания. Ничего другого никто для нейросетей никогда не обещал (хотя было много попыток). Ключевые слова здесь «быстро» и «сложные задачи»:
    • Если вы хотите научиться стабильно отличать котиков от собачек на Ютюбе за год работы, то кроме нейросетей у вас сейчас инструментов сопоставимого по качеству и удобству все равно нет – придумывание признаков для более простых классификаторов и их настройка займет гораздо больше времени. Но при этом придётся мириться, что черный ящик нейросети будет иногда делать странные с точки зрения человека ошибки, которые будет трудно исправить.
    • А если вы хотите распознавать текст или отличать положительные отзывы от отрицательных, возьмите лучше классификатор попроще – у вас будет сильно больше контроля над тем что происходит, хотя возможно получение первых результатов займет некоторое время.

    Можно ли доверять нейросетям?

    Основное заключение статьи, обсуждающей оригинальное исследование было: «Пока этого не произойдёт, мы не может полагаться на нейронные сети там, где безопасность критически важна…». Потом еще в отдельных обсуждениях часто всплывал Google Car, по каким-то причинам (видимо из-за места работы авторов и картинки машины в статье).

    На самом деле нейросетям доверять можно, и для этого есть несколько причин:

    1. Пользователю (а не исследователю) нейросети важно не где конкретно она ошибается, а насколько часто. Поверьте, вам будет абсолютно все равно, ваша автоматическая машина не узнала грузовик, который был в ее обучающей базе, или тот, который она раньше не видела. Все исследование посвящено поиску ошибок в конкретных областях рядом с обучающей выборкой, при этом общее качество работы нейросетей (и способы его оценки) не ставятся под сомнение.
    2. Любая система распознавания никогда не работает на 100%, в ней всегда есть ошибки. Один из первых принципов, которые узнают в роботехнике, это то, что никогда нельзя делать действия на основе одного отдельного показателя датчика, всегда нужно брать плавающее окно значений и выбрасывать оттуда уродцев. Для любой критической системы это тоже верно – в любой реальной задаче всегда идет поток данных, даже если в какой-то момент система дала сбой, соседние данные выправят ситуацию.




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

    Что важного есть в этой статье?

    Казалось бы, если никаких великих откровений в статье не нашли, то зачем ее вообще писали?

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

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

    Под конец могу только порекомендовать не читать статьи с «сенсационными» заголовками, а лучше находить первоисточники и читать их – там все гораздо интереснее.
    ABBYY
    144.38
    Решения для интеллектуальной обработки информации
    Share post

    Comments 31

      +3
      Пользователю (а не исследователю) нейросети важно не где конкретно она ошибается, а насколько часто.

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

      Но в целом с выводом я согласен, нейросети понадобятся,
      Если вы хотите научится стабильно отличать котиков от собачек на Ютюбе за год работы
      а для более серьёзной работы стоит применять ччто-то более предсказуемое
        +3
        поставил машину на полный автомат и хреначит 90 км/ч по пустой дороге


        Я не очень разбираюсь в теме, но мне кажется, что тот же автопилот не анализирует дорогу по 1 кадру в минуту, даже секунду. И по большому количеству разных (отличающихся между собой) изображениях сможет гораздо точнее сказать грузовик впереди или нет. Тем более из-за относительно низких мощностей автопилот не гоняет на 90 км/ч, так как не успевает реагировать должным образом. И все же проблема с автопилотом раздута.
          +1
          Ясно, что раздута. Это я просто иллюстрирую тезис, что
          Пользователь обычно готов мириться с ошибками, где он их ожидает а не очень готов там, где он их не ожидает.
          Ошибка как в обсуждаемой гугловской статье производят на пользователя заметно более сильное впечатление, чем ошибки на картинках, где непонятно, то, что нужно нарисовано, или нет.
            0
            Да и только по изображению автопилот тоже не ведёт — даже на обычных машинах стоит что-то типа радара или дальномера.
          +8
          Спасибо за статью, а то предыдущую я прочел невнимательно и пришел к неправильным выводам.
            +6
            Отличная статья, спасибо, все очень хорошо и точно изложено.
              +4
              >>>Что здесь реально новость – это то, что искажения, приводящие к ошибкам, сохраняют свои свойства при переходе к другой архитектуре сетей и при смене обучающей выборки. Это действительно очень неожиданное открытие, и я надеюсь, что авторы в следующих работах найдут ему объяснение.

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

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

              Пример такой элементарной задачи, которая по кодированию простейшая, а обратному декодированию сети почти не поддаётся я приводил в своей статье, которую упомянул в комментариях к предыдущей статье: habrahabr.ru/post/219647/
              Там я привожу одну и ту же предельно элементарную задачу, но кодирую эту задачу разными способами. Перцептрон Руммельхарта со вторым способом кодирования справляется, а об первый способ ломает зубы точно так же как и у гугловцев. И на последней картинке в статье хорошо видно как конкретно он это делает. Если бы они вместо того чтобы подавать на вход огромную кучу непонятных данных подали бы что-нибудь на столько же простое, что и я, то пришли бы к тем же выводам на пол года раньше.

              Короче думать нужно не только о том, существует ли решение, но ещё и о том, какие решения достижимы с какой вероятностью, и к какому решению можно прийти из начального состояния. А ребята из Гугла, как впрочем и многие другие до этой мысли ещё не дозрели. Видимо статью мою не читали. :))))
                –6
                Хабронаселение во всей красе.
                Человек поделился с ними знаниями, показал математику, лежащую в основе интересного обсуждения, а они ещё и нос воротят и минусуют. Причём по сути нечего возразить, да и вообще уверен, что минусующие не то что не смогли разобраться в статье, в части про неудобные функции, но одни даже, скорее всего, и букв то столько не осилили.
                  0
                  Поставил за первый комментарий плюс, за второй — минус, за нытье. Подумаешь прилетел минус в коммент, эка невидаль, а вы в каждом втором комментарии жалуетесь на злобное хабросообщество. Итого — один полезный, один жалобный, тьфу.
                +4
                Ничего удивительного в этом не вижу — у нейронных сетей нет сознания, это просто умножение матриц, никакой магии. В процессе обучения, они выделяют какие-то признаки и усиливают их влияние. Если определить, что именно вносит больший вклад в принятие решения — конечно, можно создать примеры, в которых конкретно эти признаки незаметно уменьшены для человека, но сильно разгонятся в сети вплоть до ошибки.
                UPD: Перечитал статью, про это и написано. Прошу прощения.
                  +2
                  Это очень правильный комментарий. Человек тоже ошибается в распознавании образов, каждого, наверное, обманывали глаза, каждый говорил: «ух показалось». Но человек анализирует кучу информации, кроме изображения, включая предисторию его получения. Если человек увидит то что в этой ситуации он не ожидает увидеть, то мозг это отфильтрует, и обратно может дорисовать то чего нет. А нейронная сеть не может.
                    +1
                    Не может, потому что не научили. А если вставить обратную связь с задержкой, как это, вероятно, сделано в мозгу? Тогда, вероятно, она сможет научиться упорствовать, что «это не грузовик, а облако»…
                      0
                      Предыстория тоже не только в нейросети, но и в любом классификаторе учитывается.
                      Фактически обучающая выборка и есть предыстория, на которой он(а) получает опыт.
                      В соответствие с байесовским подходом апостериорное распределение является вероятностным знанием о возможных вариантах, и вероятность 1.0 для нетривиальных случаев никогда не достигается. Всегда есть место для ошибки первого и второго рода (те самые глаза обманывают).
                      Чем больше обучающая выборка покрывает пространство событий, тем качественнее распознавание.
                      Так что дорисовать всё-таки может.
                      Не может сделать продукционный вывод (если из А получается Б, и из Б В, то при наличии А будет В).
                    +4
                    Меня в нейронных сетях всегда воодушевляла та мысль, что за доказательством их потенциально безграничных возможностей не нужно далеко ходить. Главное доказательство находится между стулом и монитором :) Тем удивительнее было то, что некоторые биологические нейронные сети после ознакомления с предыдущей статьей поставили на нейронных сетях крест. Ок, попробую их переубедить.

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

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

                    Даже такая приблизительная аналогия на пальцах должна продемонстрировать, что результаты исследования не являются сенсацией, и уж конечно не объявляют «конец нейронауки». При этом они несомненно представляют теоретический и практический интерес, и поскольку проводились подразделением Google, могут повлиять на дальнейшие технологические решения, принимаемые в этой компании.
                      +7
                      Да ещё и биологическая нейросеть — не одна, у нас их десятки, сотни, а может и десятки тысяч на каждую подзадачу, да и обучающая выборка представляет собой годы 120-мегапиксельного стереопотока (не считая остальных органов чувств и абстрактного анализа).
                      С другой стороны, наши «нейросети» обмануть весьма легко — см. например, эффект Тетчер
                      image
                        0
                        Здорово, хорошая (и слегка жутковатая) иллюстрация того, насколько узкоспециализированы механизмы нашего зрения.
                          0
                          вот это жесть! пришлось перевернуть ноутбук
                          там походу перевернутые рты и глаза
                        0
                        Вот что меня в этой ситуации сильно удивляет, это как многие переживают по поводу того, что гуглоавтомобиль сможет неправильно опознать грузовик. Ясно ведь, что вероятность того, что изображение испортится именно таким специальным образом, крайне мала. И так же ясно, что нет смысла от гугломобилей требовать 100% безопасности, надо лишь требовать безопасности более высокой, чем у обычных машин, управляемых людьми. Условно говоря, если вероятность попасть обычной машине в аварию, допустим, 10^-5 на километр пробега (цифра с потолка, но думаю, что плюс-минус пара порядков верна), а для гугломобиля эта цифра 10^-6, то гугломобиль намного лучше обычных автомобилей. И понятно, что вероятность такого синхронного изменения пикселей, как описано в статье, намного меньше этих 10^-6, поэтому эта ошибка фактически на безопасность не влияет.
                          –4
                          Оба «открытия» напоминают что-то типа: мы старались-старались и у нас не получилось. Приводится информация как сильно старались исследователи, на разных типах нейронных сетей и разных изображениях, но какие выводы можно из этого сделать? Только те, что исследователи не научили свои сети распознавать образы с точностью, близкой к человеческой. Напоминает разговоры позапрошлого века о том, что невозможно создать летательный аппарат тежелее воздуха.
                            0
                            «Исследователи взяли очень переученную нейронную сеть – закономерно получили плохие результаты вне обучающей выборки» — нет, результаты которые они приводят показывают, что сети, которые они обучали, не были переучены. В частности, в статье есть результат работы сети на исходной выборке с добавленным случайным шумом, на котором нет никакого падения качества. При переобученной системе таких результатов не было бы.

                            Возможно отсутствие падения качества при добавлении шума не доказывает автоматически что сеть не переобучена.
                            Переобучиться можно по разному.
                            Например, если ты никогда не видел черных лебедей, то любая черная птица для тебя — однозначно «не лебедь». И «Цвет Птицы» будет для тебя, твоей нейронной сети, будет ложным признаком, на котором ты переобучился, на который смотреть на самом деле не нужно. И управляя этим признаком тебя можно заставить сказать, что лебедь — не лебедь. Задача упрощается, если таких «переобученных» факторов много. То есть все-таки эта такая форма переобучения.
                            И проверка через шум здесь не покажет проблему.
                              0
                              Переобучение в классическом смысле — это все-таки ситуация когда мы слишком настраиваемся на обучающие примеры, в ущерб возможностям генерализации. Для такой ситуации проверить среднее качество в окрестностях обучающей выборки — это надежный индикатор наличия проблемы. Для тех проблем которые были в статье важно именно переобучение в таком смысле.
                              Если у нас вместо этого есть параметр, который для одного класса в обучающей выборке не принимал какое-то значение («все лебеди белые») — то это проблема обучающей выборки, а не алгоритма. Для любого классификатора (в том числе и для человека кстати) «черный лебедь» будет совершенно новым неопределенным классом объектом, который классифицироваться может как угодно — как бы правильно и аккуратно исходный классификатор не обучали.
                              Для таких проблем кстати есть отдельная научная область по изучению влияния различных признаков на классификацию, чтобы можно было легко находить проблемы вида «не-черных лебедей» в обучающей выборке.
                                0
                                Для той проблемы, которая описана в статье, классическое переобучение как раз не сильно важно.
                                Авторов не сильно интересует падение качества на тестовой выборке, которого значимо не было видно. (Кстати возможно если сделать тестовую выборку больше обучающей, то падение на добавленном шуме будет видно)
                                Как я понял, авторов интересует — а можно ли накрутить ложные скрытые признаки, чтобы обмануть классификацию. И ответ положительный. Если мы хотим этого избежать, то нужно вводить уровень уверенности в ответе, разрешить ответ «не знаю».
                                Проблему можно не называть переобучением, но она от этого не исчезнет. Для себя я её называю «ложные шумящие признаки», которые появляются почти всегда, когда пространство признаков велико, а черных лебедей в данных нет.
                                  0
                                  (Кстати возможно если сделать тестовую выборку больше обучающей, то падение на добавленном шуме будет видно)
                                  Стандартный подход — чтобы тестовая выборка была в 10 раз больше обучающей, соотношения меньше обычно берут только если с составлением базы есть серьезные проблемы… Я не знаю какое именно соотношение было у авторов в исследовании, но проблем с объемом базы у них точно не было — они брали очень большие известные датасеты.
                                  Если мы хотим этого избежать, то нужно вводить уровень уверенности в ответе, разрешить ответ «не знаю».
                                  У большинства классификаторов, в том числе и нейросетей, получить уверенность в ответе достаточно легко. Действительно, в этой статье был бы интересно посмотреть — у найденных ошибочных примеров насколько падает уверенность по сравнению с правильно обученными соседями? К сожалению в статье этих данных нет.
                                  –2
                                  Феномен описанный в статье это не переобучение в классическом смысле. а неправильное обучение. Переобучение, это когда сеть была способна выучить правильное решение, но так как ей скормили слишком большие ресурсы — предпочла зазубрить более правильный ответ на учебную выборку, чем тот ответ, которые получается на основе генерализованных признаков. Типичная причина переобучения — слишком долго учить слишком большую сеть на слишком маленько выборке.

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

                                  Типичные пример такого «вызубривания не от хорошей жизни» можно увидеть опять же у меня в статье: beta.hstor.org/getpro/habr/post_images/998/a4c/f3b/998a4cf3b8fbc1ef3ec7b3ff92a18bb4.png

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

                                  Да и по всей остальной области под функцией точек с ошибочной классификацией предостаточно.

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

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

                                  P.S. Кстати, те нейронные сети, которые между стулом и монитором тоже частенько допускают такие ошибки, например верят в высшие силы управляющие громом и молнией или судьбой.
                                    +2
                                    kraidiky, я извиняюсь, но может хватит уже изображать из себя д'Артаньяна переплюнувшего массу специалистов по нейросетям? Некрасиво выглядит, ей-богу.
                                    Любая сколь-либо приличная нейросеть обучается на одной выборке, а тестируется на другой, это элементарные основы. В Вашем же примере Вы и обучаете и тестируете на одной и той же выборке. Если бы Вы удосужились проверить Вашу сеть на тестовой выборке, как это делают в приличных статьях, то «недостаточный уровень обобщения» достигнутый сетью немедленно всплыл бы, ибо, как Вы верно заметили, сеть у Вас просто «зазубрила» тестовую выборку.

                                    Так вот: Гугл пишет о сетях которые проверялись на независимых тестовых выборках и показали на них отличную точность распознавания. Что, хм, немного намекает на то что «вызубривании обучающей выборки» речи идти не может. Вы же взяли изначально плохо работающую сеть и пытаетесь на основании того что Вы сделали хреновую по какой-то причине сеть (совершенно неочевидной причине, кстати — смахивает на элементарный баг) делать выводы что столь же хреновая сеть была использована Гуглом. Вообще, на данных столь низкой размерности как в Вашей статье (n=2) у нейросетей все очень и очень просто работает, гораздо интереснее существенно многомерная ситуация и гугловская статья рассматривает именно её. Дело в том что с точки зрения любой метрики в многомерном пространстве «окрестности» точки намного больше чем в двумерном и это дает нетривиальные и не всегда очевидные эффекты. Простые картинки этого не иллюстрируют никак (и картинки метания сети при обучении — тоже)
                                      0
                                      0serg, Вы не углядели, что сеть обучается на подвыборке, а тестируется (картинка рисуется) на полном наборе данных, включающем все возможные точки для данной задачи. На сколько поверхностны и все остальные претензии. Вы пишите о том что ошибки сети вызваны вызубриванием, но даже после прямого указания куда смотреть, не заметили что эффект ступеньки возникает не только на разных выборках, но даже и на таких разных сетях, как многослойные перцептроны и классический перцептрон Розенбладта. Хотя я много раз подчёркивал по тексту, что интересен не сам по себе эффект вызубривания, а возникающая при этом систематическая ошибка. Вы не обращаете внимание на то что и это решение проверялось, и показало хорошую точность, высокая вероятность ошибки возникает только в узкой области, обусловленной особенностью входных данных, а не особенностью сети.

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

                                      Впрочем, прошу прощения за то, что заставил вас столкнуться лишний раз с тем, в чём вам совершенно не хочется разбираться. ВОт это действительно было некрасиво с моей стороны.
                                        0
                                        kraidiky, я не говорю что Вы не тестировали сеть вне обучающей выборки.
                                        Я говорю что это стандартная практика и гугловцы её тоже использовали, причем в отличие от Вас, они изначально оценивали хорошая у них сеть получилась или нет именно по этому критерию.
                                        И следовательно Вашу «сине-зеленую» проблемную картинку, если бы она на их сети возникла, соответственно, гарантированно должны были увидеть.
                                        А увидев — попытаться исправить.
                                        Улавливаете идею?

                                        Подправив сеть так чтобы она давала «красно-синюю» картинку, гугловцы (да и вообще кто угодно) резко бы улучшили результаты своей нейросети.
                                        При этом из сотен исследователей работавших над схожими задачами, гугловцы ранее получили одни из лучших результатов.
                                        Что при отсутствии каких-либо дополнительных данных свидетельствует либо в пользу того Вы гений, который лишь начав изучать нейросети и C# переплевывает всех мировых исследователей нейросетей на планете, либо в пользу того что подобной проблемы у гугловских сетей в отличие от Вашей попросту изначально не было.
                                        Выбирайте сами — стоит ли первая версия детального рассмотрения и поиска ошибок в Вашем коде?
                                          0
                                          Извините, что потратил так моно вашего времени. Странно, что внимательно ознакомившись и с моими статьями и с гугловскими, и явно будучи в теме вы так и не поняли, что те способы проверки, которые использовали гугловцы, то есть проверка на сколько хорошо обучилась сеть, и не порет ли ошибки на зашумлённой выборке, не выявляет ту проблему, которую я вам показывал. Возможно это как-то связано с тем, что вы не поняли, плохая сине-зелёная картинка может давать даже меньшую ошибку чем хорошая зелёно-красная. Её проблема именно в неожиданных но малочисленных провалах.

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

                                          Возможно как-нибудь потом на ругих примерах я постараюсь вам доказать, что д'Артаньянить и искать то что не нашли другие — может быть очень полезным времяпрепровождением. Даже если эти другие — очень именитые гугловцы. Тогда и вернёмся к этому разговору.
                                            0
                                            Вы вначале проверьте свои результаты, а потом рассуждайте о том что зелено-красная картинка может давать меньшую ошибку чем сине-зеленая.
                                            Легко же сделать. Возьмите случайную тестовую выборку как это все делают и посчитайте процентики результата для каждой из сетей. Убедившись что для 2D сине-зеленая картинка сравнительно немного, но хуже чем красно-зеленая, повторите эксперимент в 3D. Убедитесь что разрыв стал больше. Задумайтесь что будет для размерности n > 1000.
                                0
                                По моему скромному мнению (вот некоторое время после прочтения статьи подумал и пришёл к выводам) главная проблема, которую подняли в этом исследовании — это качество признаков.

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

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

                                Вопрос дальнейших исследований, скорее всего, заключается в поиске (автоматическом) признаков, которые дадут устойчивые границы компактных связных областей.
                                  0
                                  Написал на эту тему свою подробную статью с примерами, картинками и элементами блэкджека: habrahabr.ru/post/249031/

                                  Only users with full accounts can post comments. Log in, please.