Pull to refresh

Comments 18

Сеть будет иметь два скрытых слоя, размером в 5 раз меньше, чем входной. То есть, если у нас 20 входов, то на скрытых слоях будет по 4 нейрона. Почему так мало? Ну вообще-то подбор количества нейронов на слоях — вещь чисто эмпирическая, точных правил никто не знает. Просто так сеть будет быстрее обучаться, при этом увеличение количества нейронов особой пользы не принесет, да и по советам авторов книг


Вы меня извините, но формулировки такого вида попахивают дилетантщиной. Можно было употребить более гибкие формулировки типа: «в моем случае нет четкой методики выбора...» или «в данном случае нет смысла искать некую красивую методику выбора структуры» и т.д. А то получается: «по совету автора книги...». Он вас, возможно и не видел и не слышал о ваших задачах.

Вот, например, есть схема рекуррентной нейросети для приближенного решения переопределенной СЛАУ. Там структура сети совершенно четко вытекает из постановки задачи. Размерность входного вектора (n) больше размерности выходного (m) — поэтому первый слой имеет «n» нейронов с «m» входами. Первый слой осуществляет регуляризацию, т.е. редукцию размерности входа к размерности выхода. Второй слой выполняет вычисление частных производных невязки по элементам входного вектора, а третий слой уже вычисляет производные по времени элементов выхода и интегрирует их. Выход замыкается на вход и так сеть работает. При этом структура ее четко завязана на размерности входа и выхода.
Нужно быть осторожнее с формулировками. В разных задачах валидны разные подходы.
Речь идёт о многослойном персептроне, никаких формул показывающих сколько нейронов хватит для обучения и сколько нейронов приведёт к переобучению для таких сетей нет, а гибкие формулировки просто завуалируют причину за красивыми словами не имеющими отношения к действительности. Фраза про бессмысленность поиска методики имеет смысл, но выглядит необоснованной, фраза про отсутствие чёткой методики вообще враньё, методика есть, нету инструмента получить решение сразу, а методика проверки сети и принятия решения увеличивать или уменьшать сеть есть.
Нужно быть осторожнее с формулировками. В разных задачах валидны разные подходы.
Спасибо за поправку, да, с формулировкой я был не осторожен. HomoLuden, ваш пример со СЛАУ говорит о задаче решения системы, где структура сети определяется методикой решения, в моей же задаче нет такой четкой логики решения. Потому и подбор количества слоев и размерностей слоев я проводил эмпирически.
Верно, это своего рода черный:

Чёрный я́щик — термин, используемый для обозначения системы, внутреннее устройство и механизм работы которой очень сложны, неизвестны или неважны в рамках данной задачи. «Метод черного ящика» — метод исследования таких систем, когда вместо свойств и взаимосвязей составных частей системы, изучается реакция системы, как целого, на изменяющиеся условия. Подход чёрного ящика сформировался в точных науках (в кибернетике, системотехнике и физике) в 20-40 годах XX века и был заимствован другими науками (прежде всего, бихевиористической психологией).

А по этому и «нет такой четкой логики решения».
Написать перцептрон это половина дела. и половина поставленной задачи.
Другое дело правильно его обучить для конкретной задачи — найти правильную конфигурацию.

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

я что-то повторяюсь повторяюсь, но смысл думаю донес :) Пишите лучше какая задача — и как вы искали оптимус
>Правильно же в таком алгоритме давать на входы по очереди все примеры обучающей выборки, это называется эпохой. И только с концом эпохи считать ошибку (суммарную по всем примерам выборки) и корректировать веса.

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

>Во время обучения возможны скачки в погрешностях, но такое бывает

Если погрешность при обучении одному примеру не уменьшается строго монотонно — то в алгоритме допущена ошибка. Если средняя погрешность за эпоху постоянно прыгает вверх-вниз — то это серьезный аргумент в пользу уменьшения скорости обучения.
> Если средняя погрешность за эпоху постоянно прыгает вверх-вниз — то это серьезный аргумент в пользу уменьшения скорости обучения.
Совершенно согласен. Следующий топик собираюсь посвятить RProp.
Интересная тема. У меня в кандидатской (кусок её тут) что-то подобное делается, хотя конечно не на персептронах.
на пхп все выглядет как-то глупо, может начнете на норм языках писать?
PHP? На нем быстро пишешь и быстро пробуешь. Я пробовал писать то же на C#, C++ (думал, будет дикое ускорение и я буду счастливее с каждой эпохой), ничего серьезно не поменялось, суть та же. Была даже идея написать дополнение для PHP на Си, но это тоже не оправдано.
Ну, не знаю как на пхп, на плюсах сеть такой конфигурации при паре сотен примеров будет обучаться со скоростью порядка нескольких тысяч эпох в секунду. Даже если почему-либо на пхп в 10 раз медленнее (хотя с чего бы?), все равно это будет абсолютно несущественно на практике.
Плюсы будут очень полезны, когда сети будут на сотни и тысячи нейронов, а размеры обучающих выборок будут измеряться в сотнях мегабайт.
В том-то и дело, что в моем случае, в моей «не примерной» задаче пока таких масштабов нет. Не спорю, при расширении понадобится оптимизация. Есть даже идея написать php-extension.
Я конечно не хочу кидать ни в кого камни, но хочется задать вопрос.
Зачем этот пост?
Было бы отличие если бы Вы его записали в свой личный дневничок (бумажный или электронный) и радовались своей находке?

Кроме того, что в гораздо более приемлемом виде это можно прочитать в тысячах статей в интернете (и в сотнях книг), ваше описание еще содержит и множество ошибок и неточностей.
Я прочитал на Хабре пост о перцептроне и меня расстроило отсутствие продолжения. Ну, или расширения, что-ли. Собственно, как дополнение его и стоит рассматривать.
Сколько рылся в интернете, выкачивал книги, выискивал топики… Везде все есть, но теория, теория, теория… Впервые увидел реализацию какой-то относительно серьезной системы на относительно понятном языке (сам предпочитаю с++ либо дельфина).
Автору поста Большое Спасибо!
Наконец-то кто-то попал в цель, именно поэтому я это все и написал.
Sign up to leave a comment.

Articles