Умножая монохромные картинки как матрицы
Feb. 2nd, 2021 01:58 amУмножение матриц - штука крайне интересная. Один из необычных способов смотреть на это дело - интерпретировать монохромные картинки как матрицы, и умножать их друг на друга матричным умножением. Я не видел, чтобы кто-то так делал, хотя было бы странно, если бы до сих пор никто такое не пробовал.
Получается весьма забавное абстрактное искусство, особенно если нормализовать строчки левой матрицы и столбцы правой матрицы, так чтобы элементы в них суммировались к единице. Например, получается такое

или такое

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

или такое

Пояснения в комментариях.
no subject
Date: 2021-02-02 10:13 pm (UTC)https://github.com/anhinga/2020-notes/tree/master/attention-based-models
а также уже чуть-чуть устаревшая секция 10 августовской версии https://www.cs.brandeis.edu/~bukatin/dmm-collaborative-research-agenda.pdf
и ряд заметок в этом блоге, но более важный вопрос, что со всем этим делать...
Вот, я думаю, что надо воспользоваться новым трендом делать "смешанные модели", который становится всё более популярным.
Сначала люди стали вставлять нейронные сети в качестве аппроксиматоров фунции в свои системы дифференциальных уравнений, в те места, про которые они были не особо уверены, как они в точности должны выглядеть, и это получалось очень здорово, в плане прикладных результатов.
Потом начался весь этот тренд перехода к "дифференциальному программированию", когда фрагменты моделей вставляются прямо в компьютерный код, и получающаяся программа и является моделью. Этот тренд популярен как в Джулии, так и в новой Питоновской machine learning framework, JAX, на которую полностью перешёл DeepMind в последнее время.
Это замечательные гибкие системы, они умеют считать градиенты по параметрам для функций, выраженных "почти любыми разумными программами" (реально, с некоторыми ограничениями, но не очень страшными).
Вот, я думаю, что правильный подход - не пытаться делать какую-то альтернативную "высокопринципиальную чистую систему", а просто придумывать новые "матричные" neural operators и модели, сделанные с их использованием, которые плодотворно было бы вставлять в дифференциальные программы.
***
(От "высокопринципиальных чистых вариантов" в этом смысле тоже есть кое-какой толк, но это - отдельный разговор; на эту тему у меня есть некоторая новая "ретро-заметка" про то, нельзя ли всё же это вставить в наш старинный PyTorch или ещё более старинный TensorFlow, и там объясняется, как это можно было бы сделать и зачем, и, в частности, там приходится говорить о пользе "высокопринципиальных чистых вариантов". Но, на самом деле, конечно, надо просто переползать на JAX (Python) или на Julia Flux, и не заморачиваться с PyTorch и всяким таким, ну разве что будет заказчик на это дело: если кому-то специально очень захочется, чтобы это было в чём-то таком старинном, как PyTorch или TensorFlow, и этот кто-то готов вложить в это дело ресурсы, то можно и заморочиться на эту тему.)
no subject
Date: 2021-02-03 06:35 am (UTC)https://towardsdatascience.com/a-quick-introduction-to-neural-arithmetic-logic-units-288da7e259d7
https://github.com/AndreasMadsen/stable-nalu
Если взять их реализацию за пример, то сделать любую свою функцию активации - очень просто.
А вообще интересно) Спасибо за наводку, надо будет почитать про JAX.
Интересно, можно ли сделать условную функцию активации? В последних работах гугла было что-то подобное.
no subject
Date: 2021-02-03 09:32 am (UTC)https://en.wikipedia.org/wiki/Activation_function
но в нём много не хватает; во-первых, нет многих популярных функций от двух аргументов, например, умножения (умножение на ноль как раз даёт неэффективный но действующий вариант условной активации)...
во-вторых, они все работают на скалярных потоках - можно их применять к элементам тензоров поэлементно, но бывает множество интересных преобразований тензоров (например, матриц), которые не сводятся к применению поэлементной активационной функции.
например, для создания вот этой анимации
https://youtu.be/fEWcg_A5UZc
я, в частности, использую вот такую функцию активации (она "immutable переставляет" индексы в матрице):
https://github.com/anhinga/fluid/blob/master/may_9_15_experiment/custom_wave_transform.pde
no subject
Date: 2021-02-03 09:37 am (UTC)no subject
Date: 2021-02-03 09:57 am (UTC)Но синтетическое :-)