Комментарии 16
А вопрос какой, я не понял, честно говоря?
Данная статья не является научной работой, и по сути является вопросом.
На вопрос не похоже, слишком длинно. Вы можете сделать нейросеть для MNIST с иллюстрацией вашей идеи? Покажете, насколько меньше стало параметров, это даст точку для старта.
Если я Вас понял правильно, то вы два нейрона в слое заменяете одним с двумя выходами.
Но при этом Вы различные весовые коэффициенты каждого нейрона заменили на одинаковые от одного. В итоге Вы сократили число весовых коэффициентов на входах нейронов, так как вместо двух остался один нейрон.
Но я полагаю, что вы фактически просто обрезали сеть.
Сумма произведения весовых коэффициентов на входные сигналы, которая поступает на элемент сравнения нейрона представляет собой фильтр.
В исходной схеме таких фильтров два и они разные. Вы, выкинув один нейрон, выкинули один из фильтров. Все верно?
Всегда можно подобрать пример, в котором большинство слоев и нейронов в сети просто лишние. Но это недостаток примера, а не сети.
Нельзя ничего просто так обрезать ни на входе ни на выходе. Для этого есть процесс обучения и оптимизации структуры сети после обучения.
все верно пишите, уменьшаем количество фильтров. И в этом как раз заключается моя гипотеза: в некоторых задачах такой трюк может сработать и значительно сократить количество параметров. Эта же гипотеза с другого бока - можно увеличить точность сети небольшим увеличением кол-ва параметров. Поцесс обучения не меняется почти никак. Какие методы оптимизации вы имеете в виду?
Видел статью где полносвязный слой успешно заменяли CNN, что немного перекликается с перцептроном с несколькими выходами, но совсем разная интерпритация происходящего.
Изложу свой подход к данному вопросу.
Изначально концепция нейронных сетей основана на том, что нам ничего неизвестно о среде, в которой сеть будет функционировать. Т е внешняя среда для сети изначально предполагается "черным ящиком".
Поэтому структура сети создается максимально обобщенной. Т е. задаем лишь исходные (доступные нам ) сигналы внешней среды , число слоев и число нейронов и предполагаем изначально, что "все соединяется со всем".
Т е сеть рождается без каких-либо знаний. Процесс обучения собственно и делается, чтобы сеть приобрела эти знания. В результате обучения может получиться, что, для выбранной нами среды существования сети, какие-то из нейронов и соединений будут избыточные. Тогда мы их уберем из сети.
Но проблема в том, что такая, изначально глупая, сеть будет очень долго обучаться.
Поэтому я сторонник сетей, в которых учитываются накопленные человеком знания о среде существования сети. Т е заменяем "черный" ящик на "серый".
Вы собственно это и делаете, но исходный посыл у Вас не от среды обитания сети, а от упрощения самой сети. т е Вы не от причины, а от следствия действуете, предполагая, что причина всегда есть. Упрощение сети - не цель, а лишь следствие.
Кроме того, я сторонник изначально не ограничивать в сети ни число нейронов ни число слоев. Т е в моей концепции сеть изначально состоит лишь из внешних сигналов и произвольного число нейронов и слоев.
Далее в процесс построения(обучения) сети вносятся ограничения, связанные с нашими априорные знаниями о среде существования сети.
Про оптимизацию сети...
Я сторонник эволюционных алгоритмов.
Например, Метод группового учёта аргументов (МГУА, автор Ивахненко А.Г.).
Возможно потому, что познакомился с МГУА , "когда мы были молодыми" по книге «Системы эвристической самоорганизации в технической кибернетике»
В качестве примера. В моей первой системе распознавания для технической диагностики изначально было 200 спектральных признаков, после обучения и оптимизации осталось три.
но исходный посыл у Вас не от среды обитания сети, а от упрощения самой сети
Название и посыл у меня немного клик-бейтные, это правда :)
Но, пожалуй, немного повторюсь, ибо считаю это важным. Хотя я в статье и написал про потенциальное уменьшение параметров многосвязного слоя(что вы приравниваете к упрощению), метод работает и в обратную сторону. Мы можем попробовать усложнить систему лишь незначительным увеличением кол-ва параметров.
У меня есть предчувствие что перцептрон с несколькими выходами очень хорошо сработает в большинстве задач, ибо полносвязные сети очень часто берут с очень большой избыточностью(по разным причинам). Но эксперименты пока времени проводить нет, подтвердить ничем не могу, потому статья везде с оговорками, и дисклеймер о том что это не является научной работой, а вопросом: "почему так никто не делает?"
То есть к описываемому подходу нужно относиться именно как к очередному инструменту. Применять не применять - каждый решает сам.
>Кроме того, я сторонник изначально не ограничивать в сети ни число нейронов ни число слоев.
Значит вам 100% нужно попробовать этот подход в своих проектах. С небольшим увеличением кол-ва параметров вы получите большую сложность. Самое плохое что может случится - из 10 выходов нейрона будет использоваться всего один, и это будет работать как обычная сеть из перцептрона с одним выходом :)
какие-то из нейронов и соединений будут избыточные. Тогда мы их уберем из сети.
Согласен что убрать перцептрон с несколькими выходами из сети сложнее. Это один из его минусов.
На перцептрон с несколькими выходами можно смотреть еще как на один из методов оптимизации. То есть, после того как сеть оттренирована и нужно ее подсушить, можно попробовать заменить обычный слой на слой с перцептронами с несколькими выходами.
Вообще-то, мы с вами говорим о разном. Я говорю о нейронах,
а Вы о перцептронах. Нейрон имеет один выход,
![Схема искусственного нейрона — базового элемента любой нейронной сети Схема искусственного нейрона — базового элемента любой нейронной сети](https://habrastorage.org/getpro/habr/upload_files/ac9/757/c2e/ac9757c2e1a785e0af6b70b862cffe51.png)
а перцептрон - любое количество выходов. И их число не связано с сокращением количества входов или сокращением числа весовых коэффициентов.
![](https://habrastorage.org/getpro/habr/upload_files/819/489/881/8194898819d4bb364ea769191a62a552.png)
Логическая схема перцептрона с тремя выходами
И в этом как раз заключается моя гипотеза: в некоторых задачах такой трюк может сработать и значительно сократить количество параметров.
Все верно - персептроны как есть в реальных задачах не используются. Так, например, в картинках переход от персептрона к сверточной сети как раз есть способ сократить (причем, весьма существенно) число параметров за счет переиспользования весов.
В Вашем примере вообще достаточно двух нейронов с квадратичной функцией активации - один будет очерчивать внутреннюю, другой - наружную окружности. К чему я это - к тому, что конкретика зависит от задачи и, безусловно, может быть полезно закладывать в нее какое-то априорное знание о распределении данных. Но общим случаем был и остается персептрон как есть - без архитектурных оптимизаций.
Если я правильно понял схемы, то вы растиражировали выход из нейрона, после чего применили линейное преобразование к каждому экземпляру выхода. Получается все они зависимы, принципиально новой информации не возникает. Не уверен, что это даст пользу. Обычно стараются как раз сократить повторяющуюся информацию, оставив только разнородную.
я растирожиловал не выход нейрона а так называемый 'фильтр' он же вектор весов W. выходом нейрона является результат нелинейной фунции активации. При некоторых фунциях активации выходы могут быть зависимыми, но лишь на определенных отрезках, на всем дотупном пространстве входных параметров они независимы.
я растирожиловал не выход нейрона а так называемый 'фильтр' он же вектор весов W
никакой не вектор весов, а его поэлементное произведение на вход, да ещё и просуммированное (опять же если верить схеме). Т.е. это выход обычного нейрона за исключением отсутствующей функции активации и нулевого биаса. А потом вы из этого числа делаете 10 таких чисел и каждый пропускаете через линейное преобразование. Всё равно что за нейроном поставить полносвязанный слой, а после него активации воткнуть.
перепишем формулу обычного перцептрона
Перцептрон W*X + b считает скалярное произведение (косинус угла) между векторами W и X. Вы поделили это на магнитуду вектора W и перешли от углов к расстояниям — (W*X + b) / mag(W), а это уже что-то другое.
спасибо, подумаю как переписать этот момент попонятнее.
Ну не совсем так. Скалярное произведение - это не косинус угла в чистом виде, - там как раз модули обоих векторов есть в произведении. Поделив на модуль действительно перешли к расстояниям, но сути дела это не меняет: нормализация весов - вполне обыденная процедура. Идея автора, как я понял, в переиспользовании фильтров - тоже, в принципе, не нова, но надо отдать должное - автор вдумывается в суть происходящего, что, безусловно, хорошо.
У вас неправильные перцептроны