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

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

Сеть проходит по изображению и выделяет фичи. Если Вы взгяните на гифку, то заметите, что свёртка проходит по всем областям изображения. Что это означает? Очень просто. Фактически мы перебираем все подизображения и пытаемся выделить устоявшиеся паттерны (каждый паттерн — отдельная свёртка), т.е. обеспечить инваринтность относительно смещения для того или иного паттерна.


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

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

в Первой статье это контраст чёрное-белое — степень насыщенности от 0 до 255

Во второй и третьей статье есть цветные изображения, соответственно каждый пиксель кодируется набором трёх значений (например RGB). Это получается, надо машине просматривать значение для каждого основного цвета — Red, Green, Blue. И если в первой статье картинка берётся 18x18 пикселей и там только чёрное и белое, то здесь фото может быть и 1000x1000 и более; и для каждого пикселя три значения. Потом мы настраиваем фильтр по этим цветам и размерам области в пикселях — создаём несколько свёрточных слоев по цветам и определяем границы таким образом. Т.Е. процесс сводится к тому чтобы найти границы — где объект, а где всё остальное. Эти веса можно применять несколько раз или создавать другие вместе с этими изменяя размеры области изображения. Я правильно понял? :-)
Что ж, вроде все правильно поняли. Каналы изображения (rgb) рассматриваются сетью как карты признаков, как если бы они пришли с предыдущего слоя сети. Веса “настраиваются” когда вы подаете модели обучающий набор изображений (то есть в процессе обучения модели вы даете изображение и верный класс для него, сеть же должна подобрать такие параметры весовых матриц, чтобы выдаваемый ей класс совпадал с правильным). Сформированные таким образом веса используются уже на других выборках изображений (для которых у вас может и не быть верных классов, то есть здесь обучения не происходит и веса сети больше не меняются).
Полностью согласен с автором в плане нехватки доходчивых статей на границе между математической теорией персептрона/обратного распространения и практической их реализацией на python. Все либо уходят глубоко в теорию, либо сразу приводят код на tensorflow/torch/etc, где всё уже завёрнуто в black-box готовые модули, которые иногда и ошибки содержат.

На мой взгляд, для человека, который хочет не просто обучать готовые сети на своих данных, а проектировать новые архитектуры не помешает хотя бы раз — (1) Запрограммировать обратное распространение вручную (2) Заморочиться с согласованием размерностей матриц при реализации свёртки (3)(n) → Успех
В своё время мне очень понравился tutorial Stanford UFLDL, в котором даётся и теория, и необходимая практика.

<TL;DR> Автору спасибо за статью и жду продолжения. Надеюсь ссылка выше может пригодиться в написании!

Я не очень понял, почему вы рассматриваете свёртку, которая использует всё изображение, т.е. используете бесконечные суммы.

на самом деле в коде я не использую бесконечные суммы (можете посмотреть), а определяю через code_demo_indexes.py стартовый и конечный значения для a и b. Написать формулу с «бесконечностью» мне показалось лучшей идеей, чем под значком суммы писать выражения, по которым определяются начальные и конечные значения по осям ядра (сами эти выражения я определяю чуть дальше в статье). Тем более что вариант написания формулы с бесконечностью я находил и в других статьях в интернете. Надеюсь, стало понятнее

Я всё равно не срубаю физического смысла. Т.е. получается что агрегация происходит по всему изображению. Но это же неверное. Смысл в том, чтобы агрегировать изображение локально. Разве не так?

Only those users with full accounts are able to leave comments. Log in, please.

Information

Founded
Location
Россия
Website
ods.ai
Employees
5,001–10,000 employees
Registered