Это правда, что трудно понять, что изучает нейронная сеть, но в этом направлении было проделано много работы. Мы определенно можем получить представление о том, что ищет наша сеть.
Давайте рассмотрим случай сверточной нейронной сети для изображений. У нашего первого слоя есть интерпретация того, что мы перемещаем фильтры по изображению, поэтому наш первый скрытый слой соответствует соглашению между небольшими порциями изображения и нашими различными фильтрами. Мы можем визуализировать эти фильтры, чтобы увидеть, каков наш первый уровень представления:K
Это изображение первого слоя фильтров из AlexNet и взято из этого замечательного урока: http://cs231n.github.io/understanding-cnn/ . Это позволяет нам интерпретировать первый скрытый слой как обучающийся для представления изображения, состоящего из необработанных пикселей, как тензор, где каждая координата является соглашением фильтра с небольшой областью изображения. Следующий слой затем работает с этими активациями фильтра.
Не так сложно понять первый скрытый слой, потому что мы можем просто посмотреть на фильтры, чтобы увидеть, как они ведут себя, потому что они непосредственно применяются к входному изображению. Например, предположим, что вы работаете с черно-белым изображением (поэтому наши фильтры являются 2D, а не 3D), и у вас есть фильтр, похожий на
⎡⎣⎢0101−41010⎤⎦⎥.
Представьте себе, что вы применяете это к области изображения 3х3 (игнорируя термин смещения). Если бы каждый пиксель был одного цвета, вы бы получили так как они отменили бы. Но если, скажем, верхняя половина отличается от нижней, вы получите потенциально большое значение. Этот фильтр, по сути, является детектором краев, и мы можем понять это, просто применив его к изображениям и посмотрев, что произойдет. Но намного сложнее понять более глубокие слои, потому что вся проблема в том, что мы не знаем, как интерпретировать то, к чему мы применяем фильтры.0
Эта статья Erhan et al. (2009) согласуется с этим: они говорят, что визуализация первого скрытого слоя является обычной (и это было еще в 2009 году), но труднее представить визуализацию более глубоких слоев. Из этой статьи:
Основной экспериментальный вывод этого исследования очень удивителен: отклик внутренней единицы на входные изображения, как функция в пространстве изображений, представляется унимодальным или, по крайней мере, что максимум найден надежно и последовательно для всех проверенных случайных инициализаций , Это интересно, потому что найти этот доминирующий режим относительно легко, и его отображение дает хорошую характеристику того, что делает юнит.
Крис Олах и др. ( Https://distill.pub/2017/feature-visualization/ ) основываются на этом и обсуждают, как в целом вы можете (1) генерировать изображения, которые приводят к большим активациям, чтобы получить представление о том, что сеть ищет; или (2) сделать реальные входные изображения и посмотреть, как разные части изображения активируют сеть. Этот пост посвящен (1).
На изображении ниже, взятом из этой связанной статьи Olah et al., Авторы обсуждают различные аспекты сети, которые вы можете проверить. Самое левое изображение показывает результат оптимизации активации определенного нейрона в пространстве входного изображения и так далее.
Я очень рекомендую прочитать эту статью целиком, если вы хотите глубже понять это, и, читая ее ссылки, вы должны иметь полное представление о том, что было сделано с этим.
Теперь, конечно, все это было только для изображений, где мы, люди, можем разобраться во входных данных. Если вы работаете с чем-то более сложным для интерпретации, например с большим вектором чисел, вы, возможно, не сможете сделать такую классную визуализацию, но в принципе вы все равно можете рассмотреть эти методы для оценки различных нейронов, слоев и т. Д. ,