Я изобрел новый тип слоя для нейронных сетей и надеюсь на отзывы о нем.

Новый уровень дает сети возможность оценивать надежность своих собственных функций. Это позволяет ему изменять вес каждой функции в зависимости от проблемы.

Проблема

Когда обычная нейронная сеть решает проблему регрессии, она предоставляет только исходный результат. Он не дает оценки того, насколько он уверен в правильности этого вывода.

Это проблема, если сеть не знает, каким должен быть результат. Он не сообщит вам о том, что его результат - не более чем слепая догадка.

Между этими двумя типами неопределенности есть разница:

  1. «Я проверил все источники данных, которые смог найти, и ответ - 0,3»
  2. "Я понятия не имею, с чего начать, но в среднем 0,3, так что давайте продолжим"

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

Мне кажется очевидным, что эта информация должна быть полезной.

Решение

Я представляю слой самооценки:

Слой самооценки - это новый тип слоя нейронных сетей. Он состоит из двух частей, которые обучаются параллельно:

1. Основной компонент, который ведет себя как обычный слой.

2. Компонент самооценки, который учит предсказывать полезность основного компонента.

Есть много разных способов реализовать детали. В примере, который я пробовал, это реализовано так:

Основная составляющая - линейный слой.

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

В результате компонент самооценки учится предсказывать среднее абсолютное значение градиента основного компонента.

Всякий раз, когда основной компонент делает идеальный прогноз, компонент самооценки должен давать нулевое значение. Всякий раз, когда основной компонент дает плохой прогноз, компонент самооценки должен предсказать высокое значение.

Компонент самооценки является мерой неопределенности, которая остается после расчета других характеристик.

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

Разделите сетевой уровень на множество параллельных уровней и изучите самооценку для каждого из них. Сеть должна получить от этого ценную информацию, чтобы улучшить свою производительность. Вот почему: представьте себе особенности слоя как людей, дающих советы людям, находящимся на следующем слое. Добавление уровня самооценки позволяет узнать, какие из консультантов действительно уверены в своих советах, а какие нет.

Случаи применения

Есть как минимум два разных способа использования слоя самооценки:

  1. Чтобы оценить надежность прогнозов вашей сети.
  2. Чтобы улучшить общую производительность сети, предоставив сети возможность оценивать каждую из своих функций. Это позволяет сети моделировать неопределенность по каждой из ее собственных функций, что может использоваться для повышения производительности.

Реализация в PyTorch

Я реализовал уровень самооценки в PyTorch.

Загляните в мой Github, чтобы найти код: https://github.com/FlorianDietz/selfAssessment

Предыстория и дополнительная информация

Это изобретение является побочным продуктом моего частного исследовательского проекта.

Использование этого слоя привело к незначительному улучшению набора данных MNIST в небольшом испытании. Однако улучшение было слишком маленьким, чтобы точно знать, полезно ли оно.

Этот проект не идет в том же направлении, что и мое основное исследование. Поэтому я не собираюсь заниматься этим дальше. Однако это кажется достаточно многообещающим, и полностью игнорировать его было бы пустой тратой.

Может быть, это больше соответствует чьим-то исследовательским интересам, а может быть, это просто помогает вдохновить кого-то на родственную идею.

Для получения дополнительной информации об экспериментах, которые я уже проводил, о возможных будущих улучшениях и о других возможных вариантах использования уровней самооценки, ознакомьтесь с этой более подробной статьей:

Https://floriandietz.me/neural_networks_self_assessment/

Первоначально опубликовано на https://floriandietz.me.