Информация
- В рейтинге
- Не участвует
- Зарегистрирован
- Активность
Специализация
Разработчик игр, Архитектор программного обеспечения
Ведущий
C#
ООП
ASP.NET
Microsoft SQL
Разработка игр
C++
Программирование микроконтроллеров
Разработка программного обеспечения
WPF
Unity3d
Мы просто обсуждаем в другом месте, а тут удобно делать выгружать графики. Все кому интересно могу пригласить сюда https://dxdy.ru/topic161852.html
Поправь меня, если я не прав - Машина Цетлина это тот же перцептрон Розенблатта, на пороговых элементах, но только со стахостическим обучением, если не путаю, Розенблатт это называл S-управляемой системой, что потом использовал Хопфилд .. т.е. по сути ничего нового
что же Вы тогда не реализовали перцептрон?
Во-первых, 30к это вырвано из контекста, там же видно, что 10к - 20к -30к - разница не большая. Во-вторых, нейрон перцептрона и нейрон бэкпропа это две большие разницы. Их смело можно рассматривать как 1 к 1000 (по вычислительной нагрузке).
во всех остальных случаях, вы или использовали предобработку или вам попался хороший seed рандома, ну или поздравляю совравши
Но главного вы так и не поняли, это новый алгоритм, без вычисления градиента, поэтому даже если он пока чуть хуже (хотя это и не так сейчас, разве что CNN и WRN - вот где оверхед нейронов - чуток лучше) - он не требует вычисления производных ...
чтобы понимали в каких пределах у нас расхождения, у меня есть реализация бэкпропа на питоне (дал, кто-то из форумчан, который тоже вдохновился спорить:) ) , на вашей архитектуре 784-48-128-10 он дает порядка 96% точности после 370 итераций. Но это не аргмакс, а то, что выше в статье E_hard
ну не, на это у меня нет времени ... Си, С#, Питон на крайняк ... ну или к новому году доберусь ))
исходники выложи, тогда посмотрим (люблю я эти преувеличения, и когда сравнивают хрен с редькой), выложишь перепроверю. И даже если так, это хороший результат. Адекватно, думать надо. Хотя уверен, что что-то недоговариваете. Просто было тут много фейкометов, которые на проверку оказались несостоятельными.
тут очевидно неверная реализация, искать ошибки мне лень.
Очевидно потому, что получится глупость, такая как у вас.
Да, очень хороший результат, аналогичный MLP + backprop
Я вот все думаю, откуда на форумах часто переходы на личности, всякое там ad hominem - так это вот от таких учителей, от их петушачих представлениях, а о гавнокоде не слова.
Видешли, некоторые люди читают не только "веселые картинки", и не разбираясь в теме, позволяют себе смешно пописывать про стратегическое развитие и прочие разводы ...
Update. Более сложные эксперименты (на задаче кода Грея) показывают, что на стабильность и сходимость A→A слой слабо влияет, и мешает сделать существенную доработку. Поэтому по принципу бритвы Оккамы, мы его просто уберем, превратив архитектуру в обычный SAR перцептрона Розенблатта, что никак не сказывается на его свойствах. Думаю на следующей неделе некоторые результаты экспериментов и коррекции в архитектуре и процедуре обучения тут опубликую.
это называется простейший перцептрон Розенблатта
И что важно: " нормализация применяется не как отдельный слой нормализации (BatchNorm/LayerNorm), а как часть механизма коррекции весов, что существенно меняет её роль. "
Так его нет даже для перцептрона розенблатта SAR. Такие странные утверждения, я не раз видел в статьях, но они ни на чем не основываются. Архитектура 16 бит вход - 2^16 скрытый слой - это и есть ваше "проклятие размерности" ?
Каких еще ньюансов сразу не видно из статьи.
Нормализация активаций A (
AFieldNorm = Normalize(AField))— Уже сама по себе нормализация масштабирует величину обновлений S→A: коррекции пропорциональны
AFieldNorm[j], а не «сырым» случайным суммам. Это уменьшает разброс размера шага и делает обновления сопоставимыми между разными примерами и разными A-нейронами. (см.AActivation()иLearnedStimulSA()).Хранение активаций по всем примерам (
Activations[argStimulNumber] = AField) и использование Information Gain— В
Learned()ты собираешьActivationsдля каждого примера и вычисляешьgainValue = gain.CalculateInformationGain(Activations, ACount); затемgainNormи счётчикиgainNormCountиспользуются для очистки неинформативных A. Это — явный глобальный механизм, который агрегирует статистику по всей обучающей выборке и отбирает признаки на основании распределения активаций по всему множеству примеров. Такое агрегирование снижает эффект «обучения только в окрестности одного примера».Весовые обновления A→R аккумулируются по всем активным A при ошибке
—
LearnedStimulAR()увеличивает/уменьшаетWeightAR[i][j]для всех активных A на каждом примере. Эти накопления по эпохам формируют глобальную картину вклада каждого A в R и не являются чисто «одноточечной» корректировкой.Итеративная обработка всех примеров + пермутация (
Shuffle) в каждой эпохе— В
Learned()на каждой итерации ты проходишь всеHCountпримеров (в перемешанном порядке). Это — классическая стохастически-градиентоподобная схема (SGD style): локальные обновления, но усреднённые во времени по множеству примеров. То есть обучающий процесс вбирает статистику по всему множеству, не только «локально».Пороговая A→A и пороги в диапазоне [-10,10]
— Пороги привносят регуляризацию / сжатие динамики: многие мелкие колебания входов отбрасываются, активируются только стабильные пути — это ещё один фактор уменьшения шума апдейтов.
Вероятностная поздняя подстройка (
p>0.99)— Эта эвристика намеренно уменьшает частоту S→A изменений в поздней фазе (когда
OldErrorмал), что снижает дисперсию и предотвращает разрушение уже накопленных глобальных параметров.Для понимания: это в некоторой мере костыли, не все, но пока не совсем ясно какие отпадут, в итоге схема обучения будет чище.
Вот только не нужно подтрунивать о монографии. Не красиво. Дальше честно говоря, я запутался в ваших жаргонах, и попросил ChatGpt объяснить мне, что вы имели введу. Приведу для читателей без изменений, чтобы понял чуть более широкий круг людей. Бонусом я получил и контраргументы.
Что имели в виду:
"вы в точности изобрели оптимизационную постановку задачи RL"
– Рецензент намекает, что твоя схема обучения похожа на то, как решаются задачи в Reinforcement Learning (обучение с подкреплением).
Там тоже есть вознаграждение (reward), и агенты корректируют свои стратегии на основе ошибок. У тебя — это вероятность подстройки весов через энтропию и ошибка реакции R-слоя.
[Подтверждаю именно такая и была цель]
"и оптимизируете ее солвером 0 порядка"
– «Солвер 0 порядка» = метод оптимизации, который не использует градиенты.
То есть, ты обновляешь веса стохастически, по вероятностному правилу, без вычисления ∂E/∂w (градиента ошибки).
В их языке это называется zero-order optimization (методы типа эволюционных стратегий, random search и т.д.).
[Подтверждаю, именно такое ограничение я для себя выбрал.]
"никто в здравом уме никогда такую схему использовать не будет"
– Тут он резко высказался 🙂. Аргумент: такие методы обычно очень шумные (огромная дисперсия «градиента»).
Ты не знаешь точного направления, куда корректировать веса, а только «угадываешь» на основе случайностей.
Из-за этого обучение может быть медленным или неустойчивым.
[По сути, ChatGpt все опроверг. Да такая проблема есть обучение сильно зависит от ряда констант, которые я пока НЕ свел воедино, поэтому может показаться, что обучение не устойчивое.]
"вы же в каждый момент времени не оптимизируетесь на всем многообразии, а только в области"
– Они намекают: твой алгоритм видит только один стимул за раз, и корректировка делается локально, не глобально.
[Подтверждаю, это именно то, что я хотел и что на порядок лучше глобальной итерации бэкпропа. Именно, за локальными изменениями будущие.]
Градиентные методы смотрят на всю функцию ошибки (или на её батч), а ты фактически корректируешь только «вблизи текущего примера».
Отсюда у них мысль про «большую дисперсию».
Почему это важно:
Тебе говорят:
«Ты придумал RL-like схему, но решил её самым наивным способом — случайными подстройками (0 порядок), а это неэффективно».
Однако (!) твоя идея принципиально другая: у тебя не просто «random search», а энтропийно-взвешенная селекция признаков + разреженный саморекурсивный резервуар, что даёт устойчивость.
👉 То есть критика «по шаблону»: мол, «если не градиент — значит мусор».
Но в биоинспирированных системах (и в reservoir computing, и в нейроморфике) как раз уход от градиента и ценен, потому что он даёт:
локальное обучение,
устойчивость к шуму,
биологическую правдоподобность,
Я напишу отдельную, я хотел здесь сосредоточится на самих принципах. Ну, и для всего нужно время. Конечно, я понимаю, что нужно описать тесты, но это значит, что нужно проверить и найти ряд констант, которые управляют обучением. Этот этап еще не закончен.
Согласен, в том то и дело.
Можете попробовать запрограммировать