Комментарии 5
Отличная статья.
"Принято полагать, что на каждом следующем слое нейронной сети выделяются все более и более высокоуровневые признаки: начиная с уголков, черточек и других примитивов, заканчивая прической, полом, возрастом (применительно к распознаванию лиц). "
Я тоже так думал, но затеял проверить.
Стал создавать исскуственные картинки из примитивов ( отрезки прямые ) и их комбинаций ( проекции многоугольников, полигоны )
Потом просто выкинул примитивы и раскрасил полигоны шумом, только с разными характеристиками.
Сеть всё равно отличала проекцию семиугольника от проекции квадрата заполненные одинаковым(!) шумом.
Т.е. линий нет, примитивов нет, есть области разной формы. Но она всё равно их отличает.
У вас в радуге цветов не хватает.
Позвольте узнать. Уже давно (относительно) задаюсь вопросом - а зачем в принципе человеку знать, что внутри себя выделяет нейронка?
Может быть немного неккоректный вопрос, попробую перефразировать. Зачем эти попытки понять, что означают результаты на промежуточных слоях?
Почему такое непонимание - потому что лично я вижу сразу две глобальных проблемы. Два ограничения.
Первое - "что мы понимаем". Человек сильно ограничен в своем познании, и если не использовать то что мы не понимаем, то это огромное упущение. Попытки понять что внутри это подсознательное желание не выходить за эти рамки "непонимаемого". Зачем?
Второе - использование слоев. Почему условный нейрон нельзя соединить с тремя нейронами следующего, с четырмя через слой и с восемью через 20 слоев? Ведь если брать тот же мозг, то там нейроны не слоями соединены, а с условно "ближайшими". Вот например реккурентные сети - и ведь неплохо работают. Почему бы не рассматривать что то типа первичного бульона - напихать (псевдо)случайным (нет, псевдо не про псевдорандом, а про то что алгоритм должен выглядеть ближе к случайному, чем к "слой<->слой").
Давно задаюсь этим вопросом, пишу целую либу (для себя), с помощью которой смогу все это проверить, посмотреть, но все же не нашел в интернетах ничего на эту тему. И вот, хотелось бы узнать чьё-нибудь мнение.
По поводу первого вопроса "зачем". Одной из причин можеть быть задача "обяснимости/интерпретируемости результатов". Без этого модели часто не могут применяться в некоторых областях - типа крдитного скоринга.
Понимание того, какие высокоуровневые признаки модель выявляет, может помочь интерпретировать финальный результат.
Есть у меня двое знакомых в кредитном скоринге, и я буквально через пару часов после прочтения посидел, покурил на эту тему с одним из них. И он довольно четко сказал, что в кредитных моделях нейронки не используются, потому что даже банальную "задачу xor" с нейрнокой 2-2-1 уже не объяснить. Есть конечно некоторые исключения, но там обычно и нету регулятора в виде цб, и, соответственно, нет задачи "объяснить как модель работает".
Ну и, опять же, я вот как ни думал над этим - не понимаю, а как "наглядно" можно определить эти самые "признаки". И, более того, как выдвинутую гипотезу о признаке подтвердить. Причем так, чтобы "гарантированно", а не "ну я посмотрел, вроде признаки меняются, значит все окей, ложную корреляцию проверять не буду"
Препарирование нейронок, или TSNE и кластеризация на терабайтах данных