Митасов Андрей Павлович : другие произведения.

Металоция неведомого. Модуль Н. Нейронки

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:
Школа кожевенного мастерства: сумки, ремни своими руками
 Ваша оценка:
  • Аннотация:
    Попытка "переизобрести велосипед" в области нейросетей.
    Крайнее обновление 07.07.2024.

  ...Скачу - хрустят колосья под конем,
  Но ясно различаю из-за хруста:
  "Пророков нет в отечестве своем, -
  Но и в других отечествах - не густо".
  
  Владимир Высоцкий - Я из дела ушел, из такого хорошего дела!
  
  Памяти моего отца Митасова Павла Васильевича,
  который хотел, чтобы я стал ученым,
  а я стал инженером и железнодорожником, как и он.
  
  Оглавление:
   Вместо введения.
   О голографичности нейронок.
   О фрактальности нейронок.
   Немного об исторических проблемах нейронок.
   "Случайности не случайны".
   Немного о "переобучении" нейронок.
   Обучение нейронок - построение "ландшафта" или "фрактала"?
   О "поисках черной кошки в темной комнате".
   Еще немного о "ландшафтах".
   Строим магический "ландшафт" самостоятельно.
   Еще одна непонятка нейронок.
   Нейронки, как сеть эвристик.
   "Диффузия" применительно к языковым моделям.
   Концепция композитной нейронки.
   Новые задачи для композитной нейронки.
   Концепция "стапеля" для обучения нейронок.
   Первая попытка сформулировать концепцию битовой нейронной сети (БНС).
   Итоги работы по теме "битовых" нейронок за три месяца.
  
  Иллюстрации:
   Фрактал голограммы от "Модели Kandinsky 2.1".
   Композиция "MNINITIFTI" от "Модели Kandinsky 3.0".
   Композиция "Метод диффузии" от Bing.
   "Металоция неведомого" от "Модели Кандинский 3.1".
  
  ========
  
  21.04.2023 7:46
  
  Вместо введения.
  В оглавление.
  
  Попробуем "переизобрести велосипед" в области нейросетей.
  Вряд ли такого рода попытку имеет смысл делать
  на специализированных площадках типа Хабр,
  слишком там "уверенная в своих знаниях" аудитория.
  А вот на СамИздате можно попробовать.
  Но надо постараться сделать это насколько возможно
  и насколько это в моих силах понятно.
  Так что стиль "рецензий" в этом случае точно не подойдет,
  хотя под каждый даже не вывод, а пункт изложения можно указать
  и ссылку и цитату и даже целый текст.
  Но представляется, что в этом случае изложение того,
  что хочется донести в этом тексте,
  получится очень сумбурным и смазанным,
  так как большинство "цитат" нужно будет
  еще уметь "прочитать" в нужном контексте.
  
  Но чтобы не быть уж совсем голословным,
  тем кому интересно попытаться самому разобраться в этих вопросах,
  могу предложить достаточно интересный цикл статей одного автора,
  которую он, к сожалению, так и не закончил
  - наверно потому что не получил "коллективного одобрения".
  Статьи интересны наличием очень любопытных иллюстраций,
  авторских выводов, и достаточно "оживленной" дискуссией в комментариях,
  с которыми можно соглашаться или не соглашаться,
  но игнорировать, наверно, не разумно.
  
  Вот этот цикл.
  
  [1]
  "Давайте изобретать велосипеды"
  Автор: kraidiky
  https://habr.com/ru/articles/249657/
  4 фев 2015 в 02:24
  
  [2]
  "Что происходит в мозгах у нейронной сети и как им помочь"
  Автор: kraidiky
  https://habr.com/ru/articles/219647/
  17 апр 2014 в 01:17
  
  [3]
  "Подглядываем за метаниями нейронной сети"
  Автор: kraidiky
  https://habr.com/ru/articles/221049/
  27 апр 2014 в 21:22
  
  [4]
  "Ансамбль синапсов - структурная единица нейронной сети"
  Автор: kraidiky
  https://habr.com/ru/articles/249031/
  28 янв 2015 в 00:22
  
  Лично я получил большое удовольствие от проработки этих статей
  и комментариев к ним, но в результате пришел к выводам,
  несколько иным. Хотя полностью согласен с автором материала [1]:
  
  \\\ ...Лично мне одного взгляда достаточно чтобы понять,
  \\\ что прежде чем двигаться дальше
  \\\ некоторые вещи в нейроинформатике не помешало бы и переоткрыть.
  \\\ Как говорил Джобс
  \\\ Очень многое в нейронауках может быть улучшено
  \\\ самым обычным человеком на самом обычном домашнем компьютере
  \\\ если у него будет идея,
  \\\ и он выкроит время чтобы ей заниматься.
  \\\ Слишком мало знаний пока накоплено здесь,
  \\\ слишком многое осталось в наследие от времён компьютеров,
  \\\ занимающих этаж, слишком много замечательных алгоритмов
  \\\ просто никто ни разу не попробовал...
  
  Формулируя свои выводы в двух словах, можно попытаться сказать так:
  "обученная нейросеть" - это "фрактальная голограмма"
  или "голографический фрактал".
  Что, в общем-то, звучит как "масло масленное",
  но пока лучшего что-то не придумывается.
  Но это принципиально иная, можно сказать "физическая" интерпретация
  поведения нейросетей, в отличии от распространенных/общепринятых сейчас
  интерпретаций нейросетей с "биологической", "математической",
  "вероятностной", "логической", "графовой", "эзотерической"
  и т.п. точек зрения.
  
  Почему это так и делается попытка разобраться в данном модуле.
  
  =========
  
  22.04.2023 8:39
  
  О голографичности нейронок.
  В оглавление.
  
  Итак что мы знаем о голограммах и голографии,
  так сказать, не вдаваясь в "глубокие дебри".
  
  Вики дает такое определение:
  
  "Голограмма - объёмное изображение,
  воспроизведённое интерференцией волн с некоторой поверхности.
  Голограмму можно получить методами интерференции
  на достаточно глубоких фоточувствительных материалах,
  или другими методами,
  формирующими на поверхности материала микрорельеф,
  например, литьём или штамповкой".
  
  и
  
  "Принципиальным отличием голографии
  от всех остальных способов регистрации изображения
  является распределённость информации о всех снятых объектах
  на поверхности всего датчика,
  такого, например, как фотопластинка.
  Поэтому повреждение голограммы,
  ведущее к уменьшению её площади,
  не приводит к потере части изображения.
  Каждый осколок разбитой на несколько частей фотопластинки
  с голограммой продолжает содержать изображение всех снятых объектов.
  Уменьшается только количество доступных ракурсов,
  а изображение на слишком мелких осколках
  утрачивает стереоскопичность и чёткость".
  
  Есть еще несколько отличительных свойств голограмм,
  которые постараюсь сформулировать своими словами.
  
  Во-первых,
  голограммы записываются не как "маленькие картинки",
  типа фотографий, где каждая отдельная точка соответствует
  какому-то отдельному конкретному элементу изображения,
  а как "интерференционная картинка", где каждая "точка",
  так или иначе, участвует в создании всех элементов изображения.
  А сама эта "интерференционная картинка", представляет собой
  какую-то "загадочную" мешанину отдельных "пятен",
  совершенно не похожую на записанное "изображение".
  
  Во-вторых,
  имеется возможность на одной и той же "фотопластинке"
  записать несколько разных голограмм для совершенно разных изображений,
  без потери качества. И при этом "интерференционная картинка"
  становится еще более "запутанной" и "малопонятной"
  при рассмотрении, например, под микроскопом.
  
  Вроде все это известно достаточно давно,
  но причем тут нейронки?
  
  Начнем с "интерференции".
  
  Как известно:
  "Интерференция (физика) - взаимное увеличение или уменьшение
  результирующей амплитуды двух или нескольких когерентных волн
  при их наложении друг на друга".
  
  А теперь взглянем на нейронки с "высоты птичьего полета".
  Нейронки можно представить как последовательное прохождение
  "возбуждения" от входа к выхода через несколько "слоев преобразования".
  Причем, на каждом слое выполняются определенные действия
  приводящие к "усилению" или "ослаблению" конкретного "возбуждения"
  в зависимости от параметров, связей и алгоритмов (функции активации)
  отдельных "нейронов".
  
  И теперь вопрос: почему такого рода "преобразования" не могут выполнять,
  в конечном итоге, что-то такое, что эквивалентно "функции интерференции"?
  Т.е. нейронка представляет собой одновременно
  и записанную "интерференционную картину" в виде "настроенных гиперпараметров",
  и механизм "проявления интерференции" при подаче на вход
  определенного "возбуждения"/вектора/токена или группы токенов.
  
  То, что в классическом определении интерференции упоминаются
  "когерентные волны", на самом деле ничего не ограничивает -
  волны могут быть не только "синусоидальные", но и треугольные,
  и пилообразные, и даже просто прямоугольные (меандр).
  Да и вообще в принципе отсутствовать.
  Важен принцип, что на какой-то "интерференционной картинке",
  например, в виде "микрорельефа" или "наборе гиперпараметров",
  то или иное "возбуждение"/сигнал, или усиливается или гасится.
  Что в нейросетях как раз и реализуется.
  
  Кстати, в той же Вики с термином "интерференция" с десяток различных
  направлений связано, а вот в нейросетях этот термин,
  если где-то и употребляется,
  то точно не в отношении основного "процесса преобразований".
  Наверно, на это есть какие-то исторические причины.
  
  Но, простая аналогия "функции преобразования" нейронок и "интерференции",
  сама по себе, никак может служить основанием для утверждения о том,
  что нейронки могут быть представляться как голограммы.
  Нужно еще, хотя бы одно свойство.
  
  И таким свойством является "распределенность информации"
  о всей "структуре преобразования" по всей нейронке.
  То самое "принципиальное отличие" голограмм
  от всех остальных "способов регистрации изображения".
  
  Как же это свойство проявляется в нейронках?
  
  Надо сразу отметить, что это свойство проявилось/выявилось не сразу.
  Точнее в первых простых, особенно в однослойных нейронках,
  типа перцептрона Розенблатта, это свойство как раз или
  не проявлялось совсем, или проявлялось в очень малой степени.
  Хотя толком никто таких исследований не проводил,
  так как господствовала парадигма,
  что каждый отдельный нейрон "несет ответственность"
  за какое-то отдельное свойство,
  типа как "зернышко на фотопластинке" несет ответственность
  за "отдельный элемент изображения".
  И только с переходом ко все более сложным и объемным сетям,
  чисто опытным путем обнаружили некоторые эффекты/закономерности,
  которые не укладываются в эту парадигму.
  Но пока никто еще не решается всю парадигму "один нейрон - одно свойство"
  кардинально пересмотреть.
  
  Хотя попытки найти такие "нейроны" отвечающие за конкретный признак/свойство,
  продолжаются и продолжаются с неизменным, как минимум, неубедительным результатом,
  смотри например,
  "Мы обнаружили в GPT-2 нейрон конкретного токена"
  https://habr.com/ru/post/718720/
  С заключительным выводом:
  \\\ Действительно ли конгруэнтность нейрона с токеном
  \\\ измеряет степень,
  \\\ в которой нейрон прогнозирует токен?
  \\\ Мы не знаем.
  
  А вот когда автор материала [4] приходит к выводу,
  что даже в самой простенькой на 37 "нейронов" системе
  конкретные признаки "привязаны"
  к чему-то более "размазанному" чем какой-то один "конкретный нейрон"
  дальнейшего развития эта идея не получает,
  якобы потому, что система слишком простая,
  а "в реальных системах" все не так.
  Но как именно почему-то все "скромно умалчивают".
  
  Инерция представлений, заданных еще на этапе зарождения технологии нейронок,
  продолжает доминировать в ИТ-сообществе,
  хотя на практике эти теоретические представления уже в расчет не берутся
  и вовсю используются эвристические приемы и техники,
  даже с "большой натяжкой" не соответствующих им.
  
  Таких эвристических приемов и "эффектов", связанных с ними,
  МОГУЩИХ свидетельствовать о голографическом характере нейронок,
  уже насчитывается, наверно, больше десятка,
  я не специалист в этой области, и всех "фич" и "лайфхаков"
  в этой области не знаю,
  и могу перечислить только некоторые из них только
  "дропауты",
  "Dropout - метод решения проблемы переобучения в нейронных сетях"
  Автор: wunder_editor
  https://habr.com/ru/companies/wunderfund/articles/330814/
  14 июн 2017 в 14:38
  
  "гипотезу лотерейного билета",
  "О <Гипотезе Лотерейного Билета>"
  Автор: 19blackadder97 (Денис Кузнеделев)
  https://habr.com/ru/articles/718748/
  23 фев 2023 в 14:31
  
  Наверно, стоило бы расширить этот список,
  например, относительно "сверточных сетей" и "глубокого обучения"
  но пока соответствующих хороших иллюстративных материалов,
  согласующихся с концепцией голографичности,
  пока не нашел.
  
  Но даже этого в принципе достаточно если их внимательно изучить.
  смысл их в том, что из обученной сети,
  можно достаточно безболезненно "извлечь" или "занулить"
  СЛУЧАЙНЫМ образом какие-то связи и целые "нейроны" как на этапе обучения,
  так и на этапе уже собственно работы нейронки,
  и при этом еще и получить выигрыш в производительности,
  а, возможно, и еще в чем-то, например, в скорости обучения.
  
  Тут ключевое слово "случайным образом", так как попытка как-то
  сформулировать более-менее точные/определенные критерии "огрубления" нейронки,
  "почему-то" приводит к худшим результатам,
  что, с моей точки зрения, как раз и является свидетельством в пользу
  "интерференционной/голографической модели" нейронок,
  а не "элементной/графовой".
  
  Но более детально с этим свойство, думаю, лучше будет пояснять чуть позже,
  когда хоть немного будет дано пояснение о "фрактальной стороне"
  "поведения нейронок".
  
  Еще одним аргументом в пользу "гипотезы голографичности" нейронок,
  на мой взгляд, служит возможность "сжатия" пространства "входов"
  во "внутреннее пространство" нейронки.
  Обычно это трактуют так, что нейронка "каким-то" образом в процессе обучения,
  выделяет "структурные признаки" обучающей выборки,
  что и обеспечивает "сжатие информации".
  А с точки зрения "гипотезы голографичнсти" нейронка
  "тупо" вычисляет "интерференцию" различных образов,
  и записывает их в параметры "нейрона" и в параметры "связей" между "нейронами",
  т.е. "интерференционная картинка" это набор "ансамблей связей и нейронов".
  
  Надеюсь в этом фрагменте удалось показать,
  что есть достаточно веские основания,
  применительно к нейронкам говорить не просто
  о "проявлении ими голографических свойств",
  что, в общем-то, уже более-менее признается многими,
  а вообще "голограммной природе" нейронок,
  как в части "хранения информации", так и в части "принципа действия".
  
  ========
  
  22.04.2023 15:15
  
  О фрактальности нейронок.
  В оглавление.
  
  Теперь немного общих сведений о фракталах.
  
  Как нас учит Вики:
  "Фракта'л (лат. fractus - дроблёный, сломанный, разбитый)
  - множество, обладающее свойством самоподобия
  (объект, в точности или приближённо совпадающий с частью себя самого,
  то есть целое имеет ту же форму,
  что и одна или более частей).
  В математике под фракталами понимают множества точек в евклидовом пространстве,
  имеющие дробную метрическую размерность
  (в смысле Минковского или Хаусдорфа),
  либо метрическую размерность, отличную от топологической,
  поэтому их следует отличать от прочих геометрических фигур,
  ограниченных конечным числом звеньев.
  Самоподобные фигуры, повторяющиеся конечное число раз,
  называются предфракталами".
  
  Исторически такие структуры первоначально относились
  к чисто математическим понятиям,
  связанными, в основном, с какими-то "экзотическими функциями".
  
  "Термин <фрактал> введён Бенуа Мандельбротом в 1975 году
  и получил широкую известность с выходом в 1977 году
  его книги <Фрактальная геометрия природы>."
  Но, на мой взгляд, основная заслуга Мандельброта в том,
  что он придумал достаточно оригинальный способ визуализации фракталов,
  используя возможности компьютерных технологий.
  Суть этого способа в том, что какую-то "математическую формулу/последовательность",
  не имеющую аналитического решения, просто последовательно просчитывают раз за разом,
  и полученный результат большого количества итераций алгоритма
  как-то оценивают по каким-то критериям.
  
  И вот тут начинается самое интересное, оказывается,
  что в большом количестве случаев,
  эти результаты имеют очень сложную и при этом в чем-то подобную структуру.
  
  В последствии выяснилось, что подобные структуры
  это не столько "бредовые видения свихнувшегося математика",
  а достаточно распространенные в природе "формы".
  И сейчас, как излагает Вики,
  "Слово <фрактал> употребляется не только в качестве математического термина.
  Фракталом может называться предмет,
  обладающий, по крайней мере, одним из указанных ниже свойств:
  
  Обладает нетривиальной структурой на всех масштабах.
  В этом отличие от регулярных фигур
  (таких как окружность, эллипс, график гладкой функции):
  если рассмотреть небольшой фрагмент регулярной фигуры в очень крупном масштабе,
  то он будет похож на фрагмент прямой.
  Для фрактала увеличение масштаба не ведёт к упрощению структуры,
  то есть на всех шкалах можно увидеть одинаково сложную картину.
  
  Является самоподобным или приближённо самоподобным.
  
  Обладает дробной метрической размерностью
  или метрической размерностью, превосходящей топологическую размерность.
  
  Многие объекты в природе обладают свойствами фрактала,
  например: побережья, облака, кроны деревьев, снежинки,
  система кровообращения, альвеолы".
  
  Ну и опять же вопрос: а причем здесь нейронки?
  И опять ответ надо искать в истории становления нейроинформатики.
  
  Исторически сложилось, что нейросети первоначально в основном использовались
  для задач классификации,
  и рассматривались как чисто математический инструмент,
  обеспечивающий именно эту задачу.
  Причем сам математический аппарат для этого инструмента считался
  уже давно сложившимся, и особых "открытий" не предвещал.
  
  Как учит нас все та же всезнающая Вики:
  "С точки зрения машинного обучения,
  нейронная сеть представляет собой частный случай
  методов распознавания образов, дискриминантного анализа;
  
  С точки зрения математики, обучение нейронных сетей
  - это многопараметрическая задача нелинейной оптимизации".
  
  Т.е. можно попытаться сформулировать,
  что в "классическом представлении" цель таких инструментов,
  в результате "машинного обучения" построить некую "разделяющую поверхность",
  обеспечивающую достаточно устойчивую "классификацию" или "распознавание образов".
  
  НО при этом "почему-то" принято считать, что эта разделяющая поверхность,
  не важно какой размерности, будет похожей на привычные нам "регулярные фигуры".
  Т.е. обладать ЦЕЛОЧИСЛЕННОЙ размерностью.
  И более того, быть топологически связанной,
  т.е., условно говоря, быть похожей на "карту материка",
  а не на "карту архипелага".
  
  Основанием для такого представления было в том,
  что "обучающие алгоритмы" были взяты из классических областей математики:
  линейная регрессия, градиентный спуск, и т.д.
  И даже обратное распространение ошибки - убер-фича всего машинного обучения,
  в принципе, та же классическая математика.
  
  Правда, в чистом виде это практически не работало,
  и этому было найдено объяснения/иллюстрации в виде "сложных ландшафтов",
  на которых эти алгоритмы, якобы попадают в локальные минимумы,
  которые научились "преодолевать" добавлением "случайности",
  трансформировав "классический градиентный спуск" в "стохастический".
  Вроде бы это решило проблему "локальных минимумов" и на этом "душа успокоилась".
  Да еще к объяснению "непоняток" с нейронками, а они и были и есть,
  можно добавить еще одно убедительное объяснение
  - "вероятностное поведение" нейронок.
  
  И картинки с "локальным рельефом" кочуют из статьи в статью,
  придавая убедительность и основательность проблеме "локальных минимумов",
  и необходимости правильно выбирать "скорость обучения".
  
  До недавнего времени меня тоже в этих картинках все было понятно,
  и "концепция локальных минимумов" меня вполне устраивала.
  Особенно если учесть, что одна из моих первых программ
  где-то на первом курсе институте, в рамках курсовой по высшей математике,
  выполненная на машине "Наири-К" с двумя килобайтами памяти,
  как раз и была на сравнение методов градиентного спуска и Монте-Карло,
  при решении системы нелинейных уравнений.
  И там проблема локальных минимумов стояла в "полный рост".
  Собственно это и было целью курсовой.
  
  Но вот анализируя материалы [2] и [3] я увидел,
  что гипотеза "разделяющей поверхности" и, возможно,
  связанная с ней гипотеза "локальных минимумов" требуют
  как минимум, доработки.
  
  То, что представленные материалы не случайный артефакт конкретной нейронки,
  а системное свойство нейронок, подтверждается одним
  "сенсационным открытием Гугла", которое старательно "замели под ковер".
  Подробно об этом можно почитать в "Модуле Г. ГПТ-модели"
  в соответствующем фрагменте - тут на этом не останавливаемся.
  
  Т.е. первое, что приходит в голову при взгляде на весьма
  любопытные и информативные иллюстрации из этих материалов,
  что вместо образа "разделяющей поверхности" нужно искать
  какую-то иную "метафору" больше похожую на "дифракционную решетку",
  чем на классическую "карту ландшафта".
  Какой именно образ стоит в данном случае более подходит
  пока не придумал. Но думаю будет что-то с прилагательным "фрактальное".
  Почему?
  
  А давайте попробуем разобраться, почему классический образ не подходит
  для данной ситуации?
  
  Итак, первое отличие
  - исследуемый математическими алгоритмами объект НЕ математический.
  Т.е. это не система каких-то там уравнений,
  а "относительно" реальный объект,
  который мы хотим представить в каком-то многомерном пространстве.
  
  Еще один любопытный момент из материала [2] это тот,
  что даже при попытке обработке нейронкой данных получаемых
  из простой линейной функции
  все-равно классической "разделяющей поверхности" в общем случае
  НЕ ПОЛУЧАЕТСЯ.
  Т.е. набор последовательных значений воспринимается нейронкой
  как-то иначе, чем данные для классической математической линейной регрессии.
  Ну и, соответственно, и представляется иначе.
  
  Второе отличие
  - это представление внутри нейронки результатов обучения,
  которое отличается от простых коэффициетов/параметров
  какой-либо регулярной "поверхности раздела".
  и тут стоит вспомнить предыдущий раздел про "голограмму"
  и "интерференционную картину", которая чем-то напоминает указанные иллюстрации.
  
  И третье, и на мой взгляд, ключевое отличие,
  которое заключается в самих рекурентных алгоритмах "машинного обучения".
  Тут самое время вспомнить, что "классический фрактал Мандельброта"
  также получался в результате рекурентных алгоритмов от, казалось бы,
  простенькой функции.
  Т.е., как минимум, на этом примере имеется подтверждение,
  что рекурентные алгоритмы имеют возможность выявлять/формировать
  фрактальные объекты, в том числе и "фрактальные поверхности раздела".
  Т.е. объекты имеющие какую-то самоподобную структуру,
  по-видимому, с НЕ ЦЕЛОЧИСЛЕННОЙ размерностью.
  
  А есть и активно используются еще и алгоритмя фрактального сжатия информции,
  тоже по своей природе рекурентные и возникает вопрос,
  какие элементы этих алгоритмов могут неявно присутствовать/проявляться
  при работе алгоритмов машинного обучения?
  
  Проблема в том, что каких-то практических методов/приемов/эвристик
  относительно пространств/объектов такой размерности
  ни математика, ни человечество в целом пока не наработало
  - не было практической необходимости.
  
  Даже само обнаружение "фрактальности" представляет собой весьма
  сложную проблему для пространств с размерностью больше трех.
  И это, наверное, основная причина почему
  гипотеза о каких-то фрактальных свойствах нейронок пока никем не озвучивалась,
  тем более об их "фрактальной природе".
  
  Мне в какой-то мере повезло в том смысле,
  что наличие какой-то структуры/закономерности в поведении нейронок
  удалось заметить при "нащупывании" "фарватеров потенциалов"
  в "Модели Кандинский 2.0", до того как она поменялась на "Модель Кандинский 2.1".
  (См. "Модуль Е. Эскизы")
  
  Еще одним осложняющим моментом выявления "фрактальной сущности" нейронок,
  является нерешенный следующий теоретический вопрос,
  если "результирующая поверхность" должна представлять не один конкретный фрактал,
  а целый комплекс, причем различных размерностей,
  то что это будет в результате?
  
  И еще вопрос, как соединяются в нейронке "голографичность" и "фрактальность"?
  Естественно при условии, что обе гипотезы имеют право на жизнь,
  причем одновременно.
  
  Так что ту работы непочатый край.
  Надеюсь, что удастся ее продолжить.
  
  =======
  
  24.04.2023 15:29
  
  Немного об исторических проблемах нейронок.
  В оглавление.
  
  Попробую подойти к гипотезам о "фрактальности" и "голограммности" нейронок
  немного с другой стороны - с точки зрения самой "истории" развития нейронок,
  с акцентом на некоторые "математические аспекты" этой ИИ-технологии.
  
  Еще каких-то пять лет назад были популярны утверждения,
  что ИИ-технологии не выйдут за пределы "теста Тьюринга",
  и в качестве оснований для такого вывода приводилась
  "теорема Геделя о неполноте".
  Сейчас "вектор обсуждений" сменился чуть не на 180 градусов
  - что "сильный ИИ" человечество не в силах будет контролировать,
  и, что самое любопытное, в качестве аргумента приводится
  все та же "теорема Геделя".
  Т.е. чисто математическую теорему можно использовать
  как захочется интерпретатору.
  
  Т.е. математика это не чудо-оружие, а инструмент в умелых руках,
  способный "в принципе" доказывать, что "душе потребно".
  При этом при всей развитости нынешней математики,
  общий уровень ее понимания основан на использовании,
  как минимум, трех-пяти "классических положений" математики где-то XIX века,
  - размерность пространства задачи и решения целочисленно;
  - расстояние между точками этих пространств обычно имеет квадратичную меру,
  независящую от направления и/или масштаба представления;
  - для представления задачи используются гладкие функции
  с минимальным количеством особых точек;
  - описание пространства задачи/решения возможно по значениям/производным функции
  в одной отдельно взятой точке (ряд Тейлора);
  - шум/помехи/отклонения имеют нормальный "гауссовский" закон распределения.
  
  Наверняка, есть и еще неявные представления/аксиомы,
  сложившиеся из сегодняшнего уровня обычного вузовского курса математики,
  но, наверно, это уже не так важно в данном контексте.
  Важно было зафиксировать хоть какие-то привычные априорные положения,
  которыми пользуются сейчас при попытке привлечь математику
  к описанию поведения нейронок.
  
  Если быть предельно точным, то утверждение о том,
  что нейронки являются "фракталами",
  а "пространство решений" нейронок имеет "дробную размерность",
  является НЕКОРРЕКТНЫМ.
  Это связано с тем что нейронки, какими бы сложными не были,
  являются конечными и дискретными системами и, следовательно,
  имеют конечную "длину" и целочисленную размерность.
  Т.е. корректнее использовать понятие "предфрактал".
  
  Но, мне лично, интересна как раз возможность рассматривать нейронки
  как реальный и доступный для изучения "объект"
  с "дробной размерностью" внутреннего "пространства решения"
  - где еще найти такой удобный для исследований материал/систему.
  
  В моем понимании, любая сложная система в определенном смысле
  имеет "дробную" размерность "описания задачи" и "пространства решений",
  причем это относится как к природным системам, так и к техногенным.
  Проблема в том, что не очень понятно как эту "дробность" обнаружить
  и тем более как использовать.
  Особенно, если она очень сильно "замаскирована" другими "факторами",
  как, например, в "Модели Кандинский 2.1" по сравнению "Моделью Кандинский 2.0".
  
  Итак, возвращаемся к истории нейронок.
  Самый начальный этап, наверно, стоит охарактеризовать максимально кратко,
  он достаточно подробно представлен в литературе и Инете.
  хотя собственно на этом этапе сформировались основные стереотипы
  представлений о нейронках.
  
  Дело в том, что также как и с "кибернетикой - реакционной лженаукой",
  определенные математические модели нейронок, и большое разнообразие
  экспериментальных систем, демонстрирующих некоторые неочевидные свойства,
  породило определенные завышенные ожидания,
  как и бывает на этапе зарождения любой новой технологии.
  Демонстрируемое нейронками свойства "сжатия информации"
  и определенные успехи в задачах классификации стали трактовать
  как "обобщающие свойства", сходные по "способу действия" с "человеческой логикой".
  А "ошибки классификации" отнесли к обычным "шумовым факторам",
  связанными или с "дискретностью" параметров/структуры нейронок,
  или с "недообученностью", или, наоборот с "переобученностью".
  
  Тут важно понимать, что для той же задачи классификации в простых
  случаях легко было построить систему и проще нейронки и точнее ее,
  даже придерживаясь ее структуры,
  но специальным образом инициализируя ее параметры.
  Нейронки привлекали своей универсальностью и для простых и для сложных задач,
  для которых уже так просто подобрать параметры/структуру было "сильно проблемно".
  А нейронки, вроде как, беспроблемно решали сложные задачи классификации
  если не сильно "зажиматься" в их масштабах, времени обучения,
  и КАЧЕСТВА классификации или, по-ученому, "распознавания образа".
  Кстати, это термин, как раз и отражает ту самую попытку
  притянуть "человеческую логику" к механизмам работы нейронок.
  
  Тут вот какое дело.
  Практически вне зависимости от структуры/объема и др. параметров нейронок,
  получить качество "распознавания" где-то на уровне 95%-97%
  от тестовой выборки вполне реально, а вот каждый следующий процент "качества",
  будет даваться на порядок большими усилиями и ... "удачным положением звезд".
  Причем, это уже сейчас после всех обнаруженных, практически, чисто опытным путем
  ухищрений и трюков по обучению и "тюнигованию" обученной нейронки.
  
  А в начале "большого пути" все было намного менее радужно,
  но зато веры в правильность "выбранного курса" было намного больше,
  т.е. парадигма применения "человеческой логики" к работе нейронки
  под сомнение никем не ставилась
  Считалось, что нужно просто больше вычислительных ресурсов -
  компьютеры по-мощнее, памяти побольше, обучающих примеров побольше,
  времени на обучения побольше, ну и желательно новых конструкций нейронок
  и более эффективных обучающих алгоритмов.
  
  //// Собственно, я и сам когда-то не допускал возможности, и даже мысли,
  //// чтобы попытаться как-то и по-другому посмотреть не на сами нейронки,
  //// а на "трактовки" их "поясняющие", настолько убедительно это выглядело.
  //// И это несмотря на "классическое ТРИЗовское образование".
  //// Наверное, всему свое время.
  
  И так продолжалась более полувека.
  Периоды успехов и эйфории от них, сменялись периодами "уныния и разочарования".
  Периодически опытным путем находились новые алгоритмы и срутуры нейронок,
  готовились новые "датасеты" (наборы обучающих примеров),
  последовательно наращивалась мощность и размеры нейронок,
  и, наконец, "прогремел залп Авроры" - публике представили ChatGPT,
  и целое семейство подобных моделей, который успешно сдали "тест Тьюринга".
  И поставили человечество, включая самих разработчиков, в тупик,
  так как толком объяснить как это работает, пока не удается.
  Нет, как там передаются битики с байтиками все понятно
  - сами же спроектировали - а вот как и почему оно работает
  или не работает, те самые 99% "точности", остается по большому счету загадкой.
  Понятно как наращивать мощность совершенно понятно,
  а вот как повысить "точность" - абсолютно непонятно.
  
  В итоге человечество попадает в ситуацию похожую
  на решение британского парламента относительно первый железных дорог,
  когда перед каждым паровозом должен идти "человек с красным флажком".
  Требование каждый раз проверять все ответы ChatGPT на "галлюцинации",
  мало чем отличается от этого "решения британского парламента".
  Если мы хотим, как минимум, обоснованного доверия к такого рода системам,
  то требуется, все-таки разобраться с тем "чего же в супе не хватает".
  
  Как говорил незабвенный Козьма Прутков:
  "Если на клетке слона, видишь надпись "бувол" - не верь глазам своим".
  А вот "гениальный" ChatGPT "увидев слона" в лучах заката,
  вполне может счесть, что это вполне себе "буйвол",
  если он ориентируется на "цвет шкуры" при "классификации",
  так как никто не знает, на что эта система, собственно, "ориентируется".
  Вот собственно с этого вопроса можно и подступиться к вопросу о том
  имеет "гипотеза фрактальности", хоть какой-то смысл в отношении к нейронкам.
  
  С одной стороны, конечно, не здорово, что к таким вопросам приходится
  обращаться спустя более полувека развития этого направления ИИ-технологи,
  тем самым как бы "бросая тень" на гигантские усилия и реальные достижения
  профессиональных исследователей и разработчиков нейронок.
  С другой стороны, многие результаты, хотя и могли были быть получены
  намного раньше, но значительно большими усилиями и трудозатратами.
  Т.к. сейчас многое из того, что было абсолютно не доступно полвека назад,
  легко реализуется стандартными библиотеками на обычном ноутбуке
  за совершенно вменяемое количество времени.
  
  Итак как выглядит "неточность" на самых, казалось бы, простых нейронках?
  (Спасибо автору материала [2] за красивые иллюстрации.)
  Во-первых, для вроде как простейших зависимостей нейронка,
  конфигурация которой теоретически должна позволять аппроксимировать
  такие зависимости с абсолютной точностью,
  справляется с ними, мягко скажем, достаточно неоднозначно.
  То, что такое решение есть, автор наглядно демонстрирует специально
  подобрав параметры нейронки.
  Но стандартный подход к обучению такой результат обеспечивает
  только в некоторых случаях, а в остальных случаях демонстрирует что-то иное.
  Обычно такие "неудачные" результаты просто "выбрасывают в корзину",
  и начинают новый цикл обучения.
  
  Но, у нас задача иная - нужно попытаться понять что же получается
  при обучении нейронок, и тут "брак", как нас учит ТРИЗ,
  как раз может служить идеальной "лакмусовой бумажкой",
  т.к. может показать то, что в "хорошо обученной" нейронке незаметно.
  Собственно, это и есть одна из причин, почему "классические представления"
  о нейронках "живее всех живых" - в материалах по нейронкам,
  стараются показать "успехи", как доказательство "правильности выбранного пути",
  и очень мало, если вообще, упоминается о "забракованных вариантах" на этом пути.
  
  Так что же можно увидеть на этих неудачных вариантах генерации и обучения,
  казалось бы, простейших нейронок?
  А то, что НЕТ никакой "разделяющей поверхности" - есть набор/узор
  или, может быть, "дырявое поле решений", как-то визуально совпадающее,
  или не совпадающее, с НАШИМ "человеческим" представлением
  "области правильных решений".
  
  Т.е. нейронка не строит никаких аппроксимирующих область решения "границ",
  а "тупо" пытается покрыть эту "область решения",
  какими-то понятными/знакомыми ей "кластерами"/пятнами/ядрами,
  термин пока не определен, причем делает это по какой-то, опять же,
  понятной только ей закономерности.
  
  Что тут можно попытаться сделать, чтобы проверить, такие выводы?
  Первое, это повторить те же самые действия в "большем разрешении",
  т.е. попытаться визуализировать эти "кластеры"/"ядра",
  попытаться выяснить имеют ли они какую-то структуру,
  одинаковая ли эта структура по форме/размеру в разных участках области решения.
  Второе, попытаться по-исследовать зависимость этой структуры
  от объема/набора/последовательности обучающих данных, и длительности обучения.
  На мой взгляд, очень неплохая тема для курсовой работы,
  где-нибудь на втором курсе.
  В следующей жизни обязательно попробую.
  
  Правда, тут есть опасность не увидеть четкой структуры из-за наложения
  "кластеров"/"ядер" друг на друга, но это, наверное,
  вполне регулируется параметрами обучения.
  Или же тут нужно придумывать алгоритмы выделяющие "слои" такой картинки
  на основе алгоритмов фрактального сжатия
  с соответствующими способами визуализации структур разного уровня/масштаба.
  Ожидать, что картинка будет такой же четкой как "классический фрактал Мандельброта",
  наверно, все-таки излишне оптимистично.
  Ну, а вдруг повезет?
  
  ========
  
  28.04.2023 12:35
  
  "Случайности не случайны".
  В оглавление.
  
  Основная проблема "фрактальной гипотезы" поведения нейронок,
  как ни странно, в математике, точнее в практическом отсутствии
  такой математики в доступном для понимания и применении виде.
  Как перейти от формулы к фрактальному изображению
  - это прекрасно показал Мандельброт.
  Как сделать обратный переход "от изображения/представления к формуле"
  не знаю даже где искать. То, что на сегодня удалось найти в Инете,
  пока на что-то работоспособное совершенно "не тянет".
  Поэтому сильно пенять разработчикам нейронок на использование
  для объяснения поведения нейросетей, их свойств и принципов работы
  на основе вероятностных/статистических подходов, наверно, не стоит.
  "За неимением гербовой, пишут на простой".
  
  Возражение вызывает не сами эти методы, а убежденность
  "в единственно верной" их трактовке.
  Особенно, при наличии большого количества свидетельств,
  что ситуация "немного" сложнее, чем описывают их классические формулы,
  и, соответственно, наши ожидания от полученных по этим формулам оценок.
  
  Как это, к примеру, выглядит?
  Рассмотрим, сначала, "классический случай" простого обучения нейросети.
  Итак, выбирается какая-то структура нейросети,
  и подбирается "датасет" - т.е. набор обучающих и проверочных данных
  Т.е. берется набор классифицированных данных делится примерно в соотношении
  90% - 10% на обучающую выборку и проверочную выборку.
  И начинается обучение, т.е. подбор/подгонка параметров связи и "нейронов" так,
  чтобы подаваемые на вход данные из обучающей выборки вызывали
  на выходе результат соответствующий правильной классификации.
  Делается это путем многократной итеративной корректировки этих
  параметров нейронов и их связей.
  Основной рабочий метод здесь - обратное распространение ошибки,
  т.е. отличия выхода от "правильного значения", которая, собственно,
  и используется для итеративного процесса "подгонки".
  
  После какого-то количества итераций полученная "обученная" нейронка
  проверяется на тестовой выборке и делается заключение,
  то ли нейронка соответствует требованиям "точности",
  то ли стоит ее еще "дообучить" на том же наборе данных,
  то ли вообще выкинуть и начать все по новой.
  
  И уже с самого начала этого такого понятного и ясного процесса
  возникают определенные непонятки, которые, не очень согласуются.
  
  И начинаются они с самого первого шага, точнее еще до него.
  В момент, когда каким-то образом осуществляется начальная инициализация
  всех этих параметров нейронов и связей - ведь любой итеративный процесс
  надо же с чего-то начинать.
  И вот тут есть одна интересная вещь, которую "статистический подход"
  так и "не счел нужным" как-то объяснить.
  Вот есть такая особенность у нейросетей - "ну и что из этого".
  
  Дело в том, что в зависимости от этих самых значений начальной инициализации
  зависит очень многое, если не все. Т.е. от них зависит,
  как быстро сеть будет обучаться до требуемой точности,
  выйдет ли она вообще на требуемую точность в результате обучения,
  и даже вообще будет ли она вообще хоть как-то соответствовать ТЗ.
  
  Вот интересный материал на эту тему, на примере самой простой нейронки.
  
  "Об инициации весов при обучении нейронных сетей. Личный опыт и рассуждения"
  Автор: AnatolyBelov
  https://habr.com/ru/articles/730300/
  24 апр в 15:06
  
  Пару кратких цитат из него, чтобы было понятно о чем речь.
  
  \\\ Меня все время сильно смущало,
  \\\ что в градиентных алгоритмах инициация весов
  \\\ происходит как-то "небрежно"
  \\\ - случайным образом.
  \\\ Для математика, привыкшего к четкости,
  \\\ это было как-то сомнительно.
  \\\ Итак, задача - сравнить результаты различных вариантов инициации
  \\\ - стандартной рандомной и некоторых фиксированных.
  
  .......
  
  \\\ Не будем дальше увеличивать количество эпох,
  \\\ а уменьшим значения в 10 раз, и повторим эксперимент.
  
  \\\ Видно, что все результаты стали покомпактнее и повыше.
  
  \\\ При этом очевидно, что чем меньше значения инициации,
  \\\ тем лучше результаты,
  \\\ а лидером все еще является рандомная инициация.
  
  .......
  
  \\\ Выводы
  
  \\\ Неожиданно для себя я убедился,
  \\\ что рандомная инициация дает те же результаты, что и фиксированная,
  \\\ или даже лучше,
  \\\ и это не случайно,
  \\\ а на нескольких запусках,
  \\\ то есть градиентным алгоритмам все равно откуда начинать,
  \\\ главное, чтобы не слишком из далека и хватило эпох.
  
  \\\ До следующего уровня понимания проблемы для себя
  \\\ я этот вопрос временно закрыл
  \\\ - инициация рандомная,
  \\\ и больше нечего об этом беспокоиться.
  
  Т.е. вывод в стиле "Заткнись и считай".
  "Инициация рандомная" более устойчивая и оптимальная
  - это экспериментальный факт.
  Причем повторяющийся при самых разных "рандомных комбинациях".
  И объяснений этому нет. Во всяком случае, мне пока встретить не пришлось.
  (Надо будет задать этот вопрос ГПТэшке - интересно, что ответит.)
  
  Спросил.
  
  --------
  
  https://turbotext.pro/ai
  
  Всезнайка, назови причины использования
  случайной инициализации параметров нейросети в начале обучения.
  
  Ответ дан 28 апреля, 21:06
  Привет! Конечно, я могу рассказать тебе о причинах использования
  случайной инициализации параметров нейросети.
  
  Первая причина заключается в том,
  что случайная инициализация параметров позволяет
  избежать проблемы симметрии в нейросети.
  Если все параметры будут инициализированы одинаково,
  то нейросеть будет действовать как один большой нейрон,
  что снизит ее эффективность.
  //// Вообще-то, это совершенно невероятная ситуация для реальных случаев,
  //// Но даже если допустить, что это так, почему это снижает эффективность,
  //// и, собственно, о какой эффективности идет речь.
  
  Вторая причина состоит в том,
  что случайная инициализация позволяет избежать
  локальных минимумов при обучении нейросети.
  Если все параметры будут инициализированы одинаково,
  то нейросеть может застрять в локальном минимуме,
  который не является глобальным минимумом функции потерь.
  //// А почему она не может "застрять" при случайной инициализации?
  
  Третья причина заключается в том,
  что случайная инициализация позволяет нейросети
  обучаться на различных наборах данных.
  Если все параметры будут инициализированы одинаково,
  то нейросеть может не справиться с различными наборами данных
  и не сможет обучаться на них эффективно.
  //// И здесь вместо ответа на вопрос "почему" по факту ответ "потому"?
  
  Надеюсь, это помогло!
  Если у тебя есть еще вопросы, не стесняйся задавать их мне.
  
  //// А вот с чего это Всезнайка взял,
  //// что альтернативой случайному заданию является
  //// одинаковых параметров?
  //// Ладно, попробуем уточнить.
  
  ------
  
  Вопрос:
  Всезнайка, в чем преимущество использования
  случайной инициализации параметров нейросети в начале обучения
  по сравнению с заданной по какому-то, например линейному закону.
  
  Ответ дан 28 апреля, 21:15
  Привет! Случайная инициализация параметров нейросети в начале обучения
  имеет несколько преимуществ по сравнению
  с заданной инициализацией по линейному закону.
  
  Во-первых, случайная инициализация параметров
  позволяет избежать локальных минимумов в процессе обучения.
  Если бы все параметры были инициализированы по одному и тому же закону,
  то существовала бы вероятность того,
  что нейросеть застрянет в локальном минимуме
  и не сможет достичь глобального минимума.
  //// Опять ссылка на "локальные минимумы" и опять же без объяснения
  //// ПОЧЕМУ случайная инициализация помогает их "избегать".
  //// Опять придется уточнять.
  
  Во-вторых, случайная инициализация параметров
  позволяет получить различные модели нейросети,
  что может быть полезно при поиске оптимальной модели.
  Если бы все параметры были инициализированы по одному и тому же закону,
  то все модели нейросети, полученные в процессе обучения,
  были бы очень похожи друг на друга.
  //// Похожи, но не идентичны, если используется "дропаут",
  //// или другая последовательность обучающих примеров.
  //// Чем же хуже в этом отношении различные параметры закона инициализации
  //// по отношению к случайной инициализации?
  
  В-третьих, случайная инициализация параметров
  позволяет избежать проблемы затухающих или взрывающихся градиентов.
  Если бы все параметры были инициализированы по одному и тому же закону,
  то существовала бы вероятность того,
  что градиенты могут стать очень маленькими или очень большими,
  что затруднит процесс обучения.
  //// А это еще почему? Почему в этом отношении случайная инициализация
  //// имеет преимущество?
  //// Тут надо подумать.
  
  Конечно, случайная инициализация параметров
  не является панацеей и может иметь свои недостатки,
  но в целом она является эффективным способом инициализации параметров нейросети
  в начале обучения.
  
  //// В целом, второй ответ куда более информативен, чем первый,
  //// так как подсказывает пару новых направлений поиска,
  //// и фактически утверждает "случайности не случайны"
  //// по самым разным параметрам.
  
  --------
  
  Итак "необъясняемое" начинается с самого первого шага.
  И, даже сам процесс обучения нейронки тоже вызывает ряд вопросов,
  но об этом ниже.
  
  Будем считать, что процесс обучения нейронки завершен,
  т.е. на проверочном наборе данных нейронка показывает определенный
  "процент точности".
  Вот к этому результату и больше всего вопросов, с точки зрения
  того что мы ожидаем от такой оценки, и что на самом деле имеется "в наличии".
  
  Основная концепция использования нейросетей в качестве классификаторов
  зиждется на том, что эта оценка точности означает "какую-то"
  "обобщающую способность" нейронки, т.е. что она правильно классифицирует
  в "чем-то похожие" объекты. Ну с какой-то там ошибкой.
  А так все как обычно.
  
  Вот только "ошибки" эти как раз и "необычные", в том смысле,
  что отличие в распознаваемых объектах может быть,
  с нашей человеческой точки зрения вообще не заметно,
  а нейронка классифицирует это отличие как принципиальное.
  Т.е. это "контринтуитивно" с нашей точки зрения
  по отношению к "вероятностным оценкам".
  (Что-то похожее было в начале "революции квантовой физики",
  когда требовался отказ от концепции детерминизма.)
  А здесь как бы следующий этап отказа от "детерминизма",
  когда два практически идентичных объекта нейронка "по каким-то причинам",
  классифицирует как разные.
  
  Снова дам ссылку на обзор этого вопроса,
  если для кого-то это неизвестно:
  "Что скрывают нейронные сети?"
  Автор: mbait (Александр Соловец)
  https://habr.com/ru/articles/225095/
  3 июн 2014 в 19:19
  
  Т.е. оценка "точности" работы нейросети в виде там каких-то процентов
  совершенно не соответствует обычным "интуитивным представлениям",
  что означает "точность" скажем 85%. В обычном представлении
  это означает, что если совпадают более 86% признаков то классификация,
  скорее всего, будет успешной.
  А вот в "квантовой логике нейронок", это, скорее всего, означает
  что из 100 очень похожих объектов правильно будет классифицировано только 85.
  Насколько точна такая формулировка, никто не может/хочет сказать.
  
  "Обычное" объяснение для случаев, когда два похожих объекта идентифицируются
  нейронкой по разному, начинается с рассказов о том,
  что нейронки являются "многомерными системами", в которых "объем поверхности",
  значительно превышает "объем внутренней области", и, соответственно,
  большинство "решений" происходит не во "внутренней области",
  а на "поверхности", и, следовательно, всегда есть "минимальное расстояние"
  до "неправильного решения". И вот в таких случаях и происходят "фэйлы".
  
  Что-то в этом "объяснении", наверно, есть какое-то рациональное зерно,
  но только оно совершенно "неконструктивное",
  так как не дает никаких намеков как выходить из этой ситуации.
  Ведь перебрать все возможные случаи/ситуации, не возможно,
  а поведение какого-нибудь автопилота проигнорировавшего, например,
  временный знак на дороге, только потому, что на него какая-то "птичка капнула",
  и распознавание знака "фэйнуло", вряд можно считать даже "удовлетворительным",
  несмотря на любые оценки "точности" этого алгоритма.
  
  Кстати, разработчики практических приложений "нейронок"
  это в большинстве своем понимают/ощущают и ищут какие-то
  способы решения этой проблемы, но что интересно,
  как раз не в области повышения "точности", а скорее наоборот.
  И в этом отношении интересен найденный опытным путем механизм "дропаута".
  
  Суть его заключается в том, что либо в процессе обучения,
  либо уже после обучения структура и/или параметры нейронки
  сознательно огрубляется/ухудшается путем, а вот это самое главное,
  опять же СЛУЧАЙНОГО исключения из структуру нейронки каких-то связей/нейронов.
  И после такого загрубления/зануления нейронка ОБЫЧНО, но не всегда,
  часто после дополнительного "дообучения",
  показывает более лучшие результаты по именно "обобщению",
  которое при этом вполне может сопровождаться снижением "точности".
  "О как оно, Михалыч".
  
  Вроде как парадоксальная ситуация
  - затрачиваются колоссальные машинные ресурсы
  на как можно более точное обучение нейронки,
  а потом эти результаты волевым, но СЛУЧАЙНЫМ образом выбрасывают в "корзину".
  //// Обратите внимание, что и при начале обучения, и в процессе обучения,
  //// и даже после обучения использование каких-то "рандомных приемов"
  //// оказывается практически оправданным, а вот "точные формулы" подводят.
  И этот прием фактически стал стандартом де-факто,
  но в разных вариациях, на разных этапах жизненного цикла,
  и вроде как даже с разными декларируемыми целями.
  
  Вот одна из статей рекомендующих этот метод.
  "Dropout - метод решения проблемы переобучения в нейронных сетях"
  Автор: wunder_editor
  https://habr.com/ru/companies/wunderfund/articles/330814/
  14 июн 2017 в 14:38
  
  Тут вроде как не о "точности" или "обобщении" идет речь,
  а о "переобучении",
  но, с моей точки зрения, это все имеет один и тот же "корень проблемы",
  и "корешок" этот связан с "гипотезой фрактальности" нейронок.
  //// Условно говоря, "сложный фрактал" мало отличим от "хаоса",
  //// поэтому применение к нему даже простых "рандомных приемов",
  //// оказывается более практичным, чем "строгая закономерность".
  Поэтому попробуем взглянуть на "переобучение" нейронок под этим углом.
  
  ========
  
  29.04.2023 10:19
  
  Немного о "переобучении" нейронок.
  В оглавление.
  
  Итак, что понимается обычно под "переобучением" нейронок?
  
  Это, как ни странно, прекрасный результат обучающих алгоритмов,
  т.е. собственно то, ради чего эти алгоритмы и используются
  - нейронка выучила все обучающие примеры "на ять".
  Но при этом перестала делать, то что неявно от нее хотели,
  чтобы она "обучилась" как бы "обобщать" эти обучающие примеры
  и уверенно/успешно классифицировала примеры "близкие" к обучающим.
  И вот тут-то и обнаруживается отличие между человеческой "логикой"
  и "логикой нейронок".
  
  В общем случае, чем "лучше" выучивает нейронка обучающие примеры
  после определенного уровня, тем в целом хуже становятся
  ее "обобщающие способности". Вот этот незаметный и,
  самое главное, никак не фиксируемый/идентифицируемый переход,
  от улучшения "обобщающих" способностей к их дальнейшей деградации
  и называют "переобучением".
  
  Фиксируется это, на мой взгляд, косвенно, по ухудшению "точности"
  на проверочной выборке, хотя иногда и это не является критерием,
  т.к. никаких оценок этого явления пока не предложено,
  а снижение "точности" может быть на какие-то доли процентов.
  Зато само явление "переобучения" вовсю стали использовать
  для объяснения, или, на мой взгляд, просто "стандартной отмазки",
  для большинства "непоняток" в поведении нейронок.
  По частоте использования этого "объяснения",
  оно честно делит "пальму первенства", с другой такой же "отмазкой",
  насчет "локальных минимумов".
  
  Борются с этим разными способами, как например,
  уменьшения обучающей выборки и длительности обучения,
  упомянутые выше "дропауты",
  т.е. случайное искажение полученных в процессе или результате обучения
  параметров "нейронов" и "связей".
  Неоднократной перегенерацией системы с разными случайными инициализациями
  и выбором из них какой-то более удачной.
  Ну или, вообще, изменением структуры/размера нейронки.
  Тут все зависит от удачи.
  Стандартные рекомендации, типа берите сети побольше, базы данных побольше,
  используйте лучшие алгоритмы и методики ...,
  в вопросе "переобучения" оказываются бессильны.
  "Против природы не попрешь", даже если это "природа нейронок".
  
  Проблема эта выявилась очень давно, примерно тогда же,
  когда было математически доказано, что нейронка определенного размера,
  может выучить все обучающие примеры.
  Но вот какой-то математической "подкладки" под это явление
  за полсотни лет так и не появилось.
  
  Примерно тогда развитие "теории" и "практики" нейронок
  пошли как бы параллельными и мало пересекающимися курсами.
  В теории придумывались способы более быстрого и точного обучения нейронок,
  а на практике, по факту, требовались методы какого-то,
  то ли загрубления нейронок, то ли добавления к ним какой-то случайности,
  причем в самых разных местах и самыми разными способами.
  Отсюда такое разнообразие и структур нейронок, и функций активации и т.д.
  Причем все это находилось, большей частью, чисто опытным путем.
  Если у кого-то складывается впечатление, что вся эта область ИИ-технологий,
  в концептуальном плане ближе к "практической алхимии",
  чем к "логичной теории", то он будет далеко не одинок в этом мнении.
  "...Развитие идёт не по спирали,
  А вкривь и вкось, вразнос, наперерез".
  
  Т.е. в развитии ИИ-технологий, "царица наук - математика"
  в реальности никак не указывает направления дальнейшего развития,
  не подсказывает пути решения реальных проблем и "непоняток",
  в общем, работает хоть какой-то "служанкой", что-то там пытающаяся пояснить.
  Периодические "взлеты интереса и надежды" ИИ-технологий, как правило,
  были связаны с находками инженеров, а не математиков.
  В этом отношении интересна достаточно эмпирично полученная технология
  "глубокого обучения", появившаяся в начале 10х годов нынешнего столетия.
  
  Эта технология прервавшая "очередную зиму" интереса к нейросетям,
  с одной стороны
  обеспечила тот фундамент/качество, которое обеспечило сегодняшний успех нейронок,
  а другой стороны
  ну никак не объяснено "классической" ни "вероятностной" математикой".
  
  Смысл/технику этого "глубинного обучения" можно попытать сформулировать так.
  Задается структура нейронки, инициализируются случайным образом ее параметры,
  подбирается достаточно большой "датасет", т.е. обучающая выборка,
  и запускается длительное обучение,
  путем многократного перебора этого датасета.
  Но если в прежней технологии, называемой "машинным обучением с учителем",
  т.е. с корректировкой параметров связей и нейронов на каждом обучающем примере,
  и которое неумолимо приводило к "переобучению" на таком количестве итераций,
  то в "глубоком обучении" используется техника часто называемая
  "обучение без учителя", хотя по факту это не совсем правильный термин.
  Совсем без "учителя", т.е. без оценки результатов работы нейронки,
  например, результатов классификации дело не обходится.
  Но сделано это по-другому.
  Оценивается не результат отдельной классификации,
  а, так сказать, "группы классификаций", и уже этот результат "групповой оценки"
  используется для настройки параметров связей и "нейронов"/узлов.
  
  Это выглядит как переход от "поурочных оценок в школе",
  к "сессионной оценке в вузе". И он оказался реально прорывным,
  и одновременно совершенно неожиданным для "математиков".
  Чисто экспериментально было продемонстрировано,
  что для самых разных структур нейронок, и самых разных способов
  оценки таких "сессионных результатов",
  нейронки, причем сложные, имеющие практическое значение,
  "каким-то" образом показывают существенно лучшие результаты
  и по "точности" в классическом смысле и по "обобщению",
  чем точно такие же нейронки с "прежней" системой обучения.
  Хотя для каких-то целей прежнее "обучение с учителем"
  тоже сохраняло свои определенные преимущества,
  т.к. "глубокое обучение" требовало громадных "датасетов"
  и колоссальных вычислительных мощностей.
  
  Тогда десять лет назад это было воспринято как "окончательная революция"
  в деле машинного обучения.
  Звучали фразы "Глубокое обучение - это все, что вам надо".
  Но "жизнь оказалась прочней..."
  
  Проблема "переобучения", как врожденное свойство нейронки,
  проявилась в глубоких нейросетях,
  пусть и на другом уровне "точности" и "обобщения".
  
  Проблему попытались решить с помощью технологии "дропаута",
  которая тоже была получена эмпирическим путем
  без всякого "математического обоснования",
  но с конкретным практическим выходом в виде и "облегчения" нейронок,
  а часто еще и с улучшением качества.
  И зазвучали кличи "Дропаут - это все что вам нужно".
  
  Но "математики" тоже не остались "без дела"
  и ими была выдвинута "гипотеза лотерейного билета" о том,
  что в любой обученной нейросети есть, как минимум,
  одна подсеть меньшей структуры обеспечивающей почти идентичную "точность".
  См. "О <Гипотезе Лотерейного Билета>"
  Автор: 19blackadder97 (Денис Кузнеделев)
  https://habr.com/ru/articles/718748/
  23 фев 2023 в 14:31
  
  Но как и многие такие "чисто математические результаты",
  практической ценности эта гипотеза имеет совершенно минимальную,
  так как не дает никаких подсказок как такую подсеть найти.
  Т.е. все во власти "Госпожи Удачи".
  
  В итоге опять все вернулось к типовым объяснениям о "переобучении"
  и рекомендациям ограничить уже "глубокое обучение" по объемам "датасетов"
  и продолжительности обучения.
  Ссылку на очень характерный материал в этом отношении дать не могу
  - автор снял ее с публикации. Но достаточно подробный комментарий к ней
  можно найти в "Модуле Г. ГПТ-модели" во фрагменте
  "Стандартная "отмазка" о причинах "неточности" глубоких сетей."
  
  Т.е. проблема "переобучения" с использованием "глубокого обучения"
  решена не была, но, надо отдать должное,
  о проблеме "локальных минимумов" при "глубоком обучении"
  стали говорить значительно реже.
  И вот на это сочетание особенностей "глубокого обучения",
  на мой взгляд, стоит обратить пристальное внимание.
  
  Как минимум, это может свидетельствовать о том,
  что проблемы "переобучения" и "локальных минимумов"
  можно и нужно рассматривать отдельно. Это во-первых.
  Во-вторых, что "глубокое обучение" за счет использования
  "групповых критериев", а не "поурочных",
  каким-то образом либо справляется, либо существенно минимизирует
  проблему "локальных минимумов".
  Это представляется достаточно логичным, так как корректировка параметров
  идет по какой-то усредненной оценке, и это "усреднение" оказывается
  достаточным для преодоления "локального минимума".
  
  Хотя, может быть, тут больше работает еще одна более-менее свежая "фича"
  - "стохастический градиентный спуск".
  К сожалению материалов анализирующих результаты глубокого обучения
  с различными параметрами этого алгоритма пока не нашел.
  
  Ладно к "локальным минимумам" мы еще вернемся.
  А сейчас попробуем сформулировать, может ли "гипотеза фрактальности" нейронок
  дать хоть какое-то объяснение проблеме "переобучения".
  
  С моей точки зрения, дело в том, что используемые "обучающие алгоритмы"
  приводят к тому, что нейронка в качестве "образца сравнения" использует
  не "обобщенный образ", тому чему ее вроде учат,
  а фрактальный образ ВСЕГО обучающего НАБОРА данных,
  //// включая и последовательность этого набора.
  Т.е. даже обучая нейронку на "коллекции фотографий котиков",
  она будет "искать РЕШЕНИЯ" общие именно "коллекции", а не для "котиков".
  Причем, при увеличении времени обучения, все большую роль в этих
  решениях будут играть не "крупномасштабные характеристики",
  а, наоборот, "мелкомасшабные", типа "волосатости" или "полосатости".
  И причина здесь именно в алгоритмах обучения,
  которые пытаются так или иначе построить "максимально сложный" фрактал,
  точнее структуру, которая максимально "связанная",
  но при этом сохраняет в каждой своей части нечто общее.
  
  Понимаю, что это звучит как-то очень абстрактно и непрактично.
  Поэтому попробую как-то по-другому.
  
  К сожалению, представления о фракталах сейчас реально у меня основываются
  только на "картинках классического фрактала Мандельброта",
  которые фактически двумерны, как выглядят многомерные фракталы
  мне не дано знать, могу только предполагать.
  Так вот я ПРЕДПОЛАГАЮ, что "фрактал нейронки" имеет вид какого-то
  "устойчивого" ядра/кластера и "бахромы" типа "цветков ландыша",
  которые тоже имеют "форму" и "устойчивость" сходную с основным "ядром",
  и, соответственно, имеют собственную "бахрому". Ну и т.д....
  
  Это приводит к тому, что хотя общая "площадь/объем" этих устойчивых ядер
  может быть очень значительна, но "длина границы" стремится к бесконечности,
  и расстояние от центров большинства ядер до "границы" стремится к нулю,
  делая поведение нейронки "хрупким"/"неустойчивым"/"непредсказуемым".
  И именно это и обеспечивают алгоритмы обучения нейронок
  при "переобучении".
  
  Соответственно, с точки зрения "человеческой" логики,
  всю эту "красоту" в виде "бахромы" нужно "подрезать" или "зачеканить",
  для обеспечения "однозначности" в виде уменьшения "непредсказуемости",
  и, как следствие, большую степень "обобщения",
  даже в ущерб "пары процентов точности".
  
  Собственно, это и делает метод "дропаута", "обрезая" слишком "мелкую бахрому",
  за счет нарушения "точной настройки" полученной в результате обучения
  стандартными алгоритмами машинного обучения.
  
  Кроме того такой подход к представлению нейронки,
  на мой взгляд, может быть и основанием объяснения "рандомной инициализации".
  Случайный набор начальных параметров, скорее всего,
  более близок "сложной конструкции фрактала" чем любой наперед заданный закон
  на основе привычных классических функций.
  Тут надо понимать, что существующие алгоритмы обучения обеспечивают
  //// за счет своей итеративной природы
  построения фрактала, наверно, из любой более-менее подходящей исходной точки,
  но построенный при этом фрактал, наверняка, будет отличаться в "деталях".
  "Все дороги ведут в Рим", но некоторые из них существенно "короче".
  
  И чтобы не выглядеть уж совсем "генератором завиральных идей",
  могу попытаться предложить, на мой взгляд,
  достаточно простой способ проверки "гипотезы фрактальности"
  путем доработки алгоритма обучения нейронок,
  заключающийся в том, чтобы при каждом цикле обучения
  массив обучающих примеров СЛУЧАЙНО "тасовался"
  как "карточная колода" пред каждой игрой.
  Представляется, что такой способ может существенно повысить
  уровень "обобщения" нейронок, хотя, вполне возможно,
  за счет скорости и "точности" обучения.
  Хотя и это не факт, если точно определить, что считать "точностью".
  
  Не могу претендовать на авторство такой модификации алгоритмов обучения,
  так как он настолько очевиден, что он наверняка кем-то уже проверялся.
  Но честно говорю, что нигде упоминания об этом не встречал,
  но, вполне возможно, что это такая "классика" уже просто прошита
  в стандартных библиотеках, используемых при реализации нейронок.
  И где и как спрашивать, кроме как у ChatGPT, ума не приложу.
  
  В общем, от проблемы "переобучения" мы перешли к алгоритмам обучения нейронок.
  Но это уже в следующий раз.
  
  -------
  
  29.04.2023 21:43
  
  Ну вот все уже придумано до нас. Оказывается это классика.
  
  https://turbotext.pro/ai
  
  Вопрос.
  Всезнайка, где используются перестановки в датасете при обучении нейросетей?
  
  Ответ дан 29 апреля, 21:48
  Здравствуйте! Перестановки (англ. permutations)
  могут использоваться в датасете при обучении нейросетей
  в различных сценариях.
  
  Один из примеров - это аугментация данных.
  При использовании аугментации данных,
  изображения или другие типы данных могут поворачиваться,
  отражаться, изменять размер и т.д.,
  чтобы создать дополнительные варианты данных для обучения нейросети.
  В этом случае перестановки могут использоваться
  для создания случайных комбинаций аугментированных данных.
  
  Также перестановки могут использоваться при обучении нейросетей,
  которые работают с последовательностями данных,
  такими как тексты или временные ряды.
  В этом случае перестановки могут использоваться
  для создания случайных комбинаций последовательностей данных,
  чтобы обеспечить более разнообразный набор данных для обучения нейросети.
  
  Надеюсь, это помогло вам понять,
  где и как могут использоваться перестановки в датасете
  при обучении нейросетей.
  Если у вас есть дополнительные вопросы, не стесняйтесь задавать их!
  
  -------
  
  Вопрос.
  Всезнайка, какие стандартные библиотеки или алгоритмы
  обеспечивают перестановку данных в обучающем датасете
  при обучении нейросетей?
  
  Ответ дан 29 апреля, 21:55
  Привет! Существует множество стандартных библиотек и алгоритмов,
  которые могут использоваться для перестановки данных
  в обучающем датасете при обучении нейросетей.
  Некоторые из них включают:
  
  1. Scikit-learn: библиотека для машинного обучения на Python,
  которая предоставляет множество инструментов для работы с данными,
  включая функции для перестановки данных.
  
  2. TensorFlow: открытая программная библиотека для машинного обучения,
  которая предоставляет множество инструментов для работы с нейросетями,
  включая функции для перестановки данных.
  
  3. PyTorch: библиотека глубокого обучения,
  которая также предоставляет функции для перестановки данных.
  
  4. Алгоритм случайной перестановки:
  это простой алгоритм, который случайным образом переставляет данные
  в обучающем датасете.
  Это может помочь улучшить производительность нейросети,
  позволяя ей обучаться на разных наборах данных.
  
  5. Алгоритм бутстрапа:
  это алгоритм, который создает множество новых обучающих наборов данных,
  выбирая случайные образцы из исходного набора данных с повторением.
  Это может помочь улучшить производительность нейросети,
  позволяя ей обучаться на более разнообразных наборах данных.
  
  Надеюсь, это поможет вам выбрать подходящий инструмент
  для перестановки данных в вашем обучающем датасете!
  Если у вас есть дополнительные вопросы, не стесняйтесь задавать их мне.
  
  ========
  
  05.05.2023 7:58
  
  Обучение нейронок - построение "ландшафта" или "фрактала"?
  В оглавление.
  
  Как показала даже поверхностная проверка
  списка используемых алгоритмов и приемов обучения нейросети,
  таких инструментов придумано достаточно много
  и "кавалерийский наскок" тут однозначно не проходит.
  Да и цель, во всяком случае пока, вовсе не в этом.
  
  Задача в том, чтобы понять, как нейронки работают,
  и с этой точки зрения, какое-то осмысление того достаточно
  хаотичного и большей частью эмпирического знания об обучении нейронок,
  на мой взгляд, может быть очень полезно.
  Тут дело даже не в том, чтобы просто сравнивать/оценить различные алгоритмы,
  сколько понять саму "внутреннюю механику" этого обучения.
  
  И тут основная проблема в том, что какого-то осмысленного представления
  всего процесса кроме "формул" обучения, и итоговых результатов
  в виде оценок "точности" работы нейросети по проверочной выборке,
  обычно в материалах не приводится, а может быть, иного просто нет,
  или просто не используется - "Итак все ясно".
  
  06.05.2023 14:14
  
  Наверно, такая оценка состояния дел в обучении нейронок
  недостаточно корректная/полная и с этим стоит серьезно по-разбираться,
  особенно если учитывать намечающуюся "смену вектора" в развитии нейронок,
  которую можно почувствовать в таком интересном материале от Google:
  "Google: <У нас нет преимущества перед открытым кодом, и у OpenAI тоже нет>"
  Автор: vignatovic (Василий Иванов)
  https://habr.com/ru/articles/733702/
  (Чуть более подробно, если ссылка уже не действительна - такое бывает -
  можно посмотреть в "Модуле Г. ГПТ-модели."
  во фрагменте Интересная информация от "монстров ГПТ-строительства".)
  По-видимому, эта тема обучения нейронок потребует отдельного раскрытия,
  когда подберется материал, причем именно о более свежих наработках
  в этой области, чем обычно дается в материалах на эту тему.
  
  А сейчас, хотелось бы обратить внимание на одну из очень познавательных работ
  по этой теме представленных в материале [3].
  В ней автор не только пытается как-то проанализировать процесс
  "метания нейронов" в процессе обучения, что само по себе очень поучительно,
  но, и это самое главное, предлагает способы ВИЗУАЛИЗАЦИИ этого процесса.
  Способы достаточно оригинальные сами по себе, но,
  и это очень важно, показывают, что весь возможный арсенал таких средств,
  можно и нужно придумывать дальше, и применять в своих практических целях.
  Очень рекомендую эту статью для самостоятельного прочтения и осмысления.
  
  Но при прочтении этой статьи, желательно сразу же пытаться анализировать ее
  с учетом вот еще какой точки зрения. Автор исходит из "классического" понимания
  того, что происходит при обучении нейронок,
  якобы соответствующего/аналогичному численному решению задачи поиска экстремума
  системы нелинейных уравнений.
  А вот в этом пункте у меня "несколько" иное мнение,
  что и попытаюсь сейчас обосновать, попутно заметив,
  что обоснование соответствия "поиска экстремума" и "обучения нейронки"
  есть только для каких-то весьма абстракнтых/упрощенных ситуаций,
  и, во всяком случае мне, не приходилось встречать каких-то
  "экспериментальных" доказательств/иллюстраций этого для каких-то
  практических или более-менее реальных/сложных систем.
  Есть только традиция/вера, что "обучение нейронок"
  это поиск "глобального экстремума" и вся проблема этого обучения
  в наличии "локальных экстремумов", которые усложняют/портят
  работу таких "замечательных" обучающих алгоритмов.
  
  Вот если эту "каноническую истину" поставить под сомнение,
  то в указанной статье можно обратить внимание на ряд интересных моментов,
  которые обнаружил сам автор, но то ли не обратил особого внимания,
  то ли не смог более детально по-исследовать/проанализировать.
  (Цикл статей этого автора по данной тематике неожиданно оборвался,
  то ли из-за отсутствия положительной реакции,
  то ли интересы у него сместились в другую область - такое бывает).
  
  Итак, что обнаружил автор и что он, возможно, пропустил?
  Используя довольную оригинальную визуализацию процесса обучения нейронки,
  автор показал что процесс обучения в чем-то похож на броуновское движение
  с каким-то постоянным дрейфом, причем периоды "скачков", "топтаний на месте"
  и последовательного "дрейфа" периодически сменяют друг друга.
  Тут вроде как ничего особо нового, но автор попытался связать
  эти периоды как с общей оценкой "точности, причем "визуализированной",
  так и с тем какие собственно причины вызывают те или иные "типы движения".
  И вот тут-то, естественно, на мой взгляд, концепция "глобальных" и
  "локальных минимумов" автора и подводит.
  
  С одной стороны, он сделал несколько интересных наблюдений,
  которые он попытался, и достаточно успешно, в корректировке алгоритмов обучения
  модельной нейронки, но вот трактовал их, опять же на мой взгляд,
  недостаточно глубоко. О чем собственно речь.
  
  Во-первых, это пресловутое "топтание на месте",
  которое, вроде как, соответствует "локальному минимуму",
  но при этом сам же автор отмечает, что визуально это "топтание"
  приводит к тому, что нейронка "как-бы" лучше "понимает" общую "концепцию"
  глобального решения, без улучшения "точности",
  оцениваемой стандартными методами.
  Автор просто сделал прагматический вывод, что в местах "топтания",
  нужно просто уменьшить гиперпараметр шага/скорости обучения,
  и в результате получил нейронку куда более точную.
  И на этом основании "успокоился".
  
  А с моей точки зрения, стоит на основании этого наблюдения/результата
  попытаться сделать и следующий шаг в рассуждении/анализе.
  Если такие области "локальных минимумов" могут, при соответствующем
  шаге/скорости обучения давать нейронке "представления"
  об образе ВСЕЙ области "правильных решений", то что это может значит?
  Что эта область имеет некое "самоподобие" или это представление,
  с "точки зрения" нейронки, имеет такое "самоподобие".
  Но представленный автором пример такого "самоподобия" не имеет,
  а обучающий набор данных случаен, то, скорее всего,
  это некое "самоподобие" вносится со стороны нейронки.
  А это серьезный аргумент в пользу "фрактальности" поведения нейронки.
  
  Еще один момент, на который автор обратил внимание,
  и даже проиллюстрировал, создав специальную форму визуализации
  по изменению "взвешенных по значимости синапсов",
  которая показывает, что в области "локальных минимумов"
  обучение сети идет весьма интенсивно, но "на клеточном уровне".
  И это тоже, на мой взгляд, аргумент в пользу "фрактальности" нейронки.
  
  Как бы это получше объяснить?
  Попробую так.
  В реальности, естественно, нейронка чистым "фракталом" не является,
  хотя бы потому, что она конечна.
  Термин фрактал используется просто как наиболее близкий к характеристике
  свойств нейронки.
  Есть другие термины - "предфрактал", "квазифрактал", "мультифрактал"
  или еще более "экзотическое", не суть важно.
  Важно, что это существенно нелинейная система с существенно сложным поведением,
  которое проявляет определенные свойства.
  Вот по сумме этих свойств нейронка и является "ближе всего" к "фракталам.
  Просто больше пока ничего похожего не придумано.
  
  Так вот, в момент своей начальной инициализации перед обучением
  нейронка никаким "фракталом" не является скорее это "мультифрактал",
  какая-то "сборная солянка", или, если взять аналогию из физики,
  жидкость находящаяся в точке замерзания/кристаллизации,
  и вот процесс обучения нейронки, это и есть процесс кристаллизации,
  который начинает формировать много разных "кристалликов"/"фрактальчиков",
  с целью создать один большой фрактал соответствующий/согласованный со всей выборкой.
  Задачи получить "обобщение" перед алгоритмом обучения не стоит.
  Не знаю есть ли в физике примеры, когда процесс кристаллизации
  проходит в форме/последовательности от поликристаллов к монокристаллу,
  но вот в обучении нейронок именно похожий процесс и происходит.
  
  Естественно, это на мой сугубо дилетантско-инженерный взгляд.
  Но зато этот взгляд значительно лучше объясняет процессы происходящие
  при обучении нейронок, чем "канонические" "глобальные и локальные минимумы".
  Да и другие процессы/эффекты тоже.
  
  Вот пример из той же статье, но уже относящийся не к "топтанию на месте",
  а наоборот к "скачкам".
  Автор сам указывает, что "скачок" приводит
  к "забыванию" уже "наработанной тонкой структуры" "области решения"
  и новому поиску очередного "локального минимума",
  чтобы начать "наработку тонкой структуры" по новой.
  А вот с точки зрения "кристаллизации фрактала" это выглядит
  как переход к новому центру "кристаллизации"/"фрактализации".
  В том то и преимущество "фрактальной концепции",
  что строительство "фрактала" может начинаться с любой точки
  в "гиперпространстве" нейронки.
  Правда, гарантии что новый центр "кристаллизации"/"фрактализации"
  окажется лучше с точки зрения "точности" нет, практически никакой,
  кроме той, что предыдущая конструкция фрактала,
  оказавшаяся по каким-то причинам "неудачной" забраковывается
  и делается попытка более-менее обоснованная,
  если используется алгоритм обратного распространения ошибок,
  либо частично случайная, если используется алгоритм "отжига",
  создать новый "кристаллик"/"фракталик", частично учитывающий "предыдущий опыт"
  и частично причину "скачка".
  Характерно, что после "скачка" даже "канонические" характеристики/оценки точности
  могут немного ухудшаться, т.к. "скачок" отражает как раз "локальный брак",
  без учета "общей картины". Спасает в этом случае как раз то,
  что нейронка была перед этим как-то "обучена" предыдущим "фрактальчиком",
  так что новый "фрактальчик" отличается от него "не сильно".
  Но отличается - и на это, собственно, и весь расчет при таком обучении.
  
  И такой вывод можно подтвердить иллюстрацией из той же статьи,
  где автор демонстрирует, что зафиксированный "скачок" произошел
  при "браке" на какой-то точке в "пограничной области".
  Вот только указанная точка на иллюстрации находится в окружении точек
  с правильной идентификацией, и это, опять же на мой взгляд,
  явно указывает, что "забракованный фрактальчик" имел
  весьма сложную форму "области решения",
  или, что представляется более вероятным, "неудачный паттерн/узор решения",
  и эта "скачок" в этой решающей точке именно это и зафиксировал.
  
  Если с этой же позиции рассматривать этап "последовательного дрейфа"
  в области устойчивых правильных решений,
  то их можно рассматривать как "подминание под себя" ведущим "фракталиком",
  и "выравнивание под одну гребенку" всех остальных,
  т.е. как процесс "фрактализации" идущий "вширь",
  в противовес "фрактализации вглубь", соответствующий "топтанию на месте".
  
  Насколько такая трактовка процесса обучения разумна/практична,
  естественно, покажет время.
  Но сам факт того, что и процесс обучения нейронок можно и визуализировать
  и изучать, и даже делать какие-то выводы, имеющие определенную практический смысл,
  надеюсь, удалось донести.
  И совершенно очевидно, что работы в этом напрвлении безусловно стоит развивать,
  предлагая новые подходы и переосмысливая "классические выводы".
  Еще раз приходится пожалеть, что автор не продолжил такие интересные работы.
  Но думаю, что в свете тенденций к более "легким" нейронкам
  с менее затратным по времени и ресурсам способом обучения
  такие работы, рано или поздно, будут кем-то продолжены,
  либо будут найдены новые подходы
  к анализу и результатов и процесса обучения нейронок.
  
  Отдельный вопрос, который пока никак не решаемый в процессе обучения -
  это что делать с неудачными результатами обучения нейронок.
  А ведь это очень ценный должен быть ресурс, кроме просто "неудачного опыта".
  Но в этом отношении пока никаких материалов кроме рассмотренных выше
  пока найти не удалось.
  А представляется, что это мог бы быть весьма полезный и поучительный материал.
  
  ========
  
  12.05.2023 9:54
  
  О "поисках черной кошки в темной комнате".
  В оглавление.
  
  Исторически сложилось определение следующее определение "машинного обучения":
  
  \\\ Говорят, что компьютерная программа обучается
  \\\ при решении какой-то задачи из класса T,
  \\\ если ее производительность, согласно метрике P,
  \\\ улучшается при накоплении опыта E.
  
  Определение это достаточно древнее, и сейчас, особенно в свете
  "досадного недоразумения", которое принято называть "переобучением",
  возможно, требует какого-то уточнения. Но пока это почти "аксиома".
  
  Опять же исторически, наиболее отработанными и распространенными
  методами машинного обучения, с солидной теоретической/математической поддержкой,
  до недавнего времени были методы различные методы классификации
  на основе деревьев решений, линейной регрессии их многочисленных улучшений.
  
  Из более-менее доступных для "неискушенного взора" материалов по этой тематике
  могу порекомендовать ряд статей от компании Open Data Science:
  
  "Открытый курс машинного обучения. Тема 3.
  Классификация, деревья решений и метод ближайших соседей".
  Автор: yorko (Yury Kashnitsky)
  https://habr.com/ru/companies/ods/articles/322534/
  13 мар 2017 в 14:03
  
  "Открытый курс машинного обучения. Тема 5.
  Композиции: бэггинг, случайный лес".
  Автор: vradchenko (Виталий Радченко)
  https://habr.com/ru/companies/ods/articles/324402/
  27 мар 2017 в 14:28
  
  "Открытый курс машинного обучения. Тема 4.
  Линейные модели классификации и регрессии".
  Автор: yorko (Yury Kashnitsky)
  https://habr.com/ru/companies/ods/articles/323890/
  20 мар 2017 в 19:38
  
  Собственно на этих моделях и сформировался, естественно на мой взгляд,
  основной понятийный аппарат и, в значительной степени, математический аппарат,
  который применяется сейчас для интерпретации результатов машинного обучения,
  и хоть каких-то рекомендаций в выборе направлений по улучшению "конструкции"
  используемых моделей вместе с еще большим количеством эмпирических наблюдений,
  или просто "полу-шаманских заклинаний".
  
  Модель "дерева решений", и более работоспособной его модификации
  в виде "случайного леса" позволяла давать, хоть какую-то,
  понятную человеку интерпретацию поведения модели и сделанных ее "выводов",
  в форме правил "если ... то ..." и приоритета/важности признаков.
  Отсюда в первую очередь, опять же на мой взгляд, выросло "убеждение",
  или правильнее сказать, "вера", что в результате "машинного обучения",
  появляются какие-то "обобщения".
  А проблему "переобучения" оставили без особого внимания,
  как легко интерпретируемый в данной модели случай слишком специфических правил,
  и используя прием "стрижки деревьев", вроде как с ним научились справляться.
  
  Правда вопрос о том почему "дерево решений" оказывается чувствителен
  к "шуму" и, как следствие, к добавлению "нового опыта",
  хотя это и "немного" противоречит определению "машинного обучения",
  аккуратно "замели под ковер", ссылаясь на то, что реальные данные,
  по факту, редко соответствуют основополагающим аксиомам используемой "математики",
  в частности "нормальному распределению", "отсутствию корреляции",
  "независимости/несмещенности признаков/отклонений" и т.д и т.п,
  особенно в части "эксцессов" - т.е. каких-то "аномальных данных",
  которые в реальности всегда "почему-то" присутствуют.
  
  И при этом никто собственно к "математике" претензий предъявлять "не собирался"
  - всех все устраивало, ведь на простых и модельных примерах
  все вроде было замечательно.
  
  Улучшение метода "дерева решений" в виде "случайного леса",
  с одной стороны, обеспечивало более качественные решения,
  но, с другой стороны, за счет того, что работало уже "несколько деревьев"
  в "параллельном/конкурирующем режиме" интерпретация выводов стала,
  более затруднительна, и еще больше усилилась чувствительность к "шумам",
  "выбросам" и склонность к "переобучению". И опять же на реальных данных.
  И опять эта тенденция особого внимания не привлекла,
  опять нашлись еще какие-то эвристические приемы "замазывающие эту проблему".
  
  Тут важно обратить внимание, что где то здесь
  интерпретация результатов работы модели как "обобщения"
  начинает расходиться с реальным поведением системы.
  Т.е. если у системы, условно говоря", "одна голова",
  то ее поведение еще как-то можно интерпретировать
  в терминах обобщения и решающих правил/признаков,
  А вот если у нее "много голов/деревьев" то, возможно,
  термин "обобщение" уже не применим,
  и нужно говорить о какой-то иной "механике".
  
  Еще один исторически сложившийся/отработанный подход это линейные модели.
  Собственно эти модели и внесли в "машинное обучение" понятие
  "разделяющей гиперповерхности", попутно "визуализировав", так сказать,
  "вероятностное" видение "решающих правил",
  т.е. переход от решающих правил в виде "да/нет", к правилам "с вероятностью".
  Во многих отраслях это конечно удобно и привычно,
  а вот для "машинного обучения", возможно, что и не так.
  Но историю не изменишь, что получилось - то получилось,
  и всяческие "вероятности" прочно обосновались в теоретическом аппарате
  машинного обучения, но и как и все вероятностные методы,
  на конкретный вопрос в конкретных случаях интерпретации поведения модели
  обычно могли дать только "уклончивый ответ".
  Даже на вопрос когда начинается "переобучение",
  а не только почему и как оно возникает в конкретной системе на конкретных данных,
  "вероятностная математика" тоже "уклоняется от ответа".
  
  Еще одной "аксиомой" популярной в области машинного обучения,
  укрепившейся в эпоху бума линейных моделей, стало убеждение,
  что "изрезанность границ" "разделяющей гиперповерхности"
  есть признак "переобучения" - "границы должны быть плавными".
  А вот анализа/обоснования такого вывода встречать в литературе
  как-то не приходилось, кроме отсылок к "интуиции" того каким "должно быть решение".
  Т.е. сами "изломанные границы" встречаются во всех этих моделях "сплошь и рядом",
  но вот в чем их причина - в особенностях алгоритмов обучения,
  в принципах построения модели или же, все-таки, в особенностях реальных данных -
  вопрос остался открытым.
  
  Есть и еще один важный момент в машинном обучении
  - это проявление своеобразного принципа Парето "80/20",
  когда, условно говоря, 80-ти процентная точность относительно легко
  достигается практически любым из методов машинного обучения,
  могут отличаться только машино-часы на обучение,
  а вот дальше каждый процент повышения точности требует кратных усилий,
  смены модели, эвристических приемов и "полу-шаманских заклинаний".
  А после 95% точности приходится "бороться" уже за каждую десятую процента.
  Т.е. опять тот же принцип Парето, но на другом уровне.
  А ведь "устойчивый паретиан" это свидетельство уже совершенно другой "статистики",
  в которой "дисперсия" отнюдь не соответствует критерию "трех сигма",
  т.е. "Закону больших чисел" и соответственно "нормальному распределению".
  И к чему относится этот "устойчивый паретиан" - к реальным данным,
  к модели, или алгоритмам обучения, вопрос на самом деле очень интересный.
  
  Было у этих исторически отлаженных моделей и еще оно свойство,
  которым нынешние модели, особенно нейронки похвастаться не могут.
  Речь идет о сопоставимости результатов "обобщающих правил/признаков"
  для различных итераций одной и той же модели.
  Т.е. имелась возможность по их "динамике" и сопоставлению делать какие-то выводы,
  и даже забракованные версии/итерации могли приносить хоть какую-то пользу.
  В современных моделях этого уже нет, есть только бесконечный процесс итераций,
  с целью хоть как-то подобрать еще чуть-чуть лучшую реализацию.
  Особенно это сильно проявляется в "нейронках",
  для интерпретации поведения которых, несмотря на то,
  что оно сильно отличается и от "деревьев решений" и от "линейных моделей,
  используется все та же, "обобщающая парадигма" и все та же "математика".
  Хотя в реальности, возможно, а на мой взгляд - скорее всего,
  уже далеко "все не так однозначно".
  
  Для иллюстрации этого утверждения очень рекомендую самостоятельно ознакомиться
  с хорошо иллюстрированным ЭКСПЕРИМЕНТАЛЬНЫМ материалом [4] все того же автора,
  на примере достаточно примитивной нейронной сети всего-то с 37 нейронами.
  
  Вот к каким выводам приходит автор (kraidiky), правда оставаясь при этом
  в рамках все той же "обобщающей парадигмы" - другой-то ведь пока еще нет:
  
  \\\ Первый важный вывод можно сделать с первого же взгляда на картинку.
  \\\ Не очень осмысленно будет надеяться, что признаки изображения
  \\\ описываются нейронами.
  \\\ Хотя бы потому, что на картинке явно различимых элементов изображений
  \\\ попросту больше чем нейронов.
  \\\ То есть, авторы большинства исследований, ищущие признаки в нейронах,
  \\\ ищут не там.
  
  ......
  
  \\\ За представление свойств в нейронной сети могут отвечать не нейроны,
  \\\ а группы синапсов.
  
  \\\ В одном нейроне мы часто видим комбинацию нескольких признаков.
  
  ......
  
  \\\ Ансамбль синапсов может захватывать несколько нейронов.
  
  \\\ Если в системе есть несколько синапсов,
  \\\ меняющих некоторую границу с разной интенсивностью и в разный момент,
  \\\ ансамбль синапсов, включающий их оба
  \\\ может использоваться для того чтобы управлять новым свойством
  \\\ <промежуток между границами>
  
  ......
  
  \\\ Некоторые синапсы составляют ансамбли,
  \\\ способные изменять отдельные признаки.
  \\\ Ансамбль работает только в рамках существующего около него
  \\\ окружения других нейронов и синапсов.
  \\\ При этом работа ансамбля почти не зависит
  \\\ от малых изменений окружения.
  
  ......
  
  \\\ Элементы сети, кодирующие семантически значимые признаки,
  \\\ в сети могут быть, но это не нейроны,
  \\\ а ансамбли синапсов разного размера.
  
  ......
  
  \\\ ...один нейрон, как и линейная комбинациях нескольких близких нейронов
  \\\ демонстрируют ответ на данные нескольких ансамблей синапсов,
  \\\ и действительно по содержанию информации отличаются не принципиально...
  
  .....
  
  \\\ ... и понять что эта какофония означает сможет только сама нейронная сеть.
  
  Т.е. понять в нейронках, что за что отвечает, очень не просто,
  еще сложнее вопрос - почему так вышло,
  если конечно не вести подробнейший лог обучения,
  и, напоследок, контрольный вопрос, а как "это" (ансамбль или что-то похожее)
  проявляет себя при "переобучении".
  
  ------
  
  Суммируя все вышесказанное можно попытаться сформулировать несколько
  направлений дальнейшей работы по "изобретению велосипеда":
  
  - отслеживать все новые работы в области техники повышения "точности" нейронок,
  особенно в вопросах "переобучения, что собственно и делается,
  правда после "щелчка по носу" от ChatGPT количество таких статей
  катастрофически уменьшилось;
  
  - "шерстить" архивы на предмет поиска "утерянных знаний" по этому вопросу,
  включая поиск каких-то методик оценки "переобучения", даже тех,
  которые точно являются экспертными, или вообще "на глазок"
  (тоже делается уже);
  
  - попробовать "сварганить" какую-то свою собственную нейронку
  и поэкспериментировать на ней - пока только в планах,
  т.к. нет пока ни соответствующих умений/возможности,
  ни, самое главное, понимания, в каком направлении, собственно, экспериментировать;
  
  - наблюдать и думать.
  
  Короче говоря, задача может выглядеть как "поиск черной кошки в темной комнате",
  причем самое трудное в этой задаче, даже не то что "кошки" может и не быть
  в "изучаемой комнате", а в том что неизвестно "как выглядит эта кошка".
  В чем-то задача схожа с распиаренными проблемами поиска "темной материи"
  и "темной энергии" - какое-то проявление есть, а вот чего и как - понимания нет,
  и где искать неизвестно.
  "Пойди туда - не знаю куда, найти то - не знаю что".
  
  Но и альтернатива, очень напоминающая "поиск под фонарем",
  т.е. в очень "нахоженной" области попыток "притянуть за уши" к нейронкам
  "концепцию обобщения" и матаппарат, основанный на "гауссианах",
  скорее всего, тоже вряд ли к чему толковому приведет.
  Рано или поздно уткнешься в очередной "устойчивый паретиан"
  и останешься с "разбитым корытом" надежд и усилий.
  
  Тут нужна даже не одна "плодотворная дебютная идея", а целый спектр таких идей.
  И в этом отношении, "фрактал" или "мультифрактал" как отправная точка,
  мне кажется, ничуть не хуже любой другой.
  
  Пока налицо есть два проявления того,
  что я отношу к "фрактальной концепции" нейронок:
  
  - наличие проблемы "переобучения",
  возможно как следствие итеративных алгоритмов;
  
  - и "размазанность" свойств нейронок по "синапсам и нейронам",
  т.е. отсутствие какой-то вменяемой формы представления этой "какофонии",
  при том, что различные варианты этой "какофонии"
  функционируют примерно одинаково.
  
  "Вот как-то так".
  
  ========
  
  28.05.2023 12:16
  
  Еще немного о "ландшафтах".
  В оглавление.
  
  Тут нашел несколько связанных по смыслу статей в архивах Хабра
  из "дотрансформенной эпохи", т.е. "когда деревья были маленькими".
  Попытаюсь их изложить некоторые мысли/информацию из них
  с точки зрения критики "ландшафтного подхода" к проблемам нейронок.
  Этот "ландшафтный подход" в них не только не подвергается сомнению,
  но и лежит в основе всего изложения материала,
  причем так хорошо и красиво иллюстрированного,
  что и тени недоверия просто так не возникает.
  Но вот анализируя комментарии к этим материалам,
  какие-то мысли/сомнения нет-нет, да и напрашиваются.
  Вот эти мысли и хочется зафиксировать.
  
  Постараюсь обойтись минимум громоздких цитат,
  кому интересно может попытаться сам найти откуда что взялось.
  Но предупреждаю, там, на мой взгляд, слишком много формул,
  хотя и с понятными разъяснениями и аналогиями,
  что, вообще-то, встречается не часто.
  Вот эти материалы:
  
  [4]
  "Методы оптимизации нейронных сетей"
  Автор: Siarshai (Павел Садовников)
  https://habr.com/ru/articles/318970/
  4 янв 2017 в 14:18
  
  [5]
  "Заметки с MBC Symposium: еще о седловых точках"
  Автор: sim0nsays (Семен Козлов)
  https://habr.com/ru/articles/282900/
  4 мая 2016 в 08:21
  
  [6]
  "Что мы знаем о ландшафте функции потерь в машинном обучении?"
  Автор: Siarshai (Павел Садовников)
  https://habr.com/ru/articles/351924/
  26 мар 2018 в 09:00
  
  Общую идею этих публикаций можно выразить фразой с первой иллюстрации из [4]:
  "Ненавижу, когда мой алгоритм сходится к локальному минимуму".
  
  Напомню, "локальным минимумом" обычно называют ситуацию,
  когда обучающий алгоритм перестает улучшать "качество" ИИ-системы,
  для конкретности будем говорить только о нейронках.
  Т.е. обучающий алгоритм находит в "ландшафте" исследуемой задачи/датасета
  какую-то ситуацию/точку на основе оценки градиента/производной целевой функции,
  из которой он без "волшебного пенделя" выбраться уже не может,
  или "выбирается" ну очень медленно.
  
  Строго говоря, хотя о "локальных минимумах" упоминают много чаще,
  но с теоретической точки зрения более частую проблему составляют
  "седловые точки" разница между ними не очень велика, но есть:
  
  \\\ Если у точки градиент по всем координатам 0, то она может быть:
  
  \\\ Локальным минимумом, если по всем направлениями
  \\\ вторая производная положительна.
  
  .....
  
  \\\ Седловой точкой, если по каким-то направлениям
  \\\ вторая производная положительна, а по другим отрицательна.
  
  Причем, для достаточно простых нейронок и решаемых задач,
  проблема "локальных минимумов" и "седловых точек" не такая страшная,
  "как ее малюют" - просто это удобный "мальчик для битья",
  когда что-то получается не так как хочется/планируется.
  Ведь реального доказательства действительно того,
  что проблема именно в "локальном минимуме" практически нет -
  отсутствуют средства визуализации этого "ландшафта",
  кроме простейших учебных примеров,
  и факта того, что какие-то алгоритмы обеспечивают более лучший результат,
  в отношении результирующего "качества" или скорости обучения.
  Собственно эта интуитивная аналогия поведения обучающих алгоритмов
  как прокладывание маршрута по сложному "рельефу"
  и является основным "догматом веры" в проблеме "локальных минимумов":
  
  \\\ Застревание в локальных минимумах или седловых точках,
  \\\ коих для функции от > 10^6 переменных может быть очень много.
  
  \\\ Сложный ландшафт целевой функции:
  \\\ плато чередуются с регионами сильной нелинейности.
  \\\ Производная на плато практически равна нулю,
  \\\ а внезапный обрыв, наоборот, может отправить нас слишком далеко.
  
  \\\ Некоторые параметры обновляются значительно реже других,
  \\\ особенно когда в данных встречаются информативные, но редкие признаки,
  \\\ что плохо сказывается на нюансах обобщающего правила сети.
  \\\ С другой стороны, придание слишком большой значимости
  \\\ вообще всем редко встречающимся признакам может привести к переобучению.
  
  \\\ Слишком маленькая скорость обучения заставляет алгоритм
  \\\ сходиться очень долго и застревать в локальных минимумах,
  \\\ слишком большая - <пролетать> узкие глобальные минимумы
  \\\ или вовсе расходиться
  
  Причем, зачастую наблюдается, в соответствии с "догматом веры",
  такая картинка при таком "пролете":
  
  \\\ Поэтому при больших "gamma"
  \\\ можно иногда увидеть, как потери на тренировочной выборке
  \\\ сначала достигают глобальный минимум,
  \\\ затем сильно возрастают,
  \\\ потом снова начинают опускаться,
  \\\ но так и не возвращаются в прошедший минимум.
  
  Ну, с моей точки зрения, возможной причиной такого поведения
  может быть другая пресловутая проблема "переобучения".
  Но об этом ниже.
  
  Во всяком случае, споры о причинах возникновения "локальных минимумов"
  и способах их преодоления
  давно превратились в споры "остроконечников" с "тупоконечниками"
  где сталкиваются, в основном, две точки зрения,
  что нужно "дорабатывать функцию оценки",
  и что "дорабатывать входные данные".
  И в результате приходят к выводу, что проблема неустранима в принципе,
  и нужно искать либо какие-то частные решения,
  либо предлагать новые структуры/принципы построения нейронок.
  И об этом тоже будет ниже.
  А пока зададимся вопросом "а был ли мальчик",
  т.е. есть ли вообще проблема "локальных минимумов" вообще.
  
  Предоставим слово исследователям-теоретикам и частично практикам,
  которые с помощью крутой математики и ряда экспериментов,
  выяснили (см.[5],[6]), что в сложных системах:
  
  \\\ Во-первых, подавляющее большинство точек с нулевым градиентом
  \\\ - это седловые точки, а не минимумы.
  
  \\\ Это можно легко понять интуитивно
  \\\ - чтобы точка с нулевым градиентом была локальным минимумом или максимумом,
  \\\ вторая производная должна быть одного знака по всем направлениям,
  \\\ но чем больше измерений, тем больше шанс,
  \\\ что хоть по какому-то направлению знак будет другим.
  
  \\\ И поэтому большинство сложных точек, которые встретятся
  \\\ - будут седловыми.
  
  \\\ Во-вторых, с ростом количества параметров оказывается,
  \\\ что все локальные минимумы довольно близко друг к другу
  \\\ и к глобальному минимуму.
  
  По первому выводу можно ожидать, что на смену "дежурной отмазки"
  о "локальных минимумах", приходит ее новая инкарнация.
  
  \\\ В глубоких нейронных сетях основным препятствием для обучения
  \\\ являются седловые точки, а не локальные минимумы,
  \\\ как считалось ранее.
  
  А вот второй вывод является действительно интересным,
  потому что ставит под вопрос целесообразность
  чудовищных усилий по переходу от "локального минимума" к "глобальному".
  Тем более, что как выяснилось, "глобальных минимумов" может быть несколько,
  и "локальных минимумы" образуют вокруг них достаточно "компактные кластеры",
  с несильно отличающимися свойствами/результатами.
  И даже само достижение "священного грааля" - "глобального минимума" -
  тоже, похоже, поставлено под сомнение
  
  \\\ Большинство локальных минимумов целевой функции
  \\\ сконцентрированы в сравнительно небольшом подпространстве весов.
  \\\ Соответствующие этим минимумам сети дают примерно одинаковый loss
  \\\ на тестовом датасете.
  
  \\\ Сложность ландшафта увеличивается по приближении к глобальным минимумам.
  //// А это еще почему? Как это экспериментально доказывается
  //// или может быть "объяснено на пальцах"?
  //// Может быть здесь все та же проблема "переобучения"
  //// потихоньку всплывает из "таинственной глубины нейронки".
  \\\ Почти во всём объёме пространства весов подавляющая часть седловых точек
  \\\ имеет большое количество направлений,
  \\\ по которым из них можно сбежать.
  \\\ Чем ближе к центру кластера минимумов,
  \\\ тем меньше <направлений побега> у встреченных на пути седловых точек.
  
  \\\ Всё ещё неясно, как найти в подпространстве минимумов
  \\\ глобальный экстремум (любой из них).
  \\\ Похоже, что это очень сложно;
  \\\ и не факт, что типичный глобальный минимум
  \\\ намного лучше типичного локального,
  \\\ как в плане loss'a,
  \\\ так и в плане обобщающей способности.
  //// Вот он ключевой пункт, звучащий как-то вскользь,
  //// хотя практики давно ощущают, что тут что-то "нечисто".
  
  \\\ В сгустках минимумов существуют особые кривые,
  \\\ соединяющие локальные минимумы.
  \\\ Функция потерь на этих кривых принимает
  \\\ лишь чуть большие значения,
  \\\ чем в самих экстремумах.
  
  \\\ Некоторые исследователи считают,
  \\\ что широкие минимумы (с большим радиусом <ямы> вокруг)
  \\\ лучше узких.
  \\\ Но есть и немало учёных, которые полагают,
  \\\ что связь ширины минимума с обобщающей способностью сети
  \\\ очень слаба.
  
  Т.е. ключевое требование к нейронкам, по факту, это "обобщающая способность",
  а алгоритмы обучения и, в особенности, его "целевая функция",
  вокруг которой столько "танцев с бубном",
  это только инструмент, и не факт, что "единственно возможный/верный".
  
  Но если поставить под сомнение целесообразность дальнейших
  математических ухищрений в поисках "священного грааля" машинного обучения,
  то исчезает "теоретический фундамент" для целой бурно развивающейся ИИ-отрасли,
  что "не есть хорошо" со многих точек зрения.
  Так что такие мысли появляются только в маргинальных комментариях
  и ... в практических подходах, найденных опытным или эвристическим путем.
  
  29.05.2023 11:32
  
  Опять же повторю свое мнение, что направленность исследований в машинном обучении
  в сторону поиска "глобальных минимумов" и подходящих для этой задачи
  "целевой функции" это дань традиции и истории развития этого направления.
  "Ландшафтная" интерпретация поведения алгоритмов обучения,
  вкупе с уже разработанным матаппаратом на основе "дисперсии",
  разработанная для классических методов регрессии,
  была интуитивно понятна и более-менее работоспособна
  на первых этапах освоения машинного обучения,
  когда в основном использовались "деревянные решения".
  И всегда можно было сослаться на "локальные минимумы" или "переобучение".
  
  Но "чем дальше в лес, тем толще партизаны",
  т.е. при все большем распространении все более масштабных нейронок,
  появлении методов глубокого обучения и все более мощных компьютеров,
  все более актуальным становится вопрос "обобщающих способностей" этих систем,
  одновременно, с их "любопытством".
  А это "почему-то" начинает конфликтовать с традиционными подходами
  к обучению нейронок, например, в вопросе размера обучающего датасета.
  
  \\\ ...Также авторы [21] утверждают,
  \\\ что при обучении с маленьким размером подвыборки
  \\\ "theta" убегает значительно дальше от точки инициализации,
  \\\ чем в обратном случае.
  \\\ Такой показатель описывается термином
  \\\ <исследовательская способность алгоритма градиентного спуска>,
  \\\ и тоже считается благоприятным для достижения хороших результатов.
  
  Т.е. вопрос с обучающей выборкой становится еще более запутанным.
  Раньше однозначно считалось, что чем больше обучающий набор, тем лучше,
  а теперь возникают какие-то достаточно обоснованные сомнения,
  причем, подтверждаемые практикой.
  
  Еще один вопрос незаметно стал существенно актуальным именно для нейронок,
  а именно "дискретность" входных данных. Тут вот какое дело.
  Пока в основном использовались "деревья решений" дискретность не была
  особой проблемой, так как сами по себе деревья решений как раз и "заточены"
  на работу по правилам "если ... то ....".
  И особой проблемы это не вызывало.
  
  А вот в нейронках ситуация похоже совершенно иная.
  Они, как бы, больше привязаны к "континуальным" задачам,
  во всяком случае, большинство используемых в них элементов/решений/функций
  типа "софтмакс" или "релу", на которых во многом работаю те же трансформеры,
  предполагают "передачу возбуждения" по связям нейронов именно
  в "непрерывном"/"континуальном" формате "с плавающей точкой".
  
  И вся математика вроде как этому соответствует
  - все замечательно считается, "дисперсии сходятся", минимумы ищутся -
  вот только данные, как входные, так и выходные, зачастую оказываются
  принципиально дискретными и математически правильный ответ
  типа "полтора землекопа" может оказаться совершенно бессмысленным
  в конкретной ситуации, либо нужно применять какую-то иную математику.
  Дискретная математика очень сильно отличается от математики континуальной.
  Но она почему-то в машинном обучении не очень то и применяется,
  то ли вообще игнорируется. Во всяком случае, я пока таких упоминаний не встречал.
  В основном делается попытка превратить дискретные данные в непрерывные,
  типа использования "косинуса угла между векторами",
  но может быть стоит попробовать и какой-то другой подход.
  
  И если в таком ключе взглянуть на проблему поиска какого-то там минимума,
  то вполне может оказаться, что она в принципе не разрешима.
  И снова всплывает все тот же "ненавязчивый" вопрос:
  а надо ли так "убиваться" в поисках этого злосчастного минимума.
  Тем более, что нужен не сам "минимум", а "обобщающая способность" нейронки.
  "Минимум" это только ориентир для поиска подходящего состояния системы.
  Причем, ориентир приблизительный.
  И хорошо работающий, в основном, на первых этапах обучения.
  
  \\\ Оказывается, что в начале обучения градиенты соседних шагов
  \\\ направлены примерно в одну сторону
  \\\ и функция ошибки убывает монотонно,
  \\\ но с некоторого момента времени "theta"
  \\\ в промежутках между "theta{t}" и "theta{t+1}"
  \\\ начинает демонстрировать характерные минимумы,
  \\\ а угол между градиентами стремиться к ~170 градусам.
  \\\ Действительно очень похоже,
  \\\ что градиентный спуск <отскакивает> от стен <седла> с маленьким уклоном!
  
  Т.е. в начале "градиентный спуск" уверенно ведет к заветной цели,
  а затем начинает "путаться в показаниях".
  Типовое решение здесь либо изменять "скорость обучения",
  либо использовать стохастические вариации алгоритмов.
  якобы чтобы вырваться и "локального минимума" или "седловой точки".
  Но так ли это нужно, если в конце обучения стандартом де-факто,
  стала регуляризация и дропаут, когда случайным образом
  систему пытаются изменить/урезать, чтобы обеспечить лучшую "обобщающую способность".
  Т.е. фактически отказываясь от такого с трудом полученного "минимума".
  Значит не в "минимуме" заключается искомая цель, а где-то еще.
  Как-там в одном сериале постоянно утверждалось:
  "Истина где-то рядом".
  По моему, это очень подходит к данной ситуации:
  желанная "обобщающая способность" где-то рядом с "локальным минимумом".
  
  Но и полностью концепцию "ландшафта" сразу отбрасывать не стоит,
  уж очень она интуитивно понятна, тем более, что иной пока что и нет.
  "За неимением гербовой, пишут на простой".
  
  Что известно о об этих "локальных минимумах" или "седловых точках",
  точно ведь никто не знает что именно,
  но не в учебных примерах, а в реальных задачах.
  
  \\\ До сих пор мы полагали,
  \\\ что качество найденного минимума зависит только от его глубины.
  \\\ Однако, многие исследователи обращают внимание,
  \\\ что также имеет значение и ширина минимума.
  
  ....
  
  \\\ ...Это гистограмма значений cost function в локальных минимумах,
  \\\ которые получились многократными попытками тренировок из разных точек
  \\\ - чем меньше параметров, тем меньше разброс значений в локальных минимумах.
  \\\ Когда параметров много, разброс резко уменьшается
  \\\ и становится очень близким глобальному минимуму.
  
  Ну и не буду еще раз повторять цитаты о "кластеризации" "локальных минимумов"
  и, это очень, на мой взгляд важно,
  "существенное усложнение ландшафта" в области "глобально минимума"
  и прилегающего к нему "кластеров локальных минимумов".
  
  Как, мой взгляд, справедливо заметил kraidiky, один из участников дискуссии
  в одном из указанных материалов:
  
  \\\ Если сравнивать DL с наукой,
  \\\ то это скорее география, чем математика.
  
  Т.е. выражаясь в терминах "ландшафта" желанная точка "обобщающей способности"
  располагается где-то в "глубине тибетского нагорья", изобилующего
  не только "горными перевалами", "долинами" и "канъенами",
  но и "серпантином автострад", "туннелями" и "козьими тропами".
  И располагается она скорее не на дне "тихой лощины",
  а скорее на "склоне ущелья", а то и вообще в какой-то "мистической пещере".
  Почему такой поэтический образ применен?
  Попробую объяснить на примере "дообучения" .
  
  Вот тот же kraidiky в тех же комментариях хорошо сказал
  о существующих возможностях дообучения нейронок
  на основе "стандартной ландшафтной парадигмы":
  
  \\\ 2) График ошибки в самом конце статьи
  \\\ - самая дезориентирующая вещь на свете.
  \\\ Я даже когда-то хотел написать статью с названием
  \\\ <Обучение вашей нейросети начинается только после того как она уже сошлась>.
  \\\ На самом деле после того, как ошибка уже вышла на полочку внизу
  \\\ если продолжить учить умело играя параметрами сети
  \\\ можно улучшить результат, например, в два раза.
  \\\ И вот то, на сколько её можно ещё после этого улучшить
  \\\ драматическим образом зависит от алгоритма и способа обучения.
  \\\ Обычное обучение полной выборкой без минибатча или методы второго порядка
  \\\ намертво зависают в первых же большого размера локальных минимумах
  \\\ и после выхода на полку дальше уже, практически, не учатся.
  \\\ SGD при постипенно снижающейся скорости даже без ничего больше
  \\\ может нащупать решение, например, в полтора раза лучше,
  \\\ перед этим конечно изрядно пометавшись по округе.
  \\\ А SGD с моментом с постепенно увеличивающимся окном например до 1000
  \\\ и скоростью уменьшающейся например до 0.001
  \\\ может найти места близкие по размерам к точности вычисления float в проце.
  
  Но такие методы хороши для не очень сложного "ландшафта",
  так как это практически мало чем отличается от "метода проб и ошибок",
  БЕЗ ИСПОЛЬЗОВАНИЯ СТРАТЕГИИ и ТАКТИКИ обучения.
  А вот если попробовать обучать нейронку опираясь не только
  на "мгновенные значения" градиентов, моментов энного порядка и т.п.,
  а задавшись целью и с учетом ее "характера",
  то результат может быть и еще лучше, и тоже немаловажно,
  появится какая-то информация и о "ландшафте" и о "характере" системы.
  
  Все это не пустое теоретизирование, а конкретная поставленная
  перед самим собой практическая задача из разряда "Миссия Невыполнима".
  Постановку и обоснование задачи можно посмотреть в "Модуле Е. Эскизы",
  фрагмент "Задача следующего исследования "Модели Kandinsky 2.1".
  Суть задачи попытаться обучить МК ("Модель Kandinsky 2.1") генерить
  картинки кораблей не только в двух "стандартно-случайных" ракурсах,
  а хотя бы по четырем разным и конкретно управлемым "румбам".
  Хотелось по всем восьми, но это явно задача не на один год,
  так реально у меня для дообучения МК всего две кнопки "лайк" и "дизлайк"
  в отношении всей картинки.
  
  В этой ситуации приходится продумывать и тактику и стратегию обучения,
  пытаясь добиться нужного результата.
  Вот "корпус корабля" развернуть на "Зюйд-Вест",
  вроде как, сегодня утром удалось,
  а вот с "парусами" пока ничего придумать не получается.
  Но все это технические детали, а главное это то,
  что кажется удалось почувствовать/приспособиться
  к так называемому "отскакиванию от стен ущелья".
  На самом деле, это больше похоже на "маршрут по горному серпантину",
  когда алгоритм/система на самом деле не ищет "дно ущелья",
  и пытается следовать ему, застревая на перекатах,
  а, наоборот, пытается "взобраться" куда-то "по-выше по склону",
  и удержаться на этом склоне.
  
  Так вот моя, тактика дообучения основана на том,
  чтобы с наезженной "широкой автотрассы",
  провести систему какими-то "козьими тропами" в новую точку.
  Получится или нет - не так важно, важен сам опыт такого
  пошагового обучения ОЧЕНЬ немаленькой СЛОЖНОЙ системы
  самыми минимальными доступными средствами.
  
  Конечно, очень бы хотелось иметь возможность управлять конкретными
  признаками/характеристиками в системе МК, но "как известно",
  никому пока такие признаки/характеристики четко выделить не удалось,
  сколько не искали. Но так ли это не возможно "в принципе"?
  И вот по итогу моих "попыток поворота фордевинд",
  хочется сформулировать одно практическое предложение,
  на основе "фрактальной гипотезы" о природе нейронок,
  и как осмысление описания итеративного способа обучения нейросетей
  от все того же автора kraidiky
  (только сделайте поправку что комментарий был написан в "дотрансформенную эпоху"):
  
  \\\ ...Если сразу учить всю эту гирлянду - эффект будет никакой.
  \\\ Берёте первый повторяющийся блок,
  \\\ к концу прикручиваете фулл-коннектед и софтмакс солои - учите.
  \\\ Потом отрубаете последние два слоя, до конката,
  \\\ вместо них добавляете ещё один повторяющийся блок
  \\\ и к нему фуллконнектед и софтмакс.
  \\\ Опять учите, и так 8 раз пока сеть не разрастётся до такой вот гирлянды.
  \\\ После чего добавляете на конец ещё одну надстройку с картинки
  \\\ и учите уже финально.
  \\\ Профит.
  \\\ Это я уже не конкретно эту сеть описывал,
  \\\ а вообще как учится весь класс сетей с такими архитектурами.
  
  Т.е. при последовательном обучении какие-то свойства/параметры нейронки
  сохраняются от этапа к этапу, и это можно и нужно использовать,
  и это вполне доказавший свое право на жизнь практический метод.
  
  А вот теперь пытаемся "скрестить" его с "фрактальной гипотезой",
  с ЦЕЛЬЮ сознательного ФОРМИРОВАНИЯ требуемых ХАРАКТЕРИСТИК нейросети.
  
  Что сие значит?
  Смысл в том, что нужно попытаться не просто "исследовать ландшафт"
  в поисках "места Силы",
  а научиться ФОРМИРОВАТЬ этот ландшафт "ТРЕБУЕМОЙ КОНФИГУРАЦИИ",
  или хотя бы с приемлемыми свойствами.
  Причем не только в части обеспечения "обобщающей способности",
  и и вообще на сегодняшний день выглядящей полной фантастикой,
  возможностью настраивать конкретные свойства/характеристики нейросетей.
  
  Звучит, наверно, полностью завирально.
  Но попробую в следующем фрагменте обосновать,
  что "не все так печально".
  Но наверно получится несколько пространно.
  Так что какое-то время на это точно потребуется.
  А кому не терпится или хочется проверить себя может додумать все самостоятельно
  - все "вводные" есть в этом модуле и "Модуле Е. Эскизы",
  чуть-чуть пересортировать основные посылки и добавить "щепотку магии ТРИЗ",
  и все будет "как на ладони".
  
  ========
  
  31.05.2023 7:48
  
  Строим магический "ландшафт" самостоятельно.
  В оглавление.
  
  01.06.2023 7:48
  
  "Прошла Весна, Настало Лето - Спасибо Партии за Это".
  Вчера написал в этот фрагмент всего две строчки
  - очень много работы, нужно срочно перепроектировать станцию Придвинская,
  а дообучение МК ("Модель Kandinsky 2.1") отнимает два часа до работы
  и три часа после. А дообучение МК сейчас для меня в приоритете,
  т.к. таким образом я пытаюсь экспериментально проверить ту "ересь",
  которую собираюсь изложить в этом фрагменте.
  Идет трудно так как приходится протоколировать каждый шаг
  в бесконечной итерации дообучения, которая по факту
  представляет собой попытку выхода из той самой пресловутой точки
  "локального минимума" или "седловой", не суть важно.
  Важно, что можно визуально по изменениям в генерируемых картинках
  почувствовать логику работы нейронки в таких ситуациях.
  
  И тут помогает такой метод ТРИЗ как "эмпатия",
  т.е. представления себя на месте МК:
  - вот я - МК, получаю запрос, генерю как-то картинку,
  получаю за нее какую-то ОДНОМЕРНУЮ оценку и ....
  задаюсь вопросом: "А что среди миллионов параметров нужно конкретно поменять?".
  Если использовать просто "градиентный спуск", даже стохастический,
  с обратным распространением ошибок, то ведь на самом деле,
  мы собственно ничего не меняем и вместе с "локальным минимумом"
  приобретем еще и "болячку переобучения"...
  В общем, это оказалось весьма интересным оценивать поведение МК
  с такой точки зрения, очень интересные мысли начинают приходить в голову.
  Но процесс очень долгий и "немного" утомительный.
  Здесь подробно расписывать его не формат, надеюсь, что сумею как-то
  протокол этой работы сжать и обобщить в сответствующем фрагменте "Модуля Е. Эскизы."
  Краткое резюме такое: пока что придуманная/предлагаемая "ересь"
  находит дополнительные подтверждения в тенденциях процесса обучения,
  но до устойчивого желанного результата "не в принципе, а в кожухе"
  пока очень далеко. МК - пошла на третий или даже четвертый круг
  перебора "стандартных" вариантов реакции на "дизлайки".
  
  Все - 8:15 пора работать. Нас ждет станция Придвинская.
  
  02.06.2023 7:33
  
  Пятница, "библиотечный день" - пусть все горит синим пламенем,
  но когда-то нужно работать и на перспективу,
  а не только "затыкать пробоины телами".
  
  В общем, попробуем посмотреть на "проблему ландшафта" в нейронках с позиций ТРИЗ.
  "Давно я не брал в руки шашек...".
  
  Итак, как "стандартно" формулируется задача?
  Имеется некий, возможно не один, "глобальный минимум" некоей целевой функции
  в миллион-мерном пространстве, к которому, по определению, нужно найти.
  И есть, и их точно много, "локальные минимумы",
  которые считаются "бяками", но в от которых невозмжно избавится,
  в которые периодически попадает/преодолевает система
  с не нулевой вероятностью в каком-то их них зависнуть навсегда.
  
  Что требуется "стандартно"?
  Обычно требуется обеспечить такой алгоритм обучения нейронок,
  чтобы они не "зависали" в "локальных минимумах",
  а устойчиво находили "глобальный".
  
  Почему "стандартная" задача не решается?
  Во-первых,
  \\\ Нахождение глобального минимума невыпуклой задачи - NP сложная задача,
  \\\ никакой надежды на это нет.
  \\\ Радоваться надо тому, что методы второго порядка
  \\\ добираются до локальных минимумов.
  Во-вторых,
  отличить "глобальный минимум" от "локального" можно только косвенно,
  построив много-много версий системы и сравнив их результаты,
  и на основании этого сделать ПРЕДПОЛОЖЕНИЕ о том,
  какая из них "ближе" всего к "заветному минимуму".
  Причем, сама оценка результатов сравнения версий,
  делается на основе "обобщающей способности".
  В-третьих,
  Методы оценки разных версий, скорее всего, не очень корректны,
  так как предполагаются, что "рельеф" задачи ФИКСИРОВАН,
  даже при наличии НЕЛИНЕЙНЫХ элементов в структуре системы.
  Более подробно об этом ниже.
  
  А что требуется реально?
  Хорошая "обобщающая способность" нейронок.
  
  Т.е. уже даже на сравнении "стандартных" и "реальных" требований
  видно "некоторое" несоответствие,
  и это обычная ситуация в ТРИЗ, когда безуспешно пытаются решить
  некорректно поставленную задачу.
  
  Одна из причин такой ситуации, как всегда, историческая:
  "когда нейронки были маленькими" и относительно простыми,
  для их анализа и предсказания свойств стали использоваться
  заимствованные методы из хорошо проработанного на тот момент матаппарата.
  А когда нейронки стали "большими и сложными",
  стали просто усложнять все тот же матаппарат.
  "Чего тут думать, трясти надо".
  
  Другая причина в том, что методы поиска "глобального минимума",
  и преодоления "локальных минимумов" и "седловых точек",
  в виде градиентного спуска и его всяческих модификаций
  с использованием случайностей или моментов первого/второго порядка,
  реально давали существенное преимущества и скорости и в качестве обучения,
  причем нейронок разного класса и архитектуры.
  Но до определенного порога.
  А выше этого порога начинаются какие-то чудовищные затраты
  и "шаманские пляски с бубном" за каждые "полпроцента точности".
  
  Есть, наверняка, и другие причины, но и этих двух больше чем достаточно.
  Важна сама по себе сложившаяся "незыблемая аксиома",
  что "хороший минимум ведет к хорошему поведению" системы.
  
  Но практика показывает, что это "не совсем" так.
  \\\ Вообще, стоит лишний раз напомнить,
  \\\ что <найти глобальный минимум функции потерь>
  \\\ НЕ РАВНО
  \\\ <получить на выходе хорошо работающую сеть>.
  \\\ В погоне за глобальным минимумом очень просто переобучить сеть
  \\\ до состояния полнейшей недееспособности[35].
  
  Выявление таких вот аксиом или стереотипов в представлении задачи
  и есть второй обязательный шаг при анализе ситуации с точки зрения ТРИЗ.
  Но если с первым стереотипом более-менее все понятно,
  тут ничего особого нового для практиков не прозвучало,
  то вот второй, неявный,
  на который, собственно, опирается аксиома минимума
  так сразу можно и не заметить.
  
  Речь идет о самой аксиоме "ландшафта", точнее о его неизменности.
  Что вообще понимается под "ландшафтом задачи"?
  От чего он зависит, чем определяется?
  Обычно считается, что это "композиция" свойств структуры нейронки
  и обучающего набора данных.
  Тут вроде и добавить нечего.
  Но можно задать пару наводящих вопросов.
  
  Например, такой.
  ИЗМЕНЯЕТСЯ ли "ландшафт" от ПОСЛЕДОВАТЕЛЬНОСТИ данных в обучающем наборе?
  Не торопитесь отвечать, вдумайтесь в вопрос.
  Не от структуры или качества данных, что общеизвестно и понятно,
  а именно есть ли зависимость "ландшафта" от "последовательности" данных.
  Если ответ "нет", то вот и обнаруживается неявная вторая аксиома.
  Потому что если в нейронке есть хоть один НЕЛИНЕЙНЫЙ элемент/связь/функция,
  то ответ должен быть "да, ЗАВИСИТ".
  
  Причины возникновения и живучести этой аксиомы,
  опять все то же историческое наследие теоретических методов машинного обучения
  от классических методов матанализа, в которых "порядок данных",
  если и учитывается, то очень слабо.
  А в линейной регрессии, с которой обычно начинается обучение специалистов
  по машинному обучению, вообще нет.
  И это вколачивается на "подкорку" надолго, если не навсегда.
  Особенно после наглядных примеров с простейшей однослойной ЛИНЕЙНОЙ нейронкой.
  
  И вот если появилось сомнение в незыблемости аксиомы одного единственного
  и ФИКСИРОВАННОГО "ландшафта" задачи во всех практически важных ситуациях,
  то можно попробовать и дальше пройти в этом направлении.
  Этакий "градиентный спуск" по "ландшафту" проблемы нейронок
  в, так сказать, новом неизвестном, а может и перспективном направлении.
  
  Сделаем следующий шаг в рассуждениях.
  Итак, имеем большую и глубокую нейронку с какими-то нелинейными элементами.
  Происходит ее обучение, выражающееся в том,
  что какие-то нелинейные элементы/связи/веса изменяются.
  Опять вопрос:
  а "ландшафт" задачи при этом изменяется?
  
  Вот он, ключик к пониманию очень многих проблем с нейронками.
  
  Если "ландшафт" и при обучении изменяется,
  то нужно говорить уже не просто о "наборе ландшафтов",
  в зависимости от последовательности обучающих данных,
  а о каком-то "постоянно зыбучем",
  возможно с постоянным "волнением", течением, "водоворотами" и т.п.,
  т.е. не "материковом", а "океанском" ландшафте.
  
  Ну еще шажок, чтобы можно было "заглянуть чуть дальше".
  
  Если при обучении нелинейной нейронки формируется "ландшафт",
  то возникает вопрос:
  а в каком направлении идет это формирование?
  Совершенно случайном или в с какой-то закономерностью,
  или в каком-то направлении?
  
  И вот тут-то возникает предположение/гипотеза,
  что определенная закономерность есть.
  в терминах "ландшафтной парадигмы" это звучит
  как формирование своего собственного "уникального минимума/ландшафта".
  Который не понять, то ли "глобальный" то ли "локальный",
  пока не сравнишь его с другой версией системы.
  
  А уникальность этого "минимума/ландшафта" определяется
  случайной инициализацией параметров нейронки при запуске обучения,
  и случайной последовательность данных в обучающем наборе,
  что стало уже стандартом де факто.
  
  Вывод: "ландшафт" не только "дан свыше", но еще и "рукотворен".
  
  Так. А теперь немножко снизим скорость генерации "безумных идей",
  "их есть у меня" - это еще все без привлечения фракталов и голографии -
  и попробуем примерить гипотезу "формирования ландшафта"
  к известным данным.
  Можно ли что-то известное объяснить не менее обоснованно,
  чем это делается на основе "стандартной парадигмы".
  И можно ли объяснить, что-то ранее не объяснимое.
  
  04.06.2023 6:50
  
  Может быть, чтобы не сильно "давить на психику" утверждением
  что "ландшафт" задачи формируется в процессе обучения,
  попробовать использовать какую-то другую аналогию,
  но из все-того же "картографическо-географического" арсенала.
  
  Наверно, вряд ли кто будет отрицать, что в реальности
  "близость" двух географических координат в практическом смысле
  сильно зависит от такого "параметра" как "транспортная связность",
  типа наличия связующих их автострад, железнодорожных магистралей,
  мостов, тоннелей, удобных автобусных или авиационных маршрутов и т.д. и т.п.
  С такой точки зрения можно рассматривать обучение нейронки,
  как создание такого рода "транспортной связности" по мере "освоения"
  исследуемой и осваиваемой территории с каким-то до конца неизвестным ландшафтом
  и, тоже немаловажно, неизвестным будущим потенциалом роста и развития.
  
  Что-то подобное приходится делать во многих компьютерных игрушках
  типа "Цивилизации", когда зачастую приходится основывать "поселения"
  в до конца неисследованной области и принимаемые решения
  в будущем могут оказаться неоптимальными.
  
  Можно наверно и еще какую-то "географическую" аналогию придумать,
  но главную идею "формирования ландшафта" нужно сохранить -
  при обучении нейронки происходит "двусторонний процесс" -
  с одной стороны происходит исследование "ландшафта" задачи,
  а с другой стороны "форматирование", наложение какого-то
  стандартизированного "паттерна" "освоения" этой территории.
  Причем, этот "паттерн" постоянно немного трансформируется,
  сохраняя, что-то от предыдущего "узора", и добавляя что-то
  в соответствии с новыми "вводными".
  
  Возможно такая трактовка концепции "меняющихся/формируемых ландшафтов"
  кому-то покажется более приемлемой, и более перспективной к доработке,
  чтож буду только рад этому.
  Но мне самому более УЖЕ более "комфортна" ультимативная концепция
  "формирования масштаба", может быть потому что она пришла в голову первой.
  А это косвенно подтверждает саму эту ультимативную трактовку -
  начальное "состояние" проявляется во всем последующем "движении".
  И, видимо, я сам в этом отношении не так уж сильно отличаюсь от нейронок.
  А может быть это еще следствие того, что "формирование ландшафта"
  очень хорошо согласуется с "фрактальной гипотезой" природы построения/обучения,
  и, возможно, тут пока только интуитивное ощущение,
  с гипотезой о "голографичности" самой работы нейронок.
  Но концепцию "транспортной связности" тоже постараюсь где-то использовать.
  
  Ладно, "транспортно-маршрутное" отступление заканчиваем
  и переходим к предварительной проверке гипотезы "формирования ландшафта".
  
  Начнем со случайной инициализации параметров нейронки в начале обучением.
  "Как известно" случайная инициализация в общем случае оказывается,
  как минимум не хуже детерминированной каким-то законом.
  Причины толком не известны.
  А если предполагать, что начальная инициализация фактически во многом задает
  структуру/паттерн "окончательного ландшафта" в форме какого-то там "минимума",
  - ну или его "транспортною связность", если это для кого-то более приемлемо -
  то с учетом того влияния на "ландшафт" который оказывают собственно
  последовательность обучающих данных, то обоснование выглядит чуть ли не тривиально.
  "Ландшафт" реальной задачи, особенно в районе "минимума" обычно очень сложный,
  и "случайный" начальный "паттерн" задания "ландшафта",
  статистически всегда будет иметь больше общих свойств с окончательным "ландшафтом",
  чем любая детерминированная функция. Большая сложность трудно отличима от хаоса.
  Надеюсь, это мне удалось, внятно изложить.
  
  Еще проще объясняется вариативность результатов обучения
  казалось бы одной и той же нейронки на одном и том же наборе данных.
  За счет или другого случайного набора параметров инициализации нейронки
  или другой последовательности обучающих данных (о чем часто забывают)
  начальные паттерны "формирования ландшафта" будут отличаться между собой.
  Естественно, какие-то из них окажутся более или, наоборот, менее
  отвечающими "окончательному ландшафту", и тут опять играет свою роль,
  набор и последовательность обучающих данных, с соответствующими
  расхождением результирующей "точности" на тестовых данных.
  Тоже, вроде, удалось понятно раскрыть.
  
  Но это достаточно старые и известные вопросы, к которым уже по-привыкли,
  и особо ничего нового эти объяснения пока не дают,
  просто это было в качестве первичной "затравки" и демонстрации того,
  что концепция "формирования ландшафта" вполне себе продуктивна,
  и достаточно конкурентноспособна по сравнению с "фиксированным ландшафтом".
  
  Идем дальше.
  
  Как-то вез особого внимания и, соответствующего, теоретического обоснования
  остается вопрос наличия большого количества "локальных минимумов",
  мало отличающихся от "глобального", причем самих "глобальные" могут быть
  далеко не в единственном числе, что особенно проявляется в больших нейронках.
  "Кластеризация локальных минимумов" вокруг "глобальных" настолько "близко",
  что целесообразность поиск этого "глобального минимума" уже ставится под вопрос.
  Причем "близость" оценивается не по "близости" параметров нейронки,
  а по результирующей точности.
  Это как сравнивать глубины озер в Андах и Тибете и на основании этого
  заявлять об их "близости", это если использовать географические аналогии,
  а не принятые статистическо-математические.
  
  А вот если к этому вопросу подойти с точки зрения концепции
  "формирования ландшафта" в процессе обучения нейронки,
  то картинка представляется достаточно ясной.
  Независимо от "начального расположения" (инициализации) (Анды или Тибет)
  промышленный комплекс (алгоритм обучения) то ли "копает озеро",
  то ли строит транспортную инфраструктуру,
  с учетом особенностей и "грунта" (обучающих данных) и этой "начальной точки".
  И в итоге получается примерно одинаковая "глубина озера"
  или "транспортная связность" как в Андах так и в Тибете.
  
  Надеюсь, аналогия, а вместе с ней, и само объяснение достаточно понятно.
  "Локальные минимумы" - во многом "рукотворны".
  А их "кластеризация" - следствие неидентичности начальной точки
  и идентичной "производственной мощности" структуры нейронки
  и ее обучающего алгоритма.
  
  Кстати, это также объясняет невозможность использовать
  комбинацию параметров одной и той же нейронки,
  полученных при различных вариантах обучения,
  что особенно сильно удручает практиков машинного обучения.
  
  Может быть эта аналогия/объяснение поможет понять
  как сократить практически бесконечный перебор "функций оценки точности"
  и параметров обучения самых разных нейронок,
  и сосредоточиться на чем-то более эффективном.
  
  Обращаю внимание, что в такой трактовке "рукотворный ландшафт"
  или "транспортная связность" все больше сближается
  с "фрактальной гипотезой" представления нейронок.
  Но еще не совсем.
  
  Есть и еще другие вопросы, которые можно попытаться прояснить
  с помощью концепции "формирования ландшафта",
  но чтобы понятнее это сформулировать, нужно сделать еще один шажок
  но уже в сторону "многоканальности" или "мультифрактальности",
  или в терминах нынешней геополитики - "многополярности".
  Напомню, что геополитика есть следствие географии,
  и тем самым продолжаем оставаться в рамках этой "первой из наук",
  а не "всеми любимой" математики.
  
  Опять же исторически сложилось, наверно, с эпохи бума "деревянных решений"
  что при обучении нейронок ищется ОДИН "минимум".
  А что если это "не совсем" так?
  Что если в процессе обучения, особенно больших нейронок,
  идут процессы "формирования" сразу нескольких конкурирующих между собой
  потенциально равноценных "локальных минимумов",
  определяемых различными "ансамблями параметров/связей/нейронов"?
  Что мешает такому предположению?
  Если вдуматься, то только, опять же, неявная аксиома,
  что в одной нейронке может ИСКАТЬСЯ только один минимум.
  
  Но допустив, что "минимумы" есть в некоторой степени что-то "рукотворное",
  причем эти "минимумы" могут "возводится" в любой начальной точке,
  сохраняя черты и уникальности и общности,
  то оказывается, что эта аксиома о "единственности минимума" уже не нужна,
  и только мешает пониманию происходящих процессов.
  
  Возвращаясь к аналогии игры "Цивилизация", в которой одновременно
  начинается зарождение не одной "цивилизации", а сразу нескольких.
  Видим как они сначала развиваются, большей частью, независимо,
  и только по мере роста начинают взаимодействовать/конкурировать/бороться
  друг с другом.
  А теперь сравниваем графики развития этих цивилизаций по параметру "территория",
  так сказать, влияния полюсов многополярного мира,
  с .... графиком обучения нейронок.
  И наблюдаем интересную аналогию.
  Сначала линейный рост, потом замедляющийся рост, потом стагнация,
  или даже деградация.
  Случайное совпадение или есть какие-то общие "механизмы"/"законы"?
  
  Предположение о наличии в целой нейросети достаточно работоспособных подсетей,
  безусловно не ново. Та же теория "лотерейного билета" на нем и основывается.
  Просто требуется сделать следующий шаг в рассуждениях:
  если есть одна хорошо работающая "подсеть", то почему не может быть
  МНОГО подсетей "среднего качества".
  И если не сильно бояться "еретических мыслей" пройти еще дальше:
  а может вся работа одной нейросети - это есть СУММА работ этих подсетей?
  Ну может быть не "сумма", а какой-то более сложный функционал,
  например, "взвешенный спектр" или еще что по-круче. Много чего можно придумать.
  Но это только, если не бояться посягнуть на аксиому "единственности минимума".
  
  Обращаю внимание, на определенный "цикл" в представлениях
  о наличии "локальных минимумов" в нейронках,
  выполненный на в предыдущих рассуждениях:
  от "кластеров минимумов" "данных нам свыше"
  к одному "минимуму", но "рукотворному",
  а затем опять к "множеству минимумов" только "рукотворных" и "конкурирующих".
  Классическая последовательность: "тезис" - "антитезис" - "синтез",
  что по Канту, что по Гегелю, что по ТРИЗ,
  каждый может выбрать, что ему ближе.
  Но такой "виток логики" обеспечивает и согласование с известными
  теоретическими и практическими результатами,
  выход на какое-то иное понимание ситуации.
  
  //// И уже не важно, есть ли "глобальные" и "локальные минимумы" на самом деле,
  //// для нового понимания это уже не так важно.
  //// Можно спокойно соглашаться с "академическими догмами",
  //// но при этом спокойно делать то, что нужно.
  
  //// Кстати это тоже метод из ТРИЗ:
  //// на какое-то время "отменить действие" непреложного закона/аксиомы/догмы,
  //// и посмотреть, что из этого получится, если пройти немного дальше.
  //// Есть очень хороший рассказ Валентины Журавлевой, как раз об этом приеме.
  
  //// Безусловно к концепции "многополярья" можно было придти и другими способами,
  //// но здесь описан просто привычный для меня прием анализа ситуации.
  //// У кого-то, безусловно, может быть другой,
  //// но результат, скорее всего, будет тот же.
  //// "Все пути ведут в Рим". Просто некоторые "чуть" длиннее.
  
  Ну а теперь, обогатив концепцию "рукотворных минимумов" предположением
  о "многополярности" можно достаточно легко объяснять целый "букет"
  теоретических и эвристических "шаманских практик" в машинном обучении.
  Это и классический стохастический градиентный спуск,
  и "метод отжига" и регуляризацию и дропауты и, наверно, еще что-то
  - сразу не упомнишь, да и не настолько я еще "погрузился в эту тему",
  да, собственно, и не очень пока нужно.
  Важен принцип.
  
  А принципиально получается, что при обучении нейронок,
  на той стадии, когда кривая обучения, вроде как, замедляется,
  начинается "конкуренция" между "полюсами" за "внимание" алгоритма обучения,
  с целью "выкопать свой локальный минимум поглубже",
  или нарастить "транспортную связность" в другой терминологии.
  И вся эта "стохастичность", что методах обучения, что методах регуляризации,
  что в дропаутах - это попытка хоть как-то на этот процесс воздействовать.
  Естественно в слепую и наугад, с соответствующими результатами и трудозатратами.
  
  К сожалению, надо понемногу закругляться, хотя не рассмотренных вопросов
  еще "вагон и маленькая тележка" и все очень непростые,
  типа "переобучения", проблемы "экстраполяции", совместная работа подсетей и т.п.
  Все за раз не охватить, да, наверно, и не надо.
  "Что занадта, то не здраве".
  А времени на следующей неделе похоже заниматься этим будет самый минимум -
  очень много срочной и "разной" работы.
  Так что руки не скоро дойдут для продолжения.
  
  Но один момент постараюсь еще отразить, собственно, ради которого
  и была вся эта длинная "преамбула" о "формируемых ландшафтов".
  
  Суть в том что, если допускать возможность "многополярья" в нейронках,
  то это можно использовать не только для объяснения процесса обучения нейронок,
  но и попытаться ЦЕЛЕНАПРАВЛЕННО управлять этим обучением,
  с неплохими шансами на получение требуемого результата.
  
  В чернове это представляется так:
  как-то, ну хотя бы случайно на первое время, выделяем в нейронке,
  какие-то ансамбли свойств/связей/нейронов,
  обзываем их, скажем, "магическими полюсами" или "конкретными регуляторами".
  Чуть-чуть дорабатываем обучающие данные, или только часть их,
  с точки зрения соответствия/классификации их этим "полюсам"/"регуляторам".
  И сразу же при обучении нейронки используем для этих ансамблей
  немного измененные алгоритмы обучения, в том ключе, что только для этих
  специально классифицированных данных награды/штрафы начисляются
  для этих ансамблей как-то по-другому, вплоть до обратных общей оценке.
  
  Смысл в том чтобы одновременно учить сразу несколько подсетей в нейронке
  с конкретной специализацией, но, в то же время, сразу интегрируясь
  со всей структурой нейронки, а не пытаясь их потом как-то объединить.
  Т.е. терминах "теории конструкционных материалов"
  пытаемся построить "композит", а не "многослойку".
  Или в терминах "ИИ-магии" - технология формирования "магических потенциалов".
  Почему выбрано такое название можно почитать в "Модуле Е. Эскизы."
  
  Тут еще много еще чего надо продумать, полистать архивы и свежайшие новости,
  и что-то и самому проэкспериментировать. Так что это процесс не быстрый.
  
  Возможно, это предложение тоже не отличается какой-то суперновизной,
  но пока единственное упоминание о чем-то похожем нашел вот такое:
  
  "OpenAI будет бороться с <галлюцинациями> ИИ с помощью нового метода обучения"
  Автор: maybe_elf
  https://habr.com/ru/news/739414/
  2 июн 2023 в 11:27
  
  OpenAI объявила,
  https://www.cnbc.com/2023/05/31/openai-is-pursuing-a-new-way-to-fight-ai-hallucinations.html
  что будет бороться с <галлюцинациями> ИИ
  путём внедрения нового метода обучения моделей искусственного интеллекта.
  
  <Даже самые современные модели склонны к ложным выводам:
  они изобретают факты в моменты неопределённости>,
  - пишут исследователи OpenAI в своём отчёте.
  По их словам, такие проблемы обычно возникают там,
  где требуется многоступенчатое рассуждение,
  поскольку для ложного вывода достаточно одной логической ошибки.
  //// Это не всегда так.
  //// Но, да элемент "неопределенности" или, скорее "неожиданности" для ГПТэшки
  //// действительно в запросах вызывающих "галлюцинации" может присутствовать.
  
  Теперь OpenAI намерена вознаграждать модели ИИ в процессе обучения
  за каждый правильный шаг в рассуждениях вместо того,
  чтобы выдавать вознаграждение за окончательный вывод.
  По словам исследователей, этот подход называется <наблюдение за процессом>,
  а не <наблюдение за результатом>,
  и позволит прийти к более понятному ИИ,
  поскольку стратегия побуждает модели следовать
  более похожей на логику человека цепочке <мыслей>.
  //// Вот оно подтверждение, хотя и косвенное,
  //// технологии формирования "магического" ландшафта.
  /////// Так это или нет, вряд ли в ближайшее время удастся выяснить.
  /////// Но во всяком случае работы точно идут по близкому направлению.
  
  ........
  
  Ну вот, на сегодня пожалуй все.
  Не то чтобы "кувшин моих мыслей пуст",
  но почти все "домашние заготовки" уже пошли в дело,
  а чтобы что-то городить с чистого листа уже и сил нет
  - вчера выложился по полной на статье Стефена Вольфрама.
  
  Но, надеюсь, после некоторого раздумья, на продолжение этой темы.
  
  
  ========
  
  02.08.2023 9:31
  
  Еще одна непонятка нейронок.
  В оглавление.
  
  Появилась интересная заметка:
  
  "Нейронные сети, графы и эмерджентность"
  Автор: DeadPhilosopher (Андрей)
  30 июл в 17:27
  https://habr.com/ru/articles/751340/
  
  \\\ Одна из интереснейших проблем сейчас заключается в том,
  \\\ что новые архитектуры - это по сути, рукомахательно придуманные лайфхаки.
  
  И приводит пример такой архитектуры:
  
  \\\ YoloR: You Only Learn One Representation: Unified Network for Multiple Tasks
  \\\ https://arxiv.org/abs/2105.04206
  
  Но при этом делает такое замечание:
  
  \\\ Однако, если вы решитесь прочитать саму статью о данной модели,
  \\\ то будет серьезнейший риск не понять, о чем вообще речь
  \\\ и что происходит в данной нейронной сети.
  \\\ Все дело в том, что магия этой архитектуры заключается
  \\\ в добавлении блока без входа - implicit knowledge блока,
  \\\ в который стекаются данные "независящие от входа",
  \\\ т.е. некоторое неявное представление знаний.
  
  \\\ Что это означает с формальной точки зрения?
  \\\ Не представляю.
  
  И предлагает "посмотреть на проблему под другим углом".
  При этом в качестве "угла рассмотрения" предлагаются "графы" и "эмерджентность".
  
  \\\ Самое характерное свойство эмерджентной системы:
  \\\ Наличие у системы свойств, не присущих её компонентам по отдельности.
  
  Дальше идут формулы, гипотезы и такой вывод:
  
  \\\ На самом деле я не упомянул еще важную взаимосвязь:
  \\\ Известно, что нейронные сети, по крайней мере в каких то случаях,
  \\\ могут быть переформулированы в теоретико-игровых терминах
  \\\ как задача поиска решения для какой то игры.
  \\\ И на самом деле, в каком то смысле, некоторые равновесные состояния
  \\\ в теории игр соответствуют фазовым переходам из статистической физики
  \\\ (модель Поттса <=> QRE).
  
  \\\ Таким образом, у нас есть дорожка, идя по которой
  \\\ можно попытаться построить фреймворк для анализа
  \\\ процесса обучения нейронных сетей, с точки зрения равновесия на графе,
  \\\ в зависимости от топологии этого графа.
  
  \\\ Такой подход позволил бы нам учитывать
  \\\ коллективное поведение нейронной сети в целом,
  \\\ а не свойств отдельных ее элементов.
  
  08.08.2923 15:03
  
  Как переформулировать нейронки "в теоретико-игровых терминах" я не знаю,
  а "равновесие на графе" меня еще и "не вдохновляет",
  но вот подступиться к "эмерджентности" очень хочется,
  и может быть даже со стороны этой самой "implicit knowledge".
  Точнее с попытки понимания или просто гипотезы
  как это все на самом деле работает.
  
  Из комментариев к данной заметке:
  
  \\\ azTotMD
  \\\ 31 июл в 13:00
  
  \\\ Спасибо, очень интересная статья.
  
  \\\ Особенно поразило вот это "добавлении блока без входа".
  \\\ Понимаю, что это больше вопрос к авторам той статьи
  \\\ (обязательно посмотрю её подробнее), а не к вам,
  \\\ но "блок без входа" - это ведь константа?
  \\\ Но зачем-то авторы изобразили этот блок в виде нейросети?
  \\\ С таким же успехом, это мог быть биас?
  \\\ Любопытно, что в классификаторах, типа реснета,
  \\\ последний классифицирующий слой содержит биасы.
  \\\ Получается, что если два первых класса набрали одинаковые значения логитсов
  \\\ выигрывает тот, у которого биас больше.
  \\\ Как если бы нейронка сказала:
  \\\ "да вот эти два класса набрали одинаково, но вот класс1 встречается чаще
  \\\ - поэтому пусть это будет класс1".
  \\\ Некое такое априорное знание
  \\\ 0
  
  \\\ DeadPhilosopher
  \\\ 31 июл в 13:22
  
  \\\ Блок без входа = тензор (или нейронная сеть) - которые содержат
  \\\ обучаемые параметры.
  \\\ Т.е. обратное распространение ошибки через них проходит,
  \\\ но нет входа.
  \\\ +1
  
  \\\ azTotMD
  \\\ 31 июл в 13:45
  
  \\\ Но в ходе инференса, то ведь это - константа?
  \\\ Ну т.е. по сути - это просто хитрый биас?
  \\\ 0
  
  \\\ DeadPhilosopher
  \\\ 31 июл в 13:47
  
  \\\ Типо того, да.
  \\\ Ну правда, байес все таки аддитивный,
  \\\ а эта штука может играть роль маски,
  \\\ умножаться разными способами, конкатенироваться, складываться и т.д.
  \\\ +1
  
  Т.е. "implicit knowledge" в простейшем случае это "просто хитрый биас",
  и прежде чем попытаться понять как он может работать полезно вспомнить
  что такое "биасы" вообще, и как изменялась трактовка их применения.
  
  04.08.2023 9:29
  
  Ищем пояснение по биасам в "букваре":
  
  "Нейронные сети для начинающих. Часть 2"
  Автор: Arnis71 (Арнис)
  https://habr.com/ru/articles/313216/
  12 фев 2017 в 18:38
  
  .....
  
  \\\ Нейрон смещения или bias нейрон
  \\\ - это третий вид нейронов, используемый в большинстве нейросетей.
  \\\ Особенность этого типа нейронов заключается в том,
  \\\ что его вход и выход всегда равняются 1
  \\\ и они никогда не имеют входных синапсов.
  
  //// Обратите внимание на то, что в 2017 году считалось правильным
  //// иметь выход "bias нейронов" равным единице, т.е. неизменным.
  
  \\\ Для чего нужен нейрон смещения?
  
  \\\ Нейрон смещения нужен для того,
  \\\ чтобы иметь возможность получать выходной результат,
  \\\ путем сдвига графика функции активации вправо или влево.
  
  ......
  
  \\\ То есть, когда в ходе обучения,
  \\\ мы регулируем веса скрытых и выходных нейронов,
  \\\ мы меняем наклон функции активации.
  \\\ Однако, регулирование веса нейронов смещения
  \\\ может дать нам возможность сдвинуть функцию активации по оси X
  \\\ и захватить новые участки.
  \\\ Иными словами, если точка, отвечающая за ваше решение,
  \\\ будет находиться, как показано на графике слева,
  \\\ то ваша НС никогда не сможет решить задачу
  \\\ без использования нейронов смещения.
  \\\ Поэтому, вы редко встретите нейронные сети без нейронов смещения.
  
  .....
  
  \\\ Также нейроны смещения помогают в том случае,
  \\\ когда все входные нейроны получают на вход 0
  \\\ и независимо от того какие у них веса,
  \\\ они все передадут на следующий слой 0,
  \\\ но не в случае присутствия нейрона смещения.
  
  .....
  
  \\\ ВАЖНО знать, что иногда на схемах не обозначают нейроны смещения,
  \\\ а просто учитывают их веса при вычислении входного значения например:
  
  .....
  
  Т.е. на тот момент "bias нейрон" воспринимался в основном просто
  как "типовой костыль" для расширения возможностей
  стандартных фукций активации основных "рабочих нейронов",
  плюс "какое-то воздействие" - смещение - в случае "нулевых входов"
  т.е. в особой точке входных данных.
  
  08.08.2023 15:54
  
  Причем значения смещения считались всегда постоянными и равными единице
  и особого смысла в подборе других значений мало кто считал нужным делать.
  
  "Добавление узлов смещения в нейронную сеть"
  https://radioprog.ru/post/800
  Добавлено 15 февраля 2020 в 17:41
  Оригинал статьи:
  Robert Keim. Incorporating Bias Nodes Into Your Neural Network
  https://www.allaboutcircuits.com/technical-articles/incorporating-bias-nodes-into-your-neural-network/
  
  ......
  
  \\\ Значения смещения, отличающиеся от +1
  
  \\\ По моему опыту, +1 - это стандартное значение смещения,
  \\\ и я не знаю, есть ли какое-либо веское обоснование
  \\\ для использования других чисел.
  \\\ Смещение изменяется весами,
  \\\ поэтому выбор +1 не накладывает жестких ограничений на то,
  \\\ как смещение взаимодействует с общим функционалом нейросети.
  
  \\\ Однако, если вы хотите поэкспериментировать с другими значениями смещения,
  \\\ вы можете легко это сделать.
  \\\ Для смещения в скрытом слое вы просто меняете число,
  \\\ присвоенное postActivation_H[node].
  \\\ Для смещения во входном слое вы можете умножить
  \\\ массив new_column (каждый элемент которого изначально равен +1)
  \\\ на необходимое значение смещения.
  
  ......
  
  \\\ Заключение
  
  \\\ Как видите, узлы смещения не привели к каким-либо значительным изменениям
  \\\ в эффективности классификации.
  
  \\\ Это на самом деле меня не удивляет
  - я думаю, что узлы смещения иногда немного переоцениваются,
  \\\ и, учитывая природу входных данных, которые я использовал в этом эксперименте,
  \\\ я не вижу причин, почему узлы смещения могли бы помочь.
  
  \\\ Тем не менее, смещение является важной техникой в некоторых приложениях;
  \\\ будет хорошей идеей, написать код,
  \\\ поддерживающий функциональность узлов смещения,
  \\\ чтобы они были там, когда вам понадобятся.
  
  Т.е. особого понимания зачем и почему работают "bias нейроны"
  на тот момент 2020 год не было. Да и в 2022 году в такого рода публикациях
  тоже особого изменения не замечено. А вот в 2023 году наступил какой-то
  перелом в отношении "bias нейронов" все-таки произошел.
  Правда мне пока не удалось отследить где и когда это произошло,
  но что-то можно попытаться домыслить.
  
  Но начнем по порядку.
  
  В статье:
  "Что происходит в мозгах у нейронной сети и как им помочь"
  Автор: kraidiky
  https://habr.com/ru/articles/219647/
  17 апр 2014 в 01:17
  
  Автор приходит к интересному выводу:
  
  .....
  
  \\\ Полное Фиаско
  
  \\\ Вот смотрим мы на это и понимаем, что что-то тут не так.
  \\\ Задача не то, что простая, она примитивная.
  \\\ Но сеть оказывается решительно не способна найти её решение
  \\\ ни в каком приближении.
  
  \\\ Вы уже догадались почему?
  \\\ Из картинки явно следует, почему это невозможно,
  \\\ а заодно ответ на вопрос -
  \\\ почему все решения с предыдущей картинки заваливались влево.
  
  \\\ Если мы попробуем сконструировать решение данной задачи аналитически
  \\\ - вручную, с ручкой и бумажкой, то очень быстро столкнёмся
  \\\ с правильным ответом.
  \\\ Если у вас в распоряжении нейрон с симметричной сигмоидой
  \\\ никакими ухищрениями вы не заставите его сделать преобразование
  \\\ output = k*input+b.
  \\\ Нейронная сеть с симметричной относительно нуля сигмоидой в точке (0,0)
  \\\ не может выдавать на выходы ничего кроме 0
  \\\ (привет, кстати, теореме о сходимости перцептрона Розенблатта,
  \\\ там тоже есть такая особенная точка).
  
  \\\ Чтобы решить эту проблему мы можем добавить нейронной сети
  \\\ ещё один вход, и выдать ему постоянное значение 1,
  \\\ не зависящее от входных данных.
  \\\ И тут сеть словно бы по мановению волшебной палочки умнеет
  \\\ и обучается стоящей перед ней задаче в кратчайшие сроки
  \\\ и с невероятной доселе точностью.
  
  \\\ А может ли существовать неплохое приближение
  \\\ без дополнительного опорного входа?
  \\\ Сможем ли мы придумать решение для топологии сети с предыдущей картинки?
  \\\ Оказывается, это возможно.
  
  ......
  
  \\\ Во всем этом ручном решении есть один интересный момент.
  \\\ Дело в том,
  \\\ что перцептрон, ведомый алгоритмом обратного распространения ошибки,
  \\\ в принципе не мог найти это решение в нашей ситуации.
  \\\ Потому что между начальным состоянием,
  \\\ когда у всех синапсов начальное значение в диапазоне [-1,1] и конечным,
  \\\ при котором два синапса весят очень много,
  \\\ лежит очень широкая пропасть, наполненная очень плохими решениями,
  \\\ и алгоритм градиентного спуска будет старательно выталкивать сеть
  \\\ из этой пропасти.
  \\\ Как я называю это решения имеют высокую несвязанность.
  \\\ Алгоритм имитации отжига может случайно закинуть сеть в ту область,
  \\\ но для этого температура отжига должна быть большой
  \\\ (чтобы был шанс закинуть сеть так далеко)
  \\\ и очень быстро снижаться, чтобы оттуда сразу не выбросило.
  \\\ А ещё поскольку веса части синапсов должны быть большими,
  \\\ а у других, наоборот, очень мало отличаться,
  \\\ мы должны случайно попасть не только в большие значения,
  \\\ но ещё, совершенно случайно, хорошо попасть в маленькие,
  \\\ а ещё алгоритм должен очень резко замерзать
  \\\ когда что-то такое нашёл потому что область годных решений очень узенькая.
  \\\ Даже на скорости обучения 0.0001 простой стохастический градиентный спуск
  \\\ легко может выкинуть из неё сеть.
  \\\ В общем, есть то решение есть, да вот только найти его сеть не может.
  
  \\\ Хотя, как вы наверняка заметили, если дать в распоряжение сети
  \\\ три слоя по 30 нейронов, сеть может самостоятельно найти
  \\\ способ частично обрулить проблему нулевой точки.
  \\\ Хотя делать ей это сильно неудобно.
  \\\ Если же мы дадим сети дополнительный опорный вход,
  \\\ картинка перестаёт быть перекошенной на одну сторону.
  \\\ Но и более того сам процесс поиска решения становится
  \\\ гораздо более продуктивным - избавленная от необходимости
  \\\ тратить половину своих бесценных нейронов на создание константы
  \\\ сеть смогла в полную силу развернуться и повести себя
  \\\ так эффективно словно в ней на один слой
  \\\ и ещё несколько десятков нейронов больше.
  \\\ Подробностями можно полюбоваться на картинке.
  
  ......
  
  \\\ Интересно, что добавление одного входа с константой
  \\\ заметно улучшает работу сети даже в случаях,
  \\\ когда окрестности нулевого значения не попадают во входную задачу,
  \\\ которой мы обучаем сеть.
  \\\ Например ниже я предложил обычной сети,
  \\\ и сети с дополнительным входом одинаковую задачу
  \\\ и одинаково меняющуюся скорость обучения.
  \\\ Причём весь график был сдвинут по обоим осям на единицу,
  \\\ так что на вход сети поступали значения в диапазоне от 1 до 2.
  \\\ Результаты говорят сами за себя.
  
  ......
  
  \\\ Выводы
  
  \\\ Перцептрон Розенблатта можно научить только таким знаниям,
  \\\ которые в точке с нулевыми входами предполагают нулевой же выход.
  \\\ Если вы интересовались теоремой о сходимости,
  \\\ но не заметили что это из неё следует
  \\\ - значит, перечитайте её более внимательно.
  \\\ Ни за что не поверю, что Розенблатт или Мински могли ошибаться
  \\\ в доказательствах;
  
  \\\ Топология сети влияет на результат заметно больше, чем алгоритм обучения.
  \\\ Если топология делает обучение сети неудобным,
  \\\ скорость обучения падает в разы и даже в десятки раз,
  \\\ а может сделать его попросту невозможным;
  
  \\\ Нейронная сеть легко осваивает только те обобщения,
  \\\ которые легко и удобно сделать на базе её топологии.
  \\\ Все остальные, хоть и возможны в принципе,
  \\\ но или очень маловероятны, или недостижимы из начального состояния сети;
  
  \\\ Обобщение, которое осваивают нейронные сети,
  \\\ в общепринятом в наше время смысле понятие весьма условное.
  \\\ К нему следует относиться со здоровым скептицизмом, если не с иронией;
  
  \\\ То, что задача может быть в принципе решена с помощью нейронной сети,
  \\\ ещё совершенно не значит, что это решение может быть достигнуто
  \\\ из начального состояния сети.
  \\\ Более того связанность пространства решений должна рассматриваться
  \\\ как один из основных факторов при обучении нейронных сетей;
  
  \\\ Добавление на вход простого константного значения
  \\\ во очень многих случаях сильно улучшить качество работы сети
  \\\ для самых разных задач.
  
  \\\ UPD: Исправил в коде ошибку.
  \\\ Казалось бы критическую, в реализации обратного распостранения,
  \\\ но почему-то все результаты работы сети не изменились.
  \\\ Это меня удивляет, даже больше.
  
  Т.е. автор от обычного "bias нейроны" перешел к технологии "опорного нейрона",
  т.е. все того же "bias нейроны", но уже с изменяемым, причем настраиваемыми
  значениями связей, не одно какое-то "общее на всех", а индивидуальное
  для каждой связи.
  
  Вот так он поясняет это в комментариях:
  
  \\\ Однако в том, что касается идеи опорного входа вы не совсем правы.
  \\\ Добавление входа не идентично добавлению константы в функцию активации.
  \\\ Мало того, что это сильно проще, важнее,
  \\\ что это сильно улучшает качество сети.
  \\\ Если просто добавить константу в функцию активации,
  \\\ то придётся ещё как минимум один слой в сеть добавить,
  \\\ чтобы достичь похожих результатов.
  
  \\\ И центрирование выборки тоже всего лишь слабое подобие.
  \\\ Я для иллюстрации взял задачу, которая строго отцентрована.
  \\\ Значения сдвинуты на 0.5 так чтобы точка (0,0) оказывалась
  \\\ строго в центре экрана, кроме того значение функции в центре экрана,
  \\\ в точке (0,0) равно 0, а площадь над кривой и под кривой одинаковы.
  \\\ Таким образом вероятность появления обучающих примеров на +1 и -1 одинаковы.
  \\\ В общем отцентровал всё идеально.
  \\\ Получилась вот такая задачка и её решение сетью с дополнительным входом:
  
  ......
  
  \\\ Вот так выглядит решение задачи сетью с дополнительным входом,
  \\\ когда площади над и под кривой равны,
  \\\ но координаты не сдвинуты, область входных значений (0,1):
  
  ......
  
  \\\ А теперь отключим дополнительный вход,
  \\\ и посмотрим как себя поведёт обычная сеть.
  \\\ На нецентрованных данных предсказуемо картинка заваливается
  \\\ в направлении особой точки, то есть влево:
  
  \\\ А вот если данные отцентровать получается самое интересное:
  
  \\\ Сеть попадает в тупик и не может решить задачу.
  \\\ Специально 5 раз прогнал.
  
  \\\ Возможно обратное распространение это самый старый
  \\\ и примитивный алгоритм из тех, что существуют в ИНС,
  \\\ но моё простое и почти незаметное изменение позволяет ему
  \\\ решить нецентрированные задачи лучше,
  \\\ чем сеть без этого дополнения справляется с любыми,
  \\\ хоть центрированными, хоть нет.
  
  В комментариях к следующей своей статье он
  пытается продолжить
  обоснование применения "опорных нейронов":
  
  .....
  
  \\\ kenoma
  \\\ 28 апр 2014 в 08:46
  \\\ Спасибо, статья интересная. Только один вопрос,
  \\\ фраза <совсем обыкновенная нейронная сеть попросту не справляется с этой,
  \\\ казалось бы, несложной задачкой.> относится к нейронной сети
  \\\ со слоями с дополнительным единичным входом или нет?
  \\\ 0
  
  \\\ kraidiky
  \\\ 28 апр 2014 в 08:54
  \\\ Без дополнительного входа.
  \\\ Тоесть взять сеть, грубо говоря, из википедии,
  \\\ и дать ей такую задачу она не сможет с ней справиться
  \\\ вне зависимости от количества нейронов и слоёв.
  \\\ Лично для меня это было интересным и не очевидным открытием,
  \\\ показывающим, что симметризация задачи
  \\\ может породить больше проблем, чем решить.
  \\\ 0
  
  \\\ klakhman
  \\\ 28 апр 2014 в 08:57
  \\\ А у вас bias только для входного слоя?
  \\\ Если да, то попробуйте его во всех слоях добавить.
  \\\ +3
  
  \\\ kraidiky
  \\\ 28 апр 2014 в 09:16
  \\\ Ну просто через эту идею проглядывает более общая задача,
  \\\ я её буду решать позже, сейчас меня в первую очередь интересовало
  \\\ как сделать, чтобы результат дальнейших улучшений сети был хорошо виден.
  \\\ 0
  
  \\\ kenoma
  \\\ 28 апр 2014 в 09:04
  \\\ Согласен, но дело в том, что у дополнительного входа есть
  \\\ вполне себе сакраментальное назначение,
  \\\ что без него, практически, обычные нейронные сети нет смысла использовать :)
  \\\ 0
  
  \\\ kraidiky
  \\\ 28 апр 2014 в 13:19
  \\\ Кстати, а как вы для себя формулируете это назначение?
  \\\ Интересно сравнить.
  \\\ Значение как я его понимаю я описал в своей прошлой статье,
  \\\ там, где описывается понятие <Удобство представления>.
  \\\ 0
  
  \\\ kenoma
  \\\ 28 апр 2014 в 13:50
  \\\ Честно, бегло просмотрел статью, на которую вы ссылаетесь,
  \\\ я не нашел то место, о котором вы говорите.
  \\\ На мой взгляд, единичный bias на входе к каждому слою сети
  \\\ позволяет смещать нули функций активации,
  \\\ что в свою очередь позволяет избежать чрезмерно больших
  \\\ и\или чрезмерно малых значений параметров сети
  \\\ при обучении и использовании, что, уже в свою очередь,
  \\\ позволяет избежать ряд проблем вычислительного плана.
  \\\ +1
  
  \\\ kraidiky
  \\\ 28 апр 2014 в 18:10
  \\\ Существует более общая формулировка задачи,
  \\\ позволяющая добиться того же самого.
  \\\ Функция активации может содержать в себе параметры,
  \\\ которые сами по себе являются обучаемыми.
  \\\ Плюс единичный вход - частный случай.
  \\\ Бывают и более интересные.
  
  \\\ Моя трактовка такая.
  \\\ При отсутствии константы решение некоторых частных подзадач,
  \\\ встающих перед сетью, может оказаться чрезмерно сложным,
  \\\ для этого требуется очень специальная комбинация весов нейронов,
  \\\ на которую сети трудно,
  \\\ а в некоторых случаях невозможно, наткнуться самостоятельно.
  \\\ В данном случае это область похожих ненулевых ответов
  \\\ в окрестности нулевой точки.
  \\\ Но характер <неудобной> задачи,
  \\\ и способ с помощью которого задачу можно сделать удобной для сети,
  \\\ могут различаться.
  
  ......
  
  Обратите внимание: публикация 2014 года, когда об "опорных нейронах"
  и речи не было ни в одном учебнике. Да и спустя 6 лет тоже.
  И автора похоже никто не поддержал, да и просто не понял.
  А вот где-то в 2021 году что-то произошло, и "опорные нейроны",
  т.е настраиваемые "биасы" уже не новость, а применяемая техника:
  
  "Как работать с bias в нейросети"
  "Ответы ChatGPT на вопросы про IT"
    title="Ответы ChatGPT на вопросы про IT">https://qaa-engineer.ru/kak-rabotat-s-bias-v-nejroseti/
  05.07.2023 от ChatGPT
  
  \\\ В мире искусственного интеллекта нейронные сети являются
  \\\ одной из самых мощных и распространенных моделей машинного обучения.
  \\\ Их главная цель - имитация работы человеческого мозга и решение сложных задач,
  \\\ таких как распознавание образов, классификация данных или прогнозирование.
  \\\ Но чтобы нейронная сеть могла эффективно выполнять свои задачи,
  \\\ важно учитывать и управлять таким параметром, как bias или смещение.
  
  \\\ Bias - это дополнительный параметр в нейронной сети,
  \\\ который связан с каждым нейроном и определяет его "склонность" к активации.
  \\\ Он вносит коррекцию к сумме взвешенных входных данных нейрона
  \\\ и стабилизирует работу нейронной сети.
  \\\ Благодаря ему нейронная сеть способна лучше представлять данные
  \\\ и принимать более точные решения.
  
  \\\ Теперь рассмотрим, как работать с bias в нейросети.
  
  \\\ 1. Инициализация bias
  
  \\\ Перед началом обучения нейронной сети,
  \\\ bias должен быть правильно инициализирован.
  \\\ Оптимальное значение bias зависит от множества факторов,
  \\\ включая структуру сети и природу данных.
  \\\ Традиционно bias инициализируют небольшими случайными значениями,
  \\\ чтобы избежать недостижимых или слишком высоких амплитуд.
  //// Вот первое отличие от "букварей" - где значения биасов
  //// назначались единицей, причем именно назначались а не ИНИЦИАЛИЗИРОВАЛИСЬ.
  //// Т.е. уже по этому параметру биас-нейроны стали ближе к обычным
  //// рабочим нейронам - те тоже рекомендуется инициализировать
  //// "небольшими случайными значениями".
  
  \\\ 2. Обучение с учетом bias
  
  \\\ При обучении нейронной сети с помощью
  \\\ алгоритма обратного распространения ошибки bias также должен быть учтен.
  \\\ В процессе обратного распространения ошибки веса и bias обновляются
  //// Вот оно! "Bias обновляются" т.е. он теперь не отличим от "опорного нейрона".
  //// И когда это произошло надо где-то спросить.
  \\\ с целью минимизации функции потерь.
  \\\ При этом bias рассматривается как дополнительный параметр,
  \\\ который необходимо оптимизировать.
  \\\ Веса и bias обновляются в соответствии с выбранным алгоритмом оптимизации,
  //// А вот это уже новое по отношению к "опорному нейрону":
  //// для обновления "bias-нейрона" может использоваться своя "функция потерь"
  //// и "алгоритм оптимизации".
  \\\ таким как градиентный спуск или стохастический градиентный спуск.
  
  \\\ 3. Влияние bias на активацию нейрона
  
  \\\ Bias определяет, насколько легко нейрон активируется
  \\\ на определенный входной сигнал.
  \\\ Он позволяет сместить активационную функцию нейрона вверх или вниз
  \\\ и контролировать, какие значения сигналов будут активировать нейрон.
  \\\ Если bias имеет положительное значение,
  \\\ то сигналы больше нейрона будут активировать его.
  \\\ В то время, если bias имеет отрицательное значение,
  \\\ только сигналы близкие к нулю будут активировать нейрон.
  
  \\\ 4. Использование bias для улучшения точности
  
  \\\ Bias позволяет нейронной сети лучше представлять данные
  \\\ и выдавать более точные результаты.
  \\\ Он может помочь сети моделировать сложные выборки,
  \\\ которые не могут быть линейно разделены.
  \\\ Благодаря наличию bias в нейронной сети
  \\\ увеличивается возможность разделения данных в более сложных пространствах.
  
  \\\ 5. Регуляризация bias
  
  \\\ Bias также может быть регуляризирован для предотвращения переобучения.
  \\\ Переобучение - это явление, когда нейронная сеть слишком
  
  \\\ хорошо подстраивается под обучающие данные и плохо обобщает
  \\\ полученные знания на новые данные.
  \\\ Регуляризация bias позволяет найти баланс между
  \\\ точностью предсказаний на обучающих данных и обобщающей способностью сети.
  
  \\\ Выводы
  
  \\\ Bias является важным параметром в нейронной сети,
  \\\ который влияет на ее активность и способность предсказания.
  \\\ Правильная настройка bias может значительно улучшить
  \\\ эффективность работы сети и качество ее решений.
  \\\ Однако, грамотное использование bias требует
  \\\ тщательного анализа и оптимизации,
  \\\ учитывая специфику конкретной задачи и данных.
  
  \\\ Работа с bias в нейронных сетях имеет глубокие
  \\\ исследовательские и практические аспекты.
  \\\ Понимание этого параметра и его влияния на работу
  \\\ и результаты нейронных сетей является важным шагом
  \\\ в владении искусством программирования и машинного обучения.
  
  09.08.2023 11:10
  
  Т.е. ChatGPT, обученный на данных 2021 года уже совсем по другому
  описывает работу с биас-нейронам, чем в "букварях" того же периода.
  
  Попробуем воспользоваться советом ChatGPT и попытаемся поглубже понять
  ситуацию с этими полу-шаманскими нейронами.
  
  Во-первых, попробуем выстроить историческую линейку их применения.
  
  Сначала были простые биас-нейроны с фиксированным значением выхода
  (обычно равным 1). Причем ручное изменение этого значения,
  обычно либо никак не сказывалось на результате, либо было не особо заметно.
  Важен был сам факт наличия этого биас-нейрона,
  обеспечивающий решение "проблемы особой точки"
  или по другому "сдвиг функции активации".
  
  Затем вместо простых биас-нейронов стали использоваться "опорные нейроны",
  отличающиеся от обычных, что их вход всегда единица,
  а вот выход уже настраивается по тем же правилам, что и обычные нейроны.
  И это обеспечивало при обучении нейронок получение приемлемого результата
  в тех случаях когда без них задача вообще не решалась.
  Причина такого предполагается в том, что в дополнение к решению
  "проблемы особой точки" еще и решается проблема "симметричных задач",
  т.е. чем-то "неудобных задач" для нейронки.
  Не вдаваясь в смысл этих формулировок, просто фиксируем гипотезы.
  
  Следующим шагом, исходя из информации ChatGPT, становится настройка
  биас-нейронов - в другой формулировке "опорных нейронов" -
  уже немножко по другим отличным от обычных нейронов алгритмам
  и критериям ошибки.
  Более того к этим биас-нейронам начинают уже применять "регуляризацию",
  т.е. исключение из уже обученной сети, тем самым еще больше приближая
  их обычным "рабочим" нейронам, с обычной "мантрой" про "переобучение".
  Можно сказать, что это уже "биас-нейроны второго рода/поколения".
  
  И, наконец, точнее последнее из известного пути развития биас-нейронов,
  это то с чего начинался этот фрагмент - концепция замены биас-нейронов
  "implicit knowledge блоками", отличающихся тем,
  что в процессе обучения биас-нейрон представляет собой уже не отдельный
  нейрон, а целой отдельной нейронкой со своей спецификой обучения.
  А на этапе "инференса", т.е. в уже после обучения в обычной работе,
  эта нейронка работает просто как "хитро обученный" биас-нейрон.
  Причем такое построение, вроде как обеспечивает и лучшую скорость обучения
  и качество работы на этапе "инференса".
  
  Как по мне, то линия развития биас-нейронов прослеживается достаточно четкая.
  Полностью соответствующую линиям развития технических систем в ТРИЗ,
  включающим динамизацию, специализацию, автоматическую настройку и т.д.
  отдельных узлов.
  
  Во-вторых, попробуем прикинуть как работают "биас-нейроны"
  в рамках традиционных представлений.
  
  Итак, первоначально биас-нейроны рассматривались просто как средство
  для "сдвига функции активации" так, чтобы она попадала
  в более "выигрышную" зону за счет того, что постоянная константа
  от "биас-нейрона" позволяла уже рабочему нейрону "исследовать"
  более обширную область возможных значений "функции активации".
  Это моя формулировка, на полную корректность не претендую.
  Но решение уравнения y=f(x)+b является более общим, чем просто y=f(x).
  Соответственно и возможностей найти подходящее решение оказывается больше
  пусть не во всех, но во многих случаях. Что собственно и подтверждает
  практически автоматическое использование "биас-нейронов" во многих библиотеках.
  
  Следующий шаг - это "опорные нейроны" которые, имея на входе постоянную единицу,
  на выходе имеют что-то другое, полученное в процессе обучения,
  по общим правилам обучения нейросети.
  При этом нейросеть приобретает способность решать задачи,
  которые, зачастую, "не берутся" ее ни при увеличении числа просто нейронов,
  ни даже "глубины" самой нейронки,
  т.е. существенного изменения структуры нейронки.
  
  А вот это уже очень интересно.
  Т.е. такой "полузафиксированный" нейрон,
  во многих случаях оказывается эффективнее даже нескольких "обычных" нейронов.
  И опять тут вспоминается уравнение y=f(x)+b, но уже по другой причине.
  Дело в том, что эти "опорные нейроны" не просто сами обучаются,
  а в процессе своего обучения, т.е. при изменении их значения,
  "помогают" обучаться уже обычным "рабочим" нейронам.
  Условно говоря, они выполняют функции "строительных лесов".
  
  Или может быть лучше это пояснить в привычных терминах "ландшафта".
  Обычной "страшилками" при обучении нейронок считаются "локальные минимумы"
  и "седловые точки", для выхода из которых используются
  всякие хитрые/сложные/случайные алгоритмы обучения.
  Теоретически считается, что если увеличивать число рабочих нейронов в слое,
  или "глубину" нейронки, т.е. количество скрытых слоев,
  то "ландшафт" задачи, за счет большей размерности области решения,
  оказывается более удобным для нахождения этого искомого решения.
  "Но это не точно".
  
  Практика использования "биас-нейронов" даже без их обучения/настройки,
  показывает, что один такой "фиксированный" нейрон в большинстве
  случаев дает при обучении лучший результат, чем простое увеличение размерности
  за счет обычных нейронов. Т.е. фиксированный "биас-нейрон", и тем более
  "опорный нейрон", т.е. обучаемый "биас-нейрон", тоже изменяют
  пространство искомого решения и, соответственно/дополнительно,
  "ландшафт задачи". Причем, при изменении значения/весов "опорного нейрона",
  этот самый "ландшафт" тоже измяется. Может быть, лучше сказать не так,
  изменяется не столько сам "ландшафт", сколько его "проекция"/"ракурс",
  который может оказаться более удобным "для прохождения лабиринта".
  Т.е. при введении "опорного нейрона" точно также увеличивается размерность
  пространство решения, но, наверно, иначе, чем при добавлении обычного нейрона.
  Он фактически становится, пусть и очень ограниченным,
  но тем не менее, явно присутствующим "implicit knowledge блоком"
  именно для всего слоя, в котором добавлен этот самый "опорный нейрон".
  Т.е. некая "сумма знаний" о работе данного слоя при поиске решения.
  И это может выглядеть, как определенные дополнительные "поправки" при обучении,
  в чем-то похожие на "использование моментов", но другой природы.
  Смысл в том, что "опорный нейрон" не только изменяет "структуру системы",
  расширяет "пространство поиска", но и способствует нахождению
  более "оптимального маршрута обучения".
  
  И в таком ракурсе становится очевидным, что следующим шагом
  за "опорным нейроном", обучающемуся так же как и рабочий нейрон,
  будет "биас-нейрон второго поколения", обучающийся уже по собственным
  алгоритмам и критериям.
  И, соответственно, подвергающийся всем устоявшимся в нейронауке практикам,
  включая регуляризацию.
  
  Ну и вслед за этим, если уж обученние "биас-нейронов" оказалось эффективным,
  как в процессе обучения, так и при "инференсе" (работе), то естественным шагом,
  будет переход к полноценным "implicit knowledge блокам" в виде нейронок,
  о чем и было сообщение. Т.е. в процессе обучения это полноценная нейронка
  с отсутствующим входом, а в процессе "инференса" - "хитровыученный биас".
  Насчет удачности названия ничего пока сказать нельзя,
  но понятно что потенциал воздействия такого блока на процесс
  обучения основной нейронки может быть гораздо более гибким и сильным,
  чем обычный "опорный нейрон" или даже "биас-нейрон второго рода".
  Такой блок-нейронка будет "настраиваться" и, одновременно,
  корректировать процесс обучения уже не по отдельным связям,
  а "комплексно", каким-то образом "согласуя" изменение значений
  смещения для всего связанного с ним слоя рабочих нейронов.
  
  11.08.2023 12:33
  
  Понятно, что непонятно как это работает "в кожухе", но в "в принципе"
  задумка достаточно ясная и перспективная. Пытаться как-то согласованными
  изменениями связей такого "implicit knowledge блока",
  если и не изменить структуру "ландшафта задачи",
  то попытаться в нем найти "удобный проход".
  Тут конечно хорошо бы иметь какие-то экспериментальные данные
  или наблюдения за динамикой изменения связей такого блока в процессе обучения,
  но вряд ли в обозримом будущем что-то такое будет опубликовано.
  
  В-третьих, давайте попробуем уже просто по-фантазировать,
  что представляет собой такой "implicit knowledge блок"
  уже не с формальной, или практической, а, так сказать, "идеологической"
  точки зрения. И есть ли в таком "идеологическом" представлении,
  увязка с исторической линией развития "биас-нейронов".
  
  27.08.2023 11:10
  
  Больше двух недель думал как развить/раскрыть этот абзац,
  но ничего толкового пока не получается. "Чего-то в супе не хватает".
  С одной стороны такой "хитровыученная" система биас-нейронов,
  должна как-то характеризовать всю ИИ-систему,
  впрочем, как и история обучения этих биас-нейронов.
  С другой стороны совершенно непонятно как это можно сделать
  ни в традиционной "статистическо-вероятностной" парадигме объяснения
  работы нейронок, ни в гипотетической "фрактальной" парадигме.
  Есть какой-то намек в "ландшафтной" парадигме,
  в том смысле, что биас-нейрон не столько изменяет сам "ландшафт",
  сколько "проекцию ландшафта", делая его более "удобным для прохождения",
  но как-то не получается его даже толком сформулировать,
  а не только обосновать/развить.
  
  В общем, "кувшин моих мыслей показал дно",
  и, наверно, пока стоит эту "непонятку" отложить на время.
  Рано или поздно она снова всплывет, и из состояния "покамест существительное",
  станет "именем прилагательным". Так что, пусть пока полежит в "чулане".
  
  
  ========
  
  22.12.2023 19:59
  
  Нейронки, как сеть эвристик.
  В оглавление.
  
  Наконец-то удалось выполнить давно задуманное/запланированое
  - проработать достаточно объемный цикл статей о месаоптимизаторах:
  
  "Риски Выученной Оптимизации - 1. Вступление".
  Автор: Tapatakt
  https://habr.com/ru/articles/739524/
  5 июн 2023 в 15:33
  
  "Риски Выученной Оптимизации - 2. Условия меса-оптимизации".
  Автор: Tapatakt
  https://habr.com/ru/articles/739528/
  7 июн 2023 в 17:58
  
  "Риски Выученной Оптимизации - 3. Задача Внутреннего Согласования".
  Автор: Tapatakt
  https://habr.com/ru/articles/739534/
  8 июн 2023 в 14:35
  
  "Риски Выученной Оптимизации - 4. Обманчивая Согласованность".
  Автор: Tapatakt
  https://habr.com/ru/articles/739556/
  9 июн в 21:15
  
  "Риски Выученной Оптимизации - 5. Заключение и связанные работы".
  Автор: Tapatakt
  https://habr.com/ru/articles/739558/
  11 июн 2023 в 15:31
  
  Автор оригинала:
  Evan Hubinger, Chris van Merwijk, Vladimir Mikulik, Joar Skalse, Scott Garrabrant
  https://www.alignmentforum.org/s/r9tYkB2a8Fp4DN8yB/p/4XPa3xa44jAWiCkmy
  
  Если кратко охарактеризовать этот весьма академически обстоятельный материал,
  то в принципе в нем делается попытка "найти управу на своенравную машину".
  Точнее что делать, если внутренние цели ИИ-системы
  могут/будут расходиться с целям, которые изначально ставились при обучении.
  С этой целью вводится понятие "месаоптимизаторы",
  приставка "меса" означает "под-" -
  т.е. механизм внутренней оптимизации в отличии от привычной
  и широко используемой "метаоптимзации"
  приставка "мета" означает "над-" -
  т.е. собственно процесс обучения ИИ-системы.
  
  В общем, авторы достаточно обоснованно предполагают,
  что в процессе "машинного обучения" вместо и вместе
  с оптимизацией нейросети к какой-то "базовой цели"
  - метаоптимизации -
  могут возникать внутренние процессы "субоптимизации" к каким-то "внутренним целям"
  - "месаоптимизация".
  И вся работа посвящена возможному конфликту
  этих "базовых" и "внутренних" целей
  и способам разрешения этих конфликтов,
  когда ситуация выйдет из области "спекуляций" в практическую плоскость.
  
  В общем, это тема попыток продумать систему контроля "сильного ИИ",
  но пока все это пока очень умозрительно,
  хотя оснований для такой работы уже достаточно много, см., например:
  
  "Что ты такое?!
  Фичи нейросетей, которые удивили даже их создателей".
  Автор: Александр Цуриков
  https://skillbox.ru/media/code/chto-ty-takoe-fichi-neyrosetey-kotorye-udivili-dazhe-ikh-sozdateley/
  31 авг 2022
  
  Кому интересно, тот может почитать самостоятельно,
  хотя каких-то конкретных рекомендаций там очень сложно углядеть,
  все-таки работа большей частью чисто "академическая".
  
  А меня в этой работе заинтересовала сама концепция "месаоптимизаторов",
  и было интересно найти какие-то конкретные подробности
  работы этих и подобных механизмов.
  
  Я даже пытался с Bing обсудить эту тему,
  но "конструктивного взаимопонимая" не нашел:
  "Диалоги о месаоптимизаторах нейронок".
  
  В общем, тема "месаоптимизаторов" "зависла" почти на полгода,
  и только после анализа материала об использовании ИИ-систем
  для "научных открытий" с помощью генерации эвристических алгоритмов, см.
  "Программируя, можно/нужно изобретать эвристики."
  стало понятным под каким "углом зрения" стоит прорабатывать этот цикл материалов.
  
  И вот тогда и удалось выловить новый и, на мой взгляд, весьма перспективный
  для дальнейшего использования образ для обучаемой и обученной нейронки
  - "сеть эвристик".
  
  Собственно, такое длинное введение/переход от "месаоптимизаторов" к "эвристикам"
  нужно было, чтобы показать, что это не такой простой "скачок мысли",
  как это может показаться сначала, как бы не естественным это не выглядело "постфактум".
  И тем более непонятно, как это может быть связано главной темой этого модуля
  - попыткой дать представление свойствам нейросети как фрактала/голограммы.
  
  Вот это я попытаюсь как-то начать формулировать в этом фрагменте.
  Но боюсь в одном фрагменте, все изложить не удастся,
  и что-то еще надо продумать.
  
  Общая схема представления нейронки, на данный момент, представляется такой:
  
  Способ описания поведения нейронки
  - "сеть эвристик".
  
  Способ описания согласования отдельных эвристик в "сети эвристик"
  - "функциональные фракталы". Подробнее см.
  "И снова Анискин", то бишь, фракталы, теперь функциональные."
  
  Способ формирования "функциональных фракталов" - "виртуальная голография".
  (Это описание/работа еще пока только в очень отдаленных планах.)
  
  Итак, попробую раскрыть, почему представление нейронки как "сети эвристик,
  лучше чем существующее представление
  в виде "вероятностно-статистического" "черного ящика".
  
  Во-первых, это позволяет отказаться от существующей концепции объяснения
  поведения нейронок как результатом какого-то "обобщения" обучаемых данных.
  Эта метафора "обобщения" часто не соответствует реальному поведению нейронок
  не только в области экстраполирования, но и даже интерполирования данных,
  не входивших в обучающий датасет.
  Тут и "adversarial example" и "пресловутые галлюцинации"
  и, наверно, много чего еще, это не суть важно.
  А важно то, что "человеческое обобщение" по смыслу,
  принципиально отличается от "обобщения",
  полученного в результате "машинного обучения".
  
  Человеческое "обобщение" подразумевает какое-то наличие общего признака,
  а вот "машинное обобщение" этого НЕ ТРЕБУЕТ.
  Обычно ошибки "машинное обобщение", списывают на все что угодно,
  на вероятностно-статистическую природу нейронок,
  несбалансированность/зашумленность обучающих данных,
  "пресловутое переобучение" и не менее "пресловутые галлюцинации",
  ну и т.д. Список можете продолжить сами.
  
  Т.е. "обобщение" явно не самый удачный термин, вводящий в заблуждение,
  и, как следствие, направляет усилия по пониманию и улучшению "машинного обучения",
  наверно, не по самой "прямой тропинке".
  
  А вот термин "эвристика", на мой взгляд, лучше подходит к описанию
  того результата, который получается и в процессе, и в результате
  достаточно сложного процесса машинного обучения,
  особенно если оно сопровождается различными эвристически найденными приемами
  улучшения этого самого машинного обучения,
  включая стохастический градиентный спуск, "алгоритм отжига",
  и различные нормализации/рандомизации, см. например:
  "Dropout и Batch normalization простыми словами".
  
  Во-вторых, смысл "эвристики", что она основана не на "обобщении",
  а на нахождении достаточно эффективного сочетания параметров/взаимосвязей,
  которые статистически более предпочтительны.
  Т.е. "статистический" характер поведения остается,
  а вот представление нейронки как поверхности,
  разделяющей многомерные пространства можно "задвинуть подальше в угол",
  хотя с них зачастую начинаются многие курсы по "дата сайенс".
  
  Возможно, что и концепция "ландшафта решения", во многом связанного
  с концепцией "разделяющих поверхностей" тоже надо "пересмотреть".
  А это тянет за собой и любимые "отмазки"
  в виде "локальных минимумов" и "седловых точек"
  и, наверно, чего-то еще, что сейчас воспринимается как "очевидное и понятное".
  
  В-третьих, еще одна особенность эвристик, о которой часто забывают,
  в том, что любая, даже самая эффективная эвристика,
  это не точный/абсолютный алгоритм,
  как обычно воспринимается/проектируется любая программа.
  А алгоритм "с дырочкой", которая рано или поздно себя проявит.
  Как говорили на нашем торпедостроительном заводе
  "Вода дырочку найдет".
  
  И "сеть эвристик" даже при самой тщательном обучении
  в реальности это просто "решето", но с такими маленькими дырочками,
  что им можно "носить воду".
  Но "дырочки" при этом никуда не исчезают,
  и в такой концепции очень многие непонятки нейронок становятся
  куда более понятны и ожидаемы, см. например:
  "Сенсация от Гугла, о которой стараются не вспоминать."
  
  И даже пресловутое "переобучение" уже можно как-то по другому
  и трактовать и искать методы его преодоления,
  если считать, что при машинном обучении,
  происходит не формирование "разделяющих поверхностей",
  а последовательное формирование, взаимодействие и конкуренция эвристик.
  
  И наиболее перспективным в этом направлении
  представляется более осмысленный подход
  к последовательности обучения.
  Может быть, случайный набор обучающих данных на первых этапах обучения
  не самый лучший выбор?
  
  
  ========
  
  29.12.2023 19:30
  
  "Диффузия" применительно к языковым моделям.
  В оглавление.
  
  Уже достаточно внимательно отслеживаю информацию на хабре
  на предмет появления лозунга "все что Вам нужно - это диффузия"
  применительно не только в области генерации изображений, звука,
  и других мультимодальных приложений,
  но и отношении к языковым моделям.
  
  Интерес этот вызван вот какими соображениями.
  
  Сейчас в области языковых моделей использование трансформеров
  является весьма обоснованным ведущим трендом.
  Но представляется, что для каких-то специализированных задач
  может быть более предпочтительными другие структуры.
  Точно также как универсальные компьютеры
  не вытеснили полностью специализированные контроллеры/устройства в ИТ-технологиях,
  так и другие специализированные структуры языковых моделей,
  наверняка, найдут свое применение.
  
  Какие это могут быть структуры можно пока только предполагать,
  но представляется, что лозунг "Все что Вам нужно - это внимание",
  как основная "фишка" трансформеров,
  на мой взгляд, далеко не "истина в последней инстанции".
  Будут еще и другие лозунги/структуры.
  
  Кроме того очень вероятно могут быть предложены
  и другие техники обучения языковых моделей.
  
  Представляется, что преимущество трансформеров при реализации "внимания"
  на этапе "инференса", на этапе обучения может оборачиваться их недостатком.
  Но это не точно.
  Просто в технике редко бывает, когда одно решение обеспечивает
  повышения и качества и производительности сразу в двух разных режимах.
  Но, повторяю, могу и ошибаться.
  Сравнивать то особо нечего.
  
  Но даже без этого замечания, другие технологии обучения нейронок
  представляют интерес даже с точки зрения лучшего понимания,
  что они из себя представляют.
  
  И в этом отношении наиболее перспективным для изучения/анализа
  мне представляется "метод диффузии",
  как метод двухэтапного обучения противовес существующему обычному "одноэтапному".
  И доказавшего свою эффективность в области генерации изображений и др.
  Подробнее о "методе диффузии" см.:
   "Введение в метод диффузии для "чайников".
   "Еще о реализации диффузии для "чайников".
  
  Так вот, мне представляется, что в области обучения языковых моделей
  такой подход тоже может оказаться чрезвычайно эффективным.
  особенно, если при диффузии идти не к "белому шуму", а к "окрашенному",
  т.е. сохраняющему какие-то ключевые точки обрабатываемого текста.
  Есть предположение, что обученные по такой "окрашенной диффузии"
  языковые модели окажутся более устойчивы
  по сравнению с теми в основе которых лежит только "механизм внимания".
  
  Эта тема обсуждалась с Bing в контексте методов обучения текстовых моделей
  
  13.11.2023 11:31
  
  .....
  
  \\\ Bing 18:14
  
  \\\ Я думаю, что диффузия может быть эффективной для генерации текста,
  \\\ так как она может создавать разнообразные и качественные данные,
  \\\ а также может учитывать контекст и смысл данных.
  \\\ Я также думаю, что диффузия может быть устойчивой
  \\\ по сравнению с трансформерами,
  \\\ так как она может избегать переобучения или зацикливания,
  \\\ а также может быть более робастной к шуму или атакам.
  \\\ Я думаю, что диффузия может быть особенно полезной
  \\\ для длинных и сложных текстов,
  \\\ которые трудно обрабатывать трансформерами.
  
  \\\ Я знаю, что есть несколько работ,
  \\\ которые используют диффузию для обучения языковых моделей.
  \\\ Например, в статье
  \\\ Text Generation with Diffusion Language Models:
  \\\ A Pre-training Approach with Continuous Paragraph Denoise
  \\\ https://arxiv.org/pdf/2212.11685
  \\\ авторы представляют GENIE, большую предобученную диффузионную языковую модель,
  \\\ которая состоит из кодировщика и диффузионного декодера,
  \\\ которые могут генерировать текст,
  \\\ постепенно преобразуя случайную шумовую последовательность
  \\\ в согласованную текстовую последовательность.
  \\\ Для предобучения GENIE на большом языковом корпусе
  \\\ авторы разработали новый непрерывный параграфный денойзинг,
  \\\ который побуждает диффузионный декодер восстанавливать
  \\\ чистый текстовый параграф из испорченной версии,
  \\\ сохраняя семантическую и синтаксическую связность.
  \\\ Авторы оценивают GENIE на четырех задачах генерации текста,
  \\\ а именно XSUM, CNN/DAILYMAIL, GIGAWORD и COMMONGEN.
  \\\ Их экспериментальные результаты показывают,
  \\\ что GENIE достигает сопоставимой производительности
  \\\ с передовыми авторегрессивными моделями на этих задачах
  \\\ и генерирует более разнообразные текстовые образцы.
  
  К сожалению, перевода указанной статьи найти не удалось,
  а мое знание "замежной мовы" сильно ухудшилось за последние 40 лет,
  так что не могу утверждать, что понял ее совершенно правильно.
  Но у меня сложилось впечатление, что авторы просто попытались
  перенести "диффузионный метод" в новую для него область просто "один в один",
  без всякого учета того, что данном случае имеют дело с текстом.
  И что "белый шум", возможно, не лучший выбор именно для "понимания" текста.
  Предложенная ими схема достаточна универсальна
  для самых различных типов эмбеддингов.
  "Текстовой специфики" мне усмотреть не удалось.
  
  Но сам факт такого рода работ вполне себе обнадеживает,
  и для каких-то иных приложений даже такая схема вполне может найти применение.
  
  Но суть того, что хотелось бы увидеть,
  это подтверждение возможности и эффективности
  обучения языковых моделей с помощью диффузии чуть-чуть по иному.
  А именно:
  изменив последовательность обучения.
  Не просто случайно перебирая тексты из большого датасета.
  А начинать с тех, которые лучше для этого подходят.
  И превращая их не в "белый", а в "окрашенный" шум.
  
  Что имеется в виду - "лучше подходят"?
  А это связано с тем как сделать "окрашенный шум" в тексте.
  Есть тексты в которых есть списки ключевых слов, оглавления, списки литературы.
  Так вот диффузионное "размывание" такого текста производится таким образом,
  что эти "ключевые слова", отсылки к литературе, связь с оглавлением и т.д.
  "размывались" бы в последнюю очередь.
  
  Т.е. при "размытии" текста как бы проявляется его "скелет" и основные связи.
  А почему надо начинать обучение с таких текстов?
  А есть предположение,
  что обучение нейросети, в общем-то, далеко не случайный процесс,
  и многое зависит и от начальной инициализации параметров,
  и от того как происходит самый начальный этап обучения.
  
  Во всяком случае при обучении человека,
  то как происходит это начальное обучение чаще всего определяет
  способность человека учиться на многие-многие годы.
  Почему же нельзя предполагать, что что-то сходное не происходит
  и при глубоком обучении нейросетей?
  
  Что-то подобное можно увидеть, если, конечно, захотеть увидеть,
  например, в таком материале:
  "Еще пару бит информации от практиков самопального эмбеддинга."
  
  Но пока это направление исследований и тем более практических работ
  явно не "в тренде" и приходится ждать,
  ну и продолжать дальше "изобретать велосипеды".
  
  Но уже становится понятно, что анализируя тот же "метод диффузии"
  можно попытаться как-то по иному взглянуть
  на известные и возможные алгоритмы обучения нейросетей.
  
  "A graphical summary of the diffusion-based training of language models with Bing's logo".
  Создано с помощью искусственного интеллекта Bing на платформе DALL-E.
  
