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

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




 Типизация (натурализация) данных в ML
Внимание. Речь сейчас пойдёт не про типы данных Python/Numpy/Pandas/Pytorch и не про представления тензоров в CPU/GPU.

Речь о параллельном мире, в котором данные на синапсах и на выходах нейросетей также обладают типами (ML-типами). Как известно, нейросети работают исключительно с вещественными числами, даже если это всегда 0.0 или 1.0. Но про типы данных никто никогда не говорил.

Так вот, я - говорю.)

Давайте я сразу накидаю базу: данные делятся на интерпретируемые и эмбеддинги (всё, что в скрытых слоях). Интерпретируемые данные - это то, что на входе и выходе нейросети.

Классификация ML-типов как в реальном мире: простые типы и сложные типы. У интерпретируемых данных можно выделить типы boolean, integer, real и т.д. - как в реальном мире. У эмбеддингов тип данных определяется нейроном в процессе обучения нейросети и не является интерпретируемым. Но можно выделить основные сложные типы: struct (list), const-size array, var-size array, dynamic-size array, unordered set. Возможно, следует туда добавить словари dict (key-query), которые в трансформерах используются. И ещё вопрос, надо ли выделить batch-packed types - это когда данные упакованы в батчи, особенно важно для var-size array.

Это всё база. А теперь про тип данных - unspecified (аналог реального типа данных variant). Когда веса нейрона только инициализированы случайным образом, его типы данных на входе синапсов становится unspecified. В процессе обучения синапсы специализируются и в дальнейшем попытка подать на вход данные другого типа приведут к ухудшению процесса. Это и есть типизация, когда вы вынуждены соблюдать ML-типы (даже если вы их не можете интерпретировать).

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

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

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

-- добавлено через 25 минут --

Поскольку есть типы данных, значит есть сигнатуры слоёв:
1. Линейный слой Linear: list -> list
2. Свёрточный слой Conv: list -> list
3. Слои активации Sigmoid, Tanh, ReLU, MaxPooling, BatchNorm, Dropout: list -> list
4. Рекуррентные слои RNN, LSTM: dyn-size_array -> dyn-size_array
5. Позиционное кодирование PositionalEncoding: array -> unordered set + position
6. SoftBinning: unordered set -> array
7. TopkPooling: dyn-size_array -> dyn-size_array

array совместим с list, но в обратную сторону это не работает. Отсюда следует вывод об универсальности некоторых слоёв типа Linear, ReLU и т.д.

 Re: Типизация (натурализация) данных в ML
Mihaylo в сообщении #1724780 писал(а):
... данные на синапсах и на выходах нейросетей также обладают типами ...


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

Я смотрю, ты всё "грызёшь" темы "ИИ" (но читать мне лень, разумеется).

У тебя есть своё мнение, насколько в итоге дешевле и быстрее будет AGI, чем теперешние системы ИИ, и почему?

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

 Re: Типизация (натурализация) данных в ML
 !  Aleksei.Morozov.1973
На этом форуме принято обращаться к собеседнику на "вы" (или на "Вы", по желанию).

 Re: Типизация (натурализация) данных в ML
Mihaylo в сообщении #1724921 писал(а):
... не отравляйте тему ...


:-) wow... И, так понимаю, ответа на мой вопрос не будет?

 Re: Типизация (натурализация) данных в ML
Аватара пользователя
Mihaylo в сообщении #1724780 писал(а):
В процессе обучения синапсы специализируются и в дальнейшем попытка подать на вход данные другого типа приведут к ухудшению процесса
Во всех ваших примерах, "типы" - это просто следствие архитектуры. Нейронка - это композиция функций, зависящих от входа и весов, сами функции задаются при построении сети, и не меняются. И ваши "типы" - это именно характеристика функции.

 Re: Типизация (натурализация) данных в ML
mihaild
Ну да, заключение слова "типы" в кавычки - это правильно.

 Re: Типизация (натурализация) данных в ML
