У читателя, наверное, появился вполне справедливый вопрос: причем тут нейросеть? Помните фильтры, которые проходятся по изображению? В этих фильтрах лежат абстрактные признаки: в одном – ушко, в другом – носик, в третьем – лапки и так далее. Эти фильтры составляет не человек, иначе вам бы не рассказывали о них в статье о машинном обучении. Изначально эти фильтры заполнены случайными числами, их никак нельзя интерпретировать, нейросеть просто не знает, что за признаки есть на картинке.
Дальше она действует так.
- Она проходится по картинке, выделяет совершенно абсурдные признаки,
- Пытается по ним предсказать: котик на картинке или собачка.
- У нее ничего не получается, ведь она из картинки выделила что-то случайное
- Нейросеть находит ошибку (например, ошибка 10, если нейросеть не угадала, и 0, если угадала)
- Ошибка как-то зависит от фильтров свертки, поэтому можно взять градиент
- По взятому градиенту нейросеть понимает, как менять числа в фильтре так, чтобы ошибка стала меньше
- Повторяя шаги 1-6 много-много раз на большом количестве разных картинок, модель понимает, какими должны быть фильтры
После такого обучения мы можем отдать нейросети картинку котика, которого она никогда раньше не видела и с восторгом заметить, что модель правильно определила, кто на картинке. А если мы визуализируем фильтры, которые нейросеть настроила, то с еще большим восторгом обнаружим, что это не какие-то непонятные рисунки, а очертания лапок, ушек, хвостика, усиков, мордочки и так далее. То есть нейросеть выделила те же признаки, что и человек, когда смотрит на животных. Такое выделение признаков, понятных человеку, свойственно всем сверточным нейросетям.