2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2, 3, 4  След.
 
 Куда шагать в ML
Сообщение21.11.2025, 23:47 
Цель - открытие новых подходов, алгоритмов и т.п. Я просто хочу рассказать о своём подходе.

Конечно, в своё время так называемый бионический подход сделал первые шаги - были изобретены модели нейронов, они были объединены в сети. Потом появился бэкпроп - обратное распространение ошибки - это уже из теории управления, скорее, математический подход. Не забываем, что всё это время инженеры (датасайентисты, хотя их так в прошлом не называли) обкатывали теории и постоянно улучшали их, используя совершенно разные соображения, иногда от балды. Позже был SVM - тоже математический подход. Потом свёрточные сети Яна Лекуна - это уже мне кажется подход более близкий к тому, что исповедую я сейчас.

Нужно взять проблему (задачу), например, MNIST и подумать, как бы решил её ты. А потом подвести под это математику. Вот и весь подход.

Потом я понял, что можно делать наоборот - подводить математику под решение задач. Но как? Я просто обратил внимание, что есть очень популярные (часто используемые) методы анализа. Типа а почему бы эти методы не имплементировать в нейронных сетях? Эти численные эксперименты совершенно быстро случились, когда я стал работать с PyTorch (можно пытаться и в Tensorflow).

На текущий момент я имплементировал в нейронные сети то, что называется one-hot encoding, затем родственное этому - построение гистограммы (распределения), к сожалению, у этого метода нет такого чёткого и знакомого всем названия. Имплементировать - это значит обычные известные методы сделать дифференцируемыми так, чтобы бэкпроп смог распространять обратную ошибку сквозь такие слои нейронной сети. Эти алгоритмы на данный момент отточены, не буду говорить, что они идеальны, но они решают широкий круг задач, они обладают необычными свойствами.

Мне интересно, как можно имплементировать критерий Пирсона в нейронную сеть. Пока мозгов не хватило, потратил не более 5 минут размышлений, времени нет. Но это же тоже метод анализа.

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

 
 
 
 Re: Куда шагать в ML
Сообщение22.11.2025, 22:40 
Посмотрите внимательно на эти изображения цифр. Здесь собраны цифры, которые нейронка не смогла распознать правильно. Красная цифра - это неправильный ответ, зелёная цифра - правильный ответ.

Изображение

Здесь 48 цифр, но всего цифр порядка 130, они просто не влезли в изображение, остальные 9870 цифр нейронка распознала правильно. Точность распознавания 98,7% - это не самый лучший результат. Но как видите, никакой усилитель мозга не поможет добиться ошибки 0 цифр, потому что это невозможно.

Но есть часть цифр, которые можно распознать by thinking. Как это сделать? Нужно научить нейросеть писать эти цифры (ну или иными словами, генерировать). Человек, который писал такие цифры, может понять структуру данных, подумать и ответить. При написании цифр человек думает о начале цифры, о середине цифры и о конце цифры в смысле кривой линии. Он думает о данных по частям, а не целиком сразу.

 
 
 
 Re: Куда шагать в ML
