Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
скажем границы фрагментов и цвета. Например, стрелка с меткой A указывает на
внутреннюю активацию, судя по всему реагирующую на желтый и розовый цвета.
Стрелка с меткой Б указывает на внутреннюю активацию, которая, очевидно, от
вечает за границы фрагментов в определенных направлениях во входном изобра
жении.
Но дальнейшие слои (например,
block4_conv2
и
block5_conv3
) демонстрируют
паттерны активаций, все более и более отличающиеся от простых признаков на
уровне отдельных пикселов во входном изображении. Например, стрелка с меткой В
на рис. 7.8 указывает на фильтр в
block4_conv2
, повидимому кодирующий черты
мордочки кошки, включая уши, глаза и нос. Это конкретный пример выделения при
знаков по нарастающей, схематически показанного на рис. 4.6. Впрочем, заметим, что
не все фильтры более поздних слоев сети можно настолько просто описать словами.
Еще одно интересное наблюдение: «разреженность» карт активации также растет по
мере продвижения в глубь сети. В первом слое на рис. 7.8 все фильтры активизиро
ваны (пиксельный паттерн не константный) входным изображением; в последнем же
слое некоторые фильтры работают вхолостую (константный пиксельный паттерн;
например, см. последнюю строку правого блока на рис. 7.8). Это значит, что призна
ки, кодируемые этими работающими вхолостую фильтрами, отсутствуют в данном
конкретном входном изображении.
Вы только что стали свидетелем важной универсальной характеристики пред
ставлений, усваиваемых глубокими сверточными сетями: абстрактность выделяемых
слоем признаков растет с глубиной слоя. Активации более глубоко расположенных
слоев несут все меньше информации о нюансах входных данных и все больше
и больше информации о целевом признаке (в данном случае о том, к какому из
1000 классов ImageNet принадлежит данное изображение). Таким образом, глубокая
нейронная сеть фактически играет роль своего рода
конвейера выжимки информации
,
на вход которого подаются необработанные данные, постепенно преобразуемые так,
что аспекты входного сигнала, не относящиеся к решаемой задаче, отфильтровы
ваются, а полезные для решения этой задачи — усиливаются и уточняются. И хотя
мы демонстрировали это на примере сверточной сети, такая характеристика спра
ведлива и для прочих типов глубоких нейронных сетей (например, многослойных
перцептронов).
Те аспекты входных изображений, которые сверточная сеть считает полезными
для решения поставленной задачи, могут отличаться от таковых для зрительной
системы человека. Обучение сверточной сети основывается на данных, а потому
чувствительно к систематическим ошибкам в обучающих примерах. Например, ста
тья Марко Рибейро и его сотрудников, упомянутая в разделе «Материалы для даль
нейшего чтения и изучения» в конце главы, описывает случай, когда изображение
собаки ошибочно классифицируется как изображение волка изза наличия в фоне
изображения снега. Вероятно, потому, что обучающие изображения включали на
фоне снега только волков, но не собак.
Из визуализации паттернов внутренних активаций глубокой сверточной сети мы
почерпнули немало полезной информации. В следующих подразделах расскажем,
как написать код на TensorFlow.js для извлечения этих внутренних активаций.
Do'stlaringiz bilan baham: |