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

Металоция неведомого. Модуль Л. Ликбез

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:


 Ваша оценка:
  • Аннотация:
    Сборник ссылок на литературу для расширения кругозора.
    Расшифровка некоторых терминов.
    Крайнее обновление 14.04.2024.

  
  "Тот факт, что многие ищут истину и не находят ее,
  объясняется, вероятно, тем, что пути к истине,
  подобно дорогам в ногайской степи, ведущим от одного места к другому,
  столь же широки и длинны."
  Георг Кристоф Лихтенберг
  
  "Несомненный признак всякой хорошей книги это тот,
  что она нравится тем больше, чем человек становится старше."
  Георг Кристоф Лихтенберг
  
  Оглавление:
   Вместо введения.
  
  Часть 1. Библиотека.
   Нейронки и ГПТэшки.
   Фракталы.
   Вселенная.
   Метафизика.
   ТРИЗ.
   Программирование.
   Любимая фантастика.
   Педагогика.
   Логика.
   Вместо заключения.
  
  Часть 2. Непонятки простыми словами.
   Нейронная сеть простыми словами.
   Градиентный спуск простыми словами.
   Эмбеддинги простыми словами.
   Трансформеры простыми словами.
   Dropout и Batch normalization простыми словами.
   Математика простыми словами. Фрагмент 1.
   Data Science простыми словами.
   Основа теории вероятности простыми словами.
   Контринтуитивные следствия "Закона больших чисел" на примерах.
   Условная вероятность простыми словами.
   Структуры нейросетей простыми словами.
   Функции активации нейронов простыми словами.
   Разработка интеллектуальной ML-системы простыми словами.
   Еще раз об эмбеддингах еще более простыми словами.
   "Обучение с подкреплением" простыми словами.
   "Проклятье размерности" в пространстве.
   Сверточные сети простыми словами.
   Чем машинное обучение отличается от статистики.
   Батчи в обучении и инференсе нейросетей простыми словами..
  
  Иллюстрация:
   Шлюп "Ликбез" от "Модели Кандинский 2.1".
   Шлюп "Ликбез" от "Модели Кандинский 3.0".
   "Батчи в обучении и инференсе нейросетей" от Copilot.
   Шлюп "Ликбез" от "Модели Кандинский 3.1".
  
  ========
  
  21.05.2023 9:10
  
  Вместо введения.
  В оглавление.
  
  Наткнулся на неплохую обзорную статью по нейронкам и задумался
  куда ее стоит разместить, чтобы от нее была польза и всегда была "под рукой".
  И сообразил, что неплохо было бы иметь какой-то отдельный модуль,
  посвященный таким ссылкам, раскинувшимся по разным фрагментам текста
  в разных модулях.
  
  Так сказать, раздел "Литература", который должен быть в любом приличном проекте.
  Но как показывает практика, в таком разделе собираются ссылки на источники
  разной степени важности и, самое главное, разного качества и доступности.
  И вторая проблема таких разделов, что они большей частью чисто формальные,
  и, как правило, толком их никто не читает.
  
  Поэтому, этот модуль решил назвать "Ликбез", так как в него планирую,
  пополнять ссылками на действительно полезные и доступные для понимания
  материалы и просто любимые книжки.
  Если это название кого-то "коробит", то приношу свои извинения,
  и всегда буду готов переименовать его в "Литературу",
  но этого не хотелось бы, так как смысл этого модуля немного не другой.
  
  
  ========
  
  Часть 1. Библиотека.
   Нейронки и ГПТэшки.
   Фракталы.
   Вселенная.
   Метафизика.
   ТРИЗ.
   Программирование.
   Любимая фантастика.
   Педагогика.
   Логика.
   Вместо заключения.
  
  
  ========
  
  Нейронки и ГПТэшки.
  В оглавление.
  
  02.08.2023 13:11
  
  Начать знакомство с нейронками рекомендую вот с такого начального материала:
  
  "Нейронные сети для начинающих. Часть 1"
  Автор: Arnis71 (Арнис)
  https://habr.com/ru/articles/312450/
  12 окт 2016 в 15:48
  
  "Нейронные сети для начинающих. Часть 2"
  Автор: Arnis71 (Арнис)
  https://habr.com/ru/articles/313216/
  12 фев 2017 в 18:38
  
  И продолжить вот с этого обзорного материала:
  "Нейросеть - что это такое и как создать свою нейросеть"
  Автор: olzeykan (Олег Руднев)
  https://habr.com/ru/articles/736466/.
  20 мая в 21:56
  
  А знакомство уже с ГПТэшками, несомненно, с "классики" от Павла Комаровского
  "Как работает ChatGPT:
  объясняем на простом русском эволюцию языковых моделей начиная от T9"
  https://vc.ru/future/623774-kak-rabotaet-chatgpt-obyasnyaem-na-prostom-russkom-evolyuciyu-yazykovyh-modeley-nachinaya-ot-t9.
  6 мар 2023 в 08:26
  
  Ну и если, всерьез интересно, что у ГПТэшек "под капотом",
  то можно начать с этого материала:
  "Нейросети-трансформеры изнутри: как работает декодер"
  Автор: Владимир Селеверстов
  Редактор: Даниил Скоринкин
  Иллюстратор: Евгения Родикова
  https://sysblok.ru/knowhow/nejroseti-transformery-iznutri-kak-rabotaet-dekoder/
  27.11.2020
  
  02.06.203 18:28
  
  Очень хорошая обзорная статья и о ChatGPT и о принципах его работы,
  так как принято это сейчас считать, и сравнение его с логикой
  человеческого мышления и языка и, вообще, много-много всякого интересного
  и познавательного, и все это прекрасно иллюстрировано.
  Статья ОЧЕНЬ объемная, но она стоит того, так что настройтесь на длительное чтение.
  
  Что делает ChatGPT: и почему это работает?
  Автор оригинала: Stephen Wolfram
  Автор перевода: TyVik (Виктор)
  https://habr.com/ru/articles/739014/
  2 июня 2023
  
  29.10.2023 13:50
  
  Еще одно очень неплохое и, к тому же, весьма компактное описание
  работы трансформерной технологии в ИИ-системах:
  
  "Объясняем простым языком, что такое трансформеры".
  Автор: randall
  https://habr.com/ru/companies/cloud_mts/articles/770202/.
  27 окт 2023 в 12:36
  
  Автор оригинала: Chris Hughes
  https://towardsdatascience.com/de-coded-transformers-explained-in-plain-english-877814ba6429
  
  
  ========
  
  Фракталы.
  В оглавление.
  
  Для первого ознакомительного представления о фракталах,
  наверно, подойдет достаточно добротный материал из Вики:
  "Фрактал"
  https://ru.wikipedia.org/wiki/%D0%A4%D1%80%D0%B0%D0%BA%D1%82%D0%B0%D0%BB.
  
  Для представления о том, в каком направлении развивается сейчас
  теория фракталов, фрактальный метод и связанные с ним практические технологии,
  рекомендую работу Потапова Александра Алексеевича
  "ФРАКТАЛЫ, СКЕЙЛИНГ И ДРОБНЫЕ ОПЕРАТОРЫ В РАДИОТЕХНИКЕ И ЭЛЕКТРОНИКЕ:
  СОВРЕМЕННОЕ СОСТОЯНИЕ И РАЗВИТИЕ"
  http://jre.cplire.ru/jre/jan10/4/text.html.
  25 января 2010 г.
  
  
  ========
  
  Вселенная.
  В оглавление.
  
  Представлений о вселенной, наверно, столько же сколько и разумных существ,
  и какого-то "единственно верного" точно нет.
  МироЗдание БеЗконечно.
  
  Но какие-то "промежуточные представления" вполне могут у кого-то
  и в чем-то совпадать.
  
  Вот материал, близкий к моему представлению о Вселенной:
  "Самая реалистичная интерпретация квантовой механики"
  Автор: Yermack (Ермоленко Игорь)
  https://habr.com/ru/post/506896/.
  16 июня 2020 в 15:14
  
  А это очень интересная книжка о поиске "последнего моря"
  в мире квантовой физики, и хотя я не очень согласен с автором,
  но сам по себе "интеллектуальный детектив" в такой необычной области
  очень познавательный и увлекательный.
  Поэтому с чистым сердцем рекомендую: книга Аманды Гефтер
  "На лужайке Эйнштейна. Что такое НИЧТО, и где начинается ВСЕ"
  http://flibusta.site/b/474823/read.
  
  03.07.2023 12:27
  
  А для того чтобы почувствовать, что до "окончательной теории" еще очень далеко,
  рекомендую прочитать такой материал: статья Симона Эльевича Шноля
  "Космофизические факторы в случайных процессах"
  http://www.delphis.ru/journal/article/kosmofizicheskie-faktory-v-sluchainykh-protsessakh
  
  
  ========
  
  Метафизика.
  В оглавление.
  
  Безусловно, у каждого есть своя персональная "метафизика",
  как представление об устройстве Мироздания,
  и каждое такое представление имеет право на жизнь.
  
  Поэтому, предлагаю познакомиться с таким вариантом метафизики,
  в котором автор весьма убедительно демонстрирует,
  что многие разные учения можно представить как разные проекции,
  условно говоря, одного "гиперкуба".
  
  Юрий Сергеевич Владимиров
  "Метафизика"
  https://www.gpntb.ru/elres/binom/MetaPhys.pdf
  Очень расширяет мировосприятие,
  особенно, если проскальзывать мимо математических формул
  а пытаться схватить суть идеи.
  
  Но это все-таки более-менее "устоявшиеся" взгляды на метафизику нашего Мира,
  а вот если интересны и другие взгляды на Мироздание,
  то их тоже не мало. Например, вот такой для предварительного ознакомления:
  
  Лера Некрасова
  "Есть ли на других планетах параллельные реальности?
  Или такое бывает только на Земле?
  Как Все Устроено"
  https://dzen.ru/a/Y2pwhZE8PVLwoXHw
  Если заинтересует, то там есть ссылки и на развитие этой и других связанных тем.
  
  
  ========
  
  ТРИЗ.
  В оглавление.
  
  Мне представляется, что без знания хотя бы азов ТРИЗ
  - Теории Решения Изобретательских Задач -
  в наше время считаться инженером, как-то, не очень правильно.
  
  Для беглого и вполне увлекательного знакомства с ТРИЗ
  вполне подойдет книга Бориса Львовича Злотина и Аллы Вениаминовны Зусман
  "Месяц под звездами фантазии"
  http://hegelnet.narod.ru/methodology/fantasy.pdf
  
  Ну и если захочется больше углубиться в этой теме,
  то нужно будет сначала познакомиться с "классикой":
  Генрих Саулович Альтшуллер (Альтов)
  "И ТУТ ПОЯВИЛСЯ ИЗОБРЕТАТЕЛЬ"
  https://sheba.spb.ru/za/itut-izo-1989.htm
  
  Это все книжки для "младшего школьного возраста",
  Но "человеку столько лет, насколько он себя чувствует".
  Если появится серьезное желание углубиться в ТРИЗ,
  то рассматривайте это как задачу, которую ну очень легко решить,
  имея доступ в Инет, и минимальные представления о ТРИЗ.
  
  03.07.2023 12:39
  
  Но, наверно, надо все-таки подсказать такую "рубежную книгу" Генриха Сауловича Альтшуллера
  "ТВОРЧЕСТВО КАК ТОЧНАЯ НАУКА"
  https://pqm-online.com/assets/files/lib/books/altshuller.pdf,
  в которой высказана постинне революционная мысль, что любому творчеству,
  можно научиться познавая законы развития той области, на которую направлено конкретное творчество,
  используя подсказки из ТРИЗ.
  
  А для того, чтобы почувствовать, что ТРИЗ вполне можно использовать
  не только в области техники но и практически везде, где нужно решать
  нестандартные задачи очень рекомендую для "домашнего чтения"
  короткий и хороший рассказ Валентины Журавлевой
  "Приключение"
  https://libking.ru/books/sf-/sf/61185-valentina-zhuravleva-priklyuchenie.html,
  как раз на эту тему.
  
  
  ========
  
  24.05.2023 20:35
  
  Программирование.
  В оглавление.
  
  Здесь на первом месте, на мой взгляд, должна быть "Библия Программиста":
  
  Фредерик БРУКС
  "Мифический человеко-месяц".
  https://nsu.ru/xmlui/bitstream/handle/nsu/8870/Frederick_Brooks.pdf
  Главную идею этой книги, в общем-то, можно передать одной фразой,
  но дело не в том, чтобы услышать ее, и пропустить мимо "межушного ганглия",
  а понять, что иного выбора, кроме "документарной гипотезы", по факту, нет.
  
  Может быть когда-то я решусь разместить на данном сайте свой комментарии
  к этой эпохальной книге, но пока это явно "не формат".
  Но тезис, который я вынес из этой книги и которому пытаюсь всегда следовать,
  звучит примерно так:
  "Хороший документ - это готовая программа,
  а хорошая программа - это почти готовый документ".
  
  
  ========
  
  Любимая фантастика.
  В оглавление.
  
  Список любимой фантастики очень широк,
  поэтому ограничусь только самыми-самыми,
  и теми которые созвучны с задумкой проекта "Металоция"
  и максимой "и один в поле воин".
  
  И начну с самого любимого автора:
  Лоис МакМастер Буджолд
  "Границы бесконечности"
  https://www.6lib.ru/books/read/granici_beskonehnosti-19127
  Можно перечислить и еще с десяток книг этого автора из "Барраярского цикла"
  или "Проклятие Шалиона", но пусть каждый сам для себя решает,
  нравится ему или нет этот автор.
  
  Следующие авторы, наверно, в представлениях не нуждаются
  Нил Стивенсон
  "Анафем"
  https://fantasy-worlds.org/lib/id17724/read/
  
  Алексей Осадчук
  "Сумеречный Обелиск"
  https://flibusta.su/book/14317-sumerechnyiy-obelisk/
  По-моему, это четвертая или пятая книга, их хорошего цикла "Проект работяга".
  
  А теперь авторы СамИздата:
  
  Проскурин Вадим Геннадьевич
  "Хоббит, который познал истину"
  http://samlib.ru/p/proskurin_w_g/hobbit3.shtml
  
  Юрченко Сергей Георгиевич
  "ВРЕМЯ ДЛЯ ИНЖЕНЕРА ВРЕМЕНИ"
  http://samlib.ru/j/jurchenko_s_g/01_realmsofmightandmagic.shtml
  Оригинальная ссылка по требованию редакции содержит сильно урезанную версию,
  поэтому даю ту, где сам прочел в полном объеме
  https://booksonline.com.ua/view.php?book=181210
  А на сайте автора, есть дальнейшее, и весьма интересное,
  продолжение этого проекта.
  Интересное еще и тем, что проект еще продолжается,
  и очень познавательно наблюдать за самим процессом создания чего-то,
  одновременно и знакомого и в то же время нового и неведомого.
  
  
  ========
  
  02.06.203 18:28
  
  Педагогика.
  В оглавление.
  
  Этот раздел счел необходимым включить,
  так как в рамках проекта приходится заниматься обучением ИИ-систем,
  а конкретно "Модель Kandinsky 2.x".
  и пытаюсь сравнивать возможные приемы с обучением "homo sapiens".
  Пока получается "не очень".
  Может быть, что-то я не понимаю вообще в педагогике.
  
  И список этих материалов безусловно должен начинаться с книги моего детства,
  зачитанной, но не "до дыр", а до полного погружения в ту эпоху:
  
  Антон Семенович Макаренко
  "Педагогическая поэма"
  https://librebook.me/pedagogicheskaia_poema
  
  Причем предлагаю начать читать "Педагогическую Поэму" с главы,
  которая по "каким-то" причинам не вошла в официальные издания:
  "Из наследия Антона Семеновича Макаренко. На педагогических ухабах"
  Автор: ВладимирХ
  https://aftershock.news/?q=node/1234674
  08:31 - 15/Апр/23
  
  А следующая книга, вообще-то, должна была бы идти по разделу фантастики,
  но я ее понимаю как руководство по наставничеству для самого себя:
  
  Лоис МакМастер Буджолд
  "Проклятие Шалиона"
  https://royallib.com/book/budgold_lois/proklyatie_shaliona.html
  
  
  ========
  
  16.12.2023 16:33
  
  Логика.
  В оглавление.
  
  Не смог пропустить просто замечательный цикл статей
  про основания и законы логики, правда достаточно "классической",
  изложенные буквально "на пальцах",
  и доступные для любого уровня подготовки читателя,
  несмотря на устрашающее названия:
  
  "На чем основана логика?
  Часть 1. Алгебра множеств без аксиом".
  Автор: AntiLogik (Борис Кулик специалист по логике и математике (д.ф.-м.н.))
  https://habr.com/ru/articles/781386/.
  19 дек 2023 в 15:48
  
  //// Здесь мне больше всего заинтересовал
  //// метод доказательства законов "без аксиом" методом перебора,
  //// или используя другие "законы", доказанные таким же образом.
  //// Стоит запомнить как аргумент против изначальной необходимости "аксиом".
  
  "На чем основана логика?
  Часть 2. Математическая модель полисиллогистики".
  Автор: AntiLogik (Борис Кулик специалист по логике и математике (д.ф.-м.н.))
  https://habr.com/ru/articles/781684/.
  19 дек 2023 в 16:18
  
  //// А здесь просто замечательный графический метод анализа бинарной логики,
  //// и достаточно сложных логических задач.
  //// В чем-то это сравнимо с методами умножения/деления "в столбик",
  //// так же просто, удобно и легко запоминаемо.
  
  А это уже другой тип логики - нечеткая логика,
  отличная от привычной логики "исключенного третьего",
  но тоже изложенная доступно и понятно
  на примере управления "стиральной машинкой".
  
  "История о том, как нечеткая логика доказала:
  искусственный интеллект человеку не страшен".
  Автор: Александр Малютин
  https://mirbis.ru/articles/istoriya-o-tom-kak-nechetkaya-logika-dokazala-iskusstvennyy-intellekt-cheloveku-ne-strashen/.
  15 сентября 2017
  
  /// В этом тексте можно найти примеры
  /// и успешного применения математичкой теории на практике,
  /// и формирование успешного маркетингового бренда
  /// из удачного математического термина.
  
  
  ========
  
  25.05.2023 6:33
  
  Вместо заключения.
  В оглавление.
  
  Данный список, надеюсь, будет еще пополняться,
  так что говорить о завершении модуля пока рановато.
  
  Заранее приношу все возможные извинения уважаемым авторам,
  что где-то даю ссылки на какие-то "левые" или "пиратские" сайты,
  на ту же Флибусту. Но не всегда легко найти подходящую рабочую ссылку
  с минимумом рекламных баннеров.
  
  И я, вообще не очень одобряю, авторское право в его нынешнем виде,
  особенно после его распространения на программное обеспечение.
  Права всегда должны сопровождаться обязанностями.
  А этого баланса пока не наблюдается.
  И "флибустьерство" в этой области это просто один из вариантов
  частичного восстановления давно нарушенного баланса.
  
  Я надеюсь, что представленный список книг и статей,
  может лучше характеризовать и автора и сам проект "Металоция",
  лучше чем "справка с места работы".
  
  Прочитанные книги они как корабли, все имеют свои имена, и свою судьбу.
  Иногда их зачитывают до дыр, иногда их можно прочесть всего один раз,
  и запомнить на всю жизнь как момент встречи с Чудом Магии Слова.
  И всегда они готовы из глубин памяти придти на помощь в трудную минуту.
  
  "...И в беде, и в радости, и в горе
  Только чуточку прищурь глаза -
  В флибустьерском дальнем синем море
  Бригантина подымает паруса.
  В флибустьерском дальнем синем море
  Бригантина подымает паруса..."
  
  27 мая 2023 года Андрей Павлович Митасов, Минск, РБ, Порт приписки Земля.
  
  
  ========
  
  15.12.2023 13:02
  
  Часть 2. Непонятки простыми словами.
   Нейронная сеть простыми словами.
   Градиентный спуск простыми словами.
   Эмбеддинги простыми словами.
   Трансформеры простыми словами.
   Dropout и Batch normalization простыми словами.
   Математика простыми словами. Фрагмент 1.
   Data Science простыми словами.
   Основа теории вероятности простыми словами.
   Контринтуитивные следствия "Закона больших чисел" на примерах.
   Условная вероятность простыми словами.
   Структуры нейросетей простыми словами.
   Функции активации нейронов простыми словами.
   Разработка интеллектуальной ML-системы простыми словами.
   Еще раз об эмбеддингах еще более простыми словами.
   "Обучение с подкреплением" простыми словами.
   "Проклятье размерности" в пространстве.
   Сверточные сети простыми словами.
   Чем машинное обучение отличается от статистики.
   Батчи в обучении и инференсе нейросетей простыми словами..
  
  
  =========
  
  15.12.2023 13:02
  
  Нейронная сеть простыми словами.
  В оглавление.
  
  Нейронная сеть (НС) - это последовательность нейронов,
  соединенных между собой синапсами/связями.
  
  Нейрон - это вычислительная единица, которая получает информацию,
  производит над ней простые вычисления и передает ее дальше.
  Они делятся на три основных типа: входной, скрытый и выходной.
  Также есть нейрон смещения и контекстный нейрон,
  на которые в первом приближении можно не заморачиваться.
  В том случае, когда нейросеть состоит из большого количества нейронов,
  вводят термин слоя.
  Соответственно, есть входной слой, который получает информацию,
  n скрытых слоев, которые ее обрабатывают
  и выходной слой, который выводит результат.
  У каждого из нейронов есть 2 основных параметра:
  входные данные (input data) и выходные данные (output data).
  В случае входного нейрона: input=output.
  В остальных, в поле input попадает
  суммарная информация всех нейронов с предыдущего слоя,
  после чего, она нормализуется/преобразуется,
  с помощью функции активации (они могут быть очень разные)
  и попадает в поле output.
  
  Алгоритм работы НС следующий:
  
  1. На входной слой поступают данные.
  
  2. Синапсы/связи передают данные на следующий слой.
   Каждому синапсу присвоен определенный коэффициент веса
   и у каждого последующего нейрона может быть несколько входных синапсов.
  
  3. Данные, которые передаются следующему нейрону
   - это сумма всех данных в нейронке,
   умноженных на соответствующие коэффициенты веса.
  
  4. Полученные значения подставляются в функцию активации,
   что приводит к формированию выходных данных.
  
  5. Передача данных будет продолжаться,
   пока она не достигнет конечного выхода.
  
  Известно, что при первом запуске нейронной сети результаты могут быть неточными,
  так как сеть еще не обучена.
  
  Нейронки обучаются посредством обработки нескольких больших наборов
  размеченных или неразмеченных данных.
  Это позволяет сетям более точно обрабатывать неизвестные входные данные.
  Стоит отметить, что в зависимости от типа нейронки и ее структуры
  мы получаем разные прогнозные данные.
  
  Процесс обучения
  
  1. Выбираем один образец из набора данных,
  
  2. Подаем его на вход нейронки и вычисляем результат.
  
  3. Сравниваем полученный результат и известным требуемым ответом.
  
  4. Вычисляем общую ошибку работы нейронки на данном образце.
  
  5. Вычисляем все производные от общей ошибки по весам нейронов.
   Это называется расчетом обратного распространения ошибки.
  
  6. Обновляем веса синапсов/связей каждого нейрона,
   так чтобы уменьшить общую ошибку,
   например, одним из методов градиентного спуска.
  
  7. Возвращаемся к шагу 1 и движемся вперед.
  
  В процессе обучения нейронка КАК-ТО запоминает и КАК-ТО обобщает,
  использованные при обучении данные в ВИДЕ обновленных весов нейронов.
  
  Функции активации
  
  Функция активации представляет собой нелинейное преобразование,
  которое используется нейронами при преобразовании входных данных.
  чтобы помочь сети изучить сложные закономерности в данных.
  
  Использованные материалы:
  
  Начать знакомство с нейронками рекомендую вот с такого обзорного материала:
  "Нейросеть - что это такое и как создать свою нейросеть"
  Автор: olzeykan (Олег Руднев)
  https://habr.com/ru/articles/736466/.
  20 мая 2023 в 21:56
  
  "Нейронные сети для начинающих. Часть 1"
  Автор: Arnis71 (Арнис)
  https://habr.com/ru/articles/312450/
  12 окт 2016 в 15:48
  
  
  ==========
  
  12.02.2023 13:29
  
  Градиентный спуск простыми словами.
  В оглавление.
  
  Наиболее часто при обучении нейронок используют градиентный спуск:
  
  "Градиентный спуск простыми словами".
  Автор: DanilaKhr (Данила)
  https://habr.com/ru/post/716380/
  12 фев 2023 в 13:16
  
  //// Начало цитирования.
  
  ........
  
  Градиентный спуск - это алгоритм оптимизации,
  используемый для минимизации ошибок в модели машинного обучения.
  Он работает путем итеративной корректировки параметров модели
  в направлении отрицательного градиента функции потерь
  (которая представляет ошибку),
  чтобы уменьшить ошибку и найти оптимальные параметры,
  которые дают наилучшие результаты прогнозирования.
  Алгоритм продолжает этот процесс до тех пор,
  пока он не достигнет минимума
  или не будет выполнен заранее определенный критерий остановки.
  
  Или максимально просто.
  
  Градиентный спуск - это способ обучения и совершенствования
  модели машинного обучения.
  Он делает это, постоянно пытаясь лучше предсказать правильный ответ,
  корректируя свое "мышление".
  Для этого используется математическая формула,
  чтобы определить, в каком направлении нужно двигаться,
  чтобы приблизиться к правильному ответу.
  Процесс повторяется много раз,
  пока алгоритм не сможет предсказать ответ настолько хорошо,
  насколько это возможно.
  
  .......
  
  Также существуют альтернативы градиентному спуску:
  
  Стохастический градиентный спуск (SGD):
  вариант градиентного спуска,
  который обновляет параметры модели,
  используя только один случайно выбранный обучающий пример за итерацию.
  
  Mini-batch gradient descent:
  вариант градиентного спуска, который обновляет параметры модели,
  используя небольшую случайно выбранную партию обучающих примеров за итерацию.
  
  Conjugate gradient:
  алгоритм оптимизации, который находит минимум функции
  путем итеративного улучшения аппроксимации минимума.
  (Проще говоря, апроксимация - это приблизительное предположение
  о наименьшем значении функции.)
  
  BFGS (Broyden-Fletcher-Goldfarb-Shanno):
  квази-ньютоновский метод, который аппроксимирует матрицу Гессиана,
  чтобы быстрее сходиться к минимуму функции потерь.
  
  Adam (Adaptive Moment Estimation):
  алгоритм оптимизации на основе градиента,
  который использует скользящие средние градиента и квадраты градиента
  для адаптации скорости обучения для каждого параметра.
  
  ........
  
  Выбор скорости обучения:
  
  Скорость обучения, также известная как размер шага,
  является важным гиперпараметром при градиентном спуске.
  Большая скорость обучения может привести к превышению минимума,
  в то время как небольшая скорость обучения может привести
  к медленной конвергенции.
  Тщательный выбор скорости обучения важен для получения
  хороших результатов при градиентном спуске.
  
  Сходимость и переобучение:
  
  Градиентный спуск может сходиться к минимуму функции потерь,
  но он также может застрять в локальном минимуме,
  что приведет к переобучению обучающих данных.
  Чтобы избежать переобучения,
  можно использовать методы регуляризации,
  такие как регуляризация L1 или L2.
  (Это способы предотвратить чрезмерную сложность модели
  за счет уменьшения влияния некоторых функций в модели.)
  
  Градиентный спуск может быть дорогостоящим с точки зрения вычислений:
  
  Вычисление градиента функции потерь
  и обновление параметров на каждой итерации градиентного спуска
  может быть дорогостоящим с точки зрения вычислений,
  особенно для больших наборов данных или сложных моделей.
  Чтобы сократить время вычислений, можно использовать такие методы,
  как параллельные вычисления и векторизация.
  
  .........
  
  //// Конец цитирования.
  
  
  =========
  
  12.12.2023 13:29
  
  Эмбеддинги простыми словами.
  В оглавление.
  
  Часто используемый в текстах по нейронкам термин "эмбеддинг",
  это просто представление данных различного формата/природы
  набором чисел, точнее говоря, вектором,
  размерность которого может существенно отличаться
  от размерности представляемых данных.
  Особо хочется отметить что эмбеддинги могут использоваться
  и ВМЕСТО обычных признаков, так и ВМЕСТЕ с обычными признаками.
  Обратите на этот существенный момент пристальное внимание
  при чтении этого достаточно объемного текста:
  
  "Эмбеддинги признаков и повышение точности ML-моделей".
  Автор: mr-pickles
  https://habr.com/ru/companies/wunderfund/articles/590651/
  22 ноя 2021 в 14:22
  
  Автор оригинала: Michael Malin
  https://towardsdatascience.com/why-you-should-always-use-feature-embeddings-with-structured-datasets-7f280b40e716
  
  //// Начало цитирования.
  
  Создание эмбеддингов признаков (feature embeddings)
  - это один из важнейших этапов подготовки табличных данных,
  используемых для обучения нейросетевых моделей.
  Об этом подходе к подготовке данных,
  к сожалению, редко говорят в сферах,
  не связанных с обработкой естественных языков.
  И, как следствие, его почти полностью обходят стороной
  при работе со структурированными наборами данных.
  Но то, что его, при работе с такими данными,
  не применяют,
  ведёт к значительному ухудшению точности моделей.
  Это стало причиной появления заблуждения,
  которое заключается в том,
  что алгоритмы градиентного бустинга,
  вроде того, что реализован в библиотеке XGBoost,
  это всегда - наилучший выбор для решения задач,
  предусматривающих работу со структурированными наборами данных.
  Нейросетевые методы моделирования,
  улучшенные за счёт эмбеддингов,
  часто дают лучшие результаты,
  чем методы, основанные на градиентном бустинге.
  Более того - обе группы методов показывают серьёзные улучшения
  при использовании эмбеддингов,
  извлечённых из существующих моделей.
  
  Эта статья направлена на поиск ответов на следующие вопросы:
  
  Что такое эмбеддинги признаков?
  
  Как они используются при работе со структурированными данными?
  
  Если использование эмбеддингов - это столь мощная методика
  - почему она недостаточно широко распространена?
  
  Как создавать эмбеддинги?
  
  Как использовать существующие эмбеддинги для улучшения других моделей?
  
  Эмбеддинги признаков
  
  Нейросетевые модели испытывают сложности
  при необходимости работы с разреженными категориальными признаками.
  Эмбеддинги - это возможность уменьшения размерности таких признаков
  ради повышения производительности модели.
  Прежде чем говорить о структурированных наборах данных,
  полезно будет разобраться с тем, как обычно используются эмбеддинги.
  В сфере обработки естественных языков (Natural Language Processing, NLP)
  обычно работают со словарями, состоящими из тысяч слов.
  Эти словари обычно вводят в модель
  с использованием методики быстрого кодирования (One-Hot Encoding),
  что, в математическом смысле,
  равносильно наличию отдельного столбца для каждого из слов.
  Когда слово передаётся в модель,
  в соответствующем столбце оказывается единица,
  в то время как во всех остальных выводятся нули.
  Это ведёт к появлению очень сильно разреженных наборов данных.
  Решение этой проблемы заключается в создании эмбеддинга.
  
  Рис. Визуализация, выполненная с помощью TensorFlow Embedding Projector
  
  По сути дела, речь идёт о том, что эмбеддинг,
  на основе обучающего текста,
  группирует слова со сходным значением и возвращает их местоположение.
  Например - значение эмбеддинга слова
  может быть подобно значениям эмбеддингов слов и ,
  или словосочетания .
  На практике нейронные сети демонстрируют
  значительное улучшение производительности
  при применении подобных репрезентативных свойств.
  
  Эмбеддинги и структурированные данные
  
  Структурированные наборы данных тоже часто содержат
  разреженные категориальные признаки.
  В вышеприведённой таблице,
  содержащей данные о продажах,
  имеются столбцы с почтовым индексом и идентификатором магазина.
  Так как в этих столбцах могут присутствовать сотни или тысячи
  уникальных значений,
  использование этих столбцов приведёт к появлению
  тех же проблем с производительностью,
  о которых мы говорили ранее в применении к NLP-моделям.
  Почему бы тут, по вышеописанной схеме,
  не воспользоваться эмбеддингами?
  
  Проблема заключается в том,
  что сейчас мы имеем дело более чем с одним признаком.
  В данном случае это два отдельных разреженных категориальных столбца
  (zip_code и store_id),
  а так же другие ценные признаки,
  вроде общего объёма продаж конкретному клиенту.
  Мы просто не можем заложить все эти признаки в эмбеддинг.
  Но мы, однако, можем подготовить эмбеддинги в первом слое модели
  и добавить в модель,
  вместе с эмбеддингами, и обычные признаки.
  Это не только приведёт к преобразованию
  почтового индекса и идентификатора магазина в ценные признаки,
  но и позволит не <размывать> другие ценные признаки тысячами столбцов.
  
  Почему эмбеддингам не уделяют достаточно внимания?
  
  В крупнейших компаниях, занимающихся машинным обучением (Machine Learning, ML),
  эта техника работы с данными, бесспорно, применяется.
  Проблема заключается в том,
  что подавляющее большинство дата-сайентистов,
  находящихся за пределами таких компаний,
  никогда даже и не слышали о таком способе использования эмбеддингов.
  Почему это так?
  Хотя я и не сказал бы,
  что эти методы чрезвычайно сложно реализовать,
  они сложнее того, чему учат на типичных онлайн-курсах.
  Большинство начинающих ML-практиков просто не научили тому,
  как использовать эмбеддинги вместе с другими некатегориальными признаками.
  В результате признаки вроде почтовых индексов и идентификаторов магазинов
  просто выбрасывают из модели.
  Но это - важные данные!
  
  Некоторые значения признака можно включить в модель,
  воспользовавшись другими техниками,
  вроде метода среднего кодирования (Mean Encoding),
  но подобное даёт лишь небольшие улучшения.
  Это привело к тенденции,
  когда от нейросетевых моделей полностью отказываются,
  выбирая методы, задействующие алгоритмы градиентного бустинга,
  которые способны лучше работать с категориальными признаками.
  Но, как уже было сказано,
  эмбеддинги могут улучшить оба метода моделирования.
  Сейчас мы разовьём эту тему.
  
  Создание эмбеддингов
  
  Самое сложное при работе с эмбеддингами
  - разобраться с наборами данных TensorFlow.
  И хотя устроены они совсем не так понятно, как датафреймы Pandas,
  научиться работать с ними весьма полезно.
  В частности - полезно для того,
  кто хотя бы задумывается о том,
  чтобы его модели работали бы с огромными наборами данных,
  и для того, кто стремится к созданию более сложных нейросетевых моделей,
  чем те, которые он уже разрабатывает.
  
  ......
  
  Обратите внимание на то,
  что при создании эмбеддингов нам нужно указать число измерений.
  Это определяет то количество признаков,
  к которому будут сведены признаки из категориальных столбцов.
  Общее правило заключается в том,
  что результирующее количество признаков выбирается
  равным корню четвёртой степени из общего количества категорий
  (например - 1000 уникальных почтовых индексов сводятся к ~6 столбцам эмбеддинга).
  Но это - один из тех параметров,
  которые можно настраивать в собственной модели.
  
  .....
  
  Итоги
  
  Теперь, когда эмбеддинги сохранены,
  их можно включить в состав исходного набора данных.
  Можно даже ввести их в другие наборы данных,
  используя те же категориальные признаки.
  //// !!! Вот это очень важная практическая рекомендация,
  //// которая несколько теряется в этом тексте.
  //// Но она есть, и ее стоит хорошо запомнить,
  //// тем более что она помогает лучше понять, что такое эмбеддинги.
  Я пока не встречался с ситуациями,
  когда использование расширенных наборов данных
  не приводило бы к росту точности моделей.
  Попробуйте эмбеддинги - и я обещаю,
  что их применение станет частью вашей обычной работы
  в сфере машинного обучения.
  
  ......
  
  //// Конец цитирования.
  
  
  ========
  
  20.12.2023 16:12
  
  Трансформеры простыми словами.
  В оглавление.
  
  Трансформеры - это такой принцип/блок построения нейросети
  в котором реализуется механизм "внутреннего внимания",
  обеспечивающий "концентрацию внимания" на конкретный контекст.
  Реализуется это тем, что, по факту, при обучении трансформера
  обучаются три разных "матрицы"/"блока"/эмбеддинга
  - запрос, ключ, значения -
  определенная комбинация которых и обеспечивает "чудо ГПТэшек".
  
  Самое простое, из виденных мною, подробностей данного механизма
  стоит почитать здесь:
  
  "'Attention is all you need' простым языком".
  Автор: bartov-e (Evgeniy V. Bartov)
  https://habr.com/ru/articles/781770/.
  19 дек 2023 21:34
  
  Автор оригинала: Lucidate
  https://www.youtube.com/watch?v=sznZ78HquPc
  
  //// Начало цитирования.
  
  Некоторое время назад я повесил статью с кратким обзором техник векторизации,
  https://habr.com/ru/articles/778048/
  и мне показалось логичным продолжить эту тему
  попыткой разобраться с тем, в какую сторону NLP шагнула дальше
  - выбор пал на механизм attention.
  Мы с Дарьей, моей коллегой по переводу,
  zdrelyuk@bk.ru
  перевели и переработали видеоролик "Attention is all you need explained"
  в статью, которую и представляем вашему вниманию.
  Заранее прошу прощения за светофор в картинках:
  по-другому черный фон из скриншотов убрать не получалось :).
  
  Введение
  
  В 2017 году, в статье Attention is all you need,
  исследователи из Google представили архитектуру Transformer.
  Новизна Transformer заключалась в использовании self-attention
  (досл. с англ. - самовнимание, внутреннее внимание)
  - механизма, благодаря которому модель может сосредоточиться
  не на всех сразу, а на наиболее важных элементах входной последовательности.
  
  Рассмотрим этот механизм и модель подробнее.
  
  1. Зачем нужен attention
  
  1.1. Про рекуррентные нейронные сети (RNNs)
  
  До появления Transformer задачи NLP стандартно обрабатывались
  через рекуррентные нейронные сети (RNN)
  - они умеют сохранять внутреннее состояние,
  то есть помнить и учитывать результаты,
  полученные из предыдущей входной последовательности.
  
  У RNN есть пара недостатков:
  
   в них сложно параллелить задачи;
  
   в них часто возникает проблемы затухающих и разлетающихся градиентов,
   что усложняет обучение моделей с очень длинными входными последовательностями.
  
  1.2. Transformers. Механизм 'Self-attention'
  
  Transformer устраняет эти недостатки,
  используя вместо рекуррентности механизм self-attention.
  Self-attention определяет веса важности элементов входной последовательности
  и не требует сохранять состояния,
  что решает обе упомянутые выше проблемы RNN.
  
  1.3. Лингвистические сложности
  
  Рассмотрим два предложения.
  Они похожи по смыслу и отличаются лишь одним словом.
  В первом предложении she принадлежит Alice, во втором - Barbara.
  
  В первом предложении есть younger,
  поэтому attention относит she к Alice.
  
  Во втором предложении есть older,
  поэтому attention относит she к Barbara.
  
  //// А почему? Получается, что "внимание" как-то "поняло смысл"
  //// всей "конструкции".
  
  Переключение attention обусловлено тем,
  что "more experienced" связано с "even though".
  
  Рассмотрим другие два предложения с очень похожими формулировками,
  но с разными смыслами.
  Сосредоточимся на слове it.
  
  В первом предложении it связано со swap, во втором - с AI.
  Людям это интуитивно понятно.
  
  Эффективная языковая модель тоже должна понимать эти нюансы
  - семантику слов, их порядок в предложении.
  Модель должна уметь сосредотачиваться
  на конкретных членах предложения
  и выявлять взаимосвязанные слова,
  причем все эти процессы должны быть реализованы
  исключительно через числовые представления и трансформации.
  
  1.4. Машины понимают только числа
  
  ИИ понимает и хорошо умеет работать только со скалярами, векторами, матрицами и тензорами
  (даже если тензоры большие и многомерные).
  
  2. Суть идеи attention
  
  2.1. Проектирование attention
  
  Проблема решилась созданием трех матриц.
  Они работают с эмбеддингами слов,
   где представлена семантика каждого слова.
  Семантическое представление в свою очередь было вычислено
  по частотности
  и встречаемости этого слова вместе с другими.
  
  В эмбеддинге также содержится позиционная информация,
  которая вычисляется через синусоиды и косинусоиды.
  
  Три упомянутые выше матрицы - это:
  
   Q - query/запрос;
  
   K - key/ключ;
  
   V - value/значение.
  
  Как и с семантикой в эмбеддингах,
  веса в этих матрицах рассчитываются при обучении.
  Отметим, что во время обучения в сеть типа GPT-3 или ChatGPT
  передаются огромные объемы текста.
  В частности, ChatGPT сообщает,
  что сеть обучалась на более чем триллионе обучающих примеров
  общим объемом в 45 терабайт.
  Поверим ей на слово :)
  
  2.2. Обратное распространение ошибки
  
  GPT-3 использует алгоритм обратного распространения ошибки (backpropagation). Этот
  алгоритм обновляет внутренние веса нейронных сетей с целью минимизации функции
  потерь (loss function).
  
  2.2.1. Как он работает?
  
  а. Сеть делает предположение по пакету входной последовательности.
  
  2.2. Обратное распространение ошибки
  
  GPT-3 использует алгоритм обратного распространения ошибки (backpropagation).
  Этот алгоритм обновляет внутренние веса нейронных сетей
  с целью минимизации функции потерь (loss function).
  
  2.2.1. Как он работает?
  
  а. Сеть делает предположение по пакету входной последовательности.
  
  б. Вычисляется размер потерь между ожидаемым и полученным выводом.
  
  г. Рассчитываются градиенты потерь по правилу дифференцирования сложных функций
  (chain rule).
  
  д. Для снижения ошибок веса обновляются против градиента потерь.
  
  е. Этот процесс останавливается при достижении критерия сходимости
  (convergence),
  когда размер потерь не превышает заданное пороговое значение,
  или когда число итераций достигает предельного значения.
  
  Обратное распространение ошибки помогает Transformer
  итеративно изменять свои веса,
  постепенно повышая точность и снижая потери в предсказаниях.
  
  2.3. Матрицы Query, Key и Value
  
  Веса матриц Query, Key и Value рассчитываются во время обучения сети.
  Матрицы работают с позиционными представлениями
  внутри эмбеддингов слов из входной последовательности.
  
   Матрица [Q]uery - слово, для которого рассчитывается значение attention.
  
   Матрица [K]ey - слово, которое оценивается через attention.
   Собственные значения и собственные векторы (eigenvalues и eigenvectors)
   в этих двух матрицах обычно схожи,
   и через их произведение рассчитывается оценка attention.
   Высокая оценка означает, что слова сильно взаимосвязаны,
   а низкая - что слабо взаимосвязаны.
  
   Матрица [V]alue затем смотрит,
   насколько оценка attention для каждой пары слов
   соотносится с векторной оценкой правильного слова,
   предъявляемого сети во время обучения.
  
  2.4. Аналогия
  
  Модель Transformer предсказывает следующее слово в последовательности,
  которой может быть перевод с одного языка на другой,
  краткое изложение длинного текста или создание текста статьи по ее заголовку.
  
  Цель - сгенерировать наилучшее возможное слово
  или серию слов в выходной последовательности,
  для чего и используют attention.
  
  Чтобы лучше понять этот механизм,
  представьте, что вы детектив,
  который пытается решить дело.
  У вас есть много улик, записей и подсказок,
  но вам нужно сосредоточиться только на важном,
  а все остальное - игнорировать.
  По такому же принципу attention работает в Transformer.
  
  Матрица Q подобна списку вопросов,
  которые вы держите в уме, чтобы раскрыть дело
  - она помогает программе <понять> текст.
  
  Матрица K похожа на набор имеющихся улик.
  Для раскрытия дела вам нужно просмотреть их все,
  но в итоге вы сосредотачиваетесь только на наиболее релевантных уликах
  - соответственно и оценка attention рассчитывается
  через произведение матриц Q и K.
  
  Матрица V обозначает релевантность рассматриваемой улики для дела.
  Дело в том, что, например, согласно оценке attention
  некие два слова могут быть сильно взаимосвязаны,
  но в то же время этими словами могут быть местоимение и существительное
  - и это нам никак не поможет предсказать следующее слово в последовательности.
  
  Сценарий Query/Key/Value
  
  Детектив
  
  Query
  Список вопросов для раскрытия дела
  
  Value
  Выявление наиболее релевантных для дела улик
  
  Key
  Определение релевантности рассматриваемых улик для раскрытия дела
  
  Transformer
  
  Query
  Выбор между резюмированием, переводом и созданием текста для предсказания следующего
  слова
  
  Value
  Выбор слов, взаимосвязанных с представленным словом
  
  Key
  Релевантность полученной пары слов к верному предсказанию
  
  Поиск в библиотеке
  
  Query
  Список вопросов по теме исследования
  
  Value
  Библиотечный каталог
  
  Key
  Релевантность книг из каталога для области исследования
  
  2.5. Формула Query, Key и Value
  
  На схеме ниже матрицы Q и K умножаются друг на друга,
  масштабируются, проходят через маскирование (декодер),
  результаты нормализуются (softmax)
  и умножаются на матрицу V.
  
  Математически это можно записать в виде следующей формулы:
  
  а. Умножить матрицу Q на транспонированную матрицу K.
  Результат - немасштабированная оценка attention.
  
  б. Отмасштабировать оценку attention,
  разделив её на квадратный корень из размерности матрицы K.
  Размерностью может быть любое число;
  стандартно это - 64, значит делим на 8).
  
  в. Затем отмасштабировать через softmax,
  чтобы все пересчитанные веса в сумме давали единицу.
  
  г. Умножить эти отмасштабированные и нормализованные оценки attention
  на матрицу V.
  
  Заключение
  
  В заключение, модели Transformer, такие как ChatGPT и GPT-3,
  используются для таких задач по обработке языка,
  как перевод с одного языка на другой,
  перевод на язык программирования,
  краткое изложение текста,
  создание статьи по заголовку.
  Во всех случаях необходимо предсказывать следующее слово в последовательности.
  
  При вычислении выходной последовательности Transformer
  использует attention для динамического взвешивания
  важности каждого элемента входной последовательности .
  Такой подход позволяет модели на каждом этапе
  сосредотачиваться на наиболее важной информации,
  лучше обрабатывать входные последовательности разной длины.
  
  Attention использует три матрицы,
  которые задействуют алгоритм обратного распространения ошибки.
  Благодаря attention вместе с векторным представлением семантики и позиций слова
  Transformer умеет справляться с переводом,
  смысловой компрессией
  или созданием контента.
  
  .......
  
  //// Из комментариев.
  
  Kreastr
  6 часов назад
  
  Ожидал увидеть в статье описание того как получают Q, K и V
  ( кроме общих слов про бэкпроп,
  который есть в любом методе обучения)
  и архитектуре,
  и почему такой метод расчета оказался
  так важен для производительности системы
  в сравнении с другими архитектурами.
  
  //// Очень хороший вопрос.
  //// В том смысле, что этот пункт - это тот самый "ноу хау",
  //// который и стал "секретным ингредиентом" успеха ChatGPT.
  
  .......
  
  //// Конец цитирования.
  
  В общем "тайна НПТэшек" немножко приоткрылась,
  но до окончательной разгадки еще очень далеко.
  
  P.S.
  Но если Вы осилили предыдущий текст и интерес к трансформерам не пропал,
  то очень рекомендую следующий текст, который проясняет многие вопросы,
  оставшиеся не рассмотренные в предыдущем материале:
  
  "Transformer в картинках"
  Автор: Kouki_RUS (Сергей Шкарин)
  https://habr.com/ru/articles/486358/.
  6 фев 2020 в 17:09
  
  Автор оригинала: Jay Alammar
  https://jalammar.github.io/illustrated-transformer/
  
  
  ========
  
  20.12.2023 16:12
  
  Dropout и Batch normalization простыми словами.
  В оглавление.
  
  В принципе, можно ограничиться таким определением для
  Dropout и Batch normalization, как достаточные эффективные техники
  для улучшения качества машинного обучения нейросетей.
  Причем применяются они по принципу "алхимии" или "кулинарных рецептов".
  Как-то работают, но как и, самое главное, почему точно не известно.
  Но если есть желание познакомиться с этими техниками более детально,
  и попробовать придумать им объяснение,
  то вот неплохое, и достаточно компактное изложение:
  
  "Dropout и Batch normalization".
  Автор: fedorborovitsky (Федор Добровицкий)
  https://habr.com/ru/companies/mvideo/articles/782360/.
  21 дек 2023 в 17:52
  
  //// Начало цитирования.
  
  Dropout и Batch Normalization
  очень хороши в оптимизации процесса обучения
  и борьбе с одной из основных проблем ml - переобучением.
  
  Dropout предполагает случайный кик нейронов из процесса обучения,
  обеспечивает, чтобы нейронная сеть не стала слишком зависимой
  от любого одного узла.
  Сравнить это можно с dropout в спортивных играх.
  Там это стратегия, которая заставляет каждого игрока команды играть лучше,
  а не полагаться только на одного звездного товарища.
  
  Batch Normalization в свою очередь улучшает производительность
  и стабильность нейронных сетей
  путем нормализации входных данных каждого слоя.
  
  Dropout
  
  Основная идея Dropout заключается в случайном <выключении>
  (то есть временном исключении из обучения)
  определенного процента нейронов в сети на каждом шаге обучения.
  Это означает, что во время каждого прохода обучения
  (или каждой эпохи) случайно выбранный набор нейронов игнорируется.
  Это помогает предотвратить чрезмерную зависимость модели
  от конкретных путей и узлов в сети,
  что может привести к переобучению.
  
  Сначала выбирается вероятность p,
  с которой каждый нейрон будет исключаться.
  Обычно находится в диапазоне от 0.2 до 0.5.
  
  Для каждого слоя, где применяется Dropout,
  генерируется случайная маска.
  Эта маска имеет ту же размерность, что и слой,
  и каждый её элемент является бинарным (0 или 1),
  где 1 соответствует активации нейрона,
  а 0 - его отключению.
  Эта маска генерируется заново для каждого прохода обучения
  и для каждого обучающего примера.
  Активации нейронов умножаются на эту маску,
  эффективно <выключая> некоторые нейроны.
  
  В процессе обратного распространения ошибки,
  градиенты рассчитываются только для активных нейронов.
  Нейроны, которые были временно <выключены>,
  не получают обновлений весов.
  
  Во время тестирования или инференции Dropout отключается.
  Однако, активации нейронов масштабируются на коэффициент,
  равный вероятности p,
  чтобы компенсировать большее количество активных нейронов
  по сравнению с обучением.
  Это масштабирование помогает сохранить
  общую сумму активаций на похожем уровне между обучением и тестированием.
  
  Математически, Dropout можно интерпретировать как ансамблевый метод.
  Каждый проход обучения использует случайно отобранную <тонкую> сеть,
  что похоже на обучение множества разных моделей и усреднение их прогнозов.
  
  Подходы к определению оптимальной степени Dropout
  
  1. Выбор степени Dropout в зависимости от типа сети:
  В разных типах сетей, таких как многослойные перцептроны (MLP),
  сверточные нейронные сети (CNN) и рекуррентные нейронные сети (RNN),
  может потребоваться различная степень Dropout.
  
  Многослойные перцептроны (MLP)
  
  Сети с плотными слоями (Dense layers):
  В таких сетях обычно используются значения Dropout от 0.2 до 0.5.
  Это помогает предотвратить переобучение,
  поскольку плотные слои склонны к запоминанию шума в данных.
  Необходимо провести серию экспериментов
  для определения оптимальной степени Dropout,
  учитывая конкретную задачу и сложность данных.
  
  Сверточные нейронные сети (CNN)
  
  - Положение слоев DropВ CNN Dropout часто помещают
  после сверточных и пулинговых слоев.
  Это помогает снизить переадаптацию к тренировочным данным,
  сохраняя при этом пространственные особенности изображений.
  
  - Меньшие значения:
  Для CNN значения Dropout обычно ниже, чем для MLP,
  так как сверточные слои менее склонны к переобучению.
  Общие значения находятся в диапазоне от 0.1 до 0.3.
  
  Рекуррентные нейронные сети (RNN), включая LSTM
  
  - Dropout для входных и рекуррентных соединений:
  В RNN, включая LSTM, важно различать Dropout
  для входных данных и рекуррентных соединений.
  
  - Для входных данных Dropout может быть более высоким (до 0.5),
  чтобы уменьшить зависимость от конкретных входных характеристик.
  
  - Для рекуррентных соединений, рекомендуется
  более низкий уровень Dropout (например, от 0.1 до 0.2),
  поскольку слишком высокий уровень Dropout
  может нарушить передачу информации во времени
  и сделать обучение нестабильным.
  
  2. Определение подходящей степени Dropout:
  Общепринятое значение для Dropout в скрытых слоях колеблется между 0.5 и 0.8,
  при этом более высокие значения чаще используются для входных слоев.
  
  Для входных слоев часто используются более высокие значения Dropout,
  так как они имеют более прямое воздействие на входные данные.
  Значения в диапазоне от 0.5 до 0.8 помогают
  снизить риск переобучения на специфические особенности входных данных,
  особенно в задачах, связанных с большим количеством признаков
  или высокой размерностью.
  
  В скрытых слоях обычно рекомендуются значения от 0.5 до 0.7.
  Это помогает предотвратить чрезмерную адаптацию модели к тренировочным данным,
  сохраняя при этом достаточное количество активных нейронов
  для эффективного обучения.
  
  3. Grid Search для оптимизации параметров:
  Вместо того чтобы угадывать подходящую степень Dropout,
  можно протестировать различные значения систематически.
  
  4. Использование ограничения веса:
  Веса сети могут увеличиваться в размерах
  в ответ на вероятностное удаление активаций слоя.
  Чтобы противодействовать этому,
  можно наложить ограничение на веса,
  чтобы норма всех весов в слое была ниже определенного значения.
  
  5. Использование наименьших наборах данных:
  Dropout более хорош на задачах,
  где количество обучающих данных ограничено,
  и модель склонна к переобучению.
  На задачах с большим объемом обучающих данных
  преимущества от использования Dropout могут быть менее заметны.
  
  Пару пример дропаута
  
  .......
  
  Inverted Dropout
  
  Inverted Dropout - это популярная вариация стандартного Dropout.
  Как и в стандартном Dropout,
  нейроны в слое сети отключаются случайным образом с вероятностью p
  (например, 50% нейронов могут быть отключены).
  Однако, в отличие от стандартного Dropout,
  не просто устанавливается 0 в выключенных нейронах.
  
  Во время каждой итерации обучения для каждого слоя,
  где применяется Dropout,
  генерируется маска Dropout.
  Маска - это массив, содержащий 0 и 1,
  размер которого соответствует количеству нейронов в слое.
  Каждый элемент маски генерируется независимо
  и имеет вероятность p (гиперпараметр) быть равным 1
  и вероятность 1-p быть равным 0.
  
  Маска применяется к активациям (выходам нейронов) данного слоя.
  Это означает, что активации нейронов,
  соответствующие 0 в маске,
  устанавливаются в 0,
  эффективно <выключая> эти нейроны во время текущей итерации обучения.
  
  В отличие от традиционного Dropout,
  Inverted Dropout масштабирует активные нейроны так,
  чтобы суммарная активность слоя оставалась постоянной.
   Это делается путем деления активаций на вероятность сохранения 1-p.
  Таким образом, средний вклад каждого активного нейрона увеличивается,
  компенсируя отсутствие выключенных нейронов.
  
  Batch Normalization
  
  Batch Normalization (BN) предназначен для улучшения скорости,
  производительности и стабильности обучения нейронных сетей.
  
  В основе Batch Normalization лежит решение проблемы
  <внутреннего ковариационного сдвига>
  (Internal Covariate Shift).
  Этот термин описывает явление,
  при котором распределение входных данных каждого слоя нейронной сети
  меняется в процессе обучения,
  из-за чего сети становится сложнее обучать.
  Это происходит из-за того,
  что параметры предыдущих слоев изменяются во время обучения,
  влияя на данные текущего слоя.
  
  Batch Normalization решает эту проблему,
  нормализуя выход каждого слоя.
  Нормализация заключается в преобразовании входных данных каждого слоя таким образом,
  чтобы среднее значение было приближено к нулю,
  а стандартное отклонение - к единице.
  Это делает сеть менее чувствительной
  к масштабу входных данных
  и улучшает общую стабильность процесса обучения.
  
  К примеру для мини-пакета ... алгоритм будет следующим:
  
  где m - размер мини-пакета,
  BN трансформирует каждый вход xi следующим образом:
  
  1. Вычисление среднего:
  
  .......
  
  2. Вычисление дисперсии:
  
  .......
  
  3. Нормализация: , где ? - маленькое число для избежания деления на ноль.
  
  .......
  
  4. Масштабирование и сдвиг: , где ? и ? - параметры,
  которые сеть обучается настраивать.
  
  Интеграция в различные типы нейронных сетей
  
  Интеграция в сверточные нейронные сети (CNN)
  
  В CNN, BN обычно размещается сразу после сверточных слоев
  (Convolutional Layers)
  и перед активационной функцией, такой как ReLU.
  Порядок обычно следующий:
  Свертка -> Batch Normalization -> Активация.
  
  В сверточных слоях BN применяется отдельно
  к каждому каналу выходных данных свертки.
  Это означает, что для каждого фильтра сверточного слоя
  вычисляется собственное среднее и дисперсия.
  
  При этом сохраняется пространственная структура выходных данных,
  т.е. нормализация не влияет на пространственное расположение признаков.
  
  В некоторых случаях BN может служить регуляризатором,
  уменьшая необходимость в Dropout.
  
  Интеграция в рекуррентные нейронные сети (RNN)
  
  Применение BN в RNN сложнее, чем в CNN,
  из-за динамической природы последовательностей
  и зависимости выходов RNN от предыдущих временных шагов.
  
  - BN для входных весов:
  Применяется к данным на каждом временном шаге независимо.
  Это аналогично применению BN в сверточных и полносвязных слоях.
  
  - BN для переходных весов:
  Сложнее, так как требует расчета статистик BN по всем временным шагам.
  В некоторых реализациях используется усреднение статистик по временным шагам.
  
  Пару примеров
  
  .......
  
  Заключение
  
  Dropout и Batch Normalization помогают моделям учиться более эффективно
  и быть более устойчивыми к переобучению,
  что, в свою очередь, приводит к улучшению обобщающей способности
  и производительности на новых данных.
  
  ........
  
  //// Конец цитирования.
  
  Но почему и как возникает "переобучение",
  описания "почему-то" мне еще не встречалось.
  А вот способов борьбы с этой "страшилкой"
  накопилось уже достаточно много.
  И почему так получается?
  
  
  ========
  
  29.12.2023 13:12
  
  Математика простыми словами. Фрагмент 1.
  В оглавление.
  
  Нашел в архивах очень хороший материал с "человеческим" пояснением
  некоторых математических терминов и решил делать подборку
  таких редких в наше время "жемчужин":
  
  "Мир математики глазами AI"
  Автор: Monotirg
  https://habr.com/ru/articles/729226/.
  4 апр в 23:47
  
  //// Начало цитирования.
  
  ......
  
  Математика - это удивительная наука,
  которая описывает мир через числа, формулы и логические рассуждения.
  Однако, несмотря на все её достижения и применения в разных областях,
  многие её аспекты остаются загадкой для человека.
  В этой статье мы рассмотрим мир математики глазами искусственного интеллекта,
  способного анализировать и обрабатывать огромные объемы данных
  и находить решения, которые были бы недоступны для человека.
  Погрузимся в удивительный мир математических концепций и принципов,
  которые помогают понимать мир вокруг нас
  и создавать новые технологии и инновации.
  
  А среди основных разделов выделил:
  
  Математический анализ
  
  Теория множеств
  
  Линейная алгебра
  
  Теория вероятностей
  
  .........
  
  Математический анализ
  
  Теорема Ньютона-Лейбница -
  эта теорема связывает понятия дифференцирования и интегрирования.
  Она утверждает,
  что если функция непрерывна на отрезке,
  то определенный интеграл от неё на этом отрезке
  равен разности значений первообразной этой функции на концах этого отрезка.
  
  Теорема о промежуточном значении
  - эта теорема утверждает, что если непрерывная функция принимает
  два разных значения в двух точках интервала,
  то она должна принимать каждое значение между этими двумя точками
  хотя бы один раз.
  
  Ряд Тейлора - это метод, который позволяет представить функцию
  в виде бесконечной суммы членов,
  связанных с производными функции, вычисленными в определенной точке.
  
  Преобразование Фурье - это метод,
  который разлагает сигнал или функцию на составляющие его частоты.
  Это основной инструмент в обработке сигналов,
  системах связи и многих других областях,
  где важен анализ сигналов или функций.
  
  Теория множеств
  
  Теорема Кантора - эта теорема утверждает,
  что мощность любого множества строго меньше
  мощности множества всех его подмножеств.
  
  Аксиома выбора - Это противоречивая аксиома теории множеств,
  которая утверждает, что для любого набора непустых множеств
  существует способ выбрать один элемент из каждого множества.
  
  Линейная алгебра
  
  Определитель - представляет собой числовое значение,
  связанное с квадратной матрицей.
  У него есть много важных приложений в линейной алгебре,
  таких как определение обратимости,
  вычисление собственных значений и собственных векторов
  и решение систем линейных уравнений.
  
  Матрицы - это способ представления линейных преобразований
  и систем линейных уравнений.
  Они предоставляют мощный инструмент для выполнения вычислений
  и анализа свойств линейных систем.
  
  Линейное отображение - это функция,
  которая отображает векторы из одного векторного пространства в другое,
  сохраняя при этом определённые алгебраические свойства,
  такие как линейность и сохранение векторного сложения и скалярного умножения.
  
  Коммутативность умножения матриц
  
  Здесь я решил спросить,
  как геометрически показать,
  что умножение матриц не является коммутативным.
  
  Когда мы думаем о матрицах как о линейных отображениях,
  то умножению матриц соответствует композиция линейных отображений.
  
  Для того, чтобы показать, что умножение матриц не является коммутативным,
  можно рассмотреть два линейных отображения A и B,
  где A - поворот на 90 градусов против часовой стрелки,
  а B- отражение относительно оси x.
  
  Если мы сначала применяем A,а затем B,
  мы получаем другое преобразование,
  чем если бы мы сначала применяли B, а затем A.
  
  Этот пример иллюстрирует,
  почему умножение матриц не является коммутативным.
  
  Теория вероятностей
  
  Закон больших чисел - этот закон гласит,
  что среднее значение результатов,
  полученных при большом количестве испытаний случайного события,
  будет близко к математическому ожиданию.
  
  Центральная предельная теорема - эта теорема утверждает,
  что сумма большого числа независимых случайных величин
  имеет распределение близкое к нормальному.
  
  Цепь Маркова - это случайный процесс,
  удовлетворяющий свойству Маркова,
  которое гласит, что будущее состояние системы
  зависит только от текущего состояния,
  а не от какого-либо предыдущего состояния.
  
  Условная вероятность - это вероятность наступления события
  при условии, что произошло другое событие.
  
  .....
  
  //// Конец цитирования.
  
  Очень хочется чтобы эта тема "простой и понятной математики"
  была продолжена.
  
  
  ==========
  
  29.12.2023 14:29
  
  Data Science простыми словами.
  В оглавление.
  
  Data Science, в моем понимании, это не столько область технологии/инженерии,
  сколько сейчас сильно продвигаемая новая "технологическая религия",
  в которой можно выделить, как минимум, два "символа Веры".
  Выражаются эти "символы Веры" в разных формулировках,
  но смысл достаточно простой:
  "Данные превыше всего" и "Нет ничего кроме Статистики".
  
  Это конечно шутливое преувеличение, но в каждой шутке есть только доля шутки.
  И чтобы это проиллюстрировать предлагаю текст,
  с пусть не самыми актуальными, но распространенными вопросами
  к желающим приобщиться к "великой и ужасной" Data Science:
  
  "100 вопросов для подготовки к собесу Data Science".
  Автор: evaclick (uproger)
  https://habr.com/ru/articles/783766/.
  28 дек 2023 14:28
  
  В этом материале есть и ответы на указанные "100 вопросов",
  но я процитирую только сами вопросы, чтобы просто оконтурить то,
  что считается необходимым для "сдачи экзамена"
  на вступления в "школу магии Data Science".
  
  //// Начало цитирования.
  
  .......
  
  Содержание
  
  Секция "Статистика"
  
  Что такое нормальное распределение?
  
  Средняя проектная оценка в группе из 10 учеников получилась 7, а медиана 8.
  Как так получилось? Чему больше доверять?
  
  Какова вероятность заражения пациента, если его тест позитивен,
  а вероятность заболевания в его стране составляет 0.1%?
  
  Что такое центральная предельная теорема?
  В чем заключается ее практический смысл?
  
  Какие примеры набора данных с негауссовым распределением вы можете привести?
  
  Что такое метод максимизации подобия?
  
  Вы баллотируетесь на пост, в выборке из 100 избирателей
  60 будут голосовать за вас.
  Можете ли вы быть уверены в победе?
  
  Как оценить статистическую значимость анализа?
  
  Сколько всего путей, по которым мышь может добраться до сыра,
  перемещаясь только по линиям клетки?
  
  В чем разница между линейной и логистической регрессией?
  
  Приведите три примера распределений с длинным хвостом.
  Почему они важны в задачах классификации и регрессии?
  
  Суть закона больших чисел
  
  Что показывает p-значение (значимая вероятность)
  
  Что такое биномиальная формула вероятности?
  
  Счетчик Гейгера записывает 100 радиоактивных распадов за 5 минут.
  Найдите приблизительный 95% интервал для количества распадов в час.
  
  Как рассчитать необходимый размер выборки?
  
  В каких случаях вы бы использовали MSE и MAE?
  
  Когда медиана лучше описывает данные, чем среднее арифметическое?
  
  В чём разница между модой, медианой и матожиданием
  
  
  Секция "SQL"
  
  В чем заключается разница между MySQL и SQL Server?
  
  Что делает UNION? В чем заключается разница между UNION и UNION ALL?
  
  Как оптимизировать SQL-запросы?
  
  Выведите список сотрудников с зарплатой выше, чем у руководителя
  
  Какие оконные функции существуют?
  
  Найдите список ID отделов с максимальной суммарной зарплатой сотрудников
  
  В чём разница между CHAR и VARCHAR?
  
  Выберите самую высокую зарплату, не равную максимальной зарплате из таблицы
  
  Чем отличаются SQL и NoSQL?
  
  В чём разница между DELETE и TRUNCATE?
  
  Пронумеруйте строки в таблице employee
  
  Пронумеруйте строки в таблице в разрезе отдела по зарплате
  
  Какие есть уровни изоляции транзакций?
  
  
  Секция "Python"
  
  Какие отличия есть у Series и DataFrame в Pandas?
  
  Напишите функцию, которая определяет количество шагов
  для преобразования одного слова в другое
  
  В чём преимущества массивов NumPy по сравнению с (вложенными) списками python?
  
  В чём отличие между map, apply и applymap в Pandas?
  
  Самый простой способ реализовать скользящее среднее с помощью NumPy
  
  Поддерживает ли Python регулярные выражения?
  
  Продолжи: "try, except, ..."
  
  Как построить простую модель логистической регрессии на Python?
  
  Как выбрать строки из DataFrame на основе значений столбцов?
  
  Как узнать тип данных элементов из массива NumPy?
  
  В чём отличие loc от iloc в Pandas?
  
  Напишите код, который строит все N-граммы на основе предложения
  
  Каковы возможные способы загрузки массива из текстового файла данных в Python?
  
  Чем отличаются многопоточное и многопроцессорное приложение?
  
  Как можно использовать groupby + transform?
  
  Напишите финальные значения A0, ..., A7
  
  Чем отличаются mean() и average() в NumPy?
  
  Приведите пример использования filter и reduce над итерируемым объектом
  
  Как объединить два массива NumPy?
  
  Напишите однострочник, который будет подсчитывать количество заглавных букв в файле
  
  Как бы вы очистили датасет с помощью Pandas?
  
  array и ndarray - в чём отличия?
  
  Вычислите минимальный элемент в каждой строке 2D массива
  
  Как проверить, является ли набор данных или временной ряд случайным?
  
  В чём разница между pivot и pivot_table?
  
  Реализуйте метод k-средних с помощью SciPy
  
  Какие есть варианты итерирования по строкам объекта DataFrame?
  
  Что такое декоратор? Как написать собственный?
  
  
  Секция "Data Science"
  
  Что такое сэмплирование? Сколько методов выборки вы знаете?
  
  Чем корреляция отличается от ковариации?
  
  Что такое кросс-валидация? Какие проблемы она призвана решить?
  
  Что такое матрица ошибок? Для чего она нужна?
  
  Как преобразование Бокса-Кокса улучшает качество модели?
  
  Какие методы можно использовать для заполнения пропущенных данных,
  и каковы последствия невнимательного заполнения данных?
  
  Что такое ROC-кривая? Что такое AUC?
  
  Что такое полнота (recall) и точность (precision)?
  
  Как бы вы справились с разными формами сезонности
  при моделировании временных рядов?
  
  Какие ошибки вы можете внести, когда делаете выборку?
  
  Что такое RCA (root cause analysis)? Как отличить причину от корреляции?
  
  Что такое выброс и внутренняя ошибка?
  Объясните, как их обнаружить, и что бы вы делали,
  если нашли их в наборе данных?
  
  Что такое A/B-тестирование?
  
  В каких ситуациях общая линейная модель неудачна?
  
  Является ли подстановка средних значений вместо пропусков допустимым? Почему?
  
  Есть данные о длительности звонков.
  Разработайте план анализа этих данных.
  Как может выглядеть распределение этих данных?
  Как бы вы могли проверить, подтверждаются ли ваши ожидания?
  
  
  Секция "Machine Learning"
  
  Что такое векторизация TF/IDF?
  
  Что такое переобучение и как его можно избежать?
  
  Вам дали набор данных твитов, задача
  - предсказать их тональность (положительная или отрицательная).
  Как бы вы проводили предобработку?
  
  Расскажите про SVM
  
  В каких случаях вы бы предпочли использовать SVM,
  а не Случайный лес (и наоборот)?
  
  Каковы последствия установки неправильной скорости обучения?
  
  Объясните разницу между эпохой, пакетом (batch) и итерацией.
  
  Почему нелинейная функция Softmax часто бывает последней операцией
  в сложной нейронной сети?
  
  Объясните и дайте примеры коллаборативной фильтрации,
  фильтрации контента и гибридной фильтрации
  
  В чем разница между bagging и boosting для ансамблей?
  
  Как выбрать число k для алгоритма кластеризации <метод k-средних>
  (k-Means Clustering), не смотря на кластеры?
  
  Как бы вы могли наиболее эффективно представить данные с пятью измерениями?
  
  Что такое ансамбли, и чем они полезны?
  
  В вашем компьютере 5Гб ОЗУ, а вам нужно обучить модель
  на 10-гигабайтовом наборе данных. Как вы это сделаете?
  
  Всегда ли методы градиентного спуска сходятся в одной и той же точке?
  
  Что такое рекомендательные системы?
  
  Объясните дилемму смещения-дисперсии (bias-variance tradeoff)
  и приведите примеры алгоритмов с высоким и низким смещением.
  
  Что такое PCA, и чем он может помочь?
  
  Объясните разницу между методами регуляризации L1 и L2.
  
  ......
  
  //// Конец цитирования.
  
  Если Вы дочитали до этого места, то могли заметить,
  что в части собственно "Data Science" и "Machine Learning"
  вопросов на ПОНИМАНИЕ практически нет.
  В основном вопросы на знание/владение какими-то частными
  техническими/полуэвристическими методами.
  Это собственно не вина, а беда составителей такого рода "задачников".
  Понимания того как вся эта "магия" или "алхимия" машинного обучения
  "не в принципе, а в кожухе" сейчас практически нет.
  
  Но и этот список мне самому полезен как ориентир того,
  какие вопросы надо проработать и зафиксировать в данном модуле.
  
  
  ========
  
  05.01.2024 19:45
  
  Основы теории вероятности простыми словами.
  В оглавление.
  
  Отношение реальности и математики, как способа описания и моделирования
  этой реальности очень многогранно и имеет длинную историю,
  с различными "поворотами сюжета".
  Один из таких интересных вопросов о соотношении теории вероятности (теорвера)
  и реально наблюдаемым эмпирическим "закономерностям"/последовательностям
  весьма своеобразно и интересно изложен в таком материале:
  
  "Эмпирическая вероятность".
  Автор: Sergey_Kovalenko (Сергей Коваленко)
  https://habr.com/ru/articles/493800/.
  6 апр 2020 в 11:42
  
  Текст просто замечательный, очень рекомендую прочесть его полностью,
  а здесь только главный вывод -
  теория вероятности НЕ запрещает никакую эмпирическую последовательность.
  
  //// Начало цитирования.
  
  Давайте обсудим, что мы имеем ввиду,
  когда произносим слово "вероятность".
  Я прошу вас попытаться ответить на этот вопрос
  не с позиции студента или <чистого> математика,
  а так, как его должны понимать инженер,
  прикладной исследователь
  или любой другой человек, которому предстоит принять решение
  на основании эмпирических данных.
  
  Наивный подход
  
  .......
  
  Абстрактные теории
  
  .......
  
  Модель и интерпретация
  
  .......
  
  Примеры
  
  .......
  
  Проверка на ошибки
  
  .......
  
  Доказательная сила
  
  .......
  
  <Голый король>
  
  .......
  
  Вернемся к теории вероятности и трем математикам с монеткой.
  
  Как вы думаете,
  если математики попытаются много раз повторить свой эксперимент,
  обнаружат ли они какие-либо эмпирические закономерности?
  Другими словами, смогут ли они сделать обоснованный вывод,
  что некоторого типа последовательности в их экспериментах
  невозможно наблюдать?
  
  И второй вопрос:
  если эмпирические закономерности есть,
  то какие из них могут быть объяснены
  в рамках общепринятой теории вероятностей?
  
  Боюсь вас разочаровать,
  но ответ на второй вопрос предельно прост:
  <Никакие.>
  
  Действительно,
  все, чего требует содержательный смысл аксиом тории вероятностей
  - чтобы веса, назначенные орлу и решке,
  были неотрицательными и в сумме давали единицу.
  Когда это требование выполнено,
  любая последовательность орлов и решек
  оказывается в наблюдениях допустимой,
  поскольку она не меняет назначенных весов
  и тем самым не создает противоречий с аксиомами.
  Отсюда следует вывод:
  в своем содержательном значении
  аксиомы теории вероятностей
  не накладывают на возможные результаты наблюдений
  ровно никаких ограничений
  и поэтому в строгом логическом смысле
  не способны объяснить
  каких бы то ни было закономерностей в данных.
  
  Что касается вопроса о существовании эмпирических закономерностей,
  то здесь возможно двоякое мнение.
  
  С одной стороны, если монетка не изготовлена с какими-то особыми премудростями,
  то в каждом опыте она может упасть вверх, как орлом, так и решкой,
  поэтому эксперимент может закончится любой их последовательностью,
  а значит эмпирических закономерностей,
  в строгом определении этого понятия,
  - нет.
  
  С другой стороны,
  даже посвятив опытам над симметричной монеткой целую жизнь,
  вряд ли удастся увидеть хотя бы одну серию из 100 подбрасываний,
  в которой орлов будет не больше 10
  (в единичной серии шансы меньше 1 к 10**15).
  Последнее означает,
  что экспериментатор с чистой совестью
  имеет право принять высказывание:
  <В серии из 100 подбрасываний симметричная монетка
  упадет вверх орлом не менее 11 раз>
  в качестве хорошо обоснованной эмпирической закономерности.
  
  Здесь мы явно приходим к противоречию
  между философией науки и здравым смыслом,
  чему из них следовать?
  
  Когда дело доходит до конкретных решений,
  нам приходится поступать категорично:
  атаковать - или обороняться,
  оперировать - или продолжать лечить медикаментозно,
  заключить сделку - или отказаться от предложения.
  В подобных обстоятельствах у вас не получится
  с какой-либо пользой применить теорию вероятности,
  предварительно не совершив ошибок в ее интерпретации.
  В одних случаях маловероятные события
  придется считать невозможными,
  в других - заменять вероятность на частоту
  или думать о математическом ожидании как о среднем значении
  для конечной серии экспериментов.
  
  Причину такой странной ситуации вряд ли стоит искать
  в дефектах абстрактной теории вероятностей:
  есть все основания полагать,
  что эта математическая дисциплина
  как раз-таки непротиворечива.
  Другое дело, что любая теория,
  построенная на философии однозначных <Да> и <Нет>,
  абсолютной <Истины> и <Объективной реальности>,
  вряд ли сможет соответствовать нашему интуитивному пониманию,
  что такое <вероятность>
  и как ее измерять.
  Нет даже полной уверенности,
  что это понятие реально,
  а не является упрощением какой-то
  еще не открытой концепции
  (Как было когда-то с <Небесной сферой>
  или <Эфирным ветром>).
  
  Если теория до конца не разработана,
  а ее интерпретации часто противоречивы,
  стоит ли применять эту теорию на практике?
  В тех случаях, когда результат не слишком расходится со здравым смыслом
  - наверное, стоит!
  Например, Лейбниц, Эйлер, Лагранж, Фурье и многие их современники
  успешно использовали <Анализ бесконечно малых>
  еще задолго до того, как удалось создать
  хоть какую-то теорию действительных чисел.
  
  Не относитесь к наукам слишком строго!
  
  В качестве запоздалой первоапрельской шутки.
  Сергей Коваленко.
  
  2020 год
  magnolia@bk.ru
  
  .......
  
  //// Конец цитирования.
  
  Помимо основного вывода о том, что теория вероятности
  НЕ запрещает никакой эмпирической последовательности,
  специально обращаю Ваше внимание,
  что в тексте ставится очень важный научный, метафизический
  и мировоззренческий вопрос:
  "Что есть сама концепция "вероятности"?
  
  И осторожно намекается, что за "вероятностью" может стоять
  что-то "бесконечно большее",
  для чего у нас сейчас нет ни понимания, ни концепций, ни, даже, гипотез.
  
  Это, конечно же, шутка, даже, первоапрельская шутка,
  но "в каждой шутке только доля шутки".
  
  
  ==========
  
  06.01.2024 11:17
  
  Контринтуитивные следствия "Закона больших чисел" на примерах.
  В оглавление.
  
  В предыдущем фрагменте достаточно обоснованно, и, что немаловажно, с юмором,
  проводилась мысль о том, что обычное интуитивное понимание "вероятности",
  "немного" отличается от "правильного классически-теоретического".
  И даже знание этой, по настоящему, ФУНДАМЕНТАЛЬНОЙ разницы
  не помогает при столкновении с реальными ситуациями.
  
  Предлагаю Вашему вниманию достаточно объемный материал с примерами того,
  как отличается наше интуитивное представление о "вероятности"
  от "хорошо доказанных математических фактов":
  
  "Закон больших чисел и закон больших грабель".
  Автор: materiatura
  https://habr.com/ru/articles/784556/.
  4 янв 2024 в 00:58
  
  Текст достаточно большой, Но сильно сокращать его "почему-то" не хочется.
  
  //// Начало цитирования.
  
  Бросание монеты - дело не хитрое да и оборудование для экспериментов
  не очень дорогое.
  Бросай себе и бросай.
  Этот простой эксперимент дает неожиданно много следствий,
  многие из которых не очевидны,
  а порой и контринтуитивны.
  
  Моя интуиция с завидным постоянством подсказывает мне
  неверное решение
  поэтому я собрал замечательную коллекцию грабель
  на которые я наступал и хотел бы ее показать публике.
  Я не буду использовать формул и законы больших чисел,
  эти столпы теорвера нам не понадобятся.
  Обойдемся только граблями их будет много и разных.
  
  Разница между количеством выпавших орлов и решек.
  
  "Однако если бросаний произведено очень много,
  то числа выпавших гербов и решек окажутся почти равными.
  И равенство будет выполняться тем точнее,
  чем больше произведено бросаний."
  
  Это цитата из отличного учебника физики [1],
  мне он очень нравится.
  В этой цитате очень важно слово
  почти,
  в нём всё дело,
  это грабли,
  я на них наступал.
  Это "почти" означает отношение числа орлов к числу решек.
  Это как раз один из законов больших чисел.
  
  Если говорить не "почти", а в "точности",
  разница между количеством орлов и решек
  в процессе бросания монеты будет увеличиваться.
  Вероятность совпадения числа орлов и решек
  с увеличением числа бросков стремится к нулю.
  
  Получается такое утверждение:
  "С увеличением числа бросков вероятность
  почти одинакового количества орлов и решек стремится к 1,
  а вероятность их точного совпадения стремится к 0".
  Или так:
  "С увеличением числа бросков будет почти одинаковое количество орлов и решек,
  но точного их совпадения не будет".
  Расчехляйте интуицию, будем ею пользоваться.
  
  Общеприняты две модели аналогичные бросанию монеты.
  Первая модель - это блуждание точки на прямой.
  В начальный момент точка находится в нуле,
  после броска монеты в случае выпадения орла
  точка сдвигается на единицу в положительном направлении,
  в случае решки - на единицу в отрицательном направлении.
  Так вот в этой модели среднее значение удаления точки от нуля будет - ноль,
  а разброс значений,
  т.е. дисперсия будет равна числу бросков.
  Таким образом с ростом числа бросков
  мы можем получить любую наперед заданную разницу
  между орлами и решками,
  при том любое количество раз,
  главное не ленится бросать и бросать.
  
  Вторая модель - это два игрока назовем их Олег и Роман,
  пусть после каждого броска монеты если выпал орел выигрывает один рубль Олег,
  а если выпала решка - в таком же выигрыше Роман.
  
  Время нахождения в выигрыше
  
  Представим долгую игру Олега и Романа с тысячами бросаний монеты.
  В процессе игры то Олег, то Роман будет находится в чистом выигрыше,
  в какие-то моменты они будут "при своих",
  то есть будет ничья,
  после каждой ничьи лидерство может сменится
  и кто-то будет опять в выигрыше.
  Я предполагал, что время нахождения в выигрыше
  для каждого из игроков будет примерно одинаковое,
   а ничьи будут достаточно часты,
  ну уж точно, ничьи скорее будут, чем их не будет.
  Это грабли,
  я на них танцевал.
  
  Одинаковое время нахождения в выигрыше игроков
  - самое маловероятное событие.
  Самое вероятное число смены лидерства - 0 (ноль),
  одна смена вероятнее чем две, а две чем три...
  Вероятнее всего, что игрок выигравший первый бросок
  так и останется всегда в выигрыше.
  Как бы долго мы не бросали монету.
  Здесь работает не закон больших чисел,
  а закон арксинуса.
  
  И да, конечно,
  математическое ожидание выигрыша любого из игроков - 0 (ноль).
  
  Количество ничьих
  
  Предположим Олег и Роман бросают монету через равные промежутки времени.
  Моя интуиция подсказывала мне,
  что за четыре часа игры ничьих будет приблизительно
  в четыре раза больше чем за час.
  Опять грабли,
  я на них маршировал.
  Ничьих будет больше всего в два раза,
  И чем дольше будет продолжаться игра,
  ничьих будут случаться все реже и реже.
  За 20 бросаний монеты самое вероятное
  ( вероятность немного больше 0,5)
  число ничьих не более 2-х раз,
  а 10 ничьих имеют вероятность в 8 раз меньше (0,06),
  вероятность отсутствия ничьих - 0,2.
  При 10.000 бросаний количество ничьих будет около 40 раз,
  медиана - 68 ничьих,
  увеличив число бросаний в 100 раз число ничьих увеличится лишь в 10 раз.
  
  Какова же вероятность хотя бы одной ничьи?
  Она равна 1, то есть ничья обязательно будет.
  А как долго ждать этого?
  В среднем - бесконечно.
  Если игра будет продолжаться бесконечно то количество ничьих
  будет бесконечно
  и каждой из них в среднем нужно ждать бесконечно...
  Но только при идеальной монете,
   если монета не идеальна, то количество ничьих
  будет ограничено даже при бесконечной игре.
  
  Разорение игрока
  
  Еще один вопрос который возникает в связи с игрой Олега и Романа:
  "Как скоро закончится игра в связи с тем,
  что у одного из них закончатся деньги?".
  Например, если у Олега в начале игры был 1 рубль,
  а у Романа 100 рублей,
  сколько в среднем продлится игра если за один бросок монеты
  разыгрывается 1 рубль?
  Весь мой "опыт" игры в орлянку подсказывал мне, что не долго,
  5-10 бросков и всё.
  Но, грабли,
  я без них никуда,
  они всегда со мной.
  Игра в среднем продлится 100 бросков.
  А если у каждого по 100 рублей?
  Длительность игры - 10.000 бросков до разорения одного из игроков!
  Дайте мне каску.
  
  Вот еще для тренировки интуиции - пусть Олег богат как Крез,
  бесконечно богат,
  а Роман решил кардинально решить проблему с кредитом
  и последние 100 рублей решил отдать в игру.
  Как долго продлится игра?
  Средняя продолжительность игры - бесконечная игра.
  Вероятность проигрыша Романа - 1,
  то есть он точно проиграет,
  но через бесконечное время игры.
  
  Разорение игрока при нечестной монет
  
  В этой статье, исследовав реальную монету,
  выяснили, что вероятность выпадения одной из сторон равна не ?,
  а что-то около 0,51 (округляю для простоты).
  Что будет, если играть с бесконечно богатым противником этой монетой
  и знать какая сторона монеты выпадает чаще?
  Например у вас есть всего один рубль,
  тогда у вас появляется вероятность не разориться, она равна 0,04,
  а вот если у вас есть 100 рублей,
  то эта вероятность не разориться увеличивается до 0,98,
  но вот только продолжительность этой игры велика
  и игра может вообще никогда не закончится.
  
  Разорение игрока при двух нечестных монетах
  
  Представим что Олег и Роман при игре используют две нечестных монеты
  с одинаковым отклонением от ?,
  но в разные стороны - одна в пользу Олега, вторая в пользу Романа.
  Выбор монеты определяется случайно,
  после каждого броска, например честной монетой.
  Возрастет ли продолжительность игры в этом случае?
  Вроде как при большом количестве бросков влияние отклонения
  от честности используемых монет должно компенсироваться,
  так отклонения одинаковы, но с разными знаками.
  Грабли.
  Продолжительность игры сильно вырастет
  по сравнению с игрой честной монетой.
  
  Выигрыш до первой ничьи
  
  После начала игры Олега и Романа, кто-то вырвется вперед.
  Давайте загадаем какой-то выигрыш для этого удачного игрока.
  Например, 10 рублей.
  Первый вопрос - сколько ожидается раз у лидера будет этот выигрыш
  до первой ничьи?
  Второй вопрос - если мы увеличим ожидаемый выигрыш в 10 раз до 100 рублей,
  сколько ожидается таких выигрышей до первой ничьи?
  Грабли.
  Кажется логичным, что выигрышей в 100 рублей будет меньше
  чем выигрышей в 10 рублей.
  В действительности они будут равновероятны
  и количество обоих выигрышей вероятнее всего - 1.
  
  Блуждание на плоскости и в пространстве
  
  Про блуждание по прямой - в одномерном пространстве,
  я уже написал,
  и это просто другая модель бросания монеты.
  
  Возможно поблуждать и в двухмерном пространстве,
  часто приводят аналогию с пьяным матросом вышедшим из бара.
  В этом случае интересны два вопроса:
  вернется ли когда-то матрос в бар
  и как далеко уйдет матрос от бара за Ъ шагов.
  В бар он вернется, обязательно.
  Расстояние на которое матрос уйдет от бара таково,
  что средний квадрат расстояния пропорционален количеству шагов.
  
  Этот вопрос - "Как далеко уйдет матрос?",
  первые решили Эйнштейн и Смолуховский.
  Здесь нет грабель,
  но есть очень любопытное следствие.
  С помощью этого решения,
  была определена постоянная Больцмана,
  а заодно и вычислено число Авогадро [2].
  Вот так, покидав монетку, посмотрев на броуновское движение
  и подумав о пьяном матросе можно посчитать атомы.
  
  Блуждание в трехмерном пространстве не гарантирует возврат в исходную точку,
  увы.
  Как остроумно сформулировал Сидзуо Какутани
  <Пьяница рано или поздно найдет свой путь домой,
  а вот пьяная птица может потеряться навсегда>.
  Это печальное событие имеет вероятность 0,65,
  а математическое ожидание числа возвращений около 0,5.
  В среднем пьяная птица вернется домой полраза,
  в 65-ти пьянках из 100.
  
  Что выпадет раньше ОО или ОР
  
  Бросаем монету до тех пор пока не выпадет два орла (ОО) или орел и решка (ОР).
  Сколько в среднем нужно сделать бросков до получения
  одной из заданных последовательностей?
  Для начала, отметим что вероятности обоих результатов равны и составляют ?,
  после выпадения первого орла,
  с вероятностью ? выпадет орел или решка.
  Напрашивается вывод, что ожидание для обоих результатов будет одинаковым.
  Я так и думал,
  но интуиция как всегда подвела,
  это были очередные грабли,
  я на них загорал.
  Среднее время ожидания ОО - 6 бросков, а для ОР - 4.
  
  Как то на Хабре,
  была статья о доказательстве равновероятности выпадения орла или решки
  после выпадения подряд 20-ти орлов..
  Даже Википедия рассмотрела эту ситуацию.
  
  Подольем масла в огонь размышлений.
  После выпадения 20-ти орлов у нас может выпасть либо орел либо решка.
  Давайте подсчитаем сколько в среднем нам придется ждать
  этих последовательностей:
  
  Последовательность из 21-го орла в среднем придется ждать 4.194.302 броска.
  
  Последовательность из 20-ти орлов и затем решки придется ждать 2.097.150 броска.
  
  То есть 20 орлов и 1 решка выпадет в среднем почти в два быстрее чем 21 орел ,
  несмотря на то, что вероятности этих комбинаций одинаковы.
  
  И эта последняя последовательность имеет
  самое малое среднее время появления
  вместе с инвертированной последовательностью (20-ть решек и затем один орел)
  и отображенной последовательностью (один орел и 20-ть решек).
  Дальше грабли пойдут еще жирнее.
  
  Для тех, кому кажется, что комбинация из 21 результата
  где орлы и решки чередуются,
  ну, в "соответствии" с законом больших чисел подсчитаем время ожидания
  - 2.796.202 броска.
  
  А еще неожиданно
  (для меня, как и все остальные грабли)
  что ожидаемое количество бросков всегда четно.
  
  Корова больше чем баран, баран больше чем курица, курица больше чем... корова.
  
  На различии времени ожидания для разных комбинаций построена игра Пенни,
  вот она в Википедии.
  Но там не описано самое неожиданное в этой игре.
  Возьмем три комбинации: РРОР, РОРР и ОРРР.
  Вероятность каждой 1/16.
  Время ожидания появления каждой соответственно - 18, 18, и 16 бросков.
  (А например, для комбинации ОРОР ожидание 20 бросков (подмигнул)).
  
  Первая комбинация выигрывает у второй - 3 к 2,
  (т.е. она будет выигрывать 3 игры из 5)
  другими словами вероятность выигрыша первой комбинации над второй ?,
  что больше чем половина игр,
  вторая комбинация выигрывает у третьей - 7 к 5
  (вероятность 7/12, что тоже больше ?),
  вроде напрашивается вывод,
  что первая комбинация должна выигрывать у третьей тем более.
  Напрашиваются грабли.
  Третья комбинация выигрывает у первой 7 к 5!
  
  И еще одни грабли - ожидание второй комбинации - 18 бросков, а третьей - 16,
  но тем не менее вторая выигрывает у третьей.
  Другими словами комбинацию, вероятность победы которой выше,
  ждать нужно дольше!
  Вот как бывает,
  а интуиция то этого не знает!
  
  Равное количество выпадений орлов и решек у нескольких монет.
  
  Если мы будем бросать несколько различимых монет одновременно
  и подсчитывать сколько орлов выпало у каждой монеты.
  Всегда ли мы сможем получить одинаковое количество орлов у всех монет
  имея возможность бросать бесконечно?
  Я даже не буду упоминать про мои грабли,
  я без них никуда.
  Итак если мы будем бросать 2 или 3 монеты,
  мы сможем получить бесконечное число совпадений количества орлов у всех монет.
  Правда среднее время ожидания бесконечно.
  Если же монет будет больше чем три,
  то даже и при наличии бессмертия и бесконечного времени ожидания,
  мы получим лишь ограниченное количество совпадений.
  При всем том же бесконечном времени ожидания.
  
  Длина чистых серий
  
  Условимся называть серию "чистой" если она состоит
  только из одних орлов или решек.
  Какова средняя длина чистой серии?
  Проверяем интуицию,
  про свою я даже и не буду говорить.
  Средняя длина - 2.
  Теперь для любителей замечаний про не симметричную монету.
  Какова длина серий в этом случае?
  Во-первых, длина четных серий и нечетных будет разная.
  Это первые грабли.
  Длина нечетных серий будет зависеть
  от соотношения вероятностей выпадения орлов и решек.
  Для ранее описанной монеты с вероятностями 0,51 к 0,49
  длина нечетных серий будет 2,0016.
  А длина четных: осторожно, грабли номер два
  - будет всегда, независимо от величины несимметричности монеты равна 2.
  
  Чуть - это важно.
  
  Представим ваш друг, всегда говорящий правду, бросает монету так,
  что вы не видите результата.
  Он делает первый бросок и говорит вам, что выпал орел.
  Далее он делает еще один бросок.
  Какова вероятность что в результате двух бросков будет два орла?
  Правильно, это 1/2.
  
  Теперь чуть изменим ситуацию,
  друг бросил монету два раза и сказал вам что орел выпал в один из бросков,
  а про другой бросок ничего не сказал.
  Какова вероятность что выпало два орла? Правильно, это 1/4.
  
  Грабельки на внимательность.
  
  Ваш честный друг положил в коробку две монеты одинаковыми сторонами вверх
  и попросил нас угадать какой стороной они лежат.
  Вероятность нашего успеха - 1/2.
  Вот прямо так - либо угадаем, либо нет.
  Но есть трюк, который позволит нам ответить на этот вопрос.
  Следите за руками:
  
  Просим добавить к этим монетам третью, Орлом вверх.
  Получаем три монеты которые лежат в одной из следующих комбинации
  - ООО, ООР, ОРО, ОРР.
  Вероятность каждой комбинации - 1/4.
  Теперь посчитаем вероятность вытащить Орла из коробки.
  При первой комбинации ООО вероятность вытащить орла - 1,
  при второй и третьей - 2/3, при четвертой - 1/3.
  Общая вероятность:
  
  1*1/4 + 2/3*1/4 + 2/3*1/4 + 1/3*1/4 = 2/3.
  
  Иногда приводят довод, что монеты не различимы и комбинаций будет три,
  а не четыре: ООО, ОРО, ОРР и вероятность каждой комбинации ?.
  Хорошо, посчитаем вероятность вытащить орла в этом случае:
  
  1*1/3 + 2/3*1/3 + 1/3*1/3 = 2/3. Ничего не изменилось, во как.
  
  Что же значит вероятность вытащить орла равная 2/3
  При трех монетах это значит только одно!
  А именно - так как один орел был добавлен нами,
  то до нашего добавленного орла монеты с одинаковыми верхними сторонами
  лежали так - одна вверх орлом, а другая - решкой.
  Такая вот загогулина.
  
  Замечание для тех, кто добавляет к фразу типа
  "реальная монета, она не идеальная, не симметричная,
  а значит и результат отличается от теоретического:"
  да, результат отличается от теоретического,
  но не меняется метод и смысл решения.
  И кстати, для получения максимально близкого результата
  к результату идеальной монеты,
  монета должна быть не идеальной.
  
  Все изложенные в статье факты и цифры,
  это мое личное мнение,
  любые совпадения случайны,
  при бросании монет ни одна из монет, вероятно, не пострадала.
  Повторение опытов вы производите на свой страх и риск,
  автор ответственности не несет.
  
  [1] Сивухин Д.В. Общий курс физики: Учеб.пособие: Для вузов.
  В 5 т. Т.II. Термодинамика и молекулярная физика.
  - 5-е изд., испр. - М.: ФИЗМАТЛИТ. 2005. -544с.
  
  [2] Р. Фейнман, Р. Лейтон, М. Сэндс. Фейнмановские лекции по физике.
  - М.: Мир, 1965.
  
  [3] В.Феллер Введение в теорию вероятностей и ее приложения. Том 1.
  М.: Мир 1967.
  
  [3] В.Феллер Введение в теорию вероятностей и ее приложения. Том 1.
  М.: Мир 1967
  
  //// Конец цитирования.
  
  Вопрос о расхождении интуитивных ожиданий и "правильных математических оценок",
  на самом деле очень серьезный.
  Можно, конечно, считать, что наша интуиция далеко не совершенно,
  что в общем случае справедливо.
  И Мироздание, как учит вся современная наука,
  построено на "Законе больших чисел".
  Но по той же "теории вероятности" есть ненулевая вероятность того,
  что устойчивость такого рода ошибок интуиции
  может свидетельствовать о том,
  что в этом Мироздании чаще "рулит" не "Закон больших чисел",
  а "Закон больших грабель".
  
  И утверждение "классика словесности":
  "Хотели как лучше, а получилось как всегда",
  имеет в своей основе не "большие числа",
  а "Большие Грабли".
  
  Предлагаю, подумать об этом на досуге "за чашечкой кофе" или "рюмочкой чая"
  - может получится что-то нетривиальное.
  
  
  =========
  
  06.01.2024 11:17
  
  Условная вероятность простыми словами.
  В оглавление.
  
  Продолжая цикл заметок о "вероятностях" в нашем мире,
  нельзя пройти мимо достаточно интересной и практичной теории "условных вероятностей".
  Вот достаточно хороший материал по этой теме:
  
  "Условная вероятность простыми словами".
  Автор: Колдун
  https://aftershock.news/?q=node/1329761.
  5/Янв/24 13:30
  
  //// Начало цитирования.
  
  Условная вероятность является одним из важнейших понятий теории вероятности.
  В этой статье она будет разобрана на простых примерах.
  Те, кто хорошо знаком с предметом,
  не найдут здесь ничего интересного.
  Для остальных продолжим.
  Текст не сложный, примеры простые,
  только необходимый минимум формул.
  
  Введение
  
  Допустим, у нас есть случайный процесс,
  который может породить некоторое количество исходов (событий)
  с соответствующими вероятностями.
  Мы будем рассматривать случай, когда исхода всего два.
  Назовем исходы А1 и А2, их вероятности Р(А1) и Р(А2),
  сумма вероятностей Р(А1)+Р(А2)=1.
  Вероятности Р(А1) и Р(А2) будем называть априорными,
  так как эти величины не учитывают никакой дополнительной информации.
  
  Далее мы проводим дополнительный эксперимент,
  результатом которого является событие В.
  Результат эксперимента может скорректировать
  наши представления о вероятности событий А1 и А2.
  
  Так вот, условная (или апостериорная) вероятность
  - это и есть скорректированная вероятность
  с учетом новой информации от события В.
  
  Пока все сказанное выглядит несколько абстрактно,
  поэтому перейдем к пояснению на примере.
  
  Две монеты
  
  Допустим, в кармане лежат 2 монеты, не различимые наощупь.
  Но монеты разные:
  одна из них обычная орел/решка, а вторая орел/орел.
  Мы наугад достаем одну из них.
  Очевидно, что любая из монет может оказаться в руке с вероятностью 1/2.
  
  Перейдем к дополнительному эксперименту.
  Подбросим выбранную монету и посмотрим,
  какой стороной она выпала.
  
  Разберем сначала неинтересный случай - монета выпала решкой.
  В этой ситуации после эксперимента неопределенность исчезает,
  выбранная монета оказалась монетой орел/решка с вероятностью 1.
  Все очевидно, формулы не нужны.
  
  Интересным является случай,
  когда выбранная монета выпала орлом.
  В этой ситуации сохранилась неопределенность.
  Но сместились ли вероятности того,
  какую монету мы достали?
  Для одного броска это не вполне очевидно.
  Но допустим, что мы совершили некоторое количество бросков,
  и каждый раз монета выпадала орлом.
  И тут мы понимаем,
  что чем больше бросков,
  в результате которых каждый раз выпадает орел,
  тем больше степень уверенности в том,
  что мы наугад выбрали монету орел/орел.
  
  Как это можно оценить численно?
  Пришло время отвлечься от конкретного примера
  и сделать небольшую теоретическую вставку.
  
  Но сначала запишем для случая двух монет события и вероятности.
  
  Априорные вероятности
  
  Событие А1:
  Мы наугад выбрали монету орел/орел. Вероятность Р(А1)=1/2.
  
  Событие А2: Мы наугад выбрали монету орел/решка. Вероятность Р(А2)=1/2.
  
  Дополнительный эксперимент
  
  Произошло событие В:
  Выбранную наугад монету мы подбросили N раз,
  и каждый раз выпадал орел.
  
  Теперь обещанная теория.
  
  Формула Байеса
  
  Введем в рассмотрение величины Р(А1|B) и Р(А2|B),
  которые называются условными вероятностями:
  
  Р(А1|B) - это вероятность события А1 при условии,
  что произошло событие В.
  
  Р(А2|B) - это вероятность события А2 при условии,
  что произошло событие В.
  
  Формула для условной вероятности получается из таких соображений.
  Вероятность совместного события AB
  (это когда предполагается, что вместе произошло и событие А и событие В)
  можно связать с условными вероятностями двумя способами:
  
  Р(АВ)=Р(А|B)*Р(В)
  
  Р(АВ)=Р(В|А)*Р(А)
  
  Отсюда следует, что
  
  Р(А|B)=Р(В|А)*Р(А)/Р(В)
  
  Это формула Байеса для вычисления условной вероятности.
  
  В случае двух исходов получаем:
  
  Р(А1|B)=Р(В|А1)*Р(А1)/Р(В)
  
  Р(А2|B)=Р(В|А2)*Р(А2)/Р(В)
  
  Так как после дополнительного эксперимента
  сумма вероятностей по прежнему равна 1,
  то есть Р(А1|B)+Р(А2|B)=1,
  то полная вероятность события B равна:
  
  Р(B)=Р(В|А1)*Р(А1)+Р(В|А2)*Р(А2)
  
  Заметим, что для определения искомых вероятностей
  Р(А1|B) и Р(А2|B),
  в формуле Байеса используются:
  
  - априорные вероятности Р(А1) и Р(А2),
  
  - промежуточные величины Р(В|А1) и Р(В|А2),
  которые найти очень просто.
  
  Смысл формулы Байеса состоит в том,
  что для вычисления искомых вероятностей
  сначала вычисляются промежуточные вероятности,
  при этом меняются местами условие (причина) и следствие из условия.
  //// Обратите внимание на эту, вроде как, чисто "формальное"
  //// изменение последовательности событий.
  //// Может быть это Вам лучше понять суть не только "формулы Байеса",
  //// но и как-то хоть на на секунду допустить,
  //// что это не просто "технический прием",
  //// а попытка учесть "влияние будущего на прошлое".
  
  То есть при использовании формулы Байеса
  вычисляется вероятность того,
  что событие В (следствие)
  было вызвано событием А1 и А2 (причиной).
  Полученные таким образом промежуточные величины
  Р(В|А1) и Р(В|А2)
  далее используются для расчета искомых Р(А1|B) и Р(А2|B).
  
  Все это станет понятным при возвращении к примеру.
  
  Две монеты (продолжение)
  
  Нам надо найти следующие величины:
  
  Р(А1|B) - вероятность того,
  что мы наугад выбрали монету орел/орел при условии,
  что эта монета N раз подряд выпала орлом.
  
  Р(А2|B) - вероятность того,
  что мы наугад выбрали монету орел/решка при условии,
  что эта монета N раз подряд выпала орлом.
  
  Априорные вероятности известны: Р(А1)=1/2, Р(А2)=1/2.
  
  Поэтому для вычисления Р(А1|B) и Р(А2|B) надо найти Р(В|А1) и Р(В|А2).
  
  Р(В|А1) - вероятность того, что монета N раз подряд выпадет орлом
  при условии, что эта монета орел/орел.
  Очевидно, что Р(В|А1)=1.
  
  Р(В|А2) - вероятность того, что монета N раз подряд выпадет орлом
  при условии, что эта монета орел/решка.
  Р(В|А2)=(1/2)^N.
  
  Теперь мы можем записать формулы искомых условных вероятностей:
  
  Р(А1|B)=1/(1+(1/2)^N)=2^N/(2^N+1)
  
  Р(А2|B)=1-Р(А1|B)=1/(2^N+1)
  
  Для упомянутого выше <не вполне очевидного> случая
  одного броска (N=1),
  вместо исходного распределения Р(А1)=1/2 и Р(А2)=1/2,
  получаем Р(А1|B)=2/3 и Р(А2|B)=1/3.
  
  Рассмотрим еще один пример применения формулы Байеса.
  
  Проверка брака на производстве
  
  Есть предприятие, на котором производится некое изделие.
  По результатам длительных испытаний известно,
  что вероятность того,
  что наугад выбранное изделие окажется бракованным, равна p.
  
  На предприятии используется выборочный контроль качества.
  Вероятность того, что процедура контроля выдаст ошибочный результат, равна q.
  Уточним, что ошибка может быть двух видов:
  изделие с браком признано исправным,
  исправное изделие признано бракованным.
  
  Итак, наугад выбрано изделие,
  проведена процедура проверки качества,
  в результате изделие признано бракованным.
  Какова вероятность того,
  что оно является таковым на самом деле?
  Расчет будет приведен ниже.
  Далее варьированием параметров p и q
  мы выясним, каково должно быть их соотношение
  для того, чтобы обеспечить достаточную точность контроля.
  
  Запишем события и вероятности.
  
  Априорные вероятности
  
  Событие А1: Наугад выбрано бракованное изделие. Вероятность Р(А1)=p.
  
  Событие А2: Наугад выбрано исправное изделие. Вероятность Р(А2)=1-p.
  
  Тестирование
  
  Произошло событие В:
  Выбранное наугад изделие прошло процедуру контроля,
  и тест признал изделие браком
  (при этом вероятность того,
  что процедура контроля выдаст ошибочный результат, равна q).
  
  Расчет условной (апостериорной) вероятности
  
  Требуется найти Р(А1|B),
  то есть вероятность того,
  что выбранное наугад изделие реально бракованное,
  при условии, что это изделие признано бракованным процедурой контроля.
  
  Для вычисления Р(А1|B) надо вычислить Р(В|А1) и Р(В|А2).
  
  Р(В|А1) - это вероятность того,
  что изделие признано браком при условии,
  что оно браковано на самом деле.
  Процедура контроля ошибается с вероятностью q,
  то есть дает правильный результат с вероятностью 1-q.
  Значит Р(В|А1)=1-q.
  
  Р(В|А2) - это вероятность того,
  что изделие признано браком при условии,
  что оно на самом деле исправно.
  Процедура контроля ошибается с вероятностью q.
  Значит Р(В|А2)=q.
  
  Теперь мы можем записать формулу для искомой величины:
  
  Р(А1|B)=(1-q)*p/[(1-q)*p+q*(1-p)]
  
  После того, как формула получена в общем виде,
  протестируем ее на численных данных.
  Зададим реальную вероятность брака p=0.001.
  Варьировать будем вероятность ошибки процедуры контроля q.
  Приведем расчет для нескольких значений q,
  при этом величину Р(А1|B) округлим до двух знаков.
  
  Если q=10*p=0.01, то Р(А1|B)=0.09
  
  Если q=p=0.001, то Р(А1|B)=0.50
  
  Если q=0.1*p=0.0001, то Р(А1|B)=0.91
  
  Если q=0.01*p=0.00001, то Р(А1|B)=0.99
  
  Из приведенных расчетов следует,
  что для получения адекватной информации
  о реальном состоянии тестируемого изделия,
  вероятность ошибки процедуры контроля q
  должна быть много меньше исторической вероятности брака p.
  И этот вывод может быть не для всех очевиден до проведения расчетов.
  В данном случае использование формулы Байеса
  поможет найти то соотношение между p и q,
  которое позволяет осуществлять контроль качества
  с любой заданной точностью.
  
  Кстати, та же самая задача
  может быть сформулирована в более драматичном виде.
  Если p - вероятность некого заболевания,
  распространенность которого в популяции стабильна,
  q - вероятность ошибки метода выявления заболевания,
  то все приведенные выше расчеты справедливы и для этой формулировки.
  Поэтому, если вы получите диагноз при исследовании,
  то до того, как начинать всерьез волноваться,
  надо прежде всего выяснить соотношение между p и q.
  
  Мнимые парадоксы
  
  В заключение несколько слов о парадоксах типа
  Задачи о двух конвертах или Игры Монти Холла.
  Об их решении достаточно написано,
  поэтому не будем останавливаться на них подробно.
  Скажем лишь о том,
  что представление об области применимости условной вероятности
  наилучшим образом позволяет понять их
  мнимую парадоксальность.
  Достаточно лишь осознать,
  что к тому моменту игры,
  когда Участник должен сделать свой выбор,
  он не получил никакой полезной информации
  по сравнению с информацией до начала игры.
  То есть к моменту выбора Участник по прежнему
  имеет дело с априорными вероятностями,
  а апостериорные просто отсутствуют.
  
  //// Конец цитирования
  
  В общем все вроде понятно и просто,
  но при этом нельзя никогда забывать,
  что и эти "условные вероятности" имеют в своей основе
  все тот же "Закон больших чисел" и "теоретическое понимание вероятности",
  т.е. отсутствие какой либо ГАРАНТИИ чего бы то ни было.
  
  Но при этом надо отдать должное, что "байесианский путь",
  он как-то "интуитивно" более комфортен для понимания и принятия решений.
  Может быть, в таком направлении и стоит развивать "теорвер",
  чтобы как-то согласовать "интуицию" и "теорию"?
  И чисто формальная смена "причины и следствия" в формуле Байеса,
  возможно, "отзвук" какой-то интуитивно понимаемой "концепции кармы",
  или чего-то похожего, в которой "будущее бросает тень на прошлое".
  
  Интересно как бы в при таком подходе можно было бы,
  связать "Закон больших чисел" и "Закон Больших Грабель"?
  Добавить какие-то еще коэффициенты/множители,
  или рассматривать более расширенный диапазон "вероятностей",
  например, отрицательных или вообще комплЕксных.
  И рассматривать не просто "сложение" вероятностей,
  а их "интерференцию".
  
  Что, слишком радикальная гипотеза?
  Но ведь что-то подобное уже давно используется в квантовой механике,
  просто называется по-другому.
  Математически это осуществимо,
  но идеологически требует "серьезного" пересмотра
  существующей концепции МироЗдания.
  
  
  ========
  
  10.01.2024 14:54
  
  Структуры нейросетей простыми словами.
  В оглавление.
  
  Это материал для тех, кто еще не проникся полной "безнадегой"
  по поводу "пришествия нейрсетей", и хочет начать с чего-то самого простого:
  
  "Кто знает, что значит GPT в названии ChatGPT,
  могут дальше не читать".
  AlexeySushkov (Алексей Сушков)
  https://habr.com/ru/articles/785080/.
  9 янв 2024 в 11:40
  
  //// Начало цитирования
  
  .......
  
  План статьи
  
   Задачи ИИ и архитектуры нейросетей
  
   Виды нейросетей:
  
   Традиционные нейросети FFNN (Feed forward neural networks)
  
   Рекуррентные нейросети RNN (Recurrent neural networks)
  
   Сверточные нейросети CNN (Convolutional neural networks)
  
   Генерация изображений по текстовому описанию (Text-to-Image)
  
   Трансформеры TNN (Transformer Neural Networks)
  
   Иерархия нейросетей
  
   Выводы и ссылки
  
  GPT - Generative Pre-trained Transformer
  
  Generative Pre-trained Transformer:
  
   Generative - понятный термин говорит о том,
   что нейросеть что-то генерирует.
   В случае ChatGPT генерируется текст,
   другие генеративные нейросети могут генерировать картинки, музыку, видео и т.д.
  
   Pre-trained - тоже понятный термин, но, кажется, лишним уточнением,
   т.к. если модель ИИ предварительно не обучена,
   то она бессмысленна для практического применения.
  
   Transformer - это архитектура нейросети,
   которая использует структуру encoder - decoder с механизмом внимания.
   Вот тут и произошла заминка в понимании,
   начинаем разбираться сначала!
  
  Задачи ИИ и архитектуры нейросетей
  
  За последние несколько лет нейросети научились хорошо решать
  несколько классов задач:
  
   Задачи обработки естественного языка Natural Language Processing (NLP)
   такие как:
  
   Понимание и генерация естественного языка
   (Natural-language understanding (NLU) и Natural-language generation (NLG))
  
   Генерация изображений по текстовому описанию
  
   Машинный перевод (Machine translation (MT)), и многие другие.
  
   Распознавание изображений.
  
  В настоящее время удачно сложилось несколько факторов,
  которые и способствовали качественным успехам в работе нейронных сетей
  в этих направлениях:
  
   Современные компании и государства имеют доступ
   к мощным вычислительным ресурсам.
  
   В Интернете накопилось большое количество данных,
   что позволило создать наборы данных для обучения нейросетей (датасеты).
  
   Особенности архитектуры современных сетей:
  
   Открытие новых способов представления и обработки информации.
  
   Возможность ускорить исследования с помощью Transfer Learning.
   Это метод, который позволяет использовать
   предварительно обученные модели нейронных сетей
   для применения к другим задачам.
  
   Возможность использовать для обучения нейросетей
   параллельные вычисления.
  
  Для каждого класса задач обычно применяются свои типы нейросетей:
  
   Для задач NLP - это рекуррентные нейросети (RNN) и трансформеры.
  
   Для генерации визуальной информации - RNN,
   генеративные состязательные сети (GAN), Diffusion и трансформеры.
  
   Для распознавания изображений - сверточные нейросети (CNN).
  
  Видно, что некоторые архитектуры нейросетей универсальны
  и используются для решения нескольких классов задач.
  Рассмотрим подробнее основные современные архитектуры,
  но начнем с классических нейросетей,
  чтобы было легче понять их эволюцию.
  
  Эволюция нейросетей
  
  Нейроны
  
  Традиционные нейросети состояли из персептронов.
  Персептрон - условная модель нейрона мозга человека.
  На схеме классический персептрон,
  у которого n входных параметров X,
  которые нейрон умножает на n весов W,
  суммирует и далее использует функцию активации f(X)
  для получения выходного значения Y:
  
  ......
  
  Традиционные нейросети FFNN (Feed forward neural networks)
  
  В любой нейронной сети есть входной слой нейронов,
  выходной слой и один или несколько скрытых слоев.
  Такие сети называют Multi-layer Perceptron (MLP).
  Они являются полносвязными,
  т.е. все нейроны в слое связаны со всеми нейронами следующего слоя,
  но нейроны в одном слое не связаны друг с другом.
  MLP обычно визуализируются подобными схемами:
  
  ......
  
  При работе нейросети сигнал передается от входов к выходам,
  поэтому такие сети еще называют сетями прямого распространения
  Feed forward neural networks, (FFNN).
  Обучаются FFNN сети методом градиентного спуска
  и обратного распространения ошибки (backpropagation).
  
  ......
  
  Рекуррентные нейросети RNN (Recurrent neural networks)
  
  Recurrent neural networks, RNN)
  - это те же сети прямого распространения,
  но со смещением во времени:
  нейроны получают информацию не только от предыдущего слоя,
  но и от самих себя в результате предыдущего прохода R:
  
  ......
  
  Из этого свойства следует, что такие сети хорошо решают задачи,
  связанные с последовательностями:
  
   Понимание и генерация текстов.
  
   Чат боты и другие диалоговые системы.
  
   Машинный перевод текстов.
  
   Распознавание речи и музыки.
  
   Описание содержимого картинок или видео.
  
  Существует несколько архитектур, развивающих идею рекуррентных нейросетей:
  
  LSTM (Long short-term memory)
  
  Архитектура LSTM используют фильтры (gates) и блоки памяти (memory cells).
  Наличие фильтра забывания на первый взгляд кажется странным,
  но иногда забывать оказывается полезно:
  если нейросеть запоминает книгу,
  то в начале новой главы может быть необходимо
  забыть некоторых героев из предыдущей.
  Эти механизмы реализуются в скрытом состоянии нейрона H:
  
  ......
  
  Управляемые рекуррентные нейроны (Gated Recurrent Units, GRU)
  
  GRU - разновидность LSTM, которая быстрее и проще в эксплуатации.
  Вместо входного, выходного фильтров и фильтра забывания
  здесь используется фильтр обновления (update gate).
  Подробности работы GRU: "Text generation with an RNN"
  
  Недостатки рекуррентных сетей:
  
   Длительное время обучения и выполнения:
   Рекуррентные сети обрабатывают входные embeddings последовательно по шагам,
   что означает, что каждый шаг зависит от предыдущего.
  
   Отсутствие параллелизма.
  
   Рекуррентные сети могут столкнуться с проблемой
   исчезающего или взрывного градиента.
   Это означает, что информация о предыдущих шагах
   может постепенно исчезать или сильно увеличиваться,
   приводя к проблемам в обучении модели.
  
   Неэффективная работа Transfer Learning.
   Это связано с тем, что каждый шаг зависит от предыдущего,
   и изменение архитектуры может повлиять на работу модели.
  
  Трансформеры, в свою очередь, позволяют преодолеть эти недостатки
  и достичь более эффективной обработки последовательностей.
  
  Трансформеры TNN (Transformer Neural Networks)
  
  Задачи, которые хорошо решают трансформеры:
  
   Обработка длинных последовательностей.
  
   Связывание контекста и запоминание долгосрочных зависимостей.
  
   Перевод и генерация текста.
  
  Первое упоминание архитектуры трансформеров относится
  к 2017 "Attention Is All You Need".
  
  Механизм внимания
  
  Механизм внимания является неотъемлемой частью в реализации трансформеров.
  Он обычно демонстрируются на примере задачи машинного перевода.
  Механизм внимания способен выявлять связи между словами
  в разных контекстах и помогает модели перевода
  правильно ассоциировать токены во входной и выходной последовательностях
  
  ......
  
  Механизм внимания не ограничивается только задачами обработки
  естественного языка (NLP),
  его также применяют в других областях и сценариях,
  таких как компьютерное зрение и распознавание речи.
  Визуализация механизма внимания часто представляется в виде схем,
  где главной особенностью является возможность
  подавать данные на вход параллельно и обрабатывать их одновременно:
  
  ......
  
  Трансформеры могут быть следующих типов:
  
   Encoder-only (только кодировщик):
   Эта архитектура трансформера состоит только из кодировщика,
   который преобразует входные последовательности
   во внутреннее представление.
   Такие трансформеры используются, например,
   для классификации текстов или анализа эмоциональной окраски текстов.
  
   Decoder-only (только декодер):
   В этой версии трансформера используется только декодер,
   который генерирует последовательность на основе
   внутреннего представления или контекста.
   Такой тип трансформера часто используется в задачах генерации текста,
   например, в модели GPT.
  
   Encoder + Decoder (кодировщик + декодировщик):
   Это наиболее распространенная архитектура трансформера,
   в которой присутствуют и кодировщик, и декодер.
   Эта архитектура используется в задачах машинного перевода.
  
  При обучении трансформеров есть несколько преимуществ:
  
   Возможность использования различных текстовых данных
   без необходимости предварительной разметки.
  
   Обработка последовательностей как целого:
   TNN способны обрабатывать последовательности данных целиком,
   вместо шаг за шагом, как в рекуррентных нейронных сетях (RNN).
  
   TNN используют механизм внимания,
   который помогает сети фокусироваться
   на наиболее важных частях последовательности
   и устанавливать взаимосвязи между различными элементами данных.
  
   Transfer Learning:
   модели TNN, предварительно обученные на больших наборах данных,
   могут быть использованы для решения задач в других областях.
  
  Т.о. получается, что трансформеры являются на сегодняшний день
  самой эффективной архитектурой для решения практических задач.
  
  Сверточные нейросети CNN (Convolutional neural networks)
  
  Первые архитектуры сверточных нейросетей появились еще
  в 80-х годах прошлого века.
  Сейчас с помощью сверточных сетей решаются следующие актуальные задачи:
  распознавание изображений и видео,
  поиск объектов и сегментация изображений,
  компьютерное зрение
  и алгоритмы в беспилотных автомобилях,
  распознавание объектов на рентгеновских снимках и МРТ,
  идентификация людей и генерация дипфейков.
  
  Алгоритм работы сверточных сетей на примере анализа изображений:
  
   Все сверточные сети состоят из двух частей
   - сверточной части, которая выделяет признаки из изображения
   и классификатор, который по этим признакам распознает изображение.
  
   Изображение проходит через последовательность сверточных слоев.
   На каждом слое применяется набор фильтров
   (также называемых ядрами свертки),
   каждый из которых сканирует изображение с определенным шагом
   (шаг свертки)
   и выделяет признаки изображения,
   такие как границы или текстуры.
   Как результат, для каждого фильтра получается карта признаков,
   которая передается на следующий слой для уменьшения размерности.
  
   Для уменьшения размерности карты признаков
   применяется слой субдискретизации (subsampling) или пулинга (pooling).
  
   Далее обычно следует еще несколько сверточных слоев
   и слоев уменьшения размерности,
   которые извлекают все более абстрактные признаки из изображения.
  
   В конце полученные карты признаков передаются в классификатор,
   который является обычным многослойным персептроном.
  
   В CNN выделение признаков тоже является автоматическим процессом,
   что делает всю сеть нейронной.
  
  Далее приведена визуализация алгоритма работы сверточной сети
  для распознавания лиц.
  На ней интересно посмотреть,
  как выглядят признаки, которые выделяет нейросеть на каждом шаге свертки
  
  ......
  
  В CNN сетях эффективно применяется Transfer Learning.
  При использовании Transfer Learning,
  предварительно обученная модель фиксируется (замораживается),
  чтобы веса и параметры уже обученных слоев не изменялись.
  Затем, добавляются новые слои,
  которые будут адаптироваться к новому набору данных.
  Эти новые слои обычно обучаются на небольшом количестве данных,
  что экономит время и вычислительные ресурсы.
  
  .......
  
  Генеративные состязательные сети GANs
  (Generative Adversarial Networks), Автоэнкодеры (Autoencoder),
  гибридные и мультимодальные нейросети
  
  Для полноты картины упомяну еще несколько архитектур нейросетей
  
  GAN (Generative Adversarial Networks) относится к семейству нейросетей,
  которые состоят из двух сетей, работающих вместе,
  где одна из сетей генерирует данные ("генератор"),
  а вторая - анализирует ("дискриминатор").
  Используются для задач генерации изображений или музыки.
  
  Автоэнкодер (Autoencoder) - специальный тип нейросетей,
  которые используются для задач автоматического обучения задачам кодирования
  (encoding) входных данных и последующим их декодированием
  (decoding) в выходные данные.
  Характерная черта автоэнкодеров в том,
  что размерность входного слоя совпадает с размерностью выходного.
  Применяются для задач в которых надо преобразовать входной сигнал
  в такой же выходной, но с новыми свойствами,
  например, избавиться от шума в изображении или музыке.
  
  Гибридные сети
  
  Нейросети, состоящие из нескольких сетей, например, трансформер + CNN,
  используются для сложных задач познания или моделирования реальности.
  
  Мультимодальные сети
  
  Мультимодальные сети - это нейронные сети,
  которые объединяют информацию из разных типов источников,
  таких как видео, текст, звук и другие,
  для решения сложных задач анализа данных,
  например, распознавание объектов в видео с аудиодорожкой
  или анализ эмоций в мультимодальных данных.
  
  Заключение
  
  Трансформеры являются на сегодняшний день самой эффективной архитектурой
  для решения практических задач.
  С помощью них можно строить large language model (LLM) и мультимодальные сети.
  Но чудес не бывает и нейросети требуют ясного определения задачи,
  которую нужно решить.
  Здесь важна роль человека, чтобы понять проблему,
  сформулировать цель и установить ожидания от сети,
  но это уже совсем другая история.
  
  Оставлю еще несколько полезных материалов
  
  ......
  
   Зоопарк архитектур нейронных сетей. Часть 1
  https://habr.com/ru/companies/wunderfund/articles/313696/
  
   Зоопарк архитектур нейронных сетей. Часть 2
  https://habr.com/ru/companies/wunderfund/articles/313906/
  
   Объяснение CNN на примере классической задачи
   распознавания рукописного текста "Convolutional neural networks"
  https://www.jeremyjordan.me/convolutional-neural-networks/
  
  ......
  
  //// Конец цитирования.
  
  Это конечно очень краткое и неполное описание возможных структур нейросетей
  Но для первоначального ознакомления, на мой взгляд, вполне неплохо.
  А тем кому стало интересно, то могут пройтись по ссылкам в этом модуле,
  их даже больше чем хотелось бы, и все равно этого "маловато будет".
  "Нельзя объять необъятное".
  
  Но с чего-то начинать надо, и, даже в условиях очень бурного потока информации
  на тему нейросетей какие-то основы уже, наверно, не сильно изменятся,
  хотя новых структур будет еще предостаточно.
  
  
  ========
  
  10.01.2024 15:36
  
  Функции активации нейронов простыми словами.
  В оглавление.
  
  Есть такой термин в нейронауках как "функция активации".
  По простому это функция которую выполняет отдельный нейрон
  над поступающими емк на вход данными.
  Чуть более подробно можно посмотреть в этом материале:
  
  "Как обьяснить функции активации в нейронных сетях
  в вашему коту: простое руководство".
  Squirrelfm (Igor Novikov)
  
  https://habr.com/ru/companies/raft/articles/784964/.
  9 янв 2024 9:07
  
  //// Начало цитирования.
  
  ......
  
  Нейрон принимает множество входных сигналов
  и магическим образом обрабатывает их,
  чтобы получить (в идеале) полезный результат на выходе.
  Поскольку нейроны связаны друг с другом,
  этот результат может быть передан связанному нейрону
  в качестве входных данных.
  Таким образом формируется сеть.
  
  Нейрон внутри просто вычисляет взвешенную сумму своих входных данных.
  Вот и вся магия - берем все сигналы (которые выражены числами)
  и суммируем их
  - это результат.
  Ключевое слово здесь - "взвешенная" сумма.
  Он умножает все входные данные на определенный параметр,
  называемый весом.
  Как мы обсудили в этой статье,
  веса вычисляются в процессе обучения,
  и это главная цель обучения.
  Таким образом веса, в целом,
  это магические числа,
  полученные эмпирическим путем
  (он же метод тыка).
  
  Искусственный нейрон имеет два основных свойства:
  weight (вес) и bias (??предвзятость, судья и здесь подкуплен.
  На самом деле это смещение - подробнее в конце).
  И все, что он делает,
  - это линейное преобразование всех входных данных,
  подобное следующему:
  
  y = a * x + b
  # думаю вы узнали уравнение прямой, отсюда название "линейная"
  
  ......
  
  Что нейрон делает кажется простым.
  Потому что это и правда просто.
  Но есть один подвох: это слишком просто!
  Вы можете объединить множество таких нейронов в сеть,
  но это не поможет - многие сложные процессы в реальной жизни
  не являются линейными и смоделировать их такой сетью не выйдет! ??
  
  Чтобы обойти это ограничение, выходные данные не отправляются как есть,
  они сначала преобразуются с использованием функции активации.
  Активационная функция активирует киборгов,
  которые захватят: ой не в ту книгу поглядел.
  Функция активации - это своего рода фильтр, который:
  
   фильтрует неважную информацию и оставляет только важную
   в определенном формате;
  
   вводит необходимую нелинейность,
   позволяя сети учиться и моделировать сложные закономерности.
  
  Так что если подумать об этом - активационные функции
  усложняют работу нейронов,
  и это их основная цель ??...
  Но это логично, они следуют принципу Альберта Эйнштейна:
  сделайте настолько просто насколько возможно, но не проще.
  
  Итак, полная функция преобразования нейрона выглядит так:
  
  выход = активационная_функция(сумма(вес * вход + смещение))
  
  .......
  
  Типы слоев нейронов и их связь с выбором функции активации
  
  Нейроны обычно связывают в сеть, наподобие такой:
  
  ......
  
  Основные три типа слоев это:
  
   Входной - первый слой сети, который принимает сырые данные
  
   Выходной (frontend) - последний слой,
   который преобразует все что нейронная сеть надумала
   в более или менее конкретный ответ.
   Например, если в выходном слое используется softmax
   - он выдаст вероятности что заданная картинка это собака, кошка или попугай.
  
   Скрытый (backend) - бэкенд он и есть бэкенд.
   Делает всю реальную работу под капотом.
  
  Различные слои используют разные функции активации,
  потому что у них разные цели
  (почти так же, как разные фреймворки используются для фронтенда и бэкенда).
  Какую функцию активации использовать, зависит от одного
  - чего мы хотим добиться.
  Эта функция может быть любой, на самом деле,
  но некоторые функции работают лучше.
  Вот самые распространенные из них:
  
  ReLU
  
  Rectifier linear unit (aka нелинейная функция)
  
  Много умных слов, готовьтесь быть шокированными настоящим жестким матаном:
  
  if input > 0:
   return input
  else:
   return 0
  
  И это всё??? ??
  Страшное название, очень простая вещь, как всегда в ML ??.
  Берем входное число и обрезаем его до ноля, если оно отрицательное.
  Интересно, кто заведует отделом наименований в машинном обучении.
  Я думаю - те же люди что придумали "вкусно и точка"...
  
  ReLU предпочтительна по следующим причинам:
  
   Простота и эффективность:
   ReLU совершает простую математическую операцию max(0, x).
   Эта простота приводит к быстрым вычислениям.
  
   Решение проблемы исчезающего градиента (Vanishing Gradient):
   В глубоких сетях градиенты могут стать очень маленькими,
   что мешает обучению сети.
   Для примера посмотрите на другую распространенную функцию сигмоид:
  
  Видите, что она делает?
  Чем больше значение x, тем ближе y к 1.
  Это означает, что при очень больших значениях x,
  когда x изменяется - y практически не меняется.
  Так что почти не имеет значения,
  каково значение x после определенного уровня,
  y будет примерно равно 1,
  и таким образом система не может реагировать на входные данные,
  то есть учиться.
  
  Теперь посмотрим на ReLU:
  
  Поскольку у ReLU нет ограничения для всех положительных входных параметров,
  это помогает уменьшить эту проблему.
  Однако у ReLU есть и свои недостатки.
  Самый заметный из них - проблема <умирающего ReLU>,
  когда многие нейроны могут стать неактивными и выводить только ноль,
  потому что на большом диапазоне значений выход функции равен нулю.
  Это можно уменьшить с помощью вариаций ReLU,
  таких как (Leaky ReLU или параметрический ReLU (PReLU).
  
  Сигмоида
  
  Раз уж мы начали об этом говорить,
  давайте рассмотрим еще одно пугающе звучащее инопланетное чудовище.
  Термин <сигмоид> происходит от греческой буквы <сигма> (?, ?),
  из-за характерной "S"-образной кривой функции.
  Само слово <сигмоид> по сути означает "S-образный"...
  Могли бы просто назвать функцию S-образной, знаете...
  
  Вот график:
  
  И формула:
  
  f(x) = 1/(1+e^-x)
  
  Сигмоида хороша для бинарной (да/нет) классификации,
  потому что она принимает любое действительное число
  в качестве входного и преобразует его в число между 0 и 1.
  По этой причине она часто используется в выходных слоях
  (подробнее об этом смотрите в конце).
  
  Softmax
  
  Мягкомаксимум.
  Как вы уже наверное догадались по предыдущим названиям,
  эта функция не мягкая и не максимум??.
  Ну что поделаешь.
  
  Функция softmax принимает на вход вектор из K действительных чисел
  и нормализует его в распределение вероятностей,
  состоящее из K вероятностей,
  пропорциональных экспонентам входных чисел.
  Да, вы все правильно услышали ??.
  
  Если серьезно, что она делает
  - принимает список произвольных чисел и преобразует их
  в список вероятностей пропорциональных этим числам.
  То есть:
  
  Допустим, у нас есть список [1, 2, 3]:
  
  softmax([1, 2, 3]) = [0.09003, 0.24473, 0.66524]
  
  Вот и все.
  Сумма возвращаемых вероятностей будет равна 1 (или 100%).
  Чем больше число во входном списке (по сравнению с другими)
  - тем выше вероятность,
  в которую оно будет преобразовано на выходе.
  
  Здесь стоит отметить, что функция принимает вектор (список) входных данных
  - а не одно число.
  Это отличается от всех предыдущих,
  и причина в том, что она работает сразу с несколькими нейронами
  (обычно со всем слоем).
  Таким образом, она сворачивает результаты слоя
  в выходное распределение вероятностей.
  По этой причине она часто используется в выходных слоях,
  для получения финального результата.
  
  Кроме того, softmax используется в механизме внимания
  в архитектуре трансформера,
  потому что, если подумать,
  внимание - это своего рода ранжирование множества вещей
  в список наиболее важных.
  
  Главное, что здесь нужно понять:
  
   Вероятность того, что входные данные относятся к первой категории
   (соответствующей 1), составляет примерно 0.09003.
  
   Вероятность того, что входные данные относятся ко второй категории
   (соответствующей 2), составляет примерно 0.24473.
  
   Вероятность того, что входные данные относятся к третьей категории
   (соответствующей 3), составляет примерно 0.66524.
  
  Это делает функцию softmax особенно полезной
  для задач классификации в нейронных сетях,
  когда выходные данные должны представлять вероятность по нескольким классам.
  Например, когда мы пытаемся понять,
  является ли изображение собакой (1), кошкой (2) или рыбой (3).
  
  Фактически, если у вас только две категории,
  она сводится к той же формуле, что и сигмоид,
  так что она как бы сигмоид только для >2 категорий.
  
  Вот формула, если вы действительно хотите ее увидеть:
  
  .......
  
  Tanh
  
  Еще один гиперболоид инженера Гарина.
  Это название хотя бы логичное.
  Гиперболический тангенс часто сокращается как
  (произносится как <танч>).
  
  Эта функция принимает любое действительное число на входе
  и выдает значения в диапазоне от -1 до 1:
  
  tanh(x) = 2 * sigmoid(2x)-1
  
  или
  
  tanh(x) = 2/(1+e^(-2x)) -1
  
  Выходные значения tanh находятся в диапазоне от -1 до 1,
  что делает её центрированной относительно нуля.
  Это выгодно, поскольку это может помочь процессу обучения,
  так как данные, проходящие через сеть,
  в среднем будут поддерживать среднее значение близкое к 0,
  что в свою очередь помогает оптимизации методом градиентного спуска.
  Выходные значения сигмоида, с другой стороны,
  не центрированы относительно нуля (диапазон от 0 до 1),
  что может привести к так называемой проблеме <исчезающих градиентов>
  (см. раздел ReLU для объяснения).
  Из-за этих свойств (быстрый градиентный спуск,
  отсутствие исчезающих градиентов)
  tanh часто используется в скрытых слоях.
  
  Binary Step Function (ступенчатая)
  
  Бинарная ступенчатая функция
  - один из самых простых типов функций активации,
  используемых в нейронных сетях.
  Это пороговая функция активации,
  которая активируется или нет в зависимости от того,
  находится ли входное значение x выше или ниже определенного порога,
  что аналогично переключателю вкл/выкл.
  Обычно она используется в перцептронах
  и задачах бинарной классификации,
  где ожидается, что выход будет либо 0, либо 1,
  например, при решении,
  является ли электронное письмо спамом или не спамом.
  
  Исторически это была первая использованная функция активации
  в контексте нейронных сетей.
  Она использовалась в самом первом типе искусственного нейрона,
  названного перцептроном, разработанного Фрэнком Розенблаттом
  в конце 1950-х годов.
  
  Бинарная ступенчатая функция может быть математически определена как:
  
  .....
  
  где ? это пороговое значение.
  
  Функция не часто используется в современных нейронных сетях,
  потому что она не дифференцируема на пороге ?,
  что делает её непригодной для использования
  с обратным распространением ошибки
  (методом, используемым для обучения нейронных сетей).
  Кроме того, она не предоставляет вероятностный результат,
  а жесткий ответ да-нет,
  который может быть слишком жестким для реальных задач.
  
  Существует множество других функций, это лишь наиболее часто используемые.
  
  Bias: Поговорим про предвзятость
  
  Ещё одна жертва департамента наименований ??.
  Очень хочется поглядеть на этих людей и как они называют своих детей:
  
  На самом деле это просто смещение или сдвиг.
  Название bias пришло из статистики
  и там оно имеет определенный смысл. Смещение добавляется к сумме входных значений нейрона
  (собственно чтобы сместить конечный результат),
  перед применением функции активации.
  
  Это аналог смещения в формуле прямой,
  позволяет сместить график функции вверх или вниз.
  Без смещения вывод нейрона полностью управляется суммой входных параметров,
  что может ограничить его гибкость.
  Смещение добавляет ещё одну возможность настройки нейрона
  которая помогает сети лучше подстраиваться под обучающие данные.
  
  Вот пример где смещение одновременно является и предвзятостью.
  Допустим мы строим рекомендательную систему для фильмов,
  где мы используем оценки одних пользователей
  для того чтобы рекомендовать фильмы другим,
  похожим пользователям.
  Всегда найдутся особенно привередливые критики,
  которые никогда не ставят фильмам высоких оценок.
  Хорошо бы учесть это в нашей системе,
  но если задуматься - это уже не характеристика фильма,
  а конкретного пользователя,
  т.к. он ставит низкие оценки всем фильмам без разбора.
  Веса зависят от характеристик фильма,
  а тут что делать?
  Вот тут и пригождается bias
  чтобы учесть поправку на особенно привередливых пользователей
  при обучении модели.
  
  ......
  
  //// Конец цитирования.
  
  В общем, ничего сложного в "функциях активации" вроде и нет.
  Основная сложность это знание где какую функцию стоит
  или, наоборот, не стоит применять.
  А вот с этим полная "засада"
  - есть какие-то рекомендации, есть эвристики,
  а вот теории, кроме простейших случаев, нет,
  все познается на горьком опыте.
  
  Но может быть что-то когда-то изменится,
  и я с удовольствием включу такой материал в этот модуль.
  
  
  ========
  
  14.01.2024 12:25
  
  Разработка интеллектуальной ML-системы простыми словами.
  В оглавление.
  
  Есть представление, культивируемое настоящими "дата сатанистами",
  что настоящая интеллектуальная система на основе "машинного обучения" (ML)
  может быть построена только на "продвинутой математике".
  "Но не все так однозначно".
  
  Разработка ML-системы на самом деле не очень сильно отличается по идеологии
  от разработки любой технической системы,
  и все отличие только в конкретных "технологических деталях" реализации
  специфических вопросов, относящихся к "машинному обучению".
  А где же тут место "продвинутой математике"?
  
  Вот очень интересное мнение по этому вопросу:
  
  "Уродливая математика в машинном обучении
  или чему нам стоит поучиться у деривативов?"
  Автор: antipov_dmitry (Дмитрий Антипов)
  https://habr.com/ru/articles/786220/.
  14 янв 2024 в 10:25
  
  Текст просто замечательный, очень рекомендую для прочтения в оригинале,
  а здесь просто хочется сохранить этот текст "на всякий пожарный".
  
  //// Начало цитирования.
  
  Когда слушаешь доклады на больших ML-конференциях,
  то часть докладов вызывает восторг,
  но другая часть на послевкусии вызывает странное чувство.
  Да, доклад может быть очень крутым,
  математика блестящей,
  сложность крышесносной,
  но что-то как будто бы не так.
  
  Рис. На 20ом промпте вышло то, что надо!
  
  Эта статья - развлекательно-философская,
  все совпадения с реальностью - случайны,
  персонажи вымышлены,
  с точкой зрения - можно не соглашаться,
  но поразмышлять - стоит.
  
  Да при чем здесь вообще деривативы?
  А просто у деривативов, дженги и машинного обучения
  - много общего,
  давайте разбираться.
  
  Кратко о деривативах в качестве вступления
  
  Термин <деривативы> относится к финансовому миру
  и обознает любой производный инструмент на основе базового актива,
  а если совсем упростить на пальцах,
  это договоренность
  через арбитра что-то сделать
  в отношении чего-то
  на каких-то условиях.
  
  Например, у нас есть бананы.
  Можно просто купить бананы здесь и сейчас по какой-то цене
  - это будет прямая сделка.
  Но как только мы начинаем договариваться о сложных условиях покупки бананов,
  например, желая зафиксировать цену на следующий год при продаже частями
  или зарезервировать за собой право покупки при снижении цены,
  это уже будет сложной сделкой.
  
  Базовый актив здесь - бананы,
  а набор условий поверх - и есть дериватив.
  
  Деривативы могут быть очень сложными.
  Например, мы хотим купить бананы за цену меньше текущей на 10%,
  но только в июле и только при условии,
  что картофель не подорожает,
  а другие покупатели одновременно не купят помидоры
  по цене меньше 20% текущих цен.
  Деривативы могут быть ОЧЕНЬ сложными,
  и в них заложен запредельный уровень математики.
  
  Рис. Монстр-дериватив на основе бананов может выглядеть так!
  
  Математика внутри настолько сложна,
  что на заре появления деривативов самые крупные банки планеты
  соревновались за гениальные умы,
  щедро перебивая любые выставленные цифры зарплат.
  Индустрию пытались <залить математикой>.
  
  Математика же снаружи была настолько изящна,
  что позволяет маркетингу банков и брокеров
  упаковывать безумно сложные продукты в очень простые лозунги
  и продавать их множеству корпоративных клиентов на триллионы денег.
  
  Вера в гениальность очаровывает.
  Вера в математику - подкупает.
  Но деривативы - смертельно опасны,
  потому что никто,
  кроме авторов и редких исключений,
  до конца не понимает,
  что именно в них заложено.
  
  Рис. Еще один вариант монстр-дериватива на бананах
  
  Именно по этой причине деривативы безжалостно убивают
  множество желающих с ними заигрывать,
  в том числе профильных спецов,
  таких как старейший банк Англии,
  который работал 230 лет,
  а потом на деривативах вслыл пузом кверху.
  
  Ни слова больше, нужна картинка дженги.
  
  Рис. Для устойчивости дженги не обязательно должны быть идеальны все блоки
  
  О математике (как обобщении всего, с ней связанного) в ML
  
  Если вы дотянули до этой части - спасибо!
  
  Машинное обучение похоже на деривативы тем,
  что в индустрии так же есть очарованность <математикой>,
  многие задачи пытаются просто <залить математикой>,
  хотя сам процесс создания технологий
  не коррелирует напрямую с количеством и мощностью математиков в команде.
  Как и в деривативах,
  процесс скорее идентичен построению башни в игре <дженга>
  - одни блоки кладутся на другие
  и баланс новых блоков зависит от устойчивости всей предыдущей конструкции.
  
  Причем, аналогия с дженгой гораздо более удачна,
  нежели с обычной пирамидой или башней,
  потому что дженга устойчива к неидеальности бытия,
  то есть все же позволяет совершить некоторое количество ошибок в процессах,
  в целом сохраняя устойчивость всей системы.
  
  Но чем больше промахов было совершено ближе к низу пирамиды,
  тем меньше шансов на дальнейшую устойчивость
  и построение башни ввысь.
  В технологиях - точно так же,
  и <нижние блоки> - они не про математику.
  
  Большинство задач, которые мы пытаемся решить машинным обучением,
  (если оочень огрубить)
  проходят через несколько одинаковых этапов:
  
  1. Постановка задачи
  
  2. Выбор магистрального решения
  
  3. Сбор датасета
  
  4. Разметка данных
  
  5. Построение модели
  
  Да, этапы очень условны,
  так как задачи бывают у всех разные и много нюансов,
  часто этапы вообще едва различимы,
  часто с одного этапа можно возвращаться на другой
  или безудержно скакать между ними много раз,
  но я все же попытаюсь описать максимально средний процесс.
  
  Еще одним плюсом сравнения именно с дженгой является то,
  что в ней нет явных доминирующих блоков,
  в том смысле, что в ней нельзя особенно усилить какой-то отдельный блок,
  они равноценны по ширине,
  но каждый все же следующий зависит от предыдущего
  и всей конструкции в целом.
  
  Рис. Хорошая технология - как дженга,
  где каждый этап может быть неидеален,
  но нужен для следующего
  
  Сначала я расписал все этапы последовательно,
  но гораздо прикольнее их будет перевернуть.
  
  5 - Построение модели
  
  Рис. Картинка как иллюстрация к процессу построения модельки
  
  Хардкор!
  Часто - сильная математика, множество экспериментов,
  самая мякотка и вишенка на торте технологий.
  То, о чем часто рассказывают на конфах.
  Трансформеры, GANы, тензоры, перцептроны,
  все очень сложно, круто,
  математично.
  
  Это самая интересная часть.
  Строить модель - всегда интересно,
  ну потому что это сложно и азартно.
  Здесь есть дофаминовый азарт
  - вытянуть максимум из того, что у нас есть.
  Просто дайте нам датасет
  - и мы все сделаем.
  
  Без шуток - строить модели действительно сложно, интересно, азартно и круто.
  
  4 - Разметка данных
  
  Рис. Гномы-разметчики на конвейерной ленте задач
  
  Разметка - это присвоение неких признаков вашим данным.
  Например, выделение на картинке объекта или транскрибация аудио в текст.
  
  Разметка,
  по моим субъективным ощущениям (я с ней связан напрямую)
  - самый нелюбимый всеми процесс.
  Он сильно менее интеллектуальный и от того сильно менее интересный.
  К сожалению, у некоторых команд есть представление,
  что разметка это нечто разовое и легкое,
  <все же понятно> и что можно просто описать в несколько предложений
  задачу ассесорам и AI-тренерам
  и сразу получить результат на блюдечке.
  
  В сильных командах понимание того, что разметка важна,
  уже обычно набито опытом.
  Весь процесс разметки - максимально итеративный.
  Сделали - проанализировали - внесли правки - размечаем дальше
  и так далее и по кругу много-много раз.
  
  В процессе промежуточного анализа будут всплывать
  граничные, субъективные и просто сложные случаи
  и для хорошего результата это нужно анализировать
  и вовремя корректировать задачу разметчикам.
  Хорошая разметка напрямую зависит от качества собранного датасета,
  а также от понятной и однозначной инструкции разметчикам.
  
  Если бы все было легко и всем все было бы сразу понятно,
  то и кассиры бы повально не спрашивали бы паспорт
  у уже давно совершеннолетних людей ?
  
  3 - Сбор датасета
  
  Рис. Робот собирает датасет с крестьян
  
  Здесь возможны варианты.
  Возможно, датасет у вас уже есть (если данные от бизнеса),
  а возможно его придется формировать с нуля,
  если задача специфичная.
  От датасета требуется, чтобы он был достаточного размера,
  вариативен (часто так, но не всегда)
  и максимально соответствовал поставленной задаче.
  <Чистку> датасета можно отнести как к процессу сбора,
  так и к разметке,
  зависит от задачи.
  
  Датасет должен быть максимально релевантен поставленной задаче.
  Например, если мы собираемся в нашей технологии
  убирать шумы из реальной жизни,
  то набор идеальных студийных записей нам не очень подходит.
  
  2 - Выбор магистрального решения
  
  Рмс. Как и в ремонте - выбор правильного инструмента очень важен
  
  На этом шаге обычно происходит анализ того,
  каким способами можно решить поставленную задачу.
  Здесь очень часто можно свернуть не туда.
  Потому что кто-то, возможно, уже решил наш класс задач,
  а мы про это или не знаем
  или сознательно хотим свой велосипед.
  
  Свой велосипед это хорошо,
  если он оправдан,
  и мы точно-точно знаем,
  почему нам нужен именно он.
  
  Мой любимый пример случился у коллеги на собеседовании
  в большую всем известную компанию. Head of CV (или как-то так)
  одной из команд во вступлении к вопросу рассказал,
  что они в своем маркете на складе распознают штрих-код
  какой-то навороченной нейронкой,
  но на встречный вопрос зачем для распознавания
  статичного штрих-кода вообще нужна нейронка
  - ответить не смог.
  
  Эта задача настолько давно решена классической математикой,
  что некоторые ML-инженеры банально родились позже,
  чем решение распознавания штрих-кода увидело свет.
  Безусловно, есть ситуации, когда сканировать стоит нейронкой,
  но такие ситуации надо знать,
  как и все причины такого решения.
  Потому что прицепить что-то сложное туда,
  где можно обойтись простым
  - это некрасиво.
  Улучшать что-то сложное, не понимая мотивов и исходной проблемы
  - некрасиво.
  
  Конечно, я немного утрирую,
  но этап выбора решения очень важен
  и обязательно нужно делать минимальный анализ для выбора направления,
  в котором мы собираемся двигаться.
  Потому что здесь очень легко направить все усилия не туда
  и сжечь кучу ресурсов.
  И да, это не очень актуально для r&d,
  потому что они как раз-таки могут подвергать сомнениям проверенные решения,
  работа такая.
  
  1 - Постановка задачи
  
  Рис. Точность поставленной задачи
  
  Постановка задачи - фундамент во всех смыслах.
  Осмыслению задачи часто уделяют не так много времени и глубины,
  как оно того заслуживает.
  Под постановкой задачи я подразумеваю детализацию того,
  что мы хотим сделать.
  Бывает так, что мы точно
  (вот прям точно-точно) знаем,
  что мы хотим решить,
  а бывает, что задача поставлена максимально абстрактно.
  
  Чем глубже и лучше мы понимаем, что именно мы хотим сделать
  и в каких условиях,
  тем больше шансов на конечный успех.
  К сожалению, на этом этапе, помимо просто здравого смысла,
  очень важен опыт решения похожих задач
  или некая технологическая <насмотренность>.
  
  Если вы уже сделали пять распознавалок лица для разных случаев,
  то для новой такой задачи будет очень легко задать заказчику
  большинство важных вопросов,
  доуточнив что именно, как и где должно работать.
  Но если у вас такого опыта нет,
  то придется мыслить максимально широко.
  Самое важное, что стоит попытаться понять
  - для чего и какой ценой мы решаем задачу,
  для кого и какая цена ошибки.
  
  Приведу пример:
  пришел заказчик, который хочет создать систему
  автоматического видео-контроля магазина.
  Список пожеланий был обширный:
  контроль как цен, так и сотрудников, правильности выкладки,
  подсчет посетителей и много чего еще.
  
  Заказчику позволительно не знать,
  но это совершенно разные классы задач,
  которые решаются совершенно по разному вплоть до того,
  что камеры нужно будет вешать по разному,
  не говоря уж про алгоритмы.
  Конечно, в рамках одного магазина такое вполне реализуемо сразу,
  но для тиражного решения нужно очень хорошо подумать
  стоит ли оно того
  или в конце будет много разочарований.
  
  Выводы о математике, дженге и деривативах
  
  Важна ли математика в ML?
  Без вариантов, очень важна.
  Но математика - это как финальный босс,
  до него еще нужно дойти,
  не потратив по дороге все доступное количество жизней
  (то есть, доверие и весь бюджет).
  
  Математика - красива и великолепна,
  но направленная не туда
  - теряет свою красоту.
  На одной математике и алгоритмах технологии не взлетают.
  Конечно, это все игры в вероятности
  - всегда есть шанс, что и голая математика вытянет бездарную подготовку,
  но такой шанс
  - не очень велик.
  
  Хорошие технологии
  - это в большинстве своем хорошо проделанная работа
  на всех этапах.
  Необязательно педантично идеальная,
  но достаточно хорошая,
  чтобы сохранить равновесие как башня в дженге.
  И главное - понятная на каждом уровне
  и в каждой своей предпосылке,
  потому что зашкаливающая сложность
  без ее осмысленного понимания на всех этапах
  - убивает, как и деривативы.
  
  Иногда на каждом из этапов нужно останавливаться
  и задавать себе вопрос
  - а все ли правильно мы сделали до этого?
  Ведь усложнить - можно всегда,
  а в конце пути может быть мучительно больно
  от несбыточных ожиданий и потраченных ресурсов.
  
  Желаю вам всем глубокого целеполагания,
  правильных процессов,
  красивой математики
  и отличных технологий.
  
  Спасибо!
  
  //// Из такого текста нет возможности и желания убрать хоть полслова.
  
  //// Конец цитирования.
  
  Так что "не так страшен черт, как его малюют",
  но при этом "дьявол кроется в деталях".
  
  
  ========
  
  20.01.2024 18:37
  
  Еще раз об эмбеддингах еще более простыми словами.
  В оглавление.
  
  Как ни странно, но самое трудное в эмбеддингах,
  это понимание того что любые данные и особенно текст,
  для применения в ИИ-системах нужно как превратить в последовательности чисел,
  и при этом как "свернуть" это числовое представление в более компактную форму,
  читай, в пространство меньшей размерности:
  
  "Эмбеддинги для начинающих".
  Автор: badcasedaily1 (artem)
  https://habr.com/ru/companies/otus/articles/787116/.
  18 янв 2024 в 13:18
  
  //// Начало цитирования.
  
  В широком смысле, эмбеддинг - это процесс преобразования
  каких-либо данных (чаще всего текста, но могут быть и изображения, звуки и т.д.)
  в набор чисел,
  векторы, которые машина может не только хранить,
  но и с которыми она может работать.
  Звучит очень интересно.
  Казалось бы, наша речь - это так просто,
  все связано и понятно.
  Но как это объяснить машине?
  
  В этой статье мы рассмотрим, что такое эмбеддинги и какие они бывают.
  
  Проще говоря эмбеддинг - это способ преобразования чего-то абстрактного,
  например слов или изображений в набор чисел и векторов.
  Эти числа не случайны;
  они стараются отражают суть или семантику нашего исходного объекта.
  
  В NLP, например, эмбеддинги слов используются для того,
  чтобы компьютер мог понять,
  что слова <кошка> и <котенок> связаны между собой ближе,
  чем, скажем, <кошка> и <окошко>.
  Это достигается путем присвоения словам векторов,
  которые отражают их значение и контекстное использование в языке.
  
  Эмбеддинги не ограничиваются только словами.
  В компьютерном зрении, например, можно использовать их
  для преобразования изображений в вектора,
  чтобы машина могла понять и различать изображения.
  
  Немного математической базы
  
  Векторные пространства - это математические структуры,
  состоящие из векторов.
  Векторы можно понимать как точки в некотором пространстве,
  которые обладают направлением и величиной.
  В эмбеддингах, каждый вектор представляет собой
  уникальное представление объекта,
  преобразованное в числовую форму.
  
  Размерность вектора определяет,
  сколько координат используется для описания каждого вектора в пространстве.
  //// При этом неявно предполагается независимость/перпендикулярность
  //// этих размерностей, что вообще-то, скорее всего,
  //// очень спорное утверждение.
  В эмбеддингах высокая размерность может означать
  более детализированное представление данных.
  //// Либо связанность между собой этих представлений.
  //// "Но это не точно".
  Векторное пространство для текстовых эмбеддингов
  может иметь тысячи измерений.
  //// Вопрос "из зала": а сколько измерений нужно для конкретной задачи?
  
  Расстояние между векторами в эмбеддингах
  //// Вот "ключевая аксиома" - различия/сходство в эмбеддингах
  //// измеряется "расстоянием". И на этом основывается вывод об их похожести.
  измеряется с помощью метрик,
  таких как Евклидово расстояние или косинусное сходство.
  Метрики позволяют оценить,
  насколько близко или далеко друг от друга
  находятся различные объекты в векторном пространстве,
  что является основой для многих алгоритмов машинного обучения,
  таких как классификация
  
  Самый интуитивно понятный способ измерения расстояния
  - это Евклидово расстояние.
  В эмбеддингах расстояние вычисляется как квадратный корень
  из суммы квадратов разностей соответствующих компонентов двух векторов.
  Для двух векторов a и b, евклидово расстояние d определяется как:
  
  d(\mathbf{a}, \mathbf{b}) = \sqrt{\sum_{i}(a_i - b_i)^2}
  
  Евклидово расстояние подходит для измерения абсолютных различий,
  но может быть менее эффективным в высокоразмерных пространствах
  из-за проклятия размерности.
  
  Манхэттенское расстояние иногда более подходящее
  для определенных типов данных,
  это расстояние измеряется как сумма абсолютных разностей их компонентов.
  Оно определяется как:
  
  d(\mathbf{a}, \mathbf{b}) = \sum_{i}|a_i - b_i|
  
  Сходство между векторами измеряет степень "похожести" между двумя векторами.
  В эмбеддингах это используется для определения степени
  семантической или контекстной близости между элементами.
  
  Одна из наиболее популярных метрик в текстовых эмбеддингах
  это косинусное сходство.
  Косинусное сходство измеряет косинус угла между двумя векторами.
  Если угол между векторами мал,
  косинус приближается к 1,
  что указывает на высокое сходство.
  Математически оно выражается как:
  
  \text{similarity}(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a} \cdot \mathbf{b}}{|\mathbf{a}| |\mathbf{b}|}
  
  где . обозначает скалярное произведение векторов, а |a| и |b| - их нормы.
  
  Многомерные эмбеддинги могут быть сокращены
  до более низких размерностей
  с помощью техник PCA или t-SNE.
  
  В общем виде, эмбеддинги делятся на:
  
  .....
  
  Текстовые эмбеддинги
  Word Embeddings
  
  Эти эмбеддинги преобразуют слова в векторы,
  так что слова с похожим значением имеют похожие векторные представления.
  Они впервые позволили машинам понять семантику человеческих слов.
  
  Текстовые эмбеддинги
  Sentence Embeddings
  
  Здесь уже идет дело о целых предложениях.
  Подобные модели создают векторные представления
  для целых предложений или даже абзацев,
  улавливая гораздо более тонкие нюансы языка.
  
  Эмбеддинги изображений
  CNN
  
  CNN позволяет преобразовать изображения в векторы,
  которые затем используются для различных задач,
  например, классификации изображений
  или даже генерации новых изображений.
  
  Эмбеддинги изображений
  Autoencoders
  
  Автоэнкодеры могут сжимать изображения в более мелкие,
  плотные векторные представления,
  которые затем могут быть использованы для различных целей,
  включая декомпрессию или даже обнаружение аномалий.
  
  Эмбеддинги для других типов данных
  Graph Embeddings
  
  Применяются для работы с графовыми структурами
  (к примеру рекомендательные системы).
  Это способ представить узлы и связи графа в виде векторов.
  
  Эмбеддинги для других типов данных
  Sequence Embeddings
  
  Используются для анализа последовательностей,
  например, во временных рядах или в музыке.
  
  Основные алгоритмы
  
  Word2Vec
  
  Word2Vec использует нейронные сети для обучения векторных представлений слов
  из больших наборов текстовых данных.
  Существуют две основные архитектуры Word2Vec:
  
  CBOW: предсказывает текущее слово на основе контекста (окружающих слов).
  Например, в предложении "Собака лает на ___",
  CBOW попытается угадать недостающее слово
  (например, "почтальона")
  на основе окружающих слов.
  
  Skip-gram: работает наоборот по сравнению с CBOW.
  Использует текущее слово для предсказания окружающих его слов в предложении.
  Например, если взять слово "кошка",
  модель попытается предсказать слова,
  которые часто встречаются в окружении слова "кошка",
  такие как "мышь", "мяукает" и т.д.
  
  Эти модели хороши в выявлении семантических отношений между словами.
  
  Для примера работы с Word2Vec можно использовать библиотеку gensim
  
  ......
  
  Word2Vec обучается на ваших текстовых данных
  
  ......
  
  После обучения модели мы можем использовать полученные векторы слов
  или проводить различные виды семантических операций.
  
  GloVe
  
  GloVe создает векторы слов, анализируя,
  как часто пары слов встречаются вместе в большом текстовом корпусе.
  Идея заключается в том,
  что смысловые отношения между словами можно выразить
  в виде векторных различий.
  Например, векторы для "король" - "мужчина" + "женщина"
  должны быть близки к вектору для "королева".
  
  GloVe стремится минимизировать разницу между произведением векторов слов
  и логарифмом их совместной встречаемости,
  позволяя модели улавливать различные типы отношений между словами,
  такие как синонимы, антонимы, контекстные отношения и т.д
  
  Для примера работы GloVe, можно использовать
  предварительно обученные векторы
  или обучить свою модель на выбранном корпусе:
  
  ......
  
  После загрузки модели можно использовать векторы слов для различных задач.
  
  .......
  
  Для работы с русскоязычными текстами понадобится найти
  или обучить GloVe-модель на русскоязычном корпусе,
  так как большинство предварительно обученных моделей GloVe
  предназначены для английского языка.
  Одна из таких - navec.
  
  Эмбеддинги позволяют преобразовывать текстовую
  или категориальную информацию в числовой формат,
  делая её доступной для машины.
  
  .......
  
  //// Конец цитирования.
  
  Короче, нет ничего сложного в самой концепции эмбеддингов,
  но как всегда "дьявол кроется в деталях",
  т.е. в самой реализации конкретных эмбеддингов.
  Для разных задач требуются разные эмбеддинги,
  и приходится подбирать их "методом тыка", "на ощупь",
  т.к. никакой "большой теории эмбеддингов" кроме вышеизложенного
  и ряда полуэмпирических эвристик по большому счету, собственно, и нет.
  
  
  ======
  
  20.01.2024 18:597
  
  "Обучение с подкреплением" простыми словами.
  В оглавление.
  
  Самое простое введение в один самых элитарных разделов ИИ-технологий
  "обучение с подкреплением" (Reinforcement Learning) (RL),
  которое мне дал Bing:
  
  01.01.2024 12:55
  
  .......
  
  //// Спасибо, Бинг. Темы интересные и большие.
  //// Так что, давайте начнем пока с первой,
  //// Только есть просьба в рамках этой темы особое внимание уделить системам,
  //// в которых используется "обучение с подкреплением".
  //// Как выяснилось, у меня большие пробелы в знаниях на эту тему,
  //// и хочется эти пробелы немножко подсократить.
  //// А поиск в Инете практически ничего не дает
  //// - там какая то абстракция и компот из вроде известных слов,
  //// правда, хорошо уже забытых - статистическое распределение,
  //// цепи Маркова, динамическое программирование, уравнение Беллмана...
  //// И ни одного конкретного примера реализации.
  //// Так что ни за что конкретное зацепиться не удается,
  //// чтобы начать распутывать этот "клубок".
  //// А желание такое есть.
  
  Bing 14:25
  Пожалуйста, Андрей. Я рад, что вы выбрали тему обучения с подкреплением.
  Это очень интересная и сложная область машинного обучения,
  которая имеет много применений и потенциала. blush
  
  Обучение с подкреплением (RL) - это метод машинного обучения,
  в котором агент (например, робот или компьютерная программа)
  учится самостоятельно,
  пробуя разные действия в окружающей среде
  и получая от нее вознаграждение или наказание за свое поведение.
  Цель агента - максимизировать свою совокупную награду
  за долгосрочный период.
  
  Для понимания обучения с подкреплением вам нужно знать
  несколько основных понятий:
  
   Агент - это сущность, которая действует в среде
  и учится на основе своего опыта.
  
   Среда - это ситуация или контекст,
  в котором действует агент и которая влияет на его вознаграждение.
  
   Вознаграждение - это сигнал, который получает агент от среды
  за свое действие. Вознаграждение может быть положительным или отрицательным,
  в зависимости от того, насколько хорошо или плохо
  действие агента соответствует его цели.
  
   Состояние - это информация, которая описывает
  текущее положение агента и среды.
  Состояние может быть полным или частичным,
  в зависимости от того, насколько много агент знает о среде.
  
   Действие - это выбор, который делает агент в каждом состоянии.
  Действие влияет на следующее состояние и вознаграждение агента.
  
   Политика - это правило или алгоритм, который определяет,
  какое действие выбрать агенту в каждом состоянии.
  Политика может быть детерминированной или стохастической,
  в зависимости от того,
  насколько однозначно или случайно агент принимает решения.
  
   Функция ценности - это оценка того,
  насколько хорошо или плохо для агента находиться в определенном состоянии
  или выполнять определенное действие.
  Функция ценности учитывает не только текущее,
  но и будущее вознаграждение агента.
  
   Модель среды - это представление или аппроксимация того,
  как среда реагирует на действия агента.
  Модель среды может быть явной или неявной,
  в зависимости от того,
  насколько агент может предсказать или симулировать поведение среды.
  
  Вот простая иллюстрация обучения с подкреплением:
  https://www.guru99.com/ru/reinforcement-learning-tutorial.html
  https://habr.com/ru/companies/newprolab/articles/343834/
  
  Примеры применения обучения с подкреплением:
  
   Игры:
  ИИ может быть обучен для соревнования с людьми
  или другими компьютерными игроками в шахматы, Go, покер и видеоигры.
  Например, AlphaGo - это ИИ, который обучался с подкреплением
  и победил лучших игроков в Go
  
   Робототехника:
  RL может быть использован для обучения роботов выполнению различных задач,
  таких как ходьба, манипуляция предметами или навигация.
  Например, Spot - это робот-собака, который обучался с подкреплением
  и может выполнять разные трюки
  
   Финансовые рынки:
  RL может быть использован для обучения торговых ботов,
  которые могут оптимизировать свою стратегию
  и максимизировать свою прибыль. Например,
  Q-Trader - это ИИ, который обучался с подкреплением и превзошел рынок
  
   Управление процессами:
  RL может быть использован для обучения агентов,
  которые могут управлять сложными системами,
  такими как электросети, транспорт или логистика.
  Например, Google DeepMind использовал RL для оптимизации потребления энергии
  в своих центрах обработки данных.
  
  ......
  
  Вот с такого введения и начиналось мое "глубокое погружение"
  в таинства "обучения с подкреплением".
  Продолжение, если тема заинтересовала, можно тоже пронаблюдать, см.:
  "Металоция неведомого. Модуль Р. Роботы."
  
  
  ========
  
  20.02.2024 20:56
  
  "Проклятье размерности" в пространстве.
  В оглавление.
  
  Использование представления "пространства эмбеддингов" просто
  как аналог привычного нам трехмерного евклидового простраства,
  только с большим количеством размерностей.
  Ну там 6-7 сотен или пара-тройка тысяч, какие могут быть проблемы?
  Ведь математические формулы легко "масштабируются".
  "N - мало, бери M".
  
  Но в том то и дело, что эффективное применение математических формул,
  в первую очередь опирается не строгость "математического формализма",
  а на "нестрогую" и не очень надежную "интуицию".
  И вот как раз в отношении многомерном пространстве с количеством размерностей N,
  не говоря уже про M, эта интуиция может очень сильно подвести.
  Вот хороший текст на эту тему.
  
  "Визуализация реальных масштабов проклятия размерности".
  Автор: mr-pickles
  https://habr.com/ru/companies/wunderfund/articles/748044/.
  17 июл 2023 в 12:37
  
  //// Начало цитирования.
  
  Автор оригинала: Florin Andrei
  https://towardsdatascience.com/visualizing-the-full-extent-of-the-curse-of-dimensionality-5556ff6852bb
  
  Представьте себе набор данных,
  состоящий из некоторого количества наблюдений.
  У каждого наблюдения имеется N признаков.
  Если преобразовать все эти признаки в их числовое представление,
  то можно будет сказать, что каждое из наблюдений
  - это точка в N-мерном пространстве.
  
  Если N - величина небольшая - взаимоотношения между точками
  будут именно такими, какими их можно представить на интуитивном уровне.
  Но иногда N достигает огромных значений.
  Это может произойти, например, когда множество признаков
  создают посредством прямого кодирования или чего-то подобного.
  Для очень больших значений N наблюдения ведут себя так,
  как если бы они были бы представлены разреженными данными,
  или так, как если бы расстояния между ними были бы несколько больше,
  чем можно было бы ожидать.
  
  Это - реальное явление.
  По мере роста N, при условии, что всё остальное не меняется,
  объём части N-мерного пространства, содержащий наблюдения,
  тоже, в некотором смысле, увеличивается
  (или, как минимум, увеличивается количество степеней свободы).
  Увеличиваются и евклидовы расстояния между наблюдениями.
  Группа точек становится всё более разреженной структурой.
  Это - геометрическая база для такого понятия,
  как <проклятие размерности>.
  Подобные изменения в данных влияют на поведение моделей
  и на приёмы работы, применяемые к наборам данных.
  
  Многое может пойти не так, как ожидается в том случае,
  если число признаков очень велико.
  В ситуациях, когда признаков больше, чем наблюдений,
  обычно возникает переобучение моделей.
  В многомерном пространстве ухудшается эффективность любых методов,
  предусматривающих перебор данных (например - GridSearch),
  так как для того, чтобы уложиться в одни и те же линейные интервалы,
  нужно будет сделать больше попыток.
  
  Рост числа признаков наблюдений оказывает влияние на любые модели,
  основанные на расстоянии между наблюдениями или на их близости.
  Предположим, количество размерностей представляет собой
  достаточно большую величину.
  Если взять какую-нибудь точку наблюдений,
  то она окажется расположенной очень далеко от всех остальных точек.
  И, кроме того, расстояния между ней и другими точками
  окажутся практически одинаковыми.
  А так как механизмы модели завязаны на расстоянии между точками наблюдений,
  работа этих механизмов усложнится.
  Например - в такой ситуации, когда все точки расположены друг от друга
  на примерно одинаковом расстоянии,
  не будут нормально работать механизмы кластеризации.
  
  Все эти причины, а так же - многие другие
  - привели к созданию специальных инструментов.
  Среди них - метод главных компонент (Principal Component Analysis, PCA)
  и модель латентного размещения Дирихле (Latent Dirichlet Allocation, LDA). Э
  то - попытка уйти от специфических особенностей пространств
  с очень большим количеством измерений,
  попытка свести свойства набора данных к такому количеству измерений,
  которое лучше соответствует характеристикам той информации,
  которая в нём содержится.
  
  Истинные масштабы проклятия размерности трудно прочувствовать
  на интуитивном уровне,
  а пространства, количество измерений которых превышает 3,
  чрезвычайно сложно визуализировать.
  Поэтому предлагаю вашему вниманию двумерные схемы,
  призванные помочь нашей интуиции.
  У того, что работа с пространствами больших размерностей
  может вылиться в массу проблем,
  есть геометрическое обоснование.
  Именно визуализацией этих проблем мы тут и займёмся.
  Если раньше вы такого не видели
  - результаты могут показаться вам удивительными.
  Геометрия высокоразмерных пространств гораздо сложнее,
  чем может себе представить тот,
  кто раньше о ней не задумывался.
  Здесь мы задействуем метод Монте-Карло для визуализации поведения наблюдений
  с очень большим количеством признаков.
  
  Объём
  
  Представим себе единичный квадрат,
  центр которого находится в начале координат на координатной плоскости.
  В этот квадрат впишем круг.
  
  Круг, вписанный в квадрат
  
  Это - то, с чем мы тут будем работать.
  А теперь поразмыслим об общем, N-мерном случае.
  В трёх измерениях это будет сфера, вписанная в куб.
  А дальше - будет N-мерная сфера, вписанная в N-мерный куб.
  Это - наиболее общий способ описать интересующую нас конструкцию.
  Мы, ради простоты, вне зависимости от того,
  сколько измерений имеет рассматриваемое пространство,
  будем называть эти объекты <сферой> и <кубом>.
  
  Объём куба неизменен, он всегда равняется 1.
  И тут возникает вопрос:
  что происходит с объёмом сферы при изменении количества размерностей N?
  
  Ответим на этот вопрос экспериментальным путём, используя метод Монте-Карло.
  Сгенерируем очень большое количество точек,
  распределённых в кубе равномерно, но случайным образом.
  Для каждой точки вычислим расстояние до начала координат.
  Если это расстояние меньше 0,5 (это - радиус сферы)
  - значит, точка будет находиться внутри сферы.
  
  Точки, распределённые случайным образом
  
  Если разделить количество точек, попадающих внутрь сферы,
  на общее количество точек, это даст нам примерный показатель
  отношения объёма сферы к объёму куба.
  Так как объём куба равен 1 - это отношение будет равно объёму сферы.
  Это приблизительное значение становится точнее по мере роста количества точек.
  
  Другим словами, отношение внутренние_точки / все_точки
  позволяет приблизительно определить объём сферы.
  
  Код, который мы рассмотрим ниже, достаточно прост.
  Так как нам нужно очень много точек, обычных циклов лучше избегать.
  В подобном коде можно воспользоваться NumPy,
  но эта библиотека ориентирована исключительно на CPU
  и на однопоточный режим выполнения, из-за чего код, где применяется NumPy,
  будет медленным.
  
  ......
  
  Если проанализировать вложенные выражения torch в нашем коде,
  то окажется, что тут мы генерируем 100 миллионов случайных точек,
  вычисляем их расстояние до начала координат,
  вычисляем количество точек внутри сферы и делим это количество
  на общее число точек.
  Массив ratio, в итоге, будет содержать сведения об объёме сфер
  в пространствах различных размерностей.
  
  .......
  
  Визуализируем результаты:
  
  Объём сферы диаметром 1 в N-мерном пространстве
  
  Проверим правильность моделирования.
  Для N=1 всё предельно просто:
  и <сфера> и <куб> - это равные отрезки на прямой,
  <объём> сферы будет равен 1.
  Для N=2 и N=3 в дело идут формулы, которые изучают в школе.
  Можно заметить, что наши результаты очень близки к тем,
  что можно найти по формулам.
  
  А вот по мере увеличения N происходит нечто весьма впечатляющее:
  объём сферы стремительно приближается к нулю.
  Он близок к нулю уже тогда, когда N=10.
  /// ДЕСЯТИ! "Карл!!!"
  А когда N оказывается больше 20,
  объём сферы падает до пределов точности чисел с плавающей точкой.
  Наш код, учитывая то, что мы находим лишь приближённое значение,
  вычисляет этот объём как 0,0.
  
  Одно из объяснений этого явления может выглядеть так:
  при больших значениях N почти весь объём куба приходится на его углы.
  Центральная область, содержащая сферу,
  занимает, в сравнении с другими областями куба, незначительный объём.
  В высокоразмерных пространствах углы куба оказываются очень важным местом.
  Большая часть объёма <переходит> в углы.
  Это происходит очень быстро при росте N.
  
  Вот ещё одна интерпретация происходящего:
  сфера - это <окрестность> начала координат.
  По мере роста N точки просто исчезают из этой окрестности.
  Начало координат - это не нечто особенное,
  поэтому то, что происходит в окрестности начала координат,
  должно происходить и в окрестностях всех остальных точек.
  Само понятие <окрестности> претерпевает большое изменение.
  Вместе с ростом N у точек в пространстве становится
  всё меньше и меньше соседей.
  
  Впервые я запустил эту симуляцию много лет назад,
  и я отчётливо помню то, как меня поразил её результат,
  а именно - то, как стремительно движется к 0 объём сферы при росте N.
  После того, как я проверил код и не нашёл в нём ошибок,
  меня посетила такая мысль:
  надо сохранить код, заблокировать экран,
  выйти на улицу, прогуляться и подумать о том,
  что я только что видел :)
  
  Линейное расстояние
  
  Найдём диагональ куба, воспользовавшись функцией от N.
  Это легко, так как диагональ равна sqrt(N).
  Код для таких вычислений слишком примитивен, чтобы его тут показывать.
  А вот - результаты вычислений.
  
  Длина диагонали куба
  
  Для случаев N=2 и N=3 проверить эти вычисления можно,
  основываясь на школьных знаниях
  (речь идёт о диагонали квадрата и обычного трёхмерного куба).
  Но по мере увеличения N растёт и длина диагонали.
  И рост этот ничем не ограничен.
  
  Это может звучать совершенно неправдоподобно,
  но даже при том, что длина ребра куба остаётся неизменной (и равной 1),
  его диагональ может иметь сколько угодно большой размер,
  увеличивающийся при увеличении N.
  При N=1000 диагональ равна примерно 32.
  В теории, если длина ребра куба равна 1 метру,
  существует такое многомерное пространство,
  в котором длина диагонали куба будет равняться 1 километру.
  
  Даже если длина ребра куба не меняется,
  его диагональ, по мере увеличения размерности пространства,
  способна неограниченно расти.
  
  Каждый раз, когда к пространству добавляется новое измерение,
  у куба появляются новые рёбра и грани,
  усложняются характеристики его углов,
  он обретает больше степеней свободы,
  а его диагональ становится длиннее.
  
  Расстояние между наблюдениями
  
  А как насчёт расстояния между наблюдениями,
  или расстояния между точками в пространстве?
  Предположим, мы сгенерировали фиксированное количество случайных точек
  и решили вычислить среднее расстояние между любыми двумя точками,
  а так же - среднее расстояние до ближайшего соседа точки.
  Все точки всегда содержатся в кубе.
  Что произойдёт со средним расстоянием между точками при росте N?
  Запустим ещё одну симуляцию.
  
  Обратите внимание на то, что тут применяется консервативный подход
  к управлению памятью.
  Это важно, так как используемые тут структуры данных довольно-таки велики.
  
  Тут мы используем гораздо меньшее количество точек, чем раньше,
  так как размер главной структуры данных увеличивается
  в соответствии с формулой N^2,
  а это значит, что, если сгенерировать слишком много точек,
  мы очень скоро столкнёмся с нехваткой памяти.
  Но даже так наши приблизительные результаты должны быть
  достаточно близки к реальным значениям.
  
  Вот сводка по средним расстояниям между двумя точками,
  вычисленным для 1000 точек.
  
  Среднее расстояние между точками
  
  Для маленьких N среднее расстояние представлено числом
  от примерно 0,5 до примерно 1.
  Но по мере роста N растёт и среднее расстояние между точками.
  При N=2000 оно уже близко к 18. Это - серьёзный рост.
  
  А вот - визуализация среднего расстояния до ближайшего соседа точки.
  
  Среднее расстояние до ближайшего соседа точки
  
  Тут рост N приводит к ещё более серьёзному росту расстояния,
  чем в предыдущем примере.
  Когда N меньше 10 - расстояния совсем невелики,
  так как в пространствах низкой размерности больше точек
  оказываются поблизости друг от друга.
  А для больших значений N среднее расстояние до ближайшего соседа
  оказывается очень близким к среднему расстоянию между любыми двумя точками.
  Другими словами, видно, что основной вклад в расстояние между точками
  вносит пустота, находящаяся в непосредственной близости от точек.
  
  Соотношение расстояний
  
  Именно поэтому выше было сказано,
  что в пространствах высокой размерности точки оказываются
  практически равноудалёнными друг от друга.
  Среднее расстояние между двумя точками и кратчайшее расстояние между точками
  оказываются практически одинаковыми.
  А теперь вы видите доказательство этого утверждения,
  полученное путём моделирования.
  Теперь вы можете ощутить мощь феномена проклятия размерности
  на интуитивном уровне.
  
  По мере роста количества размерностей N
  точки всё дальше и дальше отходят друг от друга,
  несмотря на то, что их координаты ограничены одним и тем же,
  довольно узким диапазоном значений (-0,5, +0,5).
  Группа точек становится всё более и более разреженной
  только из-за того, что пространство, в котором расположены эти точки,
  приобретает большее количество измерений.
  При увеличении количества размерностей с нескольких единиц
  до нескольких тысяч мы имеем дело с увеличением расстояния между точками
  на пару порядков. Это очень много.
  
  Итоги
  
  Проклятие размерности - это реальное явление,
  основанное на особенностях геометрии N-мерных пространств.
  
  По мере увеличения количества размерностей (или признаков)
  точки (наблюдения) быстро <убегают> друг от друга.
  В новом пространстве, определённо,
  больше места для размещения данных,
  несмотря даже на то, что линейные интервалы по осям остаются неизменными.
  Чем больше размерность пространства, в котором находятся точки,
  тем пустыннее окрестности этих точек.
  
  В общем случае количество наблюдений должно <соответствовать>
  количеству признаков.
  Но в каждой конкретной ситуации желательное соотношение
  количества наблюдений и количества признаков
  зависит от множества факторов.
  
  Надеюсь, эта статья дала вам ключ к интуитивному пониманию
  свойств многомерных пространств,
  которые очень сложно визуализировать.
  Некоторые описанные здесь тенденции,
  характеризующие то, что называют <проклятием размерности>,
  удивительно сильны.
  Теперь у вас должно сложиться некоторое представление о том,
  насколько они сильны.
  
  ......
  
  //// Конец цитирования.
  
  И вот какую "метрику" использовать для существенно многоэлементных эмбеддингов?
  И пока на ум приходит только "золотой стандарт" "дата сатанистов"
  - "косинусное расстояние".
  Но вопрос в том, нет ли каких-то подобных контринтутивных особенностей
  применения этого "золотого стандарта" в существенно многомерных случаях?
  И отдельный вопрос в том, на каком основании принимается допущение
  об ОРТОГОНАЛЬНОСТИ, ПРЯМОЛИНЕЙНОСТИ, и,
  самое главное, НЕПРЕРЫВНОСТИ/ГЛАДКОСТИ этих осей,
  к которым пытаются привязать элементы эмбеддинга?
  Так привычнее или просто ничего другого еще не придумано,
  и придумано быть "не можно"?
  Или, все-таки, можно?
  
  Вот с таких вопросов и начиналось мое "глубокое погружение"
  в таинства "пространства эмбеддингов".
  Если тема заинтересовала, то можно понаблюдать, какие варианты можно еще придумать, см.:
  "Каково же оно "пространство эмбеддингов" нейронки?"
  
  
  ========
  
  26.02.2024 16:16
  
  Сверточные сети простыми словами.
  В оглавление.
  
  Сверточная нейронная сеть это не только весьма удачная для своих целей модель,
  но еще и одна из наиболее интуитивно понятных нейросетевых архитектур.
  И по этим причинам в очень многих материалах по "машинному обучению"
  и нейронным сетям,
  эта архитектура упоминается/используется "сплошь и рядом"
  для самых различных целей.
  И тем удивительнее была трудность найти какое-то более-менее
  простое, понятное и относительно полное описание этой архитектуры
  под настоящими завалами описаний все более новых и новых архитектур,
  родоначальником для которых была простая сверточная сеть.
  
  Но сегодня мне наконец удалось "раскопать археологический слой 2016 года"
  в "темных подвалах" Хабра очень неплохой материал,
  которым и спешу с Вами поделиться:
  
  "Что такое свёрточная нейронная сеть".
  Автор: freetonik (Рахим Давлеткалиев)
  https://habr.com/ru/articles/309508/.
  8 сен 2016 в 14:50
  
  Автор оригинала: Adit Deshpande
  http://goo.gl/pOs9Qi
  
  Перевод Наталии Басс.
  
  //// Начало цитирования.
  
  Введение
  
  Свёрточные нейронные сети (СНС).
  //// Английская аббревиатура - CNN.
  Звучит как странное сочетание биологии и математики с примесью информатики,
  но как бы оно не звучало, эти сети
  - одни из самых влиятельных инноваций в области компьютерного зрения
  
  ......
  
  Задача
  
  Задача классификации изображений - это приём начального изображения
  и вывод его класса (кошка, собака и т.д.)
  или группы вероятных классов,
  которая лучше всего характеризует изображение.
  
  ......
  
  Вводы и выводы
  
  Когда компьютер видит изображение (принимает данные на вход),
  он видит массив пикселей.
  В зависимости от разрешения и размера изображения,
  например, размер массива может быть 32х32х3
  (где 3 - это значения каналов RGB).
  Чтобы было понятней, давайте представим,
  у нас есть цветное изображение в формате JPG, и его размер 480х480.
  Соответствующий массив будет 480х480х3.
  Каждому из этих чисел присваивается значение от 0 до 255,
  которое описывает интенсивность пикселя в этой точке.
  Эти цифры, оставаясь бессмысленными для нас,
  когда мы определяем что на изображении,
  являются единственными вводными данными, доступными компьютеру.
  Идея в том, что вы даете компьютеру эту матрицу,
  а он выводит числа,
  которые описывают вероятность класса изображения
  (.80 для кошки, .15 для собаки, .05 для птицы и т.д.).
  
  Чего мы хотим от компьютера
  
  ......
  
  
  Биологические связи
  
  ......
  
  Структура
  
  Вернёмся к специфике.
  Что конкретно делают СНС?
  Берётся изображение, пропускается через серию свёрточных, нелинейных слоев,
  слоев объединения и полносвязных слоёв,
  и генерируется вывод.
  Как мы уже говорили, выводом может быть класс или вероятность классов,
  которые лучше всего описывают изображение.
  Сложный момент
  - понимание того, что делает каждый из этих слоев.
  Так что давайте перейдем к самому важному.
  
  Первый слой - математическая часть
  
  Первый слой в СНС всегда свёрточный.
  Вы же помните, какой ввод у этого свёрточного слоя?
  Как уже говорилось ранее, вводное изображение
  - это матрица 32 х 32 х 3 с пиксельными значениями.
  Легче всего понять, что такое свёрточный слой,
  если представить его в виде фонарика,
  который светит на верхнюю левую часть изображения.
  Допустим свет, который излучает этот фонарик, покрывает площадь 5 х 5.
  А теперь давайте представим,
  что фонарик движется по всем областям вводного изображения.
  В терминах компьютерного обучения этот фонарик называется фильтром
  (иногда нейроном или ядром),
  а области, на которые он светит,
  называются рецептивным полем (полем восприятия).
  То есть наш фильтр - это матрица
  (такую матрицу ещё называют матрицей весов или матрицей параметров).
  Заметьте, что глубина у фильтра должна быть такой же,
  как и глубина вводного изображения
  (тогда есть гарантия математической верности),
  и размеры этого фильтра - 5 х 5 х 3.
  Теперь давайте за пример возьмем позицию,
  в которой находится фильтр.
  Пусть это будет левый верхний угол.
  Поскольку фильтр производит свёртку,
  то есть передвигается по вводному изображению,
  он умножает значения фильтра на исходные значения пикселей изображения
  (поэлементное умножение).
  Все эти умножения суммируются (всего 75 умножений).
  И в итоге получается одно число.
  Помните, оно просто символизирует нахождение фильтра
  в верхнем левом углу изображения.
  Теперь повторим этот процесс в каждой позиции.
  (Следующий шаг - перемещение фильтра вправо на единицу,
  затем еще на единицу вправо и так далее).
  Каждая уникальная позиция введённого изображения производит число.
  После прохождения фильтра по всем позициям получается матрица 28 х 28 х 1,
  которую называют функцией активации или картой признаков.
  Матрица 28 х 28 получается потому,
  что есть 784 различных позиции,
  которые могут пройти через фильтр 5 х 5 изображения 32 х 32.
  Эти 784 числа преобразуются в матрицу 28 х 28.
  
  ......
  
  (Небольшая ремарка: некоторые изображения, в том числе то, что вы видите выше,
  взяты из потрясающей книги "Нейронные сети и глубинное обучение" Майкла Нильсена
  ("Neural Networks и Deep Learning", by Michael Nielsen).
  http://neuralnetworksanddeeplearning.com/
  Настоятельно рекомендую).
  
  Допустим, теперь мы используем два 5 х 5 х 3 фильтра вместо одного.
  Тогда выходным значением будет 28 х 28 х 2.
  
  Первый слой
  
  Давайте поговорим о том, что эта свертка на самом деле
  делает на высоком уровне.
  Каждый фильтр можно рассматривать как идентификатор свойства.
  Когда я говорю свойство, я имею в виду прямые границы, простые цвета и кривые.
  Подумайте о самых простых характеристиках,
  которые имеют все изображения в общем.
  Скажем, наш первый фильтр 7 х 7 х 3, и он будет детектором кривых.
  (Сейчас давайте игнорировать тот факт, что у фильтра глубина 3,
  и рассмотрим только верхний слой фильтра и изображения, для простоты).
  У фильтра пиксельная структура,
  в которой численные значения выше вдоль области, определяющей форму кривой
  (помните, фильтры, о которых мы говорим, это просто числа!).
  
  ......
  
  Вернемся к математической визуализации.
  Когда у нас в левом верхнем углу вводного изображения есть фильтр,
  он производит умножение значений фильтра на значения пикселей этой области.
  Давайте рассмотрим пример изображения,
  которому мы хотим присвоить класс,
  и установим фильтр в верхнем левом углу.
  
  ......
  
  Помните, всё что нам нужно, это умножить значения фильтра
  на исходные значения пикселей изображения.
  
  ......
  
  По сути, если на вводном изображении есть форма,
  в общих чертах похожая на кривую, которую представляет этот фильтр,
  и все умноженные значения суммируются,
  то результатом будет большое значение!
  Теперь давайте посмотрим, что произойдёт, когда мы переместим фильтр.
  
  ......
  
  Значение намного ниже!
  Это потому, что в новой области изображения нет ничего,
  что фильтр определения кривой мог засечь.
  Помните, что вывод этого свёрточного слоя - карта свойств.
  В самом простом случае, при наличии одного фильтра свертки
  (и если этот фильтр - детектор кривой),
  карта свойств покажет области,
  в которых больше вероятности наличия кривых.
  В этом примере в левом верхнем углу значение нашей 28 х 28 х 1 карты свойств
  будет 6600.
  Это высокое значение показывает,
  что, возможно, что-то похожее на кривую присутствует на изображении,
  и такая вероятность активировала фильтр.
  В правом верхнем углу значение у карты свойств будет 0,
  потому что на картинке не было ничего,
  что могло активировать фильтр
  (проще говоря, в этой области не было кривой).
  Помните, что это только для одного фильтра.
  Это фильтр, который обнаруживает линии с изгибом наружу.
  Могут быть другие фильтры для линий,
  изогнутых внутрь или просто прямых.
  Чем больше фильтров, тем больше глубина карты свойств,
  и тем больше информации мы имеем о вводной картинке.
  
  Ремарка:
  Фильтр, о котором я рассказал в этом разделе,
  упрощён для упрощения математики свёртывания.
  На рисунке ниже видны примеры фактических визуализаций фильтров
  первого свёрточного слоя обученной сети.
  Но идея здесь та же.
  Фильтры на первом слое сворачиваются вокруг вводного изображения
  и "активируются" (или производят большие значения),
  когда специфическая черта, которую они ищут,
  есть во вводном изображении.
  
  ......
  
  (Заметка: изображения выше - из Стэнфордского курса 231N,
  который преподают Андрей Карпатый и Джастин Джонсон
  (Andrej Karpathy and Justin Johnson).
  Рекомендую тем, кто хочет лучше изучить СНС).
  
  Идём глубже по сети
  
  Сегодня в традиционной сверточной нейронной сетевой архитектуре
  существуют и другие слои,
  которые перемежаются со свёрточными.
  Я очень рекомендую тем, кто интересуется темой,
  почитать об этих слоях,
  чтобы понять их функциональность и эффекты.
  Классическая архитектура СНС будет выглядеть так:
  
  Input -> Conv -> ReLU -> Conv -> ReLU -> Pool -> Fully Connected
  
  Последний слой, хоть и находится в конце, один из важных
  - мы перейдём к нему позже.
  Давайте подытожим то, в чём мы уже разобрались.
  Мы говорили о том, что умеют определять фильтры первого свёрточного слоя.
  Они обнаруживают свойства базового уровня, такие как границы и кривые.
  Как можно себе представить,
  чтобы предположить какой тип объекта изображён на картинке,
  нам нужна сеть, способная распознавать свойства более высокого уровня,
  как например руки, лапы или уши.
  Так что давайте подумаем, как выглядит выходной результат сети
  после первого свёрточного слоя.
  Его размер 28 х 28 х 3
  (при условии, что мы используем три фильтра 5 х 5 х 3).
  Когда картинка проходит через один свёрточный слой,
  выход первого слоя становится вводным значением 2-го слоя.
  Теперь это немного сложнее визуализировать.
  Когда мы говорили о первом слое,
  вводом были только данные исходного изображения.
  Но когда мы перешли ко 2-му слою,
  вводным значением для него стала одна или несколько карт свойств
  - результат обработки предыдущим слоем.
  Каждый набор вводных данных описывает позиции,
  где на исходном изображении встречаются определенные базовые признаки.
  
  Теперь, когда вы применяете набор фильтров поверх этого
  (пропускаете картинку через второй свёрточный слой),
  на выходе будут активированы фильтры,
  которые представляют свойства более высокого уровня.
  Типами этих свойств могут быть полукольца
  (комбинация прямой границы с изгибом)
  или квадратов
  (сочетание нескольких прямых ребер).
  Чем больше свёрточных слоёв проходит изображение
  и чем дальше оно движется по сети,
  тем более сложные характеристики выводятся в картах активации.
  В конце сети могут быть фильтры, которые активируются
  при наличии рукописного текста на изображении,
  при наличии розовых объектов и т.д.
  Если вы хотите узнать больше о фильтрах в свёрточных сетях,
  Мэтт Зейлер и Роб Фергюс написали отличную научно-исследовательскую работу на эту тему.
  http://www.matthewzeiler.com/pubs/arxive2013/arxive2013.pdf
  Ещё на ютубе есть видео Джейсона Йосински
  c отличным визуальным представлением этих процессов.
  https://www.youtube.com/watch?v=AgkfIQ4IGaM
  
  Еще один интересный момент.
  Когда вы двигаетесь вглубь сети,
  фильтры работают со все большим полем восприятия,
  а значит, они в состоянии обрабатывать информацию
  с большей площади первоначального изображения
  (простыми словами, они лучше приспособляются
  к обработке большей области пиксельного пространства).
  
  Полносвязные слои
  
  Теперь, когда мы можем обнаружить высокоуровневые свойства,
  самое крутое - это прикрепление полносвязного слоя в конце сети.
  Этот слой берёт вводные данные и выводит N-пространственный вектор,
  где N - число классов, из которых программа выбирает нужный.
  Например, если вы хотите программу по распознаванию цифр,
  у N будет значение 10, потому что цифр 10.
  Каждое число в этом N-пространственном векторе
  представляет собой вероятность конкретного класса.
  Например, если результирующий вектор для программы распознавания цифр
  это [0 0,1 0,1 0,75 0 0 0 0 0,05],
  значит существует 10% вероятность, что на изображении "1",
  10% вероятность, что на изображение "2",
  75% вероятность - "3", и 5% вероятность - "9"
  (конечно, есть и другие способы представить вывод).
  
  Способ, с помощью которого работает полносвязный слой
  - это обращение к выходу предыдущего слоя
  (который, как мы помним, должен выводить высокоуровневые карты свойств)
  и определение свойств,
  которые больше связаны с определенным классом.
  Например, если программа предсказывает,
  что на каком-то изображении собака,
  у карт свойств, которые отражают высокоуровневые характеристики,
  такие как лапы или 4 ноги,
  должны быть высокие значения.
  Точно так же, если программа распознаёт, что на изображении птица
  - у неё будут высокие значения в картах свойств,
  представленных высокоуровневыми характеристиками вроде крыльев или клюва.
  Полносвязный слой смотрит на то,
  что функции высокого уровня сильно связаны с определенным классом
  и имеют определенные веса,
  так что, когда вы вычисляете произведения весов с предыдущим слоем,
  то получаете правильные вероятности для различных классов.
  
  Обучение (или "Что заставляет эту штуку работать")
  
  Это один из аспектов нейронных сетей,
  о котором я специально до сих пор не упоминал.
  Вероятно, это самая важная часть.
  Возможно, у вас появилось множество вопросов.
  Откуда фильтры первого свёрточного слоя знают,
  что нужно искать границы и кривые?
  Откуда полносвязный слой знает, что ищет карта свойств?
  Откуда фильтры каждого слоя знают, какие хранить значения?
  Способ, которым компьютер способен корректировать значения фильтра (или весов)
  - это обучающий процесс,
  который называют методом обратного распространения ошибки.
  
  Перед тем, как перейти к объяснению этого метода,
  поговорим о том, что нейронной сети нужно для работы.
  Когда мы рождаемся, наши головы пусты.
  Мы не понимаем как распознать кошку, собаку или птицу.
  Ситуация с СНС похожа:
  до момента построения сети, веса или значения фильтра случайны.
  Фильтры не умеют искать границы и кривые.
  Фильтры верхних слоёв не умеют искать лапы и клювы.
  Когда мы становимся старше,
  родители и учителя показывают нам разные картинки и изображения
  и присваивают им соответствующие ярлыки.
  Та же идея показа картинки и присваивания ярлыка
  используется в обучающем процессе,
  который проходит СНС.
  Давайте представим, что у нас есть набор обучающих картинок,
  в котором тысячи изображений собак, кошек и птиц.
  У каждого изображения есть ярлык с названием животного.
  
  Метод обратного распространения ошибки можно разделить на 4 отдельных блока:
  прямое распространение, функцию потери, обратное распространение
  и обновление веса.
  Во время прямого распространения, берётся тренировочное изображение
  - как помните, это матрица 32 х 32 х 3 -
  и пропускается через всю сеть.
  В первом обучающем примере,
  так как все веса или значения фильтра были инициализированы случайным образом,
  выходным значением будет что-то вроде [.1 .1 .1 .1 .1 .1 .1 .1 .1 .1],
  то есть такое значение, которое не даст предпочтения
  какому-то определённому числу.
  Сеть с такими весами не может найти свойства базового уровня
  и не может обоснованно определить класс изображения.
  Это ведёт к функции потери.
  Помните, то, что мы используем сейчас - это обучающие данные.
  У таких данных есть и изображение и ярлык.
  Допустим, первое обучающее изображение - это цифра 3.
  Ярлыком изображения будет [0 0 0 1 0 0 0 0 0 0].
  Функция потери может быть выражена по-разному,
  но часто используется СКО (среднеквадратическая ошибка),
  это 1/2 умножить на (реальность - предсказание) в квадрате.
  
  .......
  
  Примем это значение за переменную L.
  Как вы догадываетесь, потеря будет очень высокой
  для первых двух обучающих изображений.
  Теперь давайте подумаем об этом интуитивно.
  Мы хотим добиться того, чтобы спрогнозированный ярлык
  (вывод свёрточного слоя)
  был таким же, как ярлык обучающего изображения
  (это значит, что сеть сделала верное предположение).
  Чтобы такого добиться,
  нам нужно свести к минимуму количество потерь,
  которое у нас есть.
  Визуализируя это как задачу оптимизации из математического анализа,
  нам нужно выяснить, какие входы
  (веса, в нашем случае)
  самым непосредственным образом способствовали потерям (или ошибкам) сети.
  
  .......
  
  (Один из способов визуализировать идею минимизации потери
  - это трёхмерный график,
  где веса нейронной сети
  (очевидно их больше, чем 2, но тут пример упрощен)
  это независимые переменные,
  а зависимая переменная - это потеря.
  Задача минимизации потерь
  - отрегулировать веса так, чтобы снизить потерю.
  Визуально нам нужно приблизиться к самой нижней точке чашеподобного объекта.
  Чтобы добиться этого, нужно найти производную потери
  (в рамках нарисованного графика
  - рассчитать угловой коэффициент в каждом направлении)
  с учётом весов).
  
  Это математический эквивалент dL/dW, где W - веса определенного слоя.
  Теперь нам нужно выполнить обратное распространение через сеть,
  которое определяет, какие веса оказали большее влияние на потери,
  и найти способы, как их настроить,
  чтобы уменьшить потери.
  После того, как мы вычислим производную,
  перейдём к последнему этапу - обновлению весов.
  Возьмём все фильтровые веса и обновим их так,
  чтобы они менялись в направлении градиента.
  
  ......
  
  Скорость обучения - это параметр,
  который выбирается программистом.
  Высокая скорость обучения означает,
  что в обновлениях веса делались более крупные шаги,
  поэтому образцу может потребоваться меньше времени,
  чтобы набрать оптимальный набор весов.
  Но слишком высокая скорость обучения может привести
  к очень крупным и недостаточно точным скачкам,
  которые помешают достижению оптимальных показателей.
  
  .......
  
  Процесс прямого распространения, функцию потери, обратное распространение
  и обновление весов,
  обычно называют одним периодом дискретизации (или epoch - эпохой).
  Программа будет повторять этот процесс фиксированное количество периодов
  для каждого тренировочного изображения.
  После того, как обновление параметров завершится
  на последнем тренировочном образце,
  сеть в теории должна быть достаточно хорошо обучена
  и веса слоёв настроены правильно.
  
  Тестирование
  
  Наконец, чтобы увидеть, работает ли СНС,
  мы берём другой набор изображений и ярлыков
  и пропускаем изображения через сеть.
  Сравниваем выходы с реальностью и смотрим, работает ли наша сеть.
  
  Как компании используют СНС
  
  Данные, данные, данные.
  Компании, у которых тонны этого шестибуквенного магического добра,
  имеют закономерное преимущество перед остальными конкурентами.
  Чем больше тренировочных данных,
  которые можно скормить сети,
  тем больше можно создать обучающих итераций,
  больше обновлений весов
  и перед уходом в продакшн, получить лучше обученную сеть.
  Facebook (и Instagram) могут использовать все фотографии
  миллиарда пользователей, которые у них сегодня есть,
  Pinterest - информацию из 50 миллиардов пинов,
  Google - данные поиска,
  а Amazon - данные о миллионах продуктов, которые ежедневно покупаются.
  И теперь вы знаете какое волшебство они используют в своих целях.
  
  Ремарка
  
  Хоть этот пост и должен быть хорошим началом для понимания СНС,
  это не полный обзор.
  К моментам, которые не обсуждались в этой статье,
  относятся нелинейные (nonlinear) слои и слои объединения (pooling),
  а также гиперпараметры сети,
  такие как размеры фильтров, шаги и отступы.
  Сетевая архитектура, пакетная нормализация, исчезающие градиенты,
  выпадение, методы инициализации, невыпуклая оптимизация,
  сдвиг, варианты функций потерь, расширение данных,
  методы регуляризации, машинные особенности,
  модификации обратного распространения
  и много других необсуждённых (пока ;-) тем.
  
  (Перевод Наталии Басс)
  
  .......
  
  //// Конец цитирования.
  
  Надеюсь, теперь аббревиатуры СНС или CNN,
  уже не будут выглядеть для Вас такими угрожающе непонятными,
  и при слове "свертка" "рука не будет сразу тянуться к пистолету".
  
  
  ========
  
  07.03.2024 10:27
  
  Чем машинное обучение отличается от статистики.
  В оглавление.
  
  Несмотря на то, что я лично придерживаюсь глубокого убеждения,
  что "машинное обучение", особенно по отношению к нейронкам,
  по своей сути является чем угодно,
  но не разделом/продолжением статистики,
  считаю нужным познакомить Вас и с противоположным мнением.
  Тем более, что из него можно многое почерпнуть в плане понимания того,
  как формировалась данная "дисциплина",
  и почему сейчас статистика безоговорочно "правит бал" в этой области.
  При том, что по факту работоспособными оказываются не "формулы",
  а найденные эмпирическим путем некие "полушаманские приемы",
  только очень приблизительно опирающиеся на "строгие математические методы":
  
  "Чем машинное обучение отличается от статистики на самом деле".
  Автор: factorial42
  https://habr.com/ru/companies/skillfactory/articles/570736/.
  1 авг 2021 в 20:34
  
  Автор оригинала: Matthew Stewart
  https://towardsdatascience.com/the-actual-difference-between-statistics-and-machine-learning-64b49f07ea3
  
  //// Начало цитирования
  
  К старту курса о машинном и глубоком обучении делимся мнением Мэтью Стюарта,
  соискателя степени кандидата наук в Гарварде,
  который, по собственному признанию,
  устал слышать эти дебаты, повторяющиеся в социальных сетях и в моём университете
  практически ежедневно.
  Они сопровождаются несколько туманными заявлениями.
  Автор считает, что в этом виноваты обе стороны дебатов
  и надеется, что к концу этой статьи у читателей
  будет более обоснованная позиция в отношении этих несколько расплывчатых терминов.
  Неопределённых утверждений, которые автор часто слышит на эту тему,
  есть несколько, а самое распространённое из них звучит приблизительно так:
  
   Основное различие между машинным обучением (далее - ML) и статистикой
   заключается в их назначении.
   Модели ML разработаны, чтобы делать максимально точные прогнозы.
   Статистические модели - для выводов о взаимосвязях между переменными.
  
  Хотя технически это верно, формулировка не даёт чёткого
  или удовлетворительного ответа.
  Чтобы вы представляли, насколько далеко зашла дискуссия,
  в журнале Nature Methods опубликована статья,
  где описывается разница между статистикой и ML.
  
  Аргументы
  
  Вопреки распространённому мнению ML существует десятилетиями.
  От него отказались из-за больших требований к вычислениям
  и ограничений вычислительной мощности того времени,
  однако в последние годы ML из-за большого количества данных
  после информационного взрыва переживает возрождение.
  
  Итак, если ML и статистика - синонимы,
  почему мы не видим, что кафедры статистики в каждом университете закрываются
  или преображаются в кафедры "машинного обучения"?
  Потому, что это не одно и то же.
  Основное отличие ML и статистики - в назначении,
  однако утверждение о том,
  что ML направлено на точные предсказания,
  тогда как статистические модели предназначены для выводов,
  практически бессмысленно,
  если вы не разбираетесь в этих понятиях.
  Мы должны понимать, что статистика и статистические модели
  - это не одно и то же.
  
   Статистика - это математическое исследование данных.
   Если у вас нет данных, вы не можете заниматься статистикой.
  
   Статистическая модель - это модель для данных,
   используемая либо чтобы сделать вывод о взаимосвязях внутри них,
   либо чтобы создать модель, способную предсказывать будущие значения.
  
  Часто эти два понятия идут рука об руку, поэтому проясним две вещи:
  
   Чем статистика отличается от ML?
  
   Чем статистические модели отличаются от ML?
  
  Существует множество статистических моделей,
  которые могут прогнозировать,
  но их прогнозы не отличаются точностью.
  Точно так же модели ML дают различные степени интерпретируемости,
  от хорошо интерпретируемой регрессии лассо
  до непроницаемых нейронных сетей,
  но последние жертвуют интерпретируемостью ради предсказательной силы.
  Не вдаваясь в детали,
  это достаточно хороший ответ для большинства людей,
  однако иногда такое объяснение оставляет наедине
  с непониманием различий между ML и статистическим моделированием.
  Посмотрим на пример с линейной регрессией.
  
  Статистические модели против ML
  
  Кажется, сходство методов статистического моделирования и ML
  заставило людей предполагать, что это синонимы.
  Наиболее очевиден пример линейной регрессии,
  она, вероятно, является основной причиной недопонимания.
  
  Линейная регрессия - статистический метод,
  мы можем обучить линейный регрессор и получить тот же результат,
  что и статистическая регрессионная модель
  минимизации квадратичной ошибки между точками данных.
  В одном случае делается то, что называется "обучением" модели,
  оно предполагает использование подмножества данных,
  и мы не знаем, насколько хорошо будет работать модель,
  пока не "протестируем" её на тестовом наборе данных,
  которых не было во время обучения.
  Здесь задача ML - получить наилучшие показатели на тестовом наборе.
  
  В случае статистической модели мы находим прямую,
  которая минимизирует среднеквадратичную ошибку по всем данным,
  предполагая, что данные являются линейным регрессором
  с добавлением случайного шума,
  который обычно имеет гауссовский характер.
  В обучающем и тестовом наборах нет необходимости.
  
  Во многих случаях, особенно в исследованиях
  (в примере с датчиком ниже),
  смысл модели заключается в том,
  чтобы охарактеризовать связь между данными и нашей итоговой переменной,
  а не делать прогнозы о будущих данных.
  Эта процедура называется статистическим выводом,
  в отличие от предсказания.
  Однако мы всё ещё можем работать с этой моделью в целях прогнозирования,
  прогноз также может оказаться основной целью,
  но способ оценки модели не будет содержать тестовый набор,
  вместо набора он будет содержать оценку значимости
  и надёжности параметров модели.
  
  Цель машинного обучения с учителем - получение модели,
  которая может делать повторяющиеся предсказания.
  Как правило, нам не важна интерпретируемость модели,
  хотя лично я рекомендую всегда тестировать её,
  чтобы убедиться, что предсказания модели действительно небессмысленные.
  
   Машинное обучение - о результатах и, наверное, о работе в компании,
   где ценность характеризуется исключительно показателями.
  
   Статистическое моделирование более направлено
   на поиск взаимосвязей между переменными и значимости этих взаимосвязей,
   а также на прогнозирование.
  
  Чтобы на конкретном примере показать разницу между этими двумя процедурами,
  я приведу личный пример.
  Я - эколог и работаю в основном с сенсорными данными.
  Если я пытаюсь доказать, что датчик способен реагировать
  на определённый вид стимулов (например, на концентрацию газа),
  то, чтобы определить, является ли реакция сигнала статистически значимой,
  воспользуюсь статистической моделью.
  
  Я бы также попытался понять эту взаимосвязь и проверить её повторяемость,
  чтобы точно охарактеризовать реакцию датчика и на основе этих данных
  сделать выводы.
  Есть факты, которые возможно проверить:
  является ли отклик линейным,
  можно ли отнести его к концентрации газа,
  а не к случайному шуму в датчике и т. д.
  
  Напротив, я могу получить массив из 20 различных датчиков
  и использовать его, чтобы попытаться предсказать реакцию моего нового датчика.
  Это странно, если вы немного знаете о сенсорах,
  но сейчас это важная область экологической науки.
  
  Модель с 20 различными переменными,
  предсказывающая результат работы датчика,
  явно имеет дело с предсказанием,
  и я не ожидаю, что она будет особенно интерпретируемой.
  Эта модель из-за нелинейности
  - результата химической кинетики
  и взаимосвязи между физическими переменными и концентрацией газа,
  вероятно, будет чем-то экзотичнее статистической модели,
  например нейронной сетью.
  Хотелось бы, чтобы модель можно было понять,
  но я буду вполне доволен, пока возможны точные прогнозы.
  
  Если я пытаюсь доказать взаимосвязь переменных
  до степени статистической значимости,
  чтобы опубликовать её в научной статье,
  то воспользуюсь статистической моделью,
  а не моделью ML,
  потому что меня больше волнует взаимосвязь переменных,
  а не прогнозирование.
  Составление прогнозов всё равно может быть важным,
  но отсутствие интерпретируемости большинства алгоритмов ML
  затрудняет доказательство взаимосвязей в данных.
  На самом деле это большая проблема в академических исследованиях,
  когда учёные используют алгоритмы без их понимания
  и получают спекулятивные выводы.
  
  Должно быть ясно, что эти два подхода различаются целью,
  несмотря на использование схожих средств её достижения.
  При оценке алгоритма ML для подтверждения точности
  используется тестовый набор,
  в то время как для статистической модели анализ параметров регрессии
  с помощью доверительных интервалов,
  тестов на значимость и других тестов
  может использоваться для оценки легитимности модели.
  Поскольку эти методы дают одинаковый результат,
  легко понять,
  откуда происходит предположение, что они одинаковы.
  
  Статистика против ML - пример линейной регрессии
  
  Я думаю, заблуждение довольно хорошо отражено
  в якобы остроумной картинке, сравнивающей статистику и ML.
  
  Однако смешение двух терминов только из-за того,
  что они оба используют одни и те же фундаментальные понятия вероятности,
  неоправданно.
  Если утверждать, что машинное обучение
  - это просто превознесённая статистика,
  также можно сделать следующие утверждения:
  
   Физика - это просто превознесённая математика.
  
   Зоология - это просто превознесённое коллекционирование марок.
  
   Архитектура - это просто превознесённое строительство замков из песка.
  
  Эти заявления нелепы,
  все они основаны на смешении терминов на основе схожих идей.
  
  Физика построена на математике,
  это применение математики для понимания явлений.
  Физика также включает аспекты статистики,
  и современная форма последней обычно строится
  на основе теории множеств Цермело - Френкеля
  в сочетании с теорией мер для создания вероятностных пространств.
  У них много общего,
  потому что они исходят из одного корня и применяют схожие идеи
  для достижения логического завершения.
  Аналогично архитектура и строительство песчаных замков,
  вероятно, имеют много общего,
  хотя я не архитектор и не могу обосновать объяснения,
  но это явно не одно и то же.
  
  Прежде чем продолжить,
  я кратко проясню ещё два распространённых заблуждения по нашему вопросу.
  Первое: ИИ не отличается от ML,
  а наука о данных - это просто статистика.
  Спорить с аргументами трудно, поэтому всё пройдёт быстро.
  
  Наука о данных - это, по сути,
  применяемые к данным разного размера вычислительные и статистические методы.
  К ним можно отнести исследовательский анализ данных,
  когда данные изучаются и визуализируются,
  чтобы помочь учёному лучше понять их и сделать из них выводы.
  
  Наука о данных также включает преобразование сырых данных в форму,
  пригодную для анализа,
  а также предварительную обработку данных,
  предполагая определённый уровень знания компьютерных наук,
  поскольку она включает программирование, установку соединений и конвейеров
  между базами данных, веб-серверами и т. д.
  
  Для работы со статистикой необязательно использовать компьютер,
  но без него невозможно заниматься наукой о данных.
  Вы можете ещё раз убедиться,
  что, хотя последняя работает со статистикой,
  это явно не одно и то же.
  
  Точно так же машинное обучение - не то же самое, что искусственный интеллект,
  на самом деле ML - подмножество ИИ.
  Это очевидно:
  мы обучаем машину делать обобщающие выводы о типе данных
  на основе предыдущих данных.
  
  ML основано на статистике
  
  Прежде чем мы обсудим, чем различаются статистика и ML,
  поговорим об их сходстве.
  Мы уже слегка касались этого вопроса в предыдущих разделах.
  
  ML построено на основе статистики.
  Это очевидно,
  //// А мне вот нет.
  //// На мой взгляд, ML - это определенные технические решения,
  //// которые даже приблизительно не описываются "статистикой".
  //// "Статистику" используют для оценки РЕЗУЛЬТАТОВ работы этих решений,
  //// а не для их выбора/проектирования/совершенствования.
  //// На мой инженерный взгляд, это принципиальный момент.
  поскольку оно связано с данными,
  а данные должны быть описаны с помощью статистической базы.
  //// Большие языковые модели разве построены на "статистической базе" текстов?
  Однако механика статистики,
  расширяемая в термодинамику для большого числа частиц,
  также построена на статистике.
  Понятие давления и температуры на самом деле о статистике.
  Вот почему невозможно описать температуру или давление молекулы,
  это чепуха.
  
  Температура - проявление средней выделяемой при столкновениях молекул энергии.
  В случае большого их количества логично, что мы можем описать температуру.
  Вы согласитесь, что термодинамика и статистика - это одно и то же?
  Нет, термодинамика использует статистику,
  чтобы помочь нам понять взаимодействие работы и тепла
  в виде транспортных явлений.
  
  Термодинамика строится не только на статистике,
  но и на многих других элементах;
  ML опирается на большое количество областей математики и компьютерных наук:
  
   Теория ML из математики и статистики.
  
   Алгоритмы ML из таких областей,
   как оптимизация, матричная алгебра, интегральное исчисление.
  
   Реализации ML на основе концепций компьютерных наук и инженерии:
   трюки ядра, хеширование признаков).
  
  Когда человек начинает программировать на Python,
  берёт библиотеку sklearn и использует её алгоритмы,
  многие понятия абстрагируются,
  так что различия увидеть трудно.
  Здесь абстракция привела к невежеству в смысле содержания ML.
  
  Статистическая теория обучения - это статистическая основа ML
  //// Это ключевая догма во всем ML,
  //// которая, на мой взгляд, по факту УЖЕ "контрпродуктивна",
  //// и, как минимум, не может даже "постфактум" объяснить
  //// существующие достижения "нейронаук".
  //// Возможно, в начале "большого пути" "статистическая теория обучения"
  //// давала хоть какие-то ориентиры в ML,
  //// но сегодня это далеко не так.
  
  Основное различие между статистикой и машинным обучением
  - в том, что статистика основана исключительно
  на вероятностных пространствах
  и вся выводится из теории множеств;
  она о том, как группировать числа в категории (подмножества),
  а затем накладывать на это множество меру,
  чтобы гарантировать,
  что суммарное значение всех чисел равно 1.
  Это называется вероятностным пространством.
  
  Статистика не делает никаких других предположений,
  кроме этих понятий множеств и мер.
  Поэтому, когда мы задаём вероятностное пространство
  в строгих математических терминах,
  мы задаём три вещи,
  то есть вероятностное пространство,
  которое обозначается (?, F, P),
  состоит из трёх компонентов:
  
   Пространства выборок,
   то есть множества всех возможных исходов.
  
   Множества событий, F,
   где каждое событие - это множество исходов с любым их количеством.
  
   Назначения вероятностей событиям,
   P; то есть функция от событий к вероятностям.
  
  ML базируется на теории статистического обучения,
  она, в свою очередь, основывается на аксиоматическом понятии
  вероятностных пространств.
  Эта теория разработана в 1960-х годах
  и развивает традиционную статистику.
  Категорий ML несколько,
  я сосредоточусь на обучении с учителем,
  которое проще всего объяснить,
  хотя, погружённое в математику, оно всё равно несколько эзотерично.
  
  Статистическая теория обучения в случае обучения с учителем говорит нам,
  что у нас есть набор данных S = {(xi, yi)}.
  Иными словами, есть набор данных из n точек данных,
  каждая из которых описывается другими значениями (признаками),
  представленными x, эти признаки отображаются определённой функцией,
  чтобы дать значения y.
  
  То есть мы знаем, что у нас есть эти данные,
  цель - найти функцию,
  которая отображает значения x в значения y.
  Множество всех возможных функций,
  которые могут описывать данное отображение,
  называется пространством гипотез.
  
  Чтобы найти функцию,
  мы должны дать алгоритму способ "научиться" тому,
  как эффективнее подойти к решению проблемы.
  Этот способ называется функцией потерь.
  Итак, для каждой гипотезы (предполагаемой функции),
  которая у нас есть,
  мы должны оценить, как эта функция работает,
  посмотрев на значение её ожидаемого риска по всем данным.
  
  Ожидаемый риск - это, в сущности, сумма функции потерь,
  умноженная на вероятностное распределение данных.
  Если бы мы знали совместное распределение вероятностей отображения,
  то легко нашли бы наилучшую функцию.
  Однако в общем случае распределение неизвестно,
  поэтому лучший вариант
  - предположить самую подходящую функцию,
  а затем эмпирически решить,
  является ли эта функция потерь лучшей.
  Это называется эмпирическим риском.
  
  Затем мы можем сравнивать различные функции
  и искать гипотезу с минимальным ожидаемым риском,
  то есть гипотезу, которая даёт минимальное значение
  (называемое инфимумом)
  из всех гипотез по данным.
  //// Да нет перебора всех гипотез. Есть "трансформация" какой-то функции,
  //// ВКЛЮЧАЮЩАЯ трансформацию и "пространства" и "представления".
  
  Однако алгоритм имеет тенденцию обманывать,
  минимизировать функцию потерь путём чрезмерной подгонки к данным
  [переобучения],
  поэтому после обучения функции на обучающем наборе
  эта функция проверяется на тестовом наборе данных,
  которых не было в обучающем наборе.
  Природа определения ML вводит проблему переобучения
  и обосновывает необходимость обучающего и тестового множества
  при выполнении машинного обучения.
  В статистике это необязательно:
  мы не пытаемся минимизировать эмпирический риск.
  Алгоритм обучения, который выбирает функцию,
  минимизирующую эмпирический риск,
  называется эмпирической минимизацией риска.
  
  Примеры: линейная регрессия
  
  В традиционном её толковании
  мы пытаемся минимизировать ошибку между некоторыми данными,
  чтобы найти функцию,
  которая может описывать данные.
  Здесь обычно используется средняя квадратичная ошибка.
  Мы возводим её в квадрат,
  чтобы положительные и отрицательные ошибки не нивелировали друг друга.
  //// Но при этом считаем ошибки независимыми и "линейными".
  Затем мы можем решить задачу нахождения коэффициентов регрессии
  в закрытой форме.
  
  Если взять функцию потерь как среднюю квадратичную ошибку
  и выполнить эмпирическую минимизацию риска,
  как утверждает теория статистического обучения,
  мы получим тот же результат,
  что и традиционный линейный регрессионный анализ.
  Так происходит просто потому,
  что эти решения эквивалентны,
  //// Ни фига не "эквивалентны", а похожи в простейших случаях.
  точно так же, как выполнение метода максимального правдоподобия
  на этих же данных даст вам тот же результат.
  
  Максимальное правдоподобие имеет другой способ достижения той же цели,
  но никто не будет спорить и говорить,
  что максимальное правдоподобие
  - это то же самое, что и линейная регрессия.
  Простейший случай явно не помогает дифференцировать эти методы.
  //// Вот с этим согласен.
  
  Ещё один важный момент:
  в традиционных статистических подходах
  нет понятия обучающего и тестового наборов,
  но мы используем метрики,
  которые помогают оценить работу модели;
  процедура оценки отличается,
  но оба метода способны дать нам статистически надёжные результаты.
  
  Другой момент:
  традиционный статистический подход дал нам оптимальное решение,
  потому что оно имело закрытую форму.
  Метод не проверял другие гипотезы и не сходился к решению,
  тогда как метод ML пробовал множество моделей
  и сходился к окончательной гипотезе,
  совпадающей с результатом алгоритма регрессии.
  
  Если бы мы использовали другую функцию потерь,
  результаты не сошлись бы.
  С кусочно-линейной потерей
  (которая не дифференцируются с помощью стандартного градиентного спуска,
  поэтому потребовались бы другие методы,
  такие как проксимальный градиентный спуск),
  то результаты окажутся другими.
  
  Окончательное сравнение можно провести, рассмотрев смещение модели.
  Можно попросить алгоритм ML проверить линейные модели,
  а также полиномиальные модели, экспоненциальные модели и т. д.,
  чтобы увидеть, подходят ли эти гипотезы к данным лучше,
  учитывая нашу априорную функцию потерь.
  Это сродни увеличению пространства релевантных гипотез.
  
  В традиционном статистическом смысле мы выбираем одну модель
  и можем оценить её точность,
  но не можем автоматически заставить её выбрать лучшую модель
  из 100 различных.
  Очевидно, что в модели всегда присутствует погрешность
  из-за выбранного алгоритма.
  Она неизбежна,
  поскольку поиск произвольной оптимальной для набора данных функции
  - NP-полная задача.
  
  ML или статистика, что лучше?
  
  На самом деле это глупый вопрос.
  Что касается статистики и ML,
  то машинное обучение не существовало бы без статистики,
  но оно полезно в современную эпоху.
  Сравнение машинного обучения и статистических моделей немного сложнее.
  Если вы просто хотите создать алгоритм,
  с высокой точностью прогнозирующий цены на жильё,
  или использовать данные при определении вероятности заражения человека
  определёнными видами заболеваний,
  то, скорее всего, лучше применять машинное обучение.
  Если вы пытаетесь доказать взаимосвязь переменных или сделать выводы из данных,
  то лучшим подходом, скорее всего, окажется статистическая модель.
  
  Если у вас нет большого опыта в статистике,
  вы всё равно можете изучать ML и использовать его,
  предлагаемая библиотеками машинного обучения абстракция
  делает их довольно простыми для использования неспециалистом.
  Но вам всё равно необходимо некоторое понимание
  лежащих в их основе статистических идей,
  чтобы предотвратить перебор моделей и получение ошибочных выводов.
  
  Где узнать больше?
  
  Если вы заинтересованы в более глубоком изучении
  статистической теории обучения,
  существует множество книг и университетских курсов по этой теме.
  Вот несколько курсов лекций, которые я рекомендую (англ.):
  
   MIT. Статистическая теория обучения и её приложения.
  
   Университет Иллинойса. Статистическая теория обучения.
  
  Если хочется углубиться в вероятностные пространства,
  то я предупреждаю вас, что это довольно тяжёлая математика,
  обычно она рассматривается только на курсах статистики для выпускников.
  Вот несколько хороших источников по этой теме (англ.):
  
   Университет Йювяскюля. Введение в теорию вероятности.
  
   Университет Квинсленда. Краткое введение в вероятность.
  
  Эта статья не только показывает разницу между ML и статистикой,
  но и напоминает, что достижения будущего
  часто скрыты в решениях, которые в прошлом заводили в тупик.
  Над изобретателем булевой логики смеялись,
  а глубокие нейронные сети не находили признания десятилетиями,
  но сегодня именно они во многом помогают нам...
  
  ......
  
  //// И ни одного комментария. Ни у кого нет возражений.
  //// Или каких-то противоречивых мыслей/гипотез.
  
  //// Конец цитирования.
  
  Ну что тут скажешь?
  Что переть "против мэйнстрима" глупо и "небезопасно",
  и, по большому счету, бессмысленно.
  Пока прогресс в развитии ИИ-систем сильно не притормозиться,
  а признаков такого не наблюдается, скорее наоборот, все только разгоняется,
  оспаривать "священные каноны" вряд ли полезно для собственного здоровья.
  
  Так что придется пока заниматься своей работой
  с полным пониманием того, насколько это все "не ко времени"
  и уж точно "не ко двору".
  
  ========
  
  07.04.2024 17:57
  
  Батчи в обучении и инференсе нейросетей простыми словами.
  В оглавление.
  
  Решил разъяснить для себя разницу между использованием батчей (минипакетов)
  на этапе обучения нейросетей и во время инференса, т.е. использования.
  А то как-то всем все понятно, а у меня каждый раз при их упоминании
  возникают какие-то "непонятки".
  Вот и решил сегодня их прояснить, взяв консультацию у Copilot.
  
  07.04.2024 16:41
  
  ......
  
  //// Хорошо, Copilot. У меня есть несколько, надеюсь, простых вопросов
  //// относительно обучения и работы нейросетей.
  //// Первый вопрос такой:
  //// в методе стохастического градиентного спуска используется такое понятие
  //// как размер батча.
  //// Можете описать своими словами, на что он влияет,
  //// и какие есть рекомендации по его выбору?
  
  > Copilot 16:47
  
  > Конечно, Андрей.
  > Размер батча в методе стохастического градиентного спуска (SGD)
  > - это количество обучающих примеров,
  > которое используется для одного обновления модели.
  > Вот основные моменты, на которые он влияет:
  
  >  Обобщение:
  > Меньшие батчи могут способствовать лучшему обобщению,
  > так как они вносят больше "шума" в процесс обучения.
  
  >  Память:
  > Большие батчи требуют больше памяти,
  > что может быть ограничивающим фактором на некотором оборудовании.
  
  >  Скорость обучения:
  > Большие батчи могут ускорить процесс обучения,
  > так как модель обновляется реже,
  > но каждое обновление требует больше вычислений.
  
  >  Стабильность:
  > Большие батчи могут привести к более стабильной сходимости,
  > но также могут "застрять" в локальных минимумах.
  
  > Что касается рекомендаций по выбору размера батча,
  > то они могут варьироваться в зависимости от конкретной задачи
  > и доступных ресурсов.
  > Вот несколько общих советов:
  
  >  Экспериментирование:
  > Начните с небольшого размера батча и постепенно увеличивайте его,
  > наблюдая за изменениями в производительности модели.
  
  >  Правило большого пальца:
  > Часто используют степени двойки (например, 32, 64, 128),
  > так как это может быть более эффективно с точки зрения вычислений
  > на многих современных архитектурах.
  
  >  Ресурсы:
  > Выбирайте размер батча, который оптимально использует доступную память,
  > не приводя к переполнению.
  
  > Надеюсь, это поможет вам лучше понять влияние размера батча
  > на процесс обучения нейросетей!
  > Если у вас есть еще вопросы, с удовольствием на них отвечу.
  
  //// Спасибо, Copilot.
  //// Примерно так это я и представлял,
  //// хотя не очень понимаю, почему больший размер батча требует большей памяти.
  //// Я представляю это так, что при обработке каждого примера
  //// ошибка просто накапливается,
  //// и вроде как, не требуется отдельное хранение всех ошибок.
  //// Что я не правильно понимаю в методе стохастического градиентного спуска?
  
  > Copilot 16:54
  
  > Ваше замечание о накоплении ошибки верно, но важно понимать,
  > что в процессе обучения нейросети каждый пример из батча
  > должен быть загружен в память для вычисления градиентов.
  > Вот почему больший размер батча требует больше памяти:
  
  >  Хранение данных:
  > Каждый пример из батча содержит данные (например, изображения, текст),
  > которые нужно хранить в памяти во время обработки.
  
  >  Градиенты:
  > Для каждого примера вычисляются градиенты по весам модели,
  > и эти градиенты также занимают память.
  
  >  Параллелизм:
  > Современные вычислительные системы часто обрабатывают
  > несколько примеров параллельно,
  > что увеличивает требования к памяти.
  
  > Когда мы говорим о "накоплении ошибки",
  > на самом деле имеется в виду накопление градиентов ошибки для всего батча
  > перед обновлением весов.
  > Но до этого момента каждый пример и соответствующие ему градиенты
  > должны быть где-то сохранены,
  > и это "где-то" - это оперативная память.
  
  > Надеюсь, это проясняет ситуацию!
  > Если у вас есть еще вопросы, буду рад помочь.
  
  //// Спасибо, Copilot.
  //// Но я все равно не очень понимаю, зачем хранить все градиенты
  //// для всех примеров батча.
  //// Мне представляется, что вычислив градиенты для первого примера
  //// и запомнив их, можно градиенты для следующих примеров
  //// просто складывать с градиентами предыдущего примера,
  //// и таким образом просто их накапливать в тех же ячейках памяти,
  //// а не хранить их все в памяти.
  //// Опять я что-то не так понимаю в SGD?
  
  > Copilot 17:02
  
  > Вы абсолютно правы, Андрей.
  > В методе стохастического градиентного спуска (SGD)
  > действительно можно накапливать градиенты по мере обработки каждого примера,
  > и это часто делается в практических реализациях для экономии памяти.
  > Этот процесс называется градиентным накоплением.
  
  > Вот как это работает:
  
  > 1. Инициализируются градиенты весов модели как нулевые.
  
  > 2. Для каждого примера в батче:
  
  >  Вычисляются градиенты ошибки.
  
  >  Эти градиенты суммируются с уже накопленными градиентами.
  
  > 1. После обработки всех примеров в батче,
  > накопленные градиенты используются для обновления весов модели.
  
  > Таким образом, не требуется хранить отдельные градиенты для каждого примера,
  > что действительно экономит память.
  > Однако, когда мы говорим о требованиях к памяти для больших батчей,
  > мы также имеем в виду не только градиенты,
  > но и саму необходимость хранения входных данных каждого примера в батче,
  > поскольку все они должны быть доступны для вычисления градиентов.
  
  > Спасибо за ваш вопрос, он помогает уточнить важные аспекты работы SGD.
  
  .....
  
  //// Спасибо, Copilot.
  //// Можно считать, что с этим вопросом разобрались.
  //// Но я часто встречаю упоминание "размер батча" в текстах,
  //// которые относятся уже к инференсу нейросетей, а не их обучению.
  //// И это вызывает у меня полное недоумение.
  //// Что это за батчи на инференсе, что означают, как они работают,
  //// какие есть по ним рекомендации?
  //// Вот сколько сразу вопросов.
  
  > Copilot 17:09
  
  > Отличный вопрос, Андрей.
  > Давайте разберёмся.
  
  > Размер батча на инференсе относится к количеству примеров данных,
  > которые обрабатываются за один раз
  > во время использования нейросети после её обучения.
  > Вот основные моменты:
  
  >  Эффективность:
  > Обработка данных батчами может быть более эффективной,
  > чем обработка каждого примера по отдельности,
  > особенно на GPU или других параллельных вычислительных устройствах.
  
  >  Скорость:
  > Большие батчи могут ускорить процесс инференса,
  > так как позволяют лучше использовать параллелизм вычислительных ресурсов.
  
  >  Требования к памяти:
  > Как и при обучении, большие батчи требуют больше оперативной памяти,
  > что может быть ограничивающим фактором.
  
  > Рекомендации по размеру батча на инференсе:
  
  >  Тестирование:
  > Проведите тесты с разными размерами батча,
  > чтобы найти оптимальный баланс между скоростью и потреблением памяти.
  
  >  Аппаратные ресурсы:
  > Учитывайте ограничения вашего оборудования;
  > на некоторых системах большие батчи могут не поместиться в память.
  
  >  Потребности приложения:
  > Если требуется низкая задержка (например, для реального времени),
  > предпочтительнее могут быть меньшие батчи.
  
  > Итак, размер батча на инференсе
  > - это способ оптимизации процесса использования нейросети,
  > который нужно подбирать индивидуально для каждой задачи
  > и конкретной вычислительной среды.
  
  > Надеюсь, это ответило на ваши вопросы!
  > Если есть ещё что-то, с чем я могу помочь, пожалуйста, спрашивайте.
  
  //// О, да. Теперь все понятно.
  //// Спасибо, Copilot.
  //// Просто в материалах, которые я прорабатываю о таких мелочах
  //// обычно забывают упомянуть, мол, и так все ясно.
  //// Теперь мне понятно,
  //// что батчи на инференсе это способ распараллеливания работы
  //// по разным данным с целью получения разных результатов,
  //// А батчи в SGD - это, наоборот,
  //// способ как "сжатия"/обработки нескольких данных
  //// для получения одного "результата".
  //// Формулировки, конечно, весьма корявые,
  //// но так проще их уложить в памяти и понимании.
  
  > Copilot 17:18
  
  > Именно так, Андрей.
  > Вы очень хорошо сформулировали основную идею использования батчей
  > в разных контекстах.
  > Это действительно помогает лучше понять и запомнить,
  > как работают батчи в обучении и инференсе нейросетей.
  
  ......
  
  //// Спасибо, Copilot. Но может быть Вам будет интересно представить графически
  //// эту разницу батчей в различных контекстах.
  //// Я не настаиваю, задача очень не простая,
  //// но может быть Вам интересны такие задачки.
  //// Если, все-таки попробуете такое представить,
  //// то, пожалуйста, не забывайте о своем логотипе и формате JPG.
  
  > Copilot 17:24
  > Я попробую создать это.
  > "Графическое изображение разницы батчей в обучении и инференсе нейросетей
  > с логотипом Copilot в формате JPG"
  > Выполнено с помощью Designer. На платформе DALL·E 3.
  
  //// Спасибо, Copilot. Очень интересно у Вас получилось и с хорошим юмором.
  
  .......
  
  "Графическое изображение разницы батчей в обучении и инференсе нейросетей
  с логотипом Copilot в формате JPG".
  Создано с помощью искусственного интеллекта Copilot на платформе DALL· E 3.
  
Графическое изображение разницы батчей в обучении и инференсе нейросетей с логотипом Copilot в формате JPG:  OIG1.HI4ejEUux_qxsbEcJSQr.jpg Графическое изображение разницы батчей в обучении и инференсе нейросетей с логотипом Copilot в формате JPG:  OIG1.BB_GZ0TpuPob4bVWGKqC.jpg
Графическое изображение разницы батчей в обучении и инференсе нейросетей с логотипом Copilot в формате JPG:  OIG1.KYsXGLZIkRrQOAhAFEpr.jpg Графическое изображение разницы батчей в обучении и инференсе нейросетей с логотипом Copilot в формате JPG:  OIG1.4EAFByxq3PVflGjbXWgl.jpg
  
  
  ========
  
  Шлюп
  
  Шлюп Ликбез. Модель Kandinsky 3.0 нарисовала:  f7985ef4d7ec4f81b3353725323bbeb4_res_00000_image
  
  Шлюп Ликбез. Модель Kandinsky 3.0 нарисовала:  41cba35a8e754141b7741624f34863c1_res_00000_image
  
  Шлюп Ликбез. Модель Kandinsky 3.1 нарисовала:  0ae1961ef39f444fb107266f0cd43070_res_00000_image
  Flag Counter
  Free counters!
  
 Ваша оценка:

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

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

Как попасть в этoт список
Сайт - "Художники" .. || .. Доска об'явлений "Книги"