Сообщение23.11.2025, 05:39 
Чуть-чуть разовью идею изложенную выше про цифры MNIST. Я говорил, что нужно научить другую нейросеть писать цифры. Именно писать, а не генерировать любым другим способом типа диффузионного. Нужно полностью повторить появление цифр в той форме, как это делается в реальности человеком шариковой ручкой. Допустим у нас появился такой генератор, мы обучили его этому. Обозначим эту нейросеть операцией $Y = F_1(x)$, где $Y$ - это конечное изображение, а $x$ - это цифра, которую требовалось написать. Если углубиться во внутреннюю структуру такой нейросети, то мы увидим что-то вроде рекурсивной функции в основе которой лежит базовая функция "сделать заковыку". Функция написания цифры в целом и её базовая функция сложны, поэтому я лишь примерно опишу, что это за базовая функция: на вход ей приходит текущее изображение, текущие координаты и вектор скорости шариковой ручки, нужно предсказать изменение динамики в следующем шаге. Я опускаю всякие нюансы типа качества бумаги (белая, жёлтая, замасленная), свойств шариковой ручки (мажет, царапает, "не пишет"). Для моего мысленного эксперимента важна условно кривая линия, вдоль которой движется ручка и появляется цифра. Немаловажно также учесть ошибки написания цифры, ошибки должны распространиться обратно через эту рекурсивную функцию. А ещё, если цифра уже написана некорректно, то должна появиться дополнительная исправляющая заковыка. Эти помарки тоже надо научиться делать.
К чему я всё это говорю? Если такой нейросети показать кривые цифры с моего последнего изображения, то ей будет не хватать лишь правильного ответа, который мы подали бы ей на вход $x$. Давайте, напишем и такую нейросеть, которая распознавала бы цифры и делала поправки, если эти цифры немного искажённые. Заметьте, мы говорим по сути о трёх нейросетях одновременно:
$F_1$ - пишет (и корректирует) цифры
$F_2$ - распознаёт цифры
$F \sim F_1 + F_2$ - распознаёт и корректирует цифры

Так вот, заключение: выше описана схема, которая поясняет, почему человек способен распознавать цифры вникая в суть, а обычная нейросеть $F_2$ не может. Для более глубокого распознавания цифры не хватает внешнего контура анализа, который включает навык написания и исправления цифры.

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

 
 
 
 Re: Куда шагать в ML
Сообщение24.11.2025, 05:32 
Mihaylo в сообщении #1710327 писал(а):
Точность распознавания 98,7% - это не самый лучший результат.

Это для какой архитектуры?

-- Пн ноя 24, 2025 06:35:28 --

Mihaylo в сообщении #1710355 писал(а):
Если углубиться во внутреннюю структуру такой нейросети, то мы увидим что-то вроде рекурсивной функции в основе которой лежит базовая функция "сделать заковыку".


Тут нужна рекуррентная сеть.

-- Пн ноя 24, 2025 06:39:59 --

Mihaylo в сообщении #1710355 писал(а):
Функция написания цифры в целом и её базовая функция сложны, поэтому я лишь примерно опишу, что это за базовая функция: на вход ей приходит текущее изображение, текущие координаты и вектор скорости шариковой ручки, нужно предсказать изменение динамики в следующем шаге.


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

-- Пн ноя 24, 2025 06:45:13 --

Mihaylo в сообщении #1710355 писал(а):
рекурсивную функцию

Я заметил, что математики не правильно используют этот термин. Рекурсивность - это когда функция вызывает сама себя. Рекуррентность - это итерационный вызов в цикле.

-- Пн ноя 24, 2025 06:48:31 --

Mihaylo в сообщении #1710355 писал(а):
чтобы лучше работать с датасетом, есть смысл добавить какое-то понимание, как этот датасет появился. Нужно знать природу данных.


Это верно, нужны датасеты с параметром t (время), по сути мини-видео, на которых цифры рисуются. А если говорить о образах, то за ними нужно наблюдать в динамике, как Олень движется, тогда его можно отличить.

 
 
 
 Re: Куда шагать в ML
Сообщение24.11.2025, 11:35 
Аватара пользователя
Mihaylo в сообщении #1710355 писал(а):
Заключение более общего характера: чтобы лучше работать с датасетом, есть смысл добавить какое-то понимание, как этот датасет появился. Нужно знать природу данных. Пример с цифрами MNIST раскрывает примерный подход.
Я так понимаю эту фразу: машина должна соображать, что, например, какой-нибудь князь Милославский не мог родиться в 7564 году, поэтому семёрку нужно заменить на 1. А кто в каком порядке чертит цифры — это пройденный этап, из него уже извлекли почти всё, что можно.

 
 
 
 Re: Куда шагать в ML
Сообщение24.11.2025, 13:19 
tac в сообщении #1710435 писал(а):
Рекурсивность - это когда функция вызывает сама себя.
Не обязательно непосредственно. Так что это вы неправильно понимаете этот термин, а математики с теорией вычислимости - правильно.

 
 
 
 Re: Куда шагать в ML