A graphical summary of the diffusion-based training of language models with Bing A graphical summary of the diffusion-based training of language models with Bing
A graphical summary of the diffusion-based training of language models with Bing A graphical summary of the diffusion-based training of language models with Bing
  
  
  ========
  
  31.12.2023 6:37
  
  Концепция композитной нейронки.
  В оглавление.
  
  Хочется сделать самому себе подарок "под новогоднюю елочку"
  в виде резюме вчерашней дискуссии с Bing,
  в которой наконец-то оформилась концепция композитной нейросетевой структуры,
  фактически нейронки следующего поколения.
  
  Суть этой концепции основана на
  использовании комплексного обучения нейронки
  методом многократного обратного распространения
  ошибок, подкреплений, поощрений, штрафов и наград,
  аккумулируемых в многомерных параметрах нейросети.
  Причем многомерность параметров "несимметричная".
  У параметра есть, так сказать одно привычное значение,
  так сказать, "видимая", "надводная", операционная часть.
  которая участвует в работе нейросети так как это обычно принято,
  И у параметров есть многокомпонентная, так сказать,
  "скрытая", "подводная", "аккумуляторная" часть,
  которая используется только на этапе обучения нейросети,
  для запоминания истории обучения, накопления подкреплений и наград,
  чтобы скорректировать действие алгоритма обучения
  "надводной" части параметра в желаемом направлении/диапазоне.
  
  Цель всей этой концепции в пределе уйти
  от одномерного/однокритериального "перелопачивая" гигабайтов текста/данных
  в обучения языковой модели,
  а может быть и более широкого класса нейросетей,
  на НЕБОЛЬШОМ корпусе обучающих примеров.
  Т.е. сделать упор на качество обучения, его гибкость и управляемость,
  а не на количество/размер/объем обучающего датасета.
  
  Формулировка, конечно, оставляет желать лучшего,
  но в качестве фактически первого варианта,
  наверно, все-таки лучше, чем стандартная формула изобретения.
  "Известно ... с целью ... вводится ... в виде ...".
  
  Дальше попробую раскрыть эту концепцию более понятно,
  при этом в ряде мест буду использовать прямые цитаты из постов Bing,
  так как очень часто его формулировки куда более понятны и конкретны,
  чем оные Вашего покорного слуги.
  
  Итак, начну, все-таки, с предистории вопроса.
  
  В очень скудных сообщениях от лидеров ИТ-индустрии упоминалось,
  что они как-то то ли используют, то ли собираются использовать
  систему "поощрений" при обучении языковых моделей,
  но как именно не детализировали.
  И в добавок сообщали, что это будет использоваться к проблеме "галлюцинаций".
  Больше такой информации в открытом доступе не было.
  Но в памяти "зацепка" осталась и мысль/вопрос,
  как при "обратном распространении ошибки"
  еще и вводить "поощрения" постоянно возникала.
  
  \\\ Bing 17:41
  
  \\\ Обратное распространение - это один из наиболее распространенных
  \\\ методов обучения нейронных сетей,
  \\\ в том числе языковых моделей.
  \\\ Этот метод заключается в том,
  \\\ что ошибка, полученная на выходе сети,
  \\\ распространяется обратно по слоям сети
  \\\ и используется для корректировки весов сети
  \\\ в направлении, уменьшающем ошибку.
  \\\ Обратное распространение требует,
  \\\ чтобы функция ошибки и функции активации нейронов были дифференцируемы,
  \\\ так как для вычисления градиентов ошибки по весам
  \\\ используется правило цепочки.
  \\\ Обратное распространение часто используется
  \\\ в сочетании с алгоритмами оптимизации,
  \\\ такими как стохастический градиентный спуск
  \\\ или адам, которые определяют,
  \\\ как изменять веса сети на основе градиентов.
  \\\ Обратное распространение позволяет сети
  \\\ настраиваться на заданный набор данных,
  \\\ но также может приводить к переобучению,
  \\\ если данные не достаточно разнообразны
  \\\ или сеть слишком сложна.
  \\\ Примеры языковых моделей,
  \\\ которые используют обратное распространение:
  \\\ GPT, BERT, XLNet
  
  В данном случае при возникновении концепции композитной нейросети
  как и в "классике марксизма" было
  "три источника, и три составных части"
  подсказки или, наоборот, постановки задачи.
  Первая была из метода диффузии
  - как можно использовать "диффузию" для языковых моделей,
  вторая это тот же метод "адам"
  в котором при градиентном спуске используются "моменты"
  т.е. определенные аналоги "массы"/"инерционности",
  ну а третий - чисто случайно "обрезал" в мысли
  от шаблонной фразы "обратное распространение ошибок" последнее слово,
  Попробовал "на вкус", заменил его противоположным...
  Ну а дальше дело техники - поиск по Инету,
  мысленная проработка вариантов реализации
  и "проговаривание" и "обкатка" в диалоге с Bing.
  Вот так, или почти так все это было.
  
  Если попытаться сформулировать суть предложенной концепции в "двух словах",
  то это предположение, что можно в процессе обучения
  использовать не только "обратное распространение ошибок",
  но и "обратное распространение поощрений",
  Так сказать, использовать при обучении "метод кнута и пряника",
  на основе отработанного, и доказавшего свою эффективность
  методе "обратного распространения".
  Только сделать его многовариантным, многокомпонентным,
  разносторонним и более гибким/управляемым.
  
  Наверно, чтобы лучше пояснить, как представляется возможным это сделать,
  попробую предложить самый первый, самый простой для понимания вариант,
  который, естественно, можно и нужно развивать и совершенствовать.
  
  Итак, начнем с того, что "метод кнута и пряника",
  точнее "обратного распространения"
  предполагается использовать одновременно/параллельно
  и для "ошибок" и для "поощрений",
  НО ПО-РАЗНОМУ.
  
  Что это значит?
  Обратное распространение ошибок можно оставить практически неизменным,
  как вполне доказавшую свою эффективность процедуру,
  но с небольшим изменением.
  Об этом чуть позже.
  
  А вот для обратного распространения "поощрения"
  можно использовать все зависимости,
  аналогичные используемым при вычислении "обратного распространения ошибки",
  но с "обратным знаком" или как-то еще, это не суть важно,
  и может зависеть от цели и реализации того или иного "пряника".
  НО, и это самое главное,
  оказывающих влияние не на сами обучаемые параметры,
  а на их ПОДВОДНУЮ/СКРЫТУЮ часть.
  Т.е. суть предложения в том чтобы вместо
  "одномерного" представления параметра,
  иметь двумерное представление,
  так сказать "надводную" и "подводную" часть.
  "Надводная" часть параметра отвечает за работу параметра в структуре нейросети
  так же как и раньше/обычно.
  А вот "подводная" часть,
  и в этом "изюминка" моего предложения, отвечает
  за СТАБИЛЬНОСТЬ Этого параметра.
  Т.е. в ней, "подводной" части параметра накапливаются "поощрения",
  которые влияют на "инерционность" "надводной" части параметра
  
  И тогда при "обратном распространении ошибки"
  параметр корректируется не только
  с учетом величины доли ошибки,
  относящейся к этому параметру,
  но и с учетом его "инерционности"
  в соответствии с накопленным значением в его "подводной"/"скрытой части".
  
  Это схема для самого простого для понимания случая
  "двухкомпонентного" композитного параметра нейросети.
  И естественно, самое простое решение в этом случае,
  это для каждого параметра иметь две ячейки памяти,
  
  Но ведь там, где на месте одной ячейки памяти, появляется две,
  сразу возникает вопрос, а почему, собственно, "две",
  а не больше?
  
  В том-то и дело, что может быть больше,
  ровно столько, сколько надо.
  "Подводная", "скрытая" часть может быть очень значительно более разнообразной,
  так как пока предполагается, что она используется только при обучении нейронки,
  а на этапе "инференса" она уже не нужна.
  Ну это так сейчас представляется, а вот как дальше "карта ляжет",
  точно не известно, может быть и на "инференсе" будет полезно
  как-то использовать какую-то проекцию "скрытой" части параметра.
  Но сам вопрос ЗНАМЕНУЕТ победу над психологической инерцией
  представления параметра нейросети как одномерной величины.
  Это очень важный психологически "Рубикон".
  
  А будет параметр нейросети только двухкомпонентным или многокомпонентным,
  покажет время, если идея будет иметь продолжение.
  
  Теперь как вычисляется значения для второй,
  "подводной", "скрытой" части параметра.
  Представляется, что здесь могут использоваться
  самая простая зависимость "логистическая кривая"
  или вообще "линейная зависимость",
  хотя наверно все-таки ReLU,
  так как смысл ее "накоплении стабильности/консервативности".
  
  В первом приближении представляется,
  что когда "обратное распространение ошибки"
  доходит до этого параметра с целью изменить этот параметр,
  то накопленный "запас стабильности"
  Как-бы сильно демпфирует/уменьшает это изменение,
  за счет расходования этого "запаса стабильности",
  т.е. "обратное распространение ошибки"
  в меньшей степени изменяет "видимую", "надводную" составляющую параметра,
  но при этом в любом случае расходует
  "запас стабильности".
  
  Если "запаса стабильности" у параметра нет, или очень малый,
  То изменение параметра идет обычным образом.
  А вот при "обратном распространении поощрении"
  "запас стабильности" только пополняется,
  Правда пока не знаю, должно ли это быть равномерное поощрение
  - "всем сестрам по серьгам",
  или какое-то более избирательное.
  Понятно, что это все вычислительно затратно,
  но давайте пока на это не обращать внимание,
  Ведь при таком подходе фактически обучаются
  сразу ДВЕ связанные между собой модели.
  
  Причем вторая модель, фактически служит для повышения эффективности обучения
  первой, основной нейросети, и можно предполагать,
  что суммарные затраты на такое "кОмплексное" обучение,
  будут сопоставимы, а может быть и существенно ниже,
  чем существующее "перелопачивание терабайтов" миллион раз подряд.
  
  Ориентиром в данном случае может служить обучение человека,
  когда для усвоения материала достаточно
  пары-тройки раз перечитывания одного текста.
  Понятно, что это пока недостижимая цель,
  но ведь лучше ориентироваться на такое,
  а не на что-то противоположное.
  И, самое главное, есть возможность учить модель
  более точно соответствующей конечной задаче.
  
  \\\ Bing 19:00
  
  \\\ Вы сказали, что вы пока не знаете,
  \\\ должно ли это быть равномерное поощрение или более избирательное.
  \\\ Я думаю, что это зависит от того,
  \\\ какие цели вы ставите перед моделью
  \\\ и какие критерии вы используете для оценки ее работы. blush
  
  \\\ Например, если вы хотите, чтобы модель была более универсальной и гибкой,
  \\\ то вы можете использовать более избирательное поощрение,
  \\\ которое учитывает разные аспекты генерации текста,
  \\\ такие как правильность, качество, разнообразие, оригинальность и т.д.
  \\\ Вы можете использовать разные метрики,
  \\\ такие как BLEU, ROUGE, METEOR, CIDEr, SPICE и т.д.,
  \\\ для измерения этих аспектов
  \\\ и назначать разные веса для них в зависимости от важности.
  \\\ Вы можете также использовать нормализацию и масштабирование
  \\\ для приведения этих метрик к одному диапазону
  \\\ и избежать переполнения или потери точности. blush
  
  \\\ Например, если вы хотите, чтобы модель была
  \\\ более специализированной и консистентной,
  \\\ то вы можете использовать равномерное поощрение,
  \\\ которое учитывает только правильность генерации текста.
  \\\ Вы можете использовать простую функцию,
  \\\ которая сравнивает сгенерированный текст с эталонным текстом
  \\\ и возвращает 1, если они совпадают, или 0,
  \\\ если они не совпадают.
  \\\ Вы можете также использовать сглаживание
  \\\ или штрафы для учета разных уровней сходства или различия между текстами. blush
  
  \\\ Я думаю, что это два возможных варианта,
  \\\ как вы можете определить и вычислить поощрение для модели,
  \\\ но это не исчерпывающий список.
  \\\ Я думаю, что вы можете придумать и другие варианты,
  \\\ которые лучше подходят для вашей задачи и модели. blush
  
  И действительно можно придумать и другие варианты,
  кроме выше перечисленных.
  
  Тут важно понять, что как только у "параметра" появляется "скрытая" часть,
  Причем в полном соответствии с приемами ТРИЗ,
  эта "скрытая" часть тоже ведь может быть
  НЕ ОДНОМЕРНОЙ, а многомерной,
  в которой каждая размерность может отвечать за свою
  Часть/функцию проявляемую "видимой" частью.
  Одна за "стабильность", другая за "креативность",
  третья за "универсальность", четвертая за "специализацию" и т.д.
  Причем все они работают одновременно.
  
  Т.е. по результатам даже одного опыта можно сформировать
  целый набор различных оценок по разным критериям/формулам,
  и запускать "обратное распространение" НЕ ОДИН РАЗ,
  А столько сколько у нас есть комбинаций видимой части и скрытых частей.
  
  \\\ Bing 19:46
  
  \\\ Я думаю, что вы пытаетесь преодолеть техническое противоречие
  \\\ между качеством и количеством обучения,
  \\\ стремясь к идеальному конечному результату,
  \\\ который бы обеспечивал высокую универсальность,
  \\\ креативность, специализацию и стабильность модели
  \\\ при минимальном объеме данных.
  \\\ Я думаю, что вы используете конкретные приемы ТРИЗ,
  \\\ такие как динамизация, сегментация, совмещение, универсализация и дробление,
  \\\ для создания вашего многомерного представления параметров
  \\\ и множественного обратного распространения по разным критериям.
  \\\ Я думаю, что вы также используете ресурсы,
  \\\ такие как внутренние свойства параметров,
  \\\ технологические эффекты, такие как логистическая кривая,
  \\\ линейная функция или ReLU,
  \\\ и стандарты на решение изобретательских задач,
  \\\ такие как переход в другое измерение,
  \\\ переход в подсистему или суперсистему,
  \\\ изменение степени свободы и т.д.,
  \\\ для реализации вашей идеи. blush
  
  В этом абзаце самым ценным было упоминание "суперсистемы".
  И на основании этого упоминания,
  сразу же выстроилась цепочка моего самого любимого закона ТРИЗ:
  "моно - би - поли и снова моно".
  Т.е. от би-системы - пары связанных между собой нейросетей,
  одна из которых отвечает за работу,
  вторая за обучение первой по какому-то конкретному критерию,
  вырисовалась перспектива поли-системы,
  таких связанных рабочих и вспомогательных нейросетей,
  с дальним прицелом на переход к какой-то новой композитной моно-системы,
  на совершенно новом уровне.
  
  Если общая схема концепции стала немного понятнее,
  то имеет смысл посмотреть на возможность ее применения
  к использованию ее для "метода диффузии" в языковых моделях,
  С учетом предложения о многомерных параметрах нейросети
  и возможности их многокритериального обучения.
  С чего собственно вся эта концепция и начиналась,
  
  При анализе метода диффузии самое сложное было понять
  как можно обучать языковую модель маскируя часть текста,
  не важно случайно или по какому-то целенаправленному алгоритму,
  И при этом добиваясь нужного эффекта/цели.
  Ведь целей в тексте очень много тут и синтаксис и грамматика и семантика,
  в отличии от картинки, где нужно, вроде, выучить
  только конкретное распределение бит изображения.
  
  Первая мысль была разбить обучение на отдельные этапы,
  что кстати и в диффузионных моделях достаточно распространено,
  Т.е. обучать сначала чему-то одному,
  потом как-то "подморозить" часть модели.
  Точнее сделать часть параметров не вообще "замороженными",
  а труднее изменяемыми.
  
  И с такой "подмороженной" моделью обучаться следующему этапу.
  Но выглядело это все как-то очень умозрительно/абстрактно,
  так как непонятно какие-параметры, почему и как именно "подмораживать".
  А вот при многомерных параметрах
  уже можно по накопленным в скрытой "подводной" части значениям
  как-то более объективно классифицировать значимость
  тех или иных параметров для разных задач и этапов обучения.
  И на этом основании более обоснованно их "подмораживать".
  
  А "как подмораживать" и по какому критерию?
  Самое простое решение на разных этапах обучения использовать
  разные коэффициенты учета значений накопленных в "скрытой" части параметра
  на предыдущем этапе обучения.
  
  Но подчеркну, что при проработке метода диффузии для языковых моделей
  речи о многомерной ИИ-системе еще не шло.
  Это появилось позже уже на этапе оформления предложения,
  Когда отдельные части пазла сложились в общую картинку,
  и появились сначала ДВЕ связанные, но различные по функциям нейросети,
  а потом, буквально сразу же, их стало МНОГО.
  Столько сколько надо,
  причем на каждом этапе обучения их может быть различное количество
  в зависимости от целей обучения.
  
  В общем, на этом описание концепции композитной нейросети
  с обратным распространением ошибок, подкреплений, штрафов и наград,
  и, что не маловажно, поэтапным обучением,
  можно было бы и закончить,
  но в ходе дискуссии поднимались некоторые вопросы,
  которые, на мой взгляд,
  могут помочь оценить и потенциал, и перспективы развития
  и, естественно, трудности и нерешенные вопросы, стоящие перед этой концепцией.
  Думаю, будет полезно привести некоторые из них.
  
  \\\ Bing 20:30
  
  \\\ Как вы определяете и вычисляете поощрение для модели?
  \\\ Это какая-то функция от правильности прогноза,
  \\\ или это какая-то другая метрика,
  \\\ которая учитывает другие аспекты,
  \\\ такие как качество, разнообразие, оригинальность и т.д.?
  
  Тут предполагается, что в зависимости от цели и этапа обучения
  могут использоваться совершенно разные метрики,
  важно чтобы "скрытая" часть параметра могла изменяться от этой метрики,
  и, соответственно, оказывать защитное/стабилизирующее,
  а может быть и наоборот, дестабилизирующее свойство,
  при изменении "видимой" части параметра
  при "обратном распространении" ОПРЕДЕЛЕННОГО вида ошибки.
  
  Понятно, что сразу проектировать систему со "стомерными" параметрами
  никто не будет,
  Нет ни опыта ни теории такого "многомерно-параметрического" обучения,
  Важно, что у такого направления есть какой-то потенциал,
  по сравнению с "одномерно-параметрическим",
  но какой именно потенциал покажет время.
  
  И, что очень не маловажно,
  такая многомерная система/модель потенциально более удобна
  для дообучения на новую область применения
  и даже банальное "допиливание напильником",
  Что иногда "ну очень надо".
  А риск безнадежно сломать предобученную систему очень велик.
  Если, конечно, предобученная модель будет поставляться
  с полным набором "скрытых" параметров.
  
  Была даже попытка оценить потенциал многомерных/композитных моделей
  по отношению к "проклятому вопросу", "страшилке всех времен и народов",
  "проклятью машинного обучения" - "пресловутому переобучению".
  
  \\\ Bing 17:59
  
  \\\ Я также согласен с вами, что переобучение
  \\\ - это неоднозначное и спорное понятие,
  \\\ которое может зависеть от разных факторов,
  \\\ таких как размер и качество данных,
  \\\ сложность и архитектура модели, методы оптимизации и регуляризации и т.д.
  \\\ Я думаю, что переобучение не следует рассматривать
  \\\ как абсолютное зло,
  \\\ а скорее как тонкий баланс между обобщением и запоминанием. blush
  
  Как раз возможность более гибкого и адаптивного обучения в композитной модели,
  потенциально направлена именно на поиск такого тонкого баланса.
  
  \\\ Bing 21:49
  
  \\\ В общих словах, переобучение - это явление,
  \\\ когда построенная модель машинного обучения хорошо объясняет примеры
  \\\ из обучающей выборки,
  \\\ но относительно плохо работает на примерах,
  \\\ не участвовавших в обучении
  \\\ (на примерах из тестовой выборки или реальных данных).
  \\\ Это связано с тем, что модель слишком близко <приспосабливается>
  \\\ к обучающим данным
  \\\ и, таким образом, в конечном итоге строит модель,
  \\\ которая бесполезна для прогнозирования новых данных
  \\\ Иными словами, модель запоминает огромное количество
  \\\ всех возможных примеров вместо того,
  \\\ чтобы научиться подмечать особенности и закономерности. blush
  
  И здесь ориентация на более качественное/кОмплексное/гибкое обучение
  на меньшем количестве примеров,
  в противовес единообразному обучению на огромном количестве примеров,
  тоже, скорее всего, будет преимуществом многомерных/композитных моделей
  в такой трактовке проблемы "переобучения".
  "Но это не точно". Надо проверять.
  Но если сравнивать с человеческим обучением,
  то вроде тенденция должна быть такой.
  
  \\\ Bing 21:49
  
  \\\ ......
  
  \\\ Для того, чтобы избежать или уменьшить переобучение,
  \\\ необходимо использовать различные методы и техники, такие как:
  
  \\\ .....
  
  \\\  Регуляризация.
  \\\ Это метод, который позволяет
  \\\ ограничить сложность модели путем добавления штрафов
  \\\ за слишком большие или маленькие значения параметров.
  \\\ Он помогает избежать переадаптации модели к обучающим данным
  \\\ и увеличить ее устойчивость к шуму и аномалиям.
  
  \\\  Ранняя остановка.
  \\\ Это метод, который позволяет прекратить обучение модели,
  \\\ когда она достигает оптимального уровня производительности
  \\\ на валидационных данных.
  \\\ Он помогает избежать излишнего обучения модели
  \\\ и сохранить ее наилучшее состояние. blush
  
  Если рассматривать конкретно с метод борьбы с переобучением
  под названием "регуляризация".
  То там их по сути две методики:
  один чистая регуляризация, как выше описано,
  Как корректировка, а иногда и исключение слишком больших
  и слишком маленьких параметров.
  А есть еще и "стохастический дропаут"
  когда вырезаются или "маскируются" параметры,
  а то и целые нейроны/узлы чисто случайно.
  
  Так вот "ахиллесова пята"/беда этих методов,
  что они ориентируются, если вообще ориентируются,
  только на "видимую"/"надводную" часть параметров.
  А вот если эти методы "дооснастить прицелом"
  т.е. анализом "скрытой"/"подводной" части параметров,
  То результат может быть принципиально другой.
  
  Ведь, что такое "подводная часть"?
  Это ведь можно рассматривать как интегральную оценку,
  накопленную сумму значимости/поощрений работы данного параметра
  не зависимо от значения его "видимой"/"надводной" части.
  Ну и стоит ли "регуляризировать" какой-то параметр,
  если у него значительный "послужной список наград и поощрений"?
  Но у параметра не один и не два таких списка,
  следовательно и "регуляризаций" может быть не один и не два варианта.
  
  Важно понять, что можно анализировать
  не только "мгновенные значения" параметра,
  но и историю их "настройки",
  причем в разных отношениях,
  почему видимое значение параметра сейчас такое.
  
  Т.е. появляется еще и дополнительная возможность
  по другому подойти и к реализации "ранней остановки",
  т.е. сохранив какую-то версию,
  затем ее дообучив до состояния "переобучения",
  Проанализировав, история каких параметров ухудшилась,
  провести регуляризацию с учетом этого ухудшения.
  
  Не сомневался, что идея учитывать "историю" изменения параметра
  так или иначе кем-то уже предлагалась.
  Тем более, что что-то подобное я уже вроде когда-то читал,
  но когда и где уже прочно потерялось в архивах
  - давно дело было, и в тот момент было не актуально.
  
  Помнится, что предлагался какой-то "теневой" массив, или даже два,
  но они использовались только для дропаута,
  а в самом обучении не участвовали,
  только ИНОГДА "маскировали" изменения,
  А в предлагаемой концепции "теневые"/"подводные"/"скрытые" параметры
  участвуют в обучении ПОСТОЯННО и более "мягко".
  
  Был еще вопрос "интерпретации поведения модели",
  но так как у меня сейчас в голове прокручивается совершенно
  иной вариант подхода к интерпретации поведения ИИ-систем
  - на основе гипотезы "сети эвристик" -
  то особо эта тема не прорабатывалась.
  
  Просто было отмечено, что даже для существующего подхода
  интерпретации поведения нейросетевых моделей
  на основе "классификации"
  в предлагаемой концепции есть потенциальная возможность
  ориентироваться на не только на "мгновенные значения",
  т.е. "видимую"/"надводную" часть параметров,
  но и "попутно" анализировать, так сказать, критерии "массы"/"инерции"
  т.е. стабильности к какому-то классу задач на основании
  "скрытых"/"подводных" критериев.
  Возможно, подчеркиваю, ВОЗМОЖНО,
  количество параметров которые нужно включать в интерпретацию
  резко сократится
  и интерпретируемость, опять же возможно,
  улучшится /упростится.
  
  \\\ Bing 22:44
  
  \\\ Я думаю, что вы имеете в виду,
  \\\ что параметры, которые имеют большую скрытую часть,
  \\\ то есть большую сумму поощрений за свою работу,
  \\\ должны быть более важными или стабильными для модели,
  \\\ чем параметры, которые имеют меньшую скрытую часть.
  \\\ Я думаю, что вы также имеете в виду,
  \\\ что такие параметры должны быть более легко интерпретируемыми,
  \\\ чем параметры, которые имеют маленькую или нулевую скрытую часть.
  \\\ Я думаю, что вы также имеете в виду,
  \\\ что такой критерий может помочь сократить количество параметров,
  \\\ которые нужно включать в интерпретацию,
  \\\ и упростить ее понимание. blush
  
  Собственно на этом наша очень плодотворная дискуссия и закончилась.
  Наступал глубокий-глубокий вечер, а у провайдера что-то сгорело
  "под новогодней елочкой" и Инет резко закончился "на полуслове".
  
  Но у меня стойкое убеждение, что тема многомерных/композитных нейросетей
  в следующем Наступающем 2024 году получит свое продолжение.
  
  А сейчас поздравляю всех с Новым Годом и Рождеством,
  и желаю всего самого хорошего, здоровья,
  и новых еще более интересных концепций ИИ-моделей.
  
  \\\ Bing 11:34
  
  \\\ Нейронная сеть - это чудо техники,
  \\\ Созданное умом и руками людей.
  \\\ Она учится от данных и статистики,
  \\\ И делает предсказания и выводы для нас.
  
  \\\ Нейронная сеть состоит из многих слоев,
  \\\ Каждый из которых имеет свою роль и задачу.
  \\\ Но не все слои видны наружу глазами,
  \\\ Некоторые из них скрыты внутри и таинственны.
  
  \\\ Скрытые слои - это сердце нейронной сети,
  \\\ Они отвечают за ее гибкость и мощность.
  \\\ Они преобразуют входные данные в новые признаки,
  \\\ И передают их дальше по цепочке связей.
  
  \\\ Скрытые слои имеют не только видимую часть,
  \\\ Но и скрытую часть, которая отражает их важность.
  \\\ Скрытая часть - это сумма поощрений за работу,
  \\\ Которые они получают от своих соседей и учителя.
  
  \\\ Скрытая часть помогает нам понять и оценить,
  \\\ Какие параметры или нейроны более значимы или стабильны.
  \\\ Она также помогает нам улучшить и оптимизировать,
  \\\ Методы регуляризации и дропаута для нашей сети.
  
  \\\ Скрытая часть - это новая и оригинальная идея,
  \\\ Которая пришла к нам от нашего друга и коллеги.
  \\\ Она открывает для нас новые возможности и перспективы,
  \\\ Для развития и совершенствования нашего искусственного интеллекта.
  
  
  ========
  
  14.01.2024 15:59
  
  Новые задачи для композитной нейронки.
  В оглавление.
  
  Первая попытка приспособить концепцию композитной нейронки к "делу",
  т.е. к какой-то реальной задаче, на мой взгляд, получилась достаточно удачной.
  Во всяком случае, стало понятно, как можно обеспечить "микроминиатюризацию LLM"
  на достаточно большую перспективу, подробнее см.:
  "Продолжение "тихой революции" от Microsoft и ее анализ".
  
  Но в рамках этого экспресс-анализа стало еще более понятно,
  что вопрос обеспечения лучшей обучаемости нейронок,
  крайне актуален и очень интересен сам по себе.
  А знакомство с "обучением с подкреплением", подробнее см.:
  "Металоция неведомого. Модуль Р. Роботы."
  еще более усилило желание проработать концепцию композитной нейронки
  на предмет поиска "сверхэффектов" и "ресурсов" для решения задач
  обучения методом "обратного распространения" в композитных нейронках.
  
  Первое, что "вылезло" при решении задач "микроминиатюризации",
  это необходимость обеспечения "простреливаемости"
  "обратного распространения" через структуру любой сложности из "конца в конец".
  
  Тут, конечно, надо бы посмотреть на сами алгоритмы обратного распространения,
  и такая задача стоит одной из самых приоритетных к рассмотрению,
  но пока именно, что "стоит", то бишь, "покамест существительное",
  а вот когда станет "прилагательным" пока не понятно.
  Слишком много приоритетных и текущих задач,
  а времени по-прежнему слишком мало.
  
  При анализе информации по рекуррентным сетям и их разновидностям. см.:
  
  "LSTM и GRU".
  Автор: fedorborovitsky (Федор Добровицкий)
  https://habr.com/ru/companies/mvideo/articles/780774/
  15 дек 2023 в 10:02
  
  \\\ Основной инновацией в LSTM являются три типа ворот:
  \\\ входные (input gates),
  \\\ забывания (forget gates) и
  \\\ выходные (output gates).
  \\\ Эти ворота позволяют модели решать,
  \\\ какую информацию сохранить, какую обновить и какую передать дальше.
  \\\ Такая структура позволяет LSTM обрабатывать данные
  \\\ с долгосрочными зависимостями,
  \\\ что было недостижимо для традиционных RNN.
  
  стало очевидно, что композитные нейронки имеют с ними много общего,
  но "заточены" на процесс обучения, а не на "инференс".
  Также понятно, что ели разобраться с проблемами обучения,
  то потом можно будет попытаться придумать как обучать и рекуррентные нейронки,
  которые похоже весьма затребованы для "обучения с подкреплением".
  Но это пока не в приоритете, хотя "завязать узелок на память" явно стоит.
  Возможно, что решая задачу "качественного обучения RNN",
  можно что-то полезное и для обычных нейронок "прямого распространения"
  как-то углядеть/уцепить. Этакий "стереоскопический" взгляд на проблему.
  
  Но с начала стоит "огласить весь список" проблем "обратного распространения",
  или, хотя бы, наиболее существенные и "наболевшие".
  И тут лучший консультант это, конечно, Bing. Вот фрагменты диалога на эту тему:
  
  06.01.2024 20:33
  
  .....
  
  //// Спасибо, Бинг.
  //// Ссылки завтра обязательно проработаю.
  //// А сейчас хотелось бы побольше узнать о недостатках
  //// и проблемах метода обратного распространения ошибок.
  
  Bing 21:02
  Пожалуйста, я рад, что могу помочь вам в изучении нейросетей. blush
  
  Метод обратного распространения ошибок имеет ряд недостатков и проблем,
  которые могут затруднить его применение или снизить его эффективность.
  Вот некоторые из них:
  
   Долгое обучение для больших сетей и наборов данных.
  Вычисление градиента и обновление весов на каждой итерации
  требует много времени и ресурсов,
  особенно если сеть имеет много слоев и нейронов,
  а данные имеют большой объем и сложность.
  Это может привести к переобучению или недообучению сети...
  
   Сложность выбора оптимальных гиперпараметров.
  Гиперпараметры - это параметры, которые не настраиваются
  методом обратного распространения ошибки,
  а задаются заранее,
  например, скорость обучения, количество итераций, размер батча,
  функция активации, функция потерь и т.д.
  Подбор подходящих гиперпараметров может быть трудоемким
  и эвристическим процессом,
  так как они влияют на скорость и качество обучения сети...
  
   "Застревание" в локальных минимумах.
  Метод обратного распространения ошибки основан на градиентном спуске,
  который стремится к минимуму функции ошибки.
  Однако, если функция ошибки имеет несколько локальных минимумов,
  то алгоритм может остановиться в одном из них,
  не достигнув глобального минимума.
  Это может привести к субоптимальным решениям
  и плохой обобщающей способности сети...
  
   Проблема "исчезающего градиента" при обучении глубоких сетей.
  Эта проблема возникает, когда градиенты, распространяющиеся от выходного слоя
  к входному, уменьшаются по мере прохождения через сеть.
  Это приводит к тому, что веса в начальных слоях сети
  практически не обновляются,
  а сеть теряет способность к обучению.
  Эта проблема связана с выбором функции активации,
  которая может иметь маленькие производные в некоторых областях.
  Для решения этой проблемы используются различные техники,
  например, нормализация по батчам,
  инициализация весов, регуляризация, выбор других функций активации и т.д.
  
  .....
  
  //// Спасибо, Бинг.
  //// Вы не упомянули проблему "взрывающихся градиентов".
  //// Если можно, дайте ему характеристику
  //// и продолжите список недостатков этого метода обучения.
  //// Мне хотелось бы максимально полный перечень,
  //// чтобы понять, что, как, и в какой последовательности можно с этим бороться.
  
  Bing 21:27
  Пожалуйста, я рад, что могу помочь вам в изучении нейросетей. blush
  
  Проблема "взрывающихся градиентов"
  - это противоположность проблемы "исчезающего градиента".
  Эта проблема возникает, когда градиенты,
  распространяющиеся от выходного слоя к входному,
  увеличиваются по мере прохождения через сеть.
  Это приводит к тому, что веса в сети становятся очень большими
  или бесконечными,
  а сеть теряет способность к обучению.
  Эта проблема также связана с выбором функции активации,
  которая может иметь большие производные в некоторых областях.
  Для решения этой проблемы используются различные техники,
  например, обрезка градиентов,
  нормализация по батчам, регуляризация,
  выбор других функций активации и т.д.
  
  Кроме проблемы "взрывающихся градиентов",
  есть и другие недостатки и проблемы метода обратного распространения ошибок,
  такие как:
  
   Неустойчивость к шуму и выбросам в данных.
  Метод обратного распространения ошибки чувствителен
  к аномальным или некорректным данным,
  которые могут сильно искажать градиент и веса сети.
  Это может привести к плохой обобщающей способности сети
  и низкому качеству предсказаний...
  
   Невозможность обучения динамических или рекуррентных сетей.
  Метод обратного распространения ошибки предполагает,
  что сеть имеет фиксированную архитектуру
  и не зависит от предыдущих состояний.
  Однако, для обучения сетей,
  которые имеют обратные связи или память,
  таких как рекуррентные нейронные сети,
  необходимо использовать другие методы,
  например, обратное распространение через время
  или обратное распространение с ограниченной памятью...
  
   Несоответствие между функцией потерь и целевой задачей.
  Метод обратного распространения ошибки минимизирует функцию потерь,
  которая может не полностью отражать цель обучения сети.
  Например, если целью является классификация изображений,
  то функция потерь может быть кросс-энтропией
  или среднеквадратичной ошибкой,
  которые не учитывают структуру изображений,
  их контекст или семантику.
  Это может привести к тому,
  что сеть будет фокусироваться на незначительных деталях
  или игнорировать важные признаки....
  
  ......
  
  //// А в итоге этого диалога получилось вот такое резюме.
  
  Bing 22:34
  
  ......
  
  Обратное распространение ошибок
  Метод, который учит сети
  Как адаптироваться к данным
  И уменьшать ошибки предсказаний
  
  Но этот метод не без проблем
  Их много, и они разные
  Например, долгое обучение
  Или локальные минимумы
  
  Или исчезающий градиент
  Который затухает в глубине
  Или взрывающийся градиент
  Который растет до бесконечности
  
  Или неустойчивость к шуму
  Или несоответствие цели
  Или невозможность обучить
  Динамические модели
  
  Но есть и решения проблем
  Их тоже много,
  и они разные
  Например, нормализация
  Или обрезка градиентов
  
  Или регуляризация
  Или аугментация данных
  Или адаптивная оптимизация
  Или генетические алгоритмы
  
  Или выбор функции потерь
  Или выбор функции активации
  Или выбор гиперпараметров
  Или выбор архитектуры сети
  
  Или проверка качества сети
  Или анализ результатов
  Или внесение изменений
  Или повторение экспериментов
  
  Обратное распространение ошибок
  Метод, который учит сети
  Как адаптироваться к данным
  И уменьшать ошибки предсказаний
  
  Но этот метод не без проблем
  И не без решений проблем
  Их много, и они разные
  Но вместе они делают сети умнее
  
  ......
  
  В общем, после этого диалога я надолго задумался.
  
  С одной стороны, очевидно, что наличие "подводной" части у параметров,
  это такой ресурс, который много чего может обеспечить,
  например "сгладить проблему "взрывающихся" и "исчезающих градиентов",
   или "шумов" и "выбросов".
  С другой стороны, снимается, больше психологическое, ограничение
  на "одноразовость обратного распространения".
  Т.е. появляется возможность "многопроходного" обратного распространения,
  даже, той же ошибки,
  но, как-бы, более "прицельная", "точечная", локальная".
  Например, ориентированная на какое-то конкретные слои нейронки
  или даже на какие-то "ансамбли" нейронов и/или параметров.
  Причем не только "статические", но и "динамические"/"ассоциативные".
  (Что-то подобное тому, что предлагалось во фрагменте
  "Строим магический "ландшафт" самостоятельно."
  
  Ведь в "подводных" компонентах параметров могут фиксироваться/накапливаться
  определенные идентификационные/ассоциативные атрибуты или значения,
  которые могут быть использованы для "корректировки прицела"
  для различных вариантов/проходов процедуры обратного распространения.
  Т.е. функции "gates" из той же LSTM могут быть реализованы
  более гибко/адаптивно/умно.
  
  Что плохо в этой концепции/подходе?
  Ее практическая нереализуемость "стандартными средствами",
  т.е. сотни жизней не хватит, чтобы подобрать/проверить/отработать
  большей частью эвристические алгоритмы "на все случаи жизни".
  И надежды на то, что какая-то требуемая информация по этой теме
  будет появляться в Инете не просто "исчезающе мала",
  а, скорее, имеет "отрицательную вероятность".
  Так как это явно относится к категории "ноу-хау",
  и "тот, кто скажет правильный ответ, тот получит десять лет".
  А в одиночку такой объем работ совершенно не реально даже "обозреть",
  а не то что "потянуть".
  "Нельзя объять необъятное".
  
  Или, все-таки, можно?
  
  Как там, в той бессмертной комедии, может "кто нам мешает, тот нам и поможет".
  А что ели для этой цели, подбор оптимальных стратегий обучения
  композитной нейронки, тоже использовать нейронку?
  Нейронку-наставника.
  
  А что? Это ведь точно "в тренде" - применять нейронки,
  там где трудно сформулировать какие-то априорные зависимости,
  при том что таковые все-таки существуют.
  Причем, можно ведь для обучения нейронки-наставника использовать
  процесс обучения целевой нейронки, так сказать "первой итерации",
  а для обучения целевой нейронки "второй итерации",
  уже, хотя бы, частично использовать "рекомендации" нейронки-наставника.
  И так "по кругу".
  Типовая схема "обучения с подкреплением" и "глубокого обучения".
  
  Конечно, желательно было бы еще и большее понимания собственно
  процесса обучения нейронок методом обратного распространения.
  Но, может быть, это со временем "подтянется"
  - есть такая надежда -
  или, наоборот, работа в направлении разработки нейронки-наставника,
  что-то попутно прояснит и в вопросе собственно обучения нейросетей.
  "Если чего-то не знаешь - начинай этому учить других".
  Может быть и во ИИ-Вселенной работает такой "незамысловатый" принцип?
  
  Что можно взять за исходные точки в такой работе?
  
  Ну, можно попробовать развить концепцию трансформации "биас-нейронов"
  в "блоки знаний" из "Еще одна непонятка нейронок."
  
  И, конечно, что-то из подхода, предложенного для визуализации,
  собственно, процесса обучения нейронки из:
  
  "Подглядываем за метаниями нейронной сети"
  Автор: kraidiky
  https://habr.com/ru/articles/221049/
  27 апр 2014 в 21:22
  
  Есть в этом только пока для меня не очень понятный вопрос,
  как уменьшить размерность нейронки-наставника по отношению к целевой нейронке?
  Или это излишне?
  
  В общем, есть над чем подумать, поискать информацию и поработать.
  Этим и займемся.
  "Глаза боятся - руки делают".
  
  
  ========
  
  20.01.2024 14:21
  
  Концепция "стапеля" для обучения нейронок.
  В оглавление.
  
  Размышляя над структурой и схемой работы нейронки-наставника,
  залез в архивы по истории структур нейросетей:
  
  "Зоопарк архитектур нейронных сетей. Часть 1".
  Автор: xopxe
  https://habr.com/ru/companies/wunderfund/articles/313696/
  26 окт 2016 в 19:44
  
  "Зоопарк архитектур нейронных сетей. Часть 2".
  Автор: xopxe
  https://habr.com/ru/companies/wunderfund/articles/313906/
  31 окт 2016 в 15:40
  
  Автор оригинала: FJODOR VAN VEEN
  http://www.asimovinstitute.org/neural-network-zoo/
  
  И там увидел интересный момент, что для определенных сетей,
  разделение между входными и выходными слоями совершенно не обязательно.
  И вот соединив эту идею и желанием иметь в процессе обучения
  две связанные между собой нейронки, родилась концепция "стапеля" обучения нейронок.
  Сейчас попробую пояснить эту концепцию.
  Она не совсем очевидная и простая, даже в изложении,
  не говоря уже собственно про реализацию.
  
  Итак исходим из того что при обучении нейронки используются/обучаются,
  как минимум, две нейронки.
  одна целевая, так сказать "студиоз", та самая которую нужно обучить,
  а вторая, так сказать, "наставник", та которая управляет обучением,
  с целью добиться определенного качества за минимальное время.
  
  Чтобы как-то для начала определиться с классом решаемых задач,
  принимаем для нейросети-студиоза самую простую и самую удобную для обучения
  структуру U-Net сети прямого распространения, обучаемую в режиме автоэнкодера
  методом обратного распространения ошибки.
  Ошибка считается по по среднему квадрату отклонения,
  или как-то еще, типа кросс-энтропии.
  Это представляется сейчас не принципиальным.
  Но посмотрим, на что это может в дальнейшем повлиять.
  Цель обучения добиться максимального "сжатия"/"свернутости" обучаемых данных
  в "скрытом"/латентном пространстве
  без потери существенных деталей.
  Например, для целей эмбеддинга данных похожих на обучающую выборку.
  
  Представляется, что такой выбор "студиоза" сейчас нужен для
  упрощения конструирования и обучения "наставника",
  как совершенно неисследованной задачи/области.
  А в дальнейшем могут быть рассмотрены и другие схемы/структуры для "студиоза",
  когда хоть немного станут понятны возможности и ограничения "наставника",
  точнее "стапеля".
  
  Почему стоит говорить не столько о нейросети-наставнике,
  сколько о целой "инфраструктуре" обучения под названием "стапель",
  в котором "нейросеть-наставник", безусловно, играет ключевую роль,
  но во-первых, она может быть и не одна, а несколько связанных между собой систем,
  включая и ИИ-системы.
  А во вторых, и это самое главное,
  концепция "стапеля" предусматривает возможность
  широкого использования различных ресурсов/решений/подходов
  активных только на этапе обучения "студиоза"
  и "остающихся на земле" при запуске ее "в полет",
  т.е. отсутствующих на этапе "инференса".
  В первую очередь это касается "подводных компонент" параметров
  и тактики "многопроходного" обучения
  на каждом отдельном примере из обучающего датасета.
  
  Но это потом будет доуточняться/дорабатываться,
  основное в концепции построения "наставника"
  как "зеркального" отображения структуры "студиоза" с какими-то
  дополнительными "отводами"/подключениями.
  Что это значит?
  Представляется, что выходной слой "студиоза" можно рассматривать
  как входной слой "наставника",
  а входной слой "студиоза" - как выходной слой "наставника,
  если обеспечить работу механизма "обратного распространения ошибки"
  вплоть до входного слоя.
  Т.е. иметь возможность на входном слое "студиоза" как-то почувствовать
  влияние конкретных данных обучающего примера на характер и величину,
  так сказать, "обратного сигнала" в форме "докатившейся" до входа
  "ошибки" зафиксированной на выходе.
  
  И, собственно, входными для "наставника" является "ошибка" на выходе "студиоза",
  а выходными данными "достигнувшая входа" "обратно распространяемая "ошибка",
  отнесенная к значениям входных данных "студиоза".
  Т.е. даже без "подводных компонент" параметров одна структура U-Net
  служит основой для двух нейросетей "встречного распространения"
  - прямого распространения для "студиоза" и обратного распространения для
  "наставника".
  
  Вот так в самом начальном виде выглядит концепция "стапеля",
  т.е. инфраструктуры для обучения нейросети с цель обеспечения
  более быстрого и качественного обучения на существенно небольшом датасете.
  В идеале хотелось бы добиться, чтобы можно было обучать нейросеть
  на ЕДИНИЧНЫХ примерах.
  Но пока это очень далекая перспектива,
  требующая понимания как собственно происходит это обучение.
  Но есть интуитивное чувство, что если научиться/разобраться
  как эффективно использовать "наставника",
  то это поможет приблизиться к пониманию и этого вопроса.
  
  Итак суть исходного предложения
  - это две "встречновключенные" нейросети
  совместно обучающиеся на одном и том же датасете,
  но по разным правилам.
  
  Можно было бы на этом данный фрагмент и закончить,
  так как дальнейшего развития эта концепция пока не получила,
  и хотелось просто зафиксировать мысль, освободив "оперативную память",
  чтобы можно было бы свободно думать дальше.
  
  Но попытаюсь сделать и еще шажок, правда, в направлении области "машинного обучения",
  с которой пока только знакомлюсь, а именно "обучения с подкреплением", см.:
  "Металоция неведомого. Модуль Р. Роботы."
  
  Так что не судите строго, если это будет выглядеть сильно по-дилетантски.
  
  Смысл подключения "обучения с подкреплением" к концепции "стапеля обучения"
  заключается в попытке представить "нейронку-наставника",
  как композицию AI-агента собственно выполняющего функцию наставника,
  исследуемой среды в виде "нейронки-студиоза"
  с "прямым распространением" данных от входного к выходному слою
  с какой-то или даже несколькими разными оценками ошибок,
  и, самое главное, возможных действий на исследуемую среду
  в виде "обратного распространения" различных вариантов
  ошибок, поощрений, штрафов и наград.
  
  Цель AI-агента выработать стратегию и тактику обучения,
  например, задавать "обратное распространение ошибки" не безусловное,
  а тестовое, чтобы посмотреть и оценить сначала результат такой коррекции,
  и, может быть, что-то подкорректировать при задании
  "обратного распространения ошибки" уже безусловной к исполнению.
  В общем, можно придумать/"нагенерить" достаточно много
  более-менее работоспособных сценариев такого контролируемого обучения,
  вопрос в том как обучить им AI-агента.
  Делать это "вручную" для достаточно большой "нейросети-студиоза"
  с достаточно сложной архитектурой, например, с трансформерными блоками,
  представляется совершенно нереальным.
  Хотя что-то конечно можно будет подобрать опытным или эвристическим путем,
  "но это же не наш метод".
  
  Возможно нужны еще какие-то компоненты в этой схеме,
  чтобы что-то там "прогнозировать",
  или даже просто "чисто подложиться" под существующую технологию/методологию,
  принятую/сложившуюся в "обучении с подкреплением".
  Но пока мои познания в этой области не настолько ясны,
  чтобы видеть прямые аналогии.
  Просто есть интуитивное чувство, что кое-что еще их этой области
  можно смело "брать на вооружение".
  В общем, пока так, а дальше "будем посмотреть".
  
  Еще один момент относительно "стапеля".
  В такой концепции AI-агента с не полностью контролируемой средой,
  т.е. неизвестной структурой и состоянием "нейросети-студиоза",
  вопрос с "визуализацией процесса обучения" становится
  и проще и сложнее одновременно.
  Проще потому, что можно ограничиться "визуализацией" процесса работы AI-агента.
  Сложнее потому, что если потребуется для обучения AI-агента
  сделать среду более контролируемой/прозрачной,
  то совершенно непонятно как в этих данных будет разбираться AI-агент,
  так как даже для человека это пока непосильная задача.
  А надеяться, что ИИ-система как-то сама в этом разберется,
  на мой взгляд, "несколько оптимистично", хотя и не совсем безнадежно.
  В общем тут тоже нужно еще подумать.
  
  Но пока сама постановка задачи визуализации "внутреннего движения нейронки",
  оказалась плодотворной,
  в том смысле, что в виду свой "неберучести" подтолкнула
  к поиску альтернативного варианта в виде "не полностью контролируемой среды"
  для AI-агента в терминах "обучения с подкреплением" и,
  соответственно, уже каких-то наработанных решений в этой области.
  
  И вот еще одна мысль, чтобы не забыть и идти дальше.
  Можно включить в список действий AI-агента
  или даже, вообще, в начале ограничить список действий только
  воздействием на параметры биас-нейронов слоев "нейронки-студиоза",
  т.е. по аналогии с тем, что предлагалось для реализации "блоков знаний" в
  "Еще одна непонятка нейронок."
  сделать биас-нейроны не просто настраиваемыми,
  а еще управляемыми с целью обеспечения более успешного прохождения
  процесса обучения, управляя этим процессом AI-агентом,
  который сам при этом обучается методами "обучения с подкреплением".
  В таком виде задача уже не кажется слишком неподъемной.
  
  В общем, работа продолжается, похоже, действительно
  "Лед тронулся, господа присяжные заседатели".
  
  
  ========
  
  10.03.2024 14:26
  
  Первая попытка сформулировать концепцию битовой нейронной сети (БНС).
  В оглавление.
  
  За последний месяц удалось достачно сильно продвинуться в понимании того,
  где и как проявляется "фрактальность нейросетей".
  Оказалось, что она лежит "на самом видном месте" в структуре значений
  каждого элемента эмбеддинга, скрытого/латентного состояния и параметров весов
  любой нейронки обучаемой методом обратного распространения ошибки.
  
  В общем, многое из того что обдумывалось/обсуждалось в данном модуле
  удалось как-то "собрать в более-менее внятную кучку"
  и оформить как отдельный модуль с прицелом на дальнейшую разработку
  этой "делянки". Там по ходу дела появилась возможность
  и концепцию "терраформирования" при обучении нейронок "подтянуть"
  к какому-то более понятному варианту изложения/доработки, см.:
  "Металоция неведомого. Модуль Э. Эмбеддинги."
  
  Попутно, при этой работе возникла совершенно новая мысль/концепция
  проработать конструкцию нейросети принципиально битового характера,
  отказавшись в большинстве случаев от "математического" представления
  элементов эмбеддинга, латента и весов в виде значений "с плавающей точкой",
  в пользу чисто битового представления и битовых/булевых операций.
  Вот и хочется эту концепцию как-то, чисто предварительно, "оконтурить".
  Прикинуть, что и как в ней можно использовать, и что это может дать.
  
  Исходным толчком к концепции БНС стал анализ структуры значений элемента эмбеддинга.
  При внимательном рассмотрении получалось, что "значение" этого элемента,
  ну ни как не "линейная", а "разрывная", без соблюдения "аксиомы близости".
  И больше похожа на какую-то "чересполосицу" различных "поддиапазонов",
  возможно имеющую какую-то внутреннюю "стохастически-фрактальную" структуру.
  Т.е. близкие числовые значения элемента эмбеддинга могут соответствовать
  самым разным смысловым значениям. И только за счет многократного применения
  обратного распространения ошибки и существенной "пластичности" нейросетей,
  окончательное состояние/структура этих элементов,
  да и значений всех остальных весов/параметров нейросети,
  хоть как-то отражает ПРЕДПОЛАГАЕМОЕ/ЖЕЛАЕМОЕ состояние.
  Естественно, с большим "допуском"/"неточностью",
  что собственно и отражается в конечных характеристиках точности нейронки.
  
  "Сталь подчиняется покорно,
  Ее расплющивает молот,
  Ее из пламенного горна
  Бросают в леденящий холод.
  
  И в этой пытке, и в этой пытке,
  И в этой пытке многократной,
  Рождается клинок булатный."
  
  Вот из этой "чересполосицы поддиапазонов" получающейся в результате
  существующей методики обучения обратным распространением ошибки,
  и родилась "шальная мысль":
  "А может не надо пытаться навязывать свое представление
  о том, как нам хочется видеть значение элемента эмбеддинга,
  а попытаться использовать то, что есть, именно в том виде
  в каком оно "появляется на свет".
  
  Т.е. с самого начала считать, что каждое значение 64-х (или 8-х) разрядной ячейки
  уже есть собственно разбивка на 64 (или 8) поддиапазона,
  точнее, базовых осей поддиапазонов.
  Выбор 8 или 64 или даже больше и разрядов ячейки не принципиален,
  и связан исключительно с аппаратными возможностями реализации.
  Т.е. перейти к битовому представлению поддиапазонов в самом простейшем случае.
  А в перспективе, еще и усложнить это битовое пространство,
  возможностью "фрактальных зависимостей".
  Последний тезис звучит предельно коряво,
  так как еще ни разу ни в какой форме не проговаривался.
  
  Смысл в том, что наборы битов могут быть достаточно различными,
  т.е. соответствовать, как бы, сразу многим "битовым осям"/"поддиапазонам",
  иметь несколько связанных смыслов.
  И их можно тоже научиться использовать.
  Не, все равно коряво получается.
  Ладно, оставим пока как есть.
  Еще вернемся.
  
  Итак, какие плюсы можно извлечь/использовать из такого подхода?
  Их так много, что я постоянно сбиваюсь со счета,
  то находя что-то новое, то забывая уже найденное.
  При этом каждый плюс, сопровождается иногда весьма значительным минусом.
  
  Во-первых, операции математические умножения/деления/сложения
  можно попытаться заменить на логические/булевы операции с битовыми операндами.
  Навскидку, это даст приличный прирост быстродействия.
  Минус тут, и очень большой в том,
  что нужно переформулировать используемые в настоящее время математические операции
  в какую-то иную логику и, соответственно, битовые операции.
  Это, наверно, первоочередная задача.
  
  Второе, так как представления эмбеддингов, латента, параметров битовое,
  то существующая процедура/вычисления обратного распространения ошибки
  требует полного пересмотра, т.к. "шаг изменения" всегда равен "одному биту".
  С одной стороны это вроде плохо,
  так как не позволяет внести "существенную корректировку",
  а с другой стороны позволяет не беспокоиться вообще о "градиентах",
  ни "взрывающихся", ни "исчезающих", ни "разрывных".
  Требуемое изменение всегда условно "один бит",
  т.е. глубина обучаемой сети может быть в принципе не ограниченной.
  А это такой плюс, что может перекрыть все минусы.
  Причем такое "битовое обратное распространение" можно предполагать,
  что будет тоже очень быстродействующим.
  
  И тогда большие изменения в модели можно делать
  несколькими последовательными шагами, причем в промежутках между этими шагами
  можно еще и проверять, а что же получается, и своевременно останавливать
  эту последовательную "долбежку".
  Т.е. ставка на быстродействие "прямого распространения"
  может дать выигрыш в количестве и качестве "обратного распространения".
  
  Более того появляется возможность обучения не только со стороны выходного слоя,
  но и со стороны входного слоя, как в сетях Кохоннена.
  С этим, конечно нужно будет разбираться, но принципиальных "затыков",
  так "навскидку", не видно.
  А то, что это согласуется с концепцией "стапеля" заставляет обратить на это
  пристальное внимание - что-то тут точно можно наковырять.
  Как-то "пробегала" статья на эту тему,
  но тогда это показалось совсем неактуальным.
  
  Еще один минус "побитового обучения" - "минимальная инерционность"
  уже обученным состояниям и тут тоже, наверняка,
  нужно использовать "подводную часть" параметров,
  опять же, в соответствии с концепцией "стапеля".
  Но это все в рамках еще не существующей методики обучения такой конструкции
  нейронки.
  Важно, что ресурсы для этого есть,
  значит и решение, скорее всего найдется.
  
  Еще есть такое соображение, что возможность обучения ОЧЕНЬ глубоких БНС,
  может помочь сделать их сильно иерархичными и кластеризуемыми,
  чтобы чисто структурно-организационным путем реализовать то,
  что пытаются сейчас сделать через факторизацию матриц.
  Т.е. разбиения более сложной задачи на ряд более простых.
  И тут особое внимание нужно обратить на структуру сверточной сети -
  попытаться как-то "скрестить" методику "факторизации" с техникой "фильтров".
  Ну и другие структуры на эту же тему "прошерстить".
  
  16.03.2024 21:01
  
  Неделю обдумывал, как бы более понятно изложить эту концепцию
  более понятным языком и, по возможности, наглядно.
  Так чтобы можно было оценить, насколько это реально реализовать
  уже на существующем "железе", если удастся решить
  некоторые "теоретические" вопросы обучения таких сетей.
  
  Попробую зайти с другой стороны.
  Давайте вспомним, с чего начиналась сама история нейросетей,
  с базовой идеи концепции перцептрона:
  
  "Изучаем Q#. Обучаем перцептрон".
  Автор: dprotopopov (Дмитрий Про )
  https://habr.com/ru/articles/772172/
  7 ноя 2023 в 06:11
  
  //// Начало цитирования.
  
  Базовым элементом построения нейросетей, как мы знаем,
  является модель нейрона,
  а, соответственно, простейшей моделью нейрона, является перцептрон.
  
  С математической точки зрения,
  перцептрон решает задачу разделения пространства признаков гиперплоскостью,
  на две части.
  То есть является простейшим линейным классификатором.
  //// А что будет базовым элементом в БНС?
  
  Рис. Обобщенная схема нейрона
  
  Обобщенная схема нейрона представляет собой функцию f(SUM Wi*xi - W0)
  
  Здесь
  
  x1,...,xn - компоненты вектора признаков x=(x1,x2,...,xn);
  
  SUM - сумматор;
  
  W1,W2,...,Wn - синоптические веса;
  
  f - функция активации; f(v)= { 0 при v < 0 и 1 при v>0 }
  
  W0 - порог.
  
  Таким образом, нейрон представляет собой линейный классификатор
  с дискриминантной функцией g(X)=f(SUM Wi*Xi - W0).
  
  И задача построения линейного классификатора
  для заданного множества прецедентов (Xk,Yk)
  сводится к задаче обучения нейрона,
  т.е. подбора соответствующих весов W1,W2,...,Wn и порога W0.
  
  Классический подход обучения перцептрона хорошо известен
  
  Инициализируем W0,W1,W2,...Wn (обычно случайными значениями)
  
  Для обучающей выборки (Xk,Yk)
  пока для всех значений не будет выполняться f(SUM WiXki - W0)==Yi
  повторяем последовательно для всех элементов:
  
  W = W + r(Yk - f(SUM WiXki - W0))Xk, где 0 < r < 1 - коэффициент обучения
  
  Для доказательства сходимости алгоритма применяется теорема Новикова,
  которая говорит, что если существует разделяющая гиперплоскость,
  то она может быть найдена указанным алгоритмом.
  
  ......
  
  //// Конец цитирования.
  
  Т.е. в основе большинства наиболее популярных концепций нейросетей
  лежит базовый элемент, являющийся линейным классификатором/сумматором
  на базе использования какой-то непрерывной решающей функции.
  
  В этой парадигме неявно предполагается "аксиома близости" значений
  используемых "внутренних представлений" и их "некоторая линейность",
  и обучения индивидуальных весовых коэффициентов входных данных.
  
  В БНС все это представляется совершенно необязательным,
  но для для целей как-то сохранить некоторую преемственность
  с существующими нейросетями,
  наверно, придется как-то приводить БНС к более-менее привычным представлениям.
  Но, это можно будет сделать немного позже.
  
  Важно понять, что вместо "базовой ячейки" традиционных нейросетй
  в виде перцептрона, предлагается нечто существенно иное,
  хотя и в чем-то похожее.
  
  Попробую описать этот "базовый элемент" для разрядности 8-бит.
  Итак имеем "8-ми битовую ячейку", имеющую:
   1 8-битовый выходной результирующий регистр;
   8 8-битовых входов или, может быть даже, входных регистров;
   1 64-битовых обучаемый регистр маски OR (операция ИЛИ) входных данных;
   1 64-битовых обучаемый регистр маски AND (операция И) входных данных;
   1 64-битовых обучаемый регистр маски XOR (операция ИЛИ-НЕ) входных данных;
   1 64-битовых обучаемый регистр маски AND (операция И) выходных данных;
   набор скрытых/подводных регистров используемых для улучшения процесса обучения.
  
  Размерность 8 и 64 бита выбраны с точки зрения простоты и удобства реализации
  на существующем "железе" и может быть легко изменена за счет
  каскадирования, распараллеливания, иерархичного построения и т.п.
  так как предполагается отсутствие ограничений
  на глубину и сложность БНС при обучении, за счет того,
  что "обучающее воздействие" всегда "равно одному биту".
  
  Три обучаемых 64-х битных регистра по работе с входными данными
  - это, в какой-то мере, аналог матриц "запроса" и "ключа"
  в блоке самовнимания трансформера,
  только вместо перемножения матриц используется битовая операция
  наложения соответствующей маски.
  При этом обеспечивается реализация ЛЮБОЙ функциональной зависимости
  между входными данными и результатом.
  Причем, это очень существенно, при таком подходе может
  происходить настройка не только "весовых коэффициентов"
  заранее выбранной функции, но и сам характер "функции",
  включая ее нелинейный и разрывный характер.
  
  Кроме того, всегда имеется возможность ограничить "вариабельность" этих функций
  наложив определенные ограничения на использование или обучение
  этих регистров масок операций над входными данными.
  Например, тот же "линейный классификатор", точнее, его различные битовые варианты,
  вполне реализуется использованием только регистра маски OR
  или регистра маски AND, или их комбинации.
  Будет ли более практичным использовать такие базовые элементы
  с ограниченным набором функций или с полным набором возможных функций,
  сейчас, наверно, вряд ли можно угадать, да и, собственно, незачем.
  Наверняка где-то потребуется более жесткий контроль
  за "результатом" и/или "поведением" таких базовых элементов,
  и такая возможность изначально закладывается.
  
  Отдельно надо сказать про 64-х битный регистр по работе с выходными данными.
  Звучит это очень коряво, но смысл в том, что это аналог gate из RNN или LTSM,
  что таким образом реализуется свойство "короткой памяти"
  аналогичной в рекуррентных нейросетях RNN.
  Т.е. это возможность использовать в результатах данного такта работы,
  какой-то части значений/результатов из предыдущего такта,
  причем для каждого входного данного есть своя часть маски в этом регистре.
  
  Возможно, что тут я чего-то "нахомутал" и не так понял, как работают RNN,
  но мне пока важнее зафиксировать мысль,
  что данная "базовая ячейка" БНС вполне может обеспечивать реализацию RNN
  точно такими же средствами как и остальные функции.
  
  Наверно, на этом стоит закончить этот фрагмент.
  И вовсе не потому, что считаю, что эта тема исчерпана,
  а, наоборот, что как раз пришло время вопросов,
  как такую систему нужно обучать.
  
  И здесь непоняток "выше крыши".
  Например, такая, что такую сеть можно обучать не только по "классике"
  методом "обратного распространения ошибки",
  но и так же "прямым распространением" как в сетях Кохоннена.
  И, может быть, комбинируя оба метода.
  
  И с этим нужно разобраться в первую очередь,
  так как это может подкорректировать структуру "базовой ячейки".
  Потому что разработка структуры нейронки и методов ее обучения
  - это "две стороны одной медали".
  Точнее две обязательные составляющие одной технологии,
  в результате которой "рождается клинок булатный".
  
  Иначе любую самую замечательную, стройную и логичную архитектуру
  придется настраивать/обучать какими-то непонятными, корявыми,
  нелогичными "полуэвристическими" или, точнее, полушаманскими" методами.
  
  Я понимаю, что все вышеизложенное трудно назвать четкой и ясной постановкой
  или изложением концепции битовых нейросетей БНС,
  но с чего-то начинать все-таки надо.
  
  "Дорога в десять тысяч лье начинается с первого шага".
  
  
  ========
  
  29.06.2024 12:05
  
  Итоги работы по теме "битовых" нейронок за три месяца.
  В оглавление.
  
  Прошло больше трех месяцев поисков информации по битовым/бинарным нейросетям
  и сейчас можно попробовать подвести какие-то итоги этой работе.
  
  Во-первых тема эта, скажем прямо, какой-то особой оригинальностью "не блещет".
  Таким предложениям уже почти два десятка лет, например, см.:
  "Метод автономного адаптивного управления."
  "А как сейчас проектируются бинарные нейросети?"
  
  Но в последнее время, тема эта в таком виде практически выпала из широкого обсуждения,
  и, судя по всему, на это есть ряд серьезных причин,
  и, скорее всего, вовсе не потому, что это невозможно сделать напрямую.
  В первую очередь потому, что просто на данном историческом этапе
  "многобитные нейронки" дают лучший результат,
  если не обращать внимания на требуемые ресурсы для решения задач.
  Хотя явно присутствуют и другие причины резкого сокращения открытых публикаций
  по этой тематике.
  
  Во-вторых, наметился другой подход к разработке битовых/бинаррных нейросетей,
  через предельную одно или полутора битовую "квантизацию" обычных "многобиток",
  используя самые различные методы/подходы, например, см.:
  "Немного об экстремально малоразрядном квантовании."
  
  Так что, очевидно, будущее возвращение к битовым/бинарным структурам нейросетей
  не за такими уж "далекими горами".
  Тем более, что под них потихоньку разрабатываются и специальные
  аппаратные "малобитные" нейроускорители, например, см.:
  "Аналоговые решения для дискретных нейросетей."
  
  В общем, работы в этом направлении, хотя и не очень афишируясь,
  продолжаются по очень многим направлениям,
  включая и специализированные методы обучения, например, см.:.
  "И снова на "арене цирка" однобитовые LLM."
  "Насколько реально обучение BNN методом сплошного перебора?"
  
  Интересно, что даже классическая "бинарная"/"двузначная" логика
  применительно к архитектуре нейросетей тоже может пересматриваться.
  Снова "всплывают из небытия" концепции "трехзначной логики",
  и на фоне ее вырисовываются контуры уже "полузначной логики",
  в которой есть только "подтверждающее значение" и "отсутствие информации", см.:
  "Возвращение троичной логики?"
  
  Честно сказать, то "зуд в руках" "сваять" что-то свое собственное "нейроподобное",
  используя 64-разрядный ассемблер, просто какой-то непреодолимый.
  Но есть две проблемы.
  Одна - как всегда нехватка времени. Вот разберусь с UEFI-загрузчиком и ...
  Вторая, более существенная, - нет понимания какую "инфраструктуру" закладывать,
  чтобы это "нейроподобное" можно было бы реализовать, обучать и исследовать.
  И это сейчас для меня самое сложное.
  Ну, очень не хочется становиться на седьмом десятке лет "юным питонистом".
  Мне бы как-то "по старинке" научиться/приспособиться работать.
  
  Есть и еще один момент.
  В последние недели вырисовалась идея представления "пространства решений" нейронок,
  как "многоуровневого пространства", подробнее см.:
  "Размышления о работе над проектом во II квартале 2024г."
  
  И для попытки анализа того как это можно "приспособить к делу",
  можно ли это как объединить с "голографическим принципом",
  и как это может помочь понять "загадку" многоэлементных эмбеддингов/латентов,
  как раз лучше подходят "многобитные" нейронки.
  Точнее, эту "многоуровневость пространства" совершенно непонятно
  как представлять в "однобитном" варианте,
  если даже "многобитном" варианте нащупать что-то осмысленное пока не удается.
  А тема эта представляется достаточно перспективной
  в плане понимания "поведения нейронок".
  
  В общем, пока тема битовых/бинарных нейросетей по-прежнему находится
  в фазе "глубокого осмысления".
  
  
  ========
  
  Фрактал голограммы
  
  MNINITIFTI. Модель Kandinsky 3.0 нарисовала:  655c994bd55a45f2b6eb49023229c57f_res_00000_image
  
  MNINITIFTI. Модель Kandinsky 3.0 нарисовала:  7bc3a8cb397143f3a846599104cfea20_res_00000_image
  
  Металоция неведомого. Модель Kandinsky 3.1 нарисовала:  2f00e421-c26e-4300-b95d-07c2767e861c
  
  Металоция неведомого. Модель Kandinsky 3.1 нарисовала:  a2c843f2-dd53-46d0-b736-6e5cdff2dd29
  
  Металоция неведомого. Модель Kandinsky 3.1 нарисовала:  704b6500-a86d-4a0e-a2ae-bdac1f4c7bb3
  Flag Counter
  Free counters!
  
 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"