LINUX.ORG.RU

Нужна литература по алгоритмам БЕЗ(!!!) нейронок и ML для сопоставления ч/б векторных картинок с образцами

 


3

1

Что-то в духе распознавания рукописных символов в УЖЕ очищенном от шума векторном виде. Такое, чтобы после прочтения я мог сам состряпать нужные алгоритмы.

Требование «БЕЗ нейронок и ML» ключевое – чтобы я мог руками впилить в эти алгоритмы свои знания и быть на 100% уверенным в логике их работы, а не пердолиться с придумыванием обучающих данных и получить потом на выходе чёрный ящик, выдающий непредсказуемые результаты.

Т.е. нужны некие базовые до-ML-ные идеи. Например, попалось на глаза словечко «кластерный анализ» – похоже в тему, но где б найти с подходящей (но не избыточной) детализацией идеи и с примерами. И вот всё такое похожее надо.

Те книги, которые рекомендует гугл, – про сильно более навороченные вещи (e.g. мне не нужны цветные пиксельные картинки и построение 3D из 2D), и с непременным ML в том или ином виде. Разве что 1е издание Фукунага «Введение в статистическую теорию распознавания образов» – 1979 год, это по ощущениям ещё до-нейроночная эпоха, там может быть что-то подходящее.

А пишу в форум про нейронки, потому что тутошняя публика как раз может что-то знать на тему.

★★★★★

Последнее исправление: dimgel (всего исправлений: 4)
Ответ на: комментарий от anonymous_incognito

Мы только что говорили о линейной регрессии

Мы говорили о разнице "нейронка" vs матмодель.

на самом деле и модель и нейронка имеют вероятность ложного считывания.
а для строгих обычных алгоритмов что там на практике насчёт допустимых значений и гарантий отсутствия ошибок на их множестве? Как бы тоже строго гарантировать на 100% что-то очень трудно.

Ещё раз медленно и печально: имея матмодель для конкретного набора входных данных можно рассчитать ожидаемый (он же "корректный") результат. Для "нейронок" - в общем случае нельзя. В этом разница. Она большая. Матмодели обладают математически формальной предсказуемостью. "Нейронки" - нет. Насколько и кому это важно на практике - другой вопрос.

r--r--r--
()
Последнее исправление: r--r--r-- (всего исправлений: 1)
Ответ на: комментарий от r--r--r--

Матмодели обладают математически формальной предсказуемостью. «Нейронки» - нет. Насколько и кому это важно на практике - другой вопрос.

Практически разница только в сложности формальной верификации. То что ты называешь матмоделями оказываются достаточно простыми функциями, чтобы сделать точную априорную оценку для данных, а нейронки - нет. На практике ты и для серьёзных «матмоделей» столкнёшься с трудностями оценки. Погугли хотя бы на эту тему: априорная оценка погрешостей при матмоделировании. Это одна из самых сложных задач при матмоделировании.

anonymous_incognito ★★★★★
()
Последнее исправление: anonymous_incognito (всего исправлений: 2)
Ответ на: комментарий от rumgot

Всё так. Ключевое - можешь ли ты верифицировать результат нейронки? То есть, получить нужный результат для конкретных входных данных отличным от прогона на этой нейронке способом? Для "обычной" программы, реализующий некую матмодель - это возможно. Для достаточно больших нейронок - нет.

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

Специально против ошибок считывания в более-менее совремённых (реально уже больше 30 лет) стандартах предусмотрена контрольная сумма, например, в EAN-13/8. Считываются 12 цифр, а 13-я - контрольная. Просто готовая программа распознавания штрихкодов уже умеет по стандарту проверять её, смотри к примеру её расчёт для ean-13

Если не закладывать в нейронку вероятность ошибки чтения - т.е. не обучать целенаправленно нейронку игнорировать нечитаемые данные, то забитая палками до нужной степени нейронка будет радостно генерировать штрихкоды с корректной контрольной цифрой.