Пока что ML-типы - это полезно как факультативный ликбез для новичков, вкатывающихся в ML.

Ещё я вижу, что неплохо было бы обозначать сигнатуры классических алгоритмов и слоёв с помощью этих типов. Чуть попозже попробую. Естественно можно развивать систему ML-типов, ведь подвидами array являются всякие text, image, video, sequence и т.д.

Ещё направление (пока слишком прорывное для меня) - идентификация типов. Типы можно идентифицировать как у данных (распределение), так и у функции (способность работать с распределением).

 Re: Типизация (натурализация) данных в ML
Очередные мои мысли вслух.

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

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

Есть ещё softmax - трюк, который позволяет нам на выходе получить вероятности элементов класса. Все этот трюк видели сотни раз (достаточно популярное решение в ML), но ничего не поняли. Дело в том, что у софтмакса на входе неинтерпретируемые данные, а на выходе - понятные, поэтому этот слой очень подходит для рассмотрения в рамках сегодняшней пятничной темы. Софтмакс реализует идею нормировки вероятности (сумма чисел от 0 до 1 должна в сумме давать ровно 1), поэтому якобы работает. Софтмакс применяется также исключительно на выходе нейросети, мы это должны отметить и припомнить!

Как же всё-таки получить интерпретируемые данные в глубинах нейросети и зачем? Заметьте, я совершенно не интересуюсь темой объяснимого ИИ (explained AI), я считаю, что нейросеть должна хорошо работать, а как она там внутри себя рассуждает - это дело десятое. Ответ на поставленный вопрос кроется в следующем: я уверен, что мы знаем некоторые хорошие алгоритмы, которые работают в любых условиях, даже в случае каких-нибудь алиенских эмбеддингов. Это просто интересно.

Что это за чудо-алгоритмы?
Пока известен такой список:
1. Уравниватели, минимизаторы разницы (MSE, MAE, CrossEntropyLoss и прочее множество)
2. Softmax

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

Без весов и ближе к выходу. Интересно, почему ближе к выходу?..

Я придумал SoftBinning (бывший SoftOrdering) - необучаемый слой, который реализует функцию гистограммы. На практике этот слой неплохо работает где-нибудь в середине нейросети и выдаёт частоту попадания в корзину (бин). Фишка в том, что слой работает с данными типа list, array, unordered set. Это дополнительный признак универсальности и способности работать с alien-данными. На выходе тензор фиксированного размера - всё как завещал Сталин Розенблатт Уоррен Маккаллок и Уолтер Питтс.
Также в процессе исследования выплыл SOHE (Soft One-Hot Encoding), оказывается это кодирование тоже является универсальным алгоритмом, который можно пробовать сувать куда угодно.

Я учился немного в Skillfactory на курсе Machine Learning. Надо отметить, за те деньги, которые отдал, не бросают на произвол судьбы - полоскают по полной программе, задания сложные. В процессе обучения я для себя выявил основные аналитические функции. Вот, тебе дали данные - посчитай value_counts() в pandas, потом в SQL посчитай счётчики разные... Это же одно и то же! Данные были разные, а методы не меняются.

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

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

Идею из предыдущего поста выскажу тезисно:

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

2. Я отметил, что интерпретируемость выходных данных обеспечивается очень простыми необучаемыми универсальными функциями. Отметил также, что неплохо бы подобные функции обобщить, оценить, чтобы потом изобретать. В данном месте я выступаю за аналитический подход к развитию искусственного интеллекта в противопоставление к бионическому (биологическому) подходу. (Тут желательно Сергея Маркова процитировать, он лучше разбирается в названиях подходов.)

 Re: Типизация (натурализация) данных в ML
Сейчас речь пойдёт о ещё одном параграфе основ экспертизы данных в ML. Первый параграф можете почитать с начала темы - это основы про типы данных в ML.

