Как ни странно, большинство программистов понятия не имеет о дискретной свёртке. Несмотря на повальное увлечение нейронными сетями и глубоким обучением, где 2D свёртка - основополагающая операция.
Я бы хотел найти две вещи (и чтобы сослаться, и чтобы выучить получше), но, пока что, не знаю, где бы такое найти:
1) Наверняка кто-то брал уже монохромные картинки, умножал их, как матрицы, и обнаруживал, что результат визуально интересен. Я бы очень хотел каких-нибудь таких предшественников найти, и ссылаться на них в своих "трудах" на эту тему.
2) Наверняка, где-нибудь написано про всякую геометрическую интуицию - как то, как устроены матрицы-множители, оказывается видно в том, как устроено произведение (так, чтобы "на глаз" увидеть, ну и вообще структуры понять). Вот, я ничего такого не помню, ни в книжках по линейной алгебре, ни в книжках по компьютерной графике.
Наверняка, кто-то это должен был изучать, но где оно написано?
Не скажу, чтобы помнил, какие это книжки, но я их буйно изучал когда-то. Когда мы в нашем КБ машинный лернинг применяли для всякого там бурения и для определения, скважина нефтяная или фтяная.
Дело не столько в том, какие книжки, сколько про что.
Я понимаю, что про signal processing, и всякие фильтры, и вот такие "мини-конволюции", как в этом примере, когда свертка по маленькой окрестности, про это написано в разных местах.
А про "свертку по полной размерности", как когда умножаешь матрицы, или когда уменьшаешь ранг тензора на 2, определения, конечно, всюду есть, и формулы, как считать, и вообще. Но мне бы геометрическую интуицию про то, как выглядит результат, и какие у этого результата свойства, - неужели это там тоже было?
Нет-нет, это две отдельные вещи. Одна - линейная алгебра, а другая - свертки, которые при обработке изображений еще в 70-е разъясняли в книжках. Как соляризацию делать (можно сказать, дифференцированием).
Ну да, то есть, "локальные свертки", суммирующие в окрестности точки, а не как при умножении матриц или свёртке тензоров, когда суммируешь по всей размерности, сколь бы она не была длинной...
Ну это тот ещё пример; там второй массив совсем маленькой размерности... Мне бы какие-нибудь содержательные примеры, где с обоих сторон тензоры большие, и получается интересно.)
Вот что я пробовал, это умножать матрицу на вектор из матриц (т.е. это свертка по одному направлению между тензором ранга 2 и тензором ранга 3, получается опять вектор из матриц, то есть, тензор ранга 3).
Но я пробовал это только в небольшом разрешении и в динамике, в контексте рекуррентной системы, наслаждался возникающими emergent properties:
Да, конечно, в convolutional neural nets используются слои таких "локальных свёрток"...
Но теперь уже новая эпоха вовсю наступает, где доминируют Transformers, в которых нет больше явного locality prior, а только умножения матриц, из которых сделаны "слои внимания", соединённые простыми нейронными коннекторами. Собственно, эта моя деятельность по умножению картинок, как матриц, она как раз мотивирована желанием создать небольшие гибкие машины, использующие, среди прочего, архитектурные компоненты, из которых сделаны Transformers.
Я довольно много с этим вожусь в последние месяцы:
Угу. Если взять A*B, и заменить на transpose(B)*transpose(A), то произведение транспонируется.
Теперь, если взять A=transpose(B), то, заменяя transpose(B)*B на transpose(B)*transpose(transpose(B)), получаем опять transpose(B)*B, и, тем самым, transpose(B)*B инвариантно относительно транспонирования.
А я вот не помнил (у меня память дырявая, да и вообще я, в отличие от вас, ленивый), но в процессе этих экспериментов оно само неоднократно эмпирически переоткрылось, например клетки 43-44 здесь:
Но с матрицами это верно не только для квадратных матриц, но и для прямоугольных.
Собственно, для прямоугольных матриц KxM и MxN, если переставляешь порядок множителей, то становишься обязан транспонировать, иначе общая размерность в неправильном месте, и операция вообще не определена.
Настолько я даже не доверял этим добрым людям (а вдруг они умножение матриц определили через "обобщённую свёртку", как свёртка в этом примере, который показал vak, и что-нибудь сделают "на своё усмотрение"), что я даже тут в конце проверил, что оно ломается, если размерности не соответствуют (с облегчением убедился, что у них нормально сделано, вылетает с ошибкой):
I think I want to record the results of Apr.22-23 brainstorm, which was unusually fruitful:
1) About reconciling V-values and flat tensors. We have a full-scale well-developed schema, but what about a lightweight compromise? We can just say that "leaves are matrices", that's one possible option. (Would it be fruitful to consider sparse matrices in this context?)
2) Reproducing "perceptual 'illusions' in software is a fruitful topic.
2a) Still want to go from DeepDream effects to actual subjective perception. Conjecture: yes, this is what we "subjectively see" (and in "consensus reality" some "meta-performance and/or equilibrium characteristic" of the network is optimized, while in "alternative perception", perhaps something else is optimized, or an "effective network" is different enough).
[This still does not answer the riddle of what represents subjective perception, and how.]
no subject
(See https://github.com/anhinga/julia-notebooks/tree/main/grimoire-team/variations)
This this the continuation of the previous post (https://dmm.dreamwidth.org/41254.html) and https://dmm.dreamwidth.org/36512.html
no subject
https://dmm.dreamwidth.org/file/3066.png
https://dmm.dreamwidth.org/file/3308.png
no subject
no subject
no subject
no subject
no subject
Я бы хотел найти две вещи (и чтобы сослаться, и чтобы выучить получше), но, пока что, не знаю, где бы такое найти:
1) Наверняка кто-то брал уже монохромные картинки, умножал их, как матрицы, и обнаруживал, что результат визуально интересен. Я бы очень хотел каких-нибудь таких предшественников найти, и ссылаться на них в своих "трудах" на эту тему.
2) Наверняка, где-нибудь написано про всякую геометрическую интуицию - как то, как устроены матрицы-множители, оказывается видно в том, как устроено произведение (так, чтобы "на глаз" увидеть, ну и вообще структуры понять). Вот, я ничего такого не помню, ни в книжках по линейной алгебре, ни в книжках по компьютерной графике.
Наверняка, кто-то это должен был изучать, но где оно написано?
no subject
no subject
Я понимаю, что про signal processing, и всякие фильтры, и вот такие "мини-конволюции", как в этом примере, когда свертка по маленькой окрестности, про это написано в разных местах.
А про "свертку по полной размерности", как когда умножаешь матрицы, или когда уменьшаешь ранг тензора на 2, определения, конечно, всюду есть, и формулы, как считать, и вообще. Но мне бы геометрическую интуицию про то, как выглядит результат, и какие у этого результата свойства, - неужели это там тоже было?
no subject
no subject
no subject
(Edit: ah, ok, this is the actual reference: https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.convolve2d.html
Ну это тот ещё пример; там второй массив совсем маленькой размерности... Мне бы какие-нибудь содержательные примеры, где с обоих сторон тензоры большие, и получается интересно.)
Вот что я пробовал, это умножать матрицу на вектор из матриц (т.е. это свертка по одному направлению между тензором ранга 2 и тензором ранга 3, получается опять вектор из матриц, то есть, тензор ранга 3).
Но я пробовал это только в небольшом разрешении и в динамике, в контексте рекуррентной системы, наслаждался возникающими emergent properties:
https://youtu.be/CKVwsQEMNjY
https://youtu.be/_mZVVU8x3bs
no subject
Вот, нагуглил: https://thumbs.gfycat.com/AffectionateMemorableGreyhounddog-mobile.mp4
Там первые три слоя - двумерные свертки с порогом (maxpool), а четвёртый и пятый слои - простые умножения матриц.
no subject
Но теперь уже новая эпоха вовсю наступает, где доминируют Transformers, в которых нет больше явного locality prior, а только умножения матриц, из которых сделаны "слои внимания", соединённые простыми нейронными коннекторами. Собственно, эта моя деятельность по умножению картинок, как матриц, она как раз мотивирована желанием создать небольшие гибкие машины, использующие, среди прочего, архитектурные компоненты, из которых сделаны Transformers.
Я довольно много с этим вожусь в последние месяцы:
Section 11 of https://www.cs.brandeis.edu/~bukatin/dmm-collaborative-research-agenda.pdf
https://github.com/anhinga/2020-notes/tree/master/attention-based-models
https://github.com/anhinga/2020-notes/blob/master/attention-based-models/matrix-mult-machines.md
https://github.com/anhinga/julia-notebooks/blob/main/images-as-matrices/presentation/talk-proposal.md
https://anhinga-anhinga.livejournal.com/84392.html
no subject
no subject
Теперь, если взять A=transpose(B), то, заменяя transpose(B)*B на transpose(B)*transpose(transpose(B)), получаем опять transpose(B)*B, и, тем самым, transpose(B)*B инвариантно относительно транспонирования.
no subject
no subject
https://nbviewer.jupyter.org/github/anhinga/julia-notebooks/blob/main/grimoire-team/variations/variation-4.ipynb
Так что, пришлось вспомнить :-)
no subject
Собственно, для прямоугольных матриц KxM и MxN, если переставляешь порядок множителей, то становишься обязан транспонировать, иначе общая размерность в неправильном месте, и операция вообще не определена.
Настолько я даже не доверял этим добрым людям (а вдруг они умножение матриц определили через "обобщённую свёртку", как свёртка в этом примере, который показал vak, и что-нибудь сделают "на своё усмотрение"), что я даже тут в конце проверил, что оно ломается, если размерности не соответствуют (с облегчением убедился, что у них нормально сделано, вылетает с ошибкой):
https://nbviewer.jupyter.org/github/anhinga/julia-notebooks/blob/main/images-as-matrices/scale-invariance.ipynb
no subject
1) About reconciling V-values and flat tensors. We have a full-scale well-developed schema, but what about a lightweight compromise? We can just say that "leaves are matrices", that's one possible option. (Would it be fruitful to consider sparse matrices in this context?)
2) Reproducing "perceptual 'illusions' in software is a fruitful topic.
2a) Still want to go from DeepDream effects to actual subjective perception. Conjecture: yes, this is what we "subjectively see" (and in "consensus reality" some "meta-performance and/or equilibrium characteristic" of the network is optimized, while in "alternative perception", perhaps something else is optimized, or an "effective network" is different enough).
[This still does not answer the riddle of what represents subjective perception, and how.]
To be continued