Нейронка - это преобразование входного мусора в выходной мусор как можно более похожим на обучающий датасет способом.

r--r--r--
()
Ответ на: комментарий от rumgot

При подаче нейронке на вход одних и тех же данных, результат один и тот же.

Ежели нейронка рекурсивна, то результат может зависеть от времени, например, сотворение всяческих фракталов.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

Не очень хорошо разбираюсь в теме нейронок: в случае рекурсивной нейронки нужно ли кроме входных данных для оценки подавать также и порцию результата с предыдущей итерации?

rumgot ★★★★★
()

Сейчас LLM рвут как Тузик грелку все предыдушие алгоритмы распознания текста. Если нейронка ошиблась, то классический алгоритм там тоже 100% ошибётся. Причём LLM можно даже слабенькую, которая запустится на CPU.

Впрочем, задолго до LLM применяли различные классификаторы, то есть обучали их на различных выборках чтобы модель вобрала в себя статистические закономерности как выглядят те или иные буквы. Этому уже несколько десятилетий.

«Понятным» алгоритмом можно распознавать разве что скриншоты с заранее известным шрифтом. Во всех остальных случаях ты так или иначе будешь подбирать коэффициенты алгоритма под максимизацию успешных распознаний на тестовом датасете (и да, тебе обязательно нужен тестовый датасет даже если ты подстраиваешь алгоритм вручную, благо не проблема нагенерить картинок с разными шрифтами, углами наклона текста и т. д.). А будут это веса нейронки или какой-нибудь функции попроще - не принципиально. Объяснить их иначе чем «я перебирал варианты и с этим оказалась наилучшая точность» ты не сможешь. Обеспечить 100% точность тоже (опять же, если это не скриншоты заведомо ограниченного набора шрифтов).

C'est la vie.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 6)
Ответ на: комментарий от r--r--r--

Даже у LLM есть параметр «температуры», который технически можно опустить до нуля и LLM начнёт выдавать детерменированный ответ на одни и те же входные данные. Либо инициализировать генератор рандома фиксированным сидом.

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

Линейная регрессия, деревья решений и куча других классификаторов всё ещё являются ML, но так же не используют random в работе после обучения.

Детерментированное же обучение алгоритма распознания образов физически невозможно, даже если ты будешь руками подбирать коэффициенты, твой тестовый набор (ты же не напишешь коэффициенты на наобум и не скажешь заказчику «мамой клянусь, точность распознания 100%!», ты должен прогнать алгоритм по тестам) будет весьма случайным подмножеством возможных входных данных, а весь тюнинг параметров будет плясать от этого. И если на вход попадётся что-то очень далёкое от обучающей выборки, то результат будет в какой-то степени сюрпризом.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 4)
Ответ на: комментарий от KivApple

Мне кажется, что ТСа интересует не детерминистичность в смысле независимости от рандома, а понимание, почему алгоритм выдаёт именно такой ответ для заданных входных данных. Линейная регрессия и дерево решений максимально прозрачны для понимания. Лес решений уже сложнее, а многослойная нейронная сеть вообще не поддаётся интерпретации. Для такого «чёрного ящика» нельзя однозначно определить, правилен ли алгоритм принятия решения — т.е. в нужный ли минимум мы попали, правильно ли были подобраны гиперпараметры и т.п. Можно только протестировать на наборе примеров и надеяться на лучшее при неизвестном вводе. Так что решение оказывается в некотором смысле случайным, даже при отсутствии рандома в алгоритме инференса.

annulen ★★★★★
()
Ответ на: комментарий от r--r--r--

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

Любой подбор коэффициентов и последующий прогон алгоритм по датасету с целью проверки точности (и если она недостаточная, то повторение подбора) является обучением.

KivApple ★★★★★
()
Ответ на: комментарий от r--r--r--

