Видешли, некоторые люди читают не только "веселые картинки", и не разбираясь в теме, позволяют себе смешно пописывать про стратегическое развитие и прочие разводы ...
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, и в нейроморфике) как раз уход от градиента и ценен, потому что он даёт:
Если бы Вы тоже дополнили статью простейшим примером использования данной архитектуры, статья от этого только бы выиграла.
Я напишу отдельную, я хотел здесь сосредоточится на самих принципах. Ну, и для всего нужно время. Конечно, я понимаю, что нужно описать тесты, но это значит, что нужно проверить и найти ряд констант, которые управляют обучением. Этот этап еще не закончен.
ощущается нехватка посвящённых именно низкоуровневому разбору архитектур
Согласен, в том то и дело.
Бродят аналогичные мысли касательно ассоциативных слоёв.
Во-первых, не нет, а не представлены. Во-вторых, я сам разберусь, что мне делать. В-третьих, это крайне не уважительное отношение ко мне. И такое общение будет действительно не конструктивное, но не по моей вине. Поэтому в этой ветке, я все что счел нужным пояснил. А далее, ожидаю вопросов по существу.
А для моих что называется постоянных хейтеров жду посыпания головы пеплом, с признанием, что перцептрон Розенблатта мощная нейронная сеть, а на бэкпропе свет клином не сошелся. И только так мы продвинемся дальше.
Эко Вы быстрый :) это много букв, не всё сразу .. ну, и потом, вначале с мат. частью нужно таким как вы разобраться.
Давайте вот, что адекватно относится к результатам. Между in vitro и in vivo большая пропасть, но без первого никогда не бывает второго.
Тестировал я его на задаче четность до 16 бит. Но любой может мне написать и помочь в дальнейшем его развитии. Именно, так это работает. И кстати, посмотрите оригинальную статью о backpropagation - какие там были представлены результаты, вы наверно к своему удивлению обнаружите, что ничего большего, чем решение задачи XOR и четность с 4 битами :) И вот за это дали нобелевку, а вы говорите результаты ))
Мой уровень понимания НС - я могу ОБУЧАТЬ модели в 200 Гб ... Дома.
Так почему бы вам про это не написать статью? Пока ваши объяснения непонятны, от слова совсем. Нет, ну если кто-то, что-то понял - пусть напишет. Но если честно, вы ведь даже не старались объяснить то что знаете? Совершенно не ясно причем тут ваши графические методы и нейросети и куча еще чего ... поэтому все это не релевантно к данной теме и к моей статье.
Нет, 100% , если число A элементов > 1000 и >= N (N - количество примеров обучающей выборки)
Например, задача четность для 16 бит, всего возможных примеров 2^16 = 65536, в теории нужно именно 65536 А-элементов (на практике хватает 3000, из-за свойств самой задачи, на самом деле задачи где нужно как в теории нету, разве что совсем рандом, но не псевдорандом, а настоящий, псевдо рандом тоже решается меньшим количеством). От R-элементов число A-элементов не зависит, т.е. отображается на сколько угодно классов.
Всё тоже самое будет справедливо для backpropagation
Именно, подумайте вам осталось немного, надеюсь просветление наступит у вас. После А-слоя у нас уже вектора в другом пространстве большей размерности, и вот в этом пространстве отображения входных векторов гарантированно линейно разделимы.
Посмотрели как решается задача XOR перцептроном? Или я зря теряю с вами время?
А открыть, вместо искаженных учебных материалов, оригинал работ Розенблатта- видимо не судьба?
P.S. А Бред писали и куда более именитые ученные, кроме собственно Минского, или там Румельхарда с Хинтоном - если вы у них найдете, такого же уровня бред, то ок. Но не найдете. Все остальные несут бред, если говорят, что перцептрон не решает XOR. И уж левый курс - это совсем не авторитетный источник.
Давайте по шагам - XOR решает? Уже ознакомились как? Посыпали голову пеплом? Тогда пойдем дальше, но не раньше.
P.S.S. Ну и потом я глянул, эту вашу ссылку. Из-за ваших поверхностных знаний вы не понимаете, что в той главе вам объясняют. Вас вводят в заблуждение, то что анализируемое там называют перцептроном. Это не перцептрон. Это исключительно A-R слой перцептрона. Да он решает задачу, если обучающие множество линейно разделимо (как там и сказано). Но слой SA - это слой, который обеспечивает линейную разделимость причем гарантировано - а как я все ссылки дал, идите и учите, за вас это никто не будет делать.
Дам только последнею подсказку - внимательно прочитайте раздел Offset, и подумайте что дает увеличение размерности пространства.
Ясно, вы в самом начале своего пути и начитались бреда. То что там описывается, это не перцептрон Розенблатта. У перцептрона Розенблатта три слоя элементов S-A-R , где они у Ryan Peters ?
Ну, собственно, Ryan Peters - это и есть распространитель мифов, о которых я и пишу в своей статье. Если вы как то аффилированы с ним, попросите его не распространять фейки в науке. А сами внимательно читайте, что есть перцептрон. Мне вы видимо не поверите, поэтому откройте оригинал.
Но начните пожалуй с Википедии статья Перцептрон, это я её писал еще лет 15 назад, так вот посмотрите там вначале как решается задача XOR перцептроном.
Видешли, некоторые люди читают не только "веселые картинки", и не разбираясь в теме, позволяют себе смешно пописывать про стратегическое развитие и прочие разводы ...
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, и в нейроморфике) как раз уход от градиента и ценен, потому что он даёт:
локальное обучение,
устойчивость к шуму,
биологическую правдоподобность,
Я напишу отдельную, я хотел здесь сосредоточится на самих принципах. Ну, и для всего нужно время. Конечно, я понимаю, что нужно описать тесты, но это значит, что нужно проверить и найти ряд констант, которые управляют обучением. Этот этап еще не закончен.
Согласен, в том то и дело.
Можете попробовать запрограммировать
Во-первых, не нет, а не представлены. Во-вторых, я сам разберусь, что мне делать. В-третьих, это крайне не уважительное отношение ко мне. И такое общение будет действительно не конструктивное, но не по моей вине. Поэтому в этой ветке, я все что счел нужным пояснил. А далее, ожидаю вопросов по существу.
А для моих что называется постоянных хейтеров жду посыпания головы пеплом, с признанием, что перцептрон Розенблатта мощная нейронная сеть, а на бэкпропе свет клином не сошелся. И только так мы продвинемся дальше.
Эко Вы быстрый :) это много букв, не всё сразу .. ну, и потом, вначале с мат. частью нужно таким как вы разобраться.
Давайте вот, что адекватно относится к результатам. Между in vitro и in vivo большая пропасть, но без первого никогда не бывает второго.
Тестировал я его на задаче четность до 16 бит. Но любой может мне написать и помочь в дальнейшем его развитии. Именно, так это работает. И кстати, посмотрите оригинальную статью о backpropagation - какие там были представлены результаты, вы наверно к своему удивлению обнаружите, что ничего большего, чем решение задачи XOR и четность с 4 битами :) И вот за это дали нобелевку, а вы говорите результаты ))
Заминусуйте его кто нить , я на исправлении :)
Нет, это вы упорствуете в своем поверхностном знании, профан, который поверхам что-то почитал и думает, что он понял.
Оставьте ваше мнение при себе, рецензент мне тут нашелся ))
Читал он больше, да ничего не знает ))
У перцептрона есть ограничения, только совсем не те, и не так примитивно интерпретируемые вами ...
Так почему бы вам про это не написать статью? Пока ваши объяснения непонятны, от слова совсем. Нет, ну если кто-то, что-то понял - пусть напишет. Но если честно, вы ведь даже не старались объяснить то что знаете? Совершенно не ясно причем тут ваши графические методы и нейросети и куча еще чего ... поэтому все это не релевантно к данной теме и к моей статье.
Совершенно ничего не понятно, если у вас есть альтернативные методы обучения перцептрона - напишите код и выложите, так будет понятнее )
Но в статье написано же:
Но даже если я надумаю описать, Вам еще рано, вы не разобрались с ролью первого слоя перцептрона и гарантийной линейной разделимостью ...
Но если без пафоса, Вас то самого устраивает уровень интерпретации ИНС? Понимания их работы?
Именно, что есть.
все остальное вообще не относится к нашему разговору.
Нет, 100% , если число A элементов > 1000 и >= N (N - количество примеров обучающей выборки)
Например, задача четность для 16 бит, всего возможных примеров 2^16 = 65536, в теории нужно именно 65536 А-элементов (на практике хватает 3000, из-за свойств самой задачи, на самом деле задачи где нужно как в теории нету, разве что совсем рандом, но не псевдорандом, а настоящий, псевдо рандом тоже решается меньшим количеством). От R-элементов число A-элементов не зависит, т.е. отображается на сколько угодно классов.
Всё тоже самое будет справедливо для backpropagation
Ну, выучите уже, это не сложно.
Именно, подумайте вам осталось немного, надеюсь просветление наступит у вас. После А-слоя у нас уже вектора в другом пространстве большей размерности, и вот в этом пространстве отображения входных векторов гарантированно линейно разделимы.
Посмотрели как решается задача XOR перцептроном? Или я зря теряю с вами время?
А открыть, вместо искаженных учебных материалов, оригинал работ Розенблатта- видимо не судьба?
P.S. А Бред писали и куда более именитые ученные, кроме собственно Минского, или там Румельхарда с Хинтоном - если вы у них найдете, такого же уровня бред, то ок. Но не найдете. Все остальные несут бред, если говорят, что перцептрон не решает XOR. И уж левый курс - это совсем не авторитетный источник.
Давайте по шагам - XOR решает? Уже ознакомились как? Посыпали голову пеплом? Тогда пойдем дальше, но не раньше.
P.S.S. Ну и потом я глянул, эту вашу ссылку. Из-за ваших поверхностных знаний вы не понимаете, что в той главе вам объясняют. Вас вводят в заблуждение, то что анализируемое там называют перцептроном. Это не перцептрон. Это исключительно A-R слой перцептрона. Да он решает задачу, если обучающие множество линейно разделимо (как там и сказано). Но слой SA - это слой, который обеспечивает линейную разделимость причем гарантировано - а как я все ссылки дал, идите и учите, за вас это никто не будет делать.
Дам только последнею подсказку - внимательно прочитайте раздел Offset, и подумайте что дает увеличение размерности пространства.
Ясно, вы в самом начале своего пути и начитались бреда. То что там описывается, это не перцептрон Розенблатта. У перцептрона Розенблатта три слоя элементов S-A-R , где они у Ryan Peters ?
Ну, собственно, Ryan Peters - это и есть распространитель мифов, о которых я и пишу в своей статье. Если вы как то аффилированы с ним, попросите его не распространять фейки в науке. А сами внимательно читайте, что есть перцептрон. Мне вы видимо не поверите, поэтому откройте оригинал.
Но начните пожалуй с Википедии статья Перцептрон, это я её писал еще лет 15 назад, так вот посмотрите там вначале как решается задача XOR перцептроном.
Бред о линейной разделимости отпадет сам собой.