Основы экспертизы данных в ML. Параграф №2. Связность признаков в объектах сложных типов.

Когда вы решаете учебную задачу ML, вам дают датасет и формулировку, откуда этот датасет взялся (иногда на kaggle, наоборот, могут скрывать информацию о происхождении датасета). Эти дополнительные сведения о датасете очень важны, вы должны проявить себя как эксперт в данных, а именно: адекватно использовать информацию о природе/происхождении данных.

Важными такими сведениями является информация о связности признаков в объектах датасета. Сами объекты по определению являются несвязными друг с другом, и их можно/нужно перемешивать (shuffle) в датасете. Каждый объект может содержать в себе один признак (простой ML-тип) или несколько признаков (сложный ML-тип - aka list, array, unordered set). Именно в случае данных сложных типов имеет смысл говорить о связности признаков (элементов).

Существует три уровня связности:
1. Полная связность (неотделимость)
2. Частичная (слабая) связность
3. Нулевая связность

Связность признаков - это на самом деле сложная тема, я сам пока теорию не подбил на этот счёт до конца. Поэтому буду импровизировать.

Два вида связности:
1. Связность значения - у признака нельзя/можно заменить значение (обнулить, очистить)
2. Связность порядка - признак нельзя/можно обменять местами с другим признаком

Можно ещё выделить частный случай 1А - связность существования - признак нельзя/можно удалить (путём замены всех его значений на одно значение для вырождения в константу).

Claude Sonnet 4.6 подготовил продолжение параграфа, я его немного поправил:

Сложный ML-тип объекта определяется его матрицей связности:
list = частичная/нулевая связность порядка + частичная/полная связность значения
array = полная связность порядка + частичная/полная связность значения
bag = нулевая связность порядка + полная связность существования. *Claude предложил bag вместо unordered set
seq = частичная/полная связность порядка + частичная связность существования (паддинг допустим). *Claude предложил seq вместо dyn-size_array

** Я предложил Claude заменить ML-типы на более специализированные. В итоге мы пришли к консенсусу, можно поправить параграф №1 про ML-типы:
flag, outcome (исход события) - bool
category, position (index), rank, count - int
prob, freq - вероятность, частота 0...1
prob-dist - распределение вероятностей дискретной величины - вектор чисел 0...1
value - число real, float, double - это я придумал

P.S. Заметьте, в ML все числа обычно нормированы в диапазоне 0...1 и нет никаких дискретных чисел, речь выше идёт о семантике данных и аналогии с типами данных в компьютерной науке.

-- добавлено через 46 минут --

Основы экспертизы данных в ML. Параграф №2А. Связность признаков в объектах сложных типов (примеры).

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

Итак:

1. Связность значения. Различные ошибки и погрешности, связанные с измерением значения, шумы, NAN-значения - приводят к ослаблению связности значения. Методы борьбы - фильтрация, очистка, замена значения. Я надеюсь это достаточно простые и понятные случаи.
1А. Связность существования. Метод борьбы - просто удалить признак.

2. Связность порядка. Связность порядка (позиции) снижается в том случае, когда измеренное значение может записываться не в ту ячейку или алгоритм записи (физика процесса) значения не имеет точной координации. Этот случай уже посложнее, надо разобрать его подробнее.

Пример 2А. Обработка натурального языка (NLP) - существительное и глагол может находиться в предложении почти где угодно, связность порядка слабая.
Пример 2Б. Компьютерное зрение (CV) - штрих рукописной цифры MNIST может сместиться из-за дрогнувшей руки, связность порядка слабая.
Пример 2В. Датчик температуры меряет строго в заданное время и сохраняет данные строго по порядку, связность порядка полная.
Пример 2Г. Сегодня состоялись шахматные матчи, записаны все ходы, партии состоялись практически параллельно, связность порядка незначительная (нулевая).

 [ Сообщений: 12 ] 


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