Сообщение24.11.2025, 15:37 
realeugene в сообщении #1710452 писал(а):
а математики с теорией вычислимости - правильно

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

-- Пн ноя 24, 2025 16:43:28 --

realeugene в сообщении #1710452 писал(а):
Не обязательно непосредственно.

Это ничего не меняет, т.к. в рекуррентности нет рекурсии.

 
 
 
 Re: Куда шагать в ML
Сообщение24.11.2025, 18:00 
tac в сообщении #1710435 писал(а):
Это для какой архитектуры?

Обычные CNN (свёрточные). В научных работах обычно вместо точности 98,7% указывают обратную величину - ошибка 1,3%. На 10000 примерах 130 ошибок.
Здесь есть сводные данные по различным моделям:
https://ru.wikipedia.org/wiki/MNIST_(база_данных)

tac в сообщении #1710435 писал(а):
Тут нужна рекуррентная сеть.

Да, но я себе такую задачу не ставлю. Так как у меня нет соответствующего датасета.

tac в сообщении #1710435 писал(а):
Я заметил, что математики не правильно используют этот термин. Рекурсивность - это когда функция вызывает сама себя. Рекуррентность - это итерационный вызов в цикле.

Так... Рекуррентность (рекуррентная формула) реализуется с помощью цикла (итерации), либо с помощью рекурсии. Так что разделите понятие итеративности и рекуррентности. В английском языке применяется recursive formula, у нас рекуррентная формула. Так что тут чёрт ногу сломит.

-- 24.11.2025, 18:09 --

worm2 в сообщении #1710446 писал(а):
Я так понимаю эту фразу: машина должна соображать, что, например, какой-нибудь князь Милославский не мог родиться в 7564 году, поэтому семёрку нужно заменить на 1. А кто в каком порядке чертит цифры — это пройденный этап, из него уже извлекли почти всё, что можно.

Допустим у нас есть датасет, где написано "князь Милославский родился в 7564 году". Откуда этот датасет взялся? Ну да, выдрано из энциклопедий, справочников, исторической литературы, летописей, интервью и т.п. Мы можем научить выдирать подобную информацию другую нейросеть и наказывать её за ошибки. Тогда такая нейросеть будет знать, что а-я-яй, какой там 7564-й год! Да, нам не нужна генерация текстов, мы говорили о том, что нейросеть должна как-то отреагировать на этот текст, а не генерировать. Но нейросеть, которая знает особенности генерации правильных фактов, способна определять ошибки. Она полезна. И в чат-ботах это всё есть: и чтение, и генерация. Правда это не всегда помогает.)

В обработке естественного языка практикуется метод контрастивного обучения без учителя. Это когда берётся предложение и несколько слов заменяются на случайные (можно цифры в датах менять). Если таких замен несколько, то вероятность практически 100%, что предложение станет искажённым, бессмысленным. В этом случае можно взять много различных фактов и из них нагенерировать сколько угодно ложных фактов, и на этом учить нейросеть отличать ложные факты от действительных.

-- 24.11.2025, 18:26 --

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

 
 
 
 Re: Куда шагать в ML
Сообщение24.11.2025, 18:03 
Ок

 
 
 
 Re: Куда шагать в ML
Сообщение24.11.2025, 21:41 
Вообще концепция contrastive learning - это демонстрация того факта, что реальные данные обладают особыми свойствами, я их называю феноменальными. Если в них изменить случайным образом 2-3 признака, то объект перестаёт быть естественным. А другими словами, феноменальные данные не являются универсальными, они распространены в довольно узком пространстве признаков.

mihaild в сообщении #1709213 писал(а):
Был какой-то странный товарищ, который 20 лет назад ходил и записывал все числа, которые ему попадались на глаза. И тем самым получил какое-то приближение к распределению чисел, встречающихся на практике.
Распределения, которые встречаются на практике, чем-то особенны. Но никакого описания, чем конкретно, насколько я знаю, не существует.


Нет, есть самое лучшее описание - это гладкость аппроксимирующей функции. Модели успешных нейросетей и другие модели - вот лучшее описание.

 
 
 
 Re: Куда шагать в ML
Сообщение24.11.2025, 21:47 
Аватара пользователя
Mihaylo в сообщении #1710522 писал(а):
Нет, есть самое лучшее описание - это гладкость аппроксимирующей функции.
Это не свойство датасета. Если выборка конечна, то таргет всегда можно задать вообще как полином от признаков.
Mihaylo в сообщении #1710522 писал(а):
Модель успешных нейросетей
В нейросетях, кстати, часто используется ReLU, которая даже не дифференцируема.

 
 
 
 Re: Куда шагать в ML
Сообщение24.11.2025, 21:53 
mihaild в сообщении #1710524 писал(а):
Это не свойство датасета. Если выборка конечна, то таргет всегда можно задать вообще как полином от признаков.

Это свойство нейросети, а не датасета.

mihaild в сообщении #1710524 писал(а):
В нейросетях, кстати, часто используется ReLU, которая даже не дифференцируема.

Недифференцируема в точке (значит очень редко), разрыв невысокого рода.

 
 
 
 Re: Куда шагать в ML
Сообщение24.11.2025, 22:22 
Аватара пользователя
Mihaylo в сообщении #1710525 писал(а):
Это свойство нейросети, а не датасета.
Я говорил, что есть какое-то интересное свойство у встречающихся на практике датасетов, проявляющееся, в том числе, в том, что нейронки на них хорошо работают. И не очень понимаю - Вы предлагаете какой-то ответ на этот вопрос, или просто формулируете какое-то утверждение (какое?)?

 
 
 
 Re: Куда шагать в ML
Сообщение25.11.2025, 07:37 
Mihaylo в сообщении #1710487 писал(а):
Обычные CNN (свёрточные). В научных работах обычно вместо точности 98,7% указывают обратную величину - ошибка 1,3%. На 10000 примерах 130 ошибок.
Здесь есть сводные данные по различным моделям: https://ru.wikipedia.org/wiki/MNIST_( база_данных)


Ерунда там какая та, ну впрочем что от википедии ожидать. А вот реальный пруф Реализация на гитхабе дает в среднем 99,4%. (перепроверял). Причем именно за счет двух (а не одного) сверточных слоев и оптимизатора Adam.

-- Вт ноя 25, 2025 08:51:05 --

Mihaylo в сообщении #1710487 писал(а):
Рекуррентность (рекуррентная формула) реализуется с помощью цикла (итерации), либо с помощью рекурсии. Так что разделите понятие итеративности и рекуррентности. В английском языке применяется recursive formula, у нас рекуррентная формула. Так что тут чёрт ногу сломит.


Реализация рекуррентности с помощью рекурсии это забавно, но не нужно. Рад, что вы признаете путаницу, но она есть только в математике. Дело тут вот в чем. После итерации фиксируется состояние промежуточных расчетов. Если их удобно зафиксировать в виде простых последовательных структур обходятся рекуррентностью. И в вашем случае это именно это. Меняют веса на каждом шаге итерации. Совсем другое дело когда алгоритм проходит по дереву и использует поддерево, для идентичной операции - тогда говорим о рекурсии. Судя по всему, математики не различают эти ньюансы, поэтому у них эти слова синонимичны, а программистов это вводит в ступор.

 
 
 
 Re: Куда шагать в ML
Сообщение25.11.2025, 11:14 
Mihaylo в сообщении #1710487 писал(а):
Ну да, выдрано из энциклопедий, справочников, исторической литературы, летописей, интервью и т.п. Мы можем научить выдирать подобную информацию другую нейросеть и наказывать её за ошибки. Тогда такая нейросеть будет знать, что а-я-яй, какой там 7564-й год!
А сейчас принято получать от сеток несколько лучших гипотез с их вероятностями чтобы скормить их более высокому уровню, или такое делают только между внутренними слоями одной сетки?

 
 
 [ Сообщений: 48 ]  На страницу 1, 2, 3, 4  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group