Как инициализировать элементы матрицы фильтра?


24

Я пытаюсь лучше понять сверточные нейронные сети, написав код Python, который не зависит от библиотек (например, Convnet или TensorFlow), и я застрял в литературе о том, как выбирать значения для матрицы ядра, когда выполнение свертки на изображении.

Я пытаюсь понять детали реализации в шаге между картами объектов на изображении ниже, показывающем слои CNN.

Сверточные нейронные сетевые слои

Согласно этой схеме:

Свертка изображения

Ядро матрицы ядра «шагает» по изображению, создавая карту объектов, где каждый пиксель является суммой всех поэлементных произведений между каждым весом ядра (или матрицы фильтра) и соответствующим значением пикселя входного изображения.

Мой вопрос: как мы инициализируем вес матрицы ядра (или фильтра)?

В демонстрации выше это просто 1 и 0, но я предполагаю, что это упрощено с точки зрения диаграммы.

Обучены ли эти веса на некотором этапе предварительной обработки? Или выбрано явно пользователем?

Ответы:


19

Один тип обычно инициализирует сеть из случайного распределения, как правило, означает ноль, и некоторые меры предосторожности предпринимаются в отношении выбора ее дисперсии. В наши дни, благодаря достижениям в методах оптимизации (SGD + Momentum среди других методов) и нелинейностях активации (ReLU и ReLU-подобные активации, обеспечивают лучшее обратное распространение градиентных сигналов, даже в более глубоких сетях), можно реально обучить сверточному состоянию на современном уровне техники. нейронные сети от рандомизированной инициализации.

Ключевые свойства следующие:

  • Почему случайно? Почему бы не инициализировать их все в 0? Важная концепция здесь называется нарушением симметрии . Если все нейроны имеют одинаковые веса, они будут давать одинаковые результаты, и мы не будем изучать разные функции. Мы не будем изучать различные функции, потому что на этапе обратного распространения все обновления веса будут точно такими же. Таким образом, начало с рандомизированного распределения позволяет нам инициализировать нейроны, чтобы они были разными (с очень высокой вероятностью), и позволяет нам изучать богатую и разнообразную иерархию функций.

  • Почему означает ноль? Обычной практикой в ​​машинном обучении является центрирование нуля или нормализация входных данных таким образом, чтобы необработанные входные характеристики (для данных изображения это были бы пиксели) усреднялись до нуля.

    Мы центрируем наши данные по нулям и будем случайным образом инициализировать веса нашей сети (матрицы, как вы их называли). Какой тип распределения мы должны выбрать? Распределение входных данных в нашей сети имеет средний ноль, поскольку мы центрированы на нуле. Скажем, мы также инициализируем наши условия смещения равными нулю. Когда мы инициализируем обучение нашей сети, у нас нет причин отдавать предпочтение одному нейрону над другим, поскольку все они случайны. Одна из практик состоит в том, чтобы случайным образом инициализировать наши веса таким образом, чтобы они все имели нулевой выход активации в ожидании. Таким образом, ни один нейрон не может «активироваться» (иметь положительное выходное значение), чем любой другой нейрон, одновременно нарушая симметрию из-за случайной инициализации. Ну, простой способ сделать это - выбрать среднее нулевое распределение.

  • Как мы выбираем отклонения? Вы не хотите выбирать слишком большое отклонение, даже если оно означает ноль. Экстремальные значения в весах глубоких сетей могут привести к активным выходам, экспоненциально увеличивающимся по величине, и эта проблема может усугубляться глубиной сети. Это может нанести ущерб обучению нашей сети. Вы также не хотите, чтобы он был слишком маленьким, поскольку это может замедлить обучение, так как мы вычисляем очень маленькие значения градиента. Таким образом, здесь есть баланс, особенно когда речь идет о более глубоких сетях, поскольку мы не хотим, чтобы наше прямое или обратное распространение экспоненциально увеличивалось или уменьшалось по глубине.

    Существуют две очень популярные схемы инициализации веса: Glorot Uniform ( Понимание сложности обучения глубоких нейронных сетей с прямой связью ) и инициализатор He Normal ( Углубление в выпрямители: Превосходная производительность на уровне человека по классификации ImageNet ).

    Они оба построены с целью обучения глубоких сетей с учетом следующего основного принципа (цитата из статьи «Погружение глубже в выпрямители»):

    «Надлежащий метод инициализации должен избегать уменьшения или увеличения величин входных сигналов в геометрической прогрессии».

    Грубо говоря, эти две схемы инициализации инициализируют дисперсию каждого слоя так, чтобы выходное распределение каждого нейрона было одинаковым. В разделе 2.2 «Углубление в выпрямители» дается углубленный анализ.

Последнее замечание: иногда вы также увидите, что люди используют гауссиан со стандартным отклонением, равным 0,005 или 0,01, или некоторым другим «небольшим» стандартным отклонением во всех слоях. В других случаях вы увидите, как люди возятся с отклонениями вручную, в основном выполняя перекрестную проверку, чтобы найти наиболее эффективную конфигурацию.


1
Но как насчет формы "X" (сделанной 1) желтого фильтра в GIF выше? Я понимаю, что это то, что я хотел бы использовать для обнаружения форм "X" в любом месте изображения, но как мне узнать, что "X" - это форма, которую я хочу? У меня сложилось впечатление, что форма фильтра запоминается автоматически, но я не знаю как. Может быть, это тоже был вопрос ОП?
Фелипе Алмейда

2

Я не могу комментировать из-за низкой репутации, и поэтому я пишу это в ответ на вопрос Фелипе Алмейды. После идеального ответа Инди-AI добавить особо нечего. Если вы хотите обнаружить определенные формы (например, X), вы можете предварительно определить определенный фильтр, как в случае с обнаружением кромок. Но в этом и заключается прелесть глубокого обучения: в нем так много слоев, так много фильтров и так много итераций, что фильтры изучают почти каждую форму объекта, необходимую для него самого. Таким образом, теоретически, если есть X, который будет обнаружен, один из фильтров научится обнаруживать X (как желтый фильтр)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.