Если вместо машины будет какой-то объект виртуального мира (тот же массив картинок и каким буквам они соответствуют), то вместо того чтобы самому ставить серию экспериментов и старательно записывать результаты, а потом считать коэффициенты, можно автоматизировать процесс подбора. И вот уже вполне себе «машинное» обучение.

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

А так то, технически, и веса нейронки можно считать вручную столбиком в тетрадке. Просто это будет очень медленно.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от r--r--r--

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

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

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

KivApple ★★★★★
()
Ответ на: комментарий от r--r--r--

Некорректные штрихкоды отсекаются за счёт контрольной суммы вшитой в штрихкод. Сканер в магазине непрерывно пытается отсканировать штрихкод, большую часть времени он читает какую-то ерунду и у неё не сходится контрольная сумма или ожидаемое количество полосок. Когда сходится, то он пищит и выдаёт набор цифр в компьютер.

Теоретически можно создать «пограничный» штрихкод, который будет под разными углами читаться по-разному, но в магазинах наоборот на товары наносят максимально чёткие и однозначные штрихкоды, а из-за контрольной суммы вероятность «самозарождения» (например, в результате повреждения) неоднозначного штрихкода ничтожно мала (такой штрихкод придётся изобретать вручную).

В тексте вшитой контрольной суммы нет. Количество букв тоже заранее, как правило, неизвестно.

KivApple ★★★★★
()
Ответ на: комментарий от r--r--r--

Так и для нейронки имея нейронку и входной набор данных можно рассчитать ожидаемый результат. Надо просто прогнать нейронку на этих данных. Если это не LLM с высокой «температурой», то результат будет однозначен для конкретного входного набора.

Если ты имеешь ввиду предсказуемость результата при дрифте входных данных, то за пределами простых линейных моделей можно говорить лишь о вероятностях а-ля «отклонение входа на 1% с 95% шансом не изменит выход модели» (вероятности считаются эмпирически прогоном на датасете). Если у модели больше пары параметров и она нелинейна, то интуиция идёт нафиг и сюрпризы возможны. В какой момент классификатор начнёт классифицировать «А» как «Б» при плавном перетекании одного контура в другой тебе никто не скажет, кроме статистического эксперимента.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от r--r--r--

Если специально не добавлять в алгоритм распознания штрихкодов проверку контрольной суммы, то алгоритм будет выдавать мусор при подаче на вход мусора.

Сканер штрихкода в магазине не пищит непрерывно исключительно потому что в нём есть проверка контрольной суммы.

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

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от rumgot

в случае рекурсивной нейронки нужно ли кроме входных данных для оценки подавать также и порцию результата с предыдущей итерации?

Рекурсия может быть как явная (с выхода на вход), так и неявная (внутренняя), заданная архитектурой сети, например, рекурсивные варианты среди The Neural Network Zoo © (asimovinstitute.org).

quickquest ★★★★★
()
Ответ на: комментарий от rumgot

Ну там вероятно есть возможность сбросить в дефолтное состояние?

Не всегда, сбросить в дефолтное состояние можно:
– если есть память для хранения дефолтного состояния, или
– если выполняется свойство обратимости вычислений на каждом шаге: биекция © (wikipedia.org).

А примером состояния, которое не может появиться в результате эволюции, потому что не имеет предшественников, может быть конфигурация клеточного автомата с «садом Эдема» © (wikipedia.org).

quickquest ★★★★★
()

Не совсем по теме, но мне гораздо ближе метод изменения стиля письма для того, чтобы его было проще распознавать, если говорить про рукописный ввод.

При небольшом изменении символов известно что есть уже очень эффективные алгоритмы распознавания типа Moon type и Graffiti от Palm.

Конечно, тут проблемы с распространением таких норм (так как никто не будет переучиваться, аналогично ситуации с dvorak и colemak vs qwerty) и обработкой уже написанного или напечатанного текста.

A12345
()
Последнее исправление: A12345 (всего исправлений: 1)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария