Нейронные сети с векторными потоками
Dec. 14th, 2019 01:21 amИдея эта, как и идеи, про которые я писал в предыдущем постинге, тоже простая, как первый трактор. Все "нейроморфные" вычисления устроены так, что чередуются, что-то, напоминающее линейное преобразование (где берётся нечто вроде "суммы с коэффициентами"), и что-то, напоминающее нелинейное преобразование.
Вот так они и идут: линейное - нелинейное - линейное - нелинейное - линейное - нелинейное - ...
Это означает, что необязательно делать "нейроморфные" вычисления с потоками чисел. Можно делать их с какими угодно потоками, лишь бы можно было брать "нечто вроде суммы этих потоков с коэффициентами". Могут быть потоки векторов и тензоров, в том числе, очень разреженных и бесконечномерных, могут быть потоки функций и распределений. Не удивительно, что если рассматривать такое, то выразительная мощность возрастает с нездешней силой, и вопрос в том, как эту вновь обретённую выразительную мощность оседлать.
Вот, по моим представлениям, люди должны были бы обнаружить это обстоятельство где-то во второй половине 1980-ых годов. (И я сам это должен был тогда сделать, и я знаю ещё людей, для которых было бы естественно сообразить это в 1980-е.)
Вместо этого, похоже, наша работа 2015-го года ("dataflow matrix machines"), это и есть первая работа такого рода (по моему опыту, если работа является переоткрытием (или частичным переоткрытием), то процесс реферирования/рецензирования быстро обнаруживает это обстоятельство; в данном случае, мы получили десятки рецензий на наши тексты, и никто не сказал, что это или что-то похожее, возможно, сделано там-то и там-то).
Вот, в соответствии с предыдущим постингом, естественное состояние дел в этой науке состоит в том, что работа делается на десятки лет позже, чем ей было вы естественно возникнуть, и обычно остается не особо замеченной несколько дольше, чем 10 лет. Это - обычное, стандартное состояние дел, вот там это всё и находится, в состоянии "остается не особо замеченной несколько дольше, чем 10 лет" (пока что, ещё не прошло 10-ти лет, может быть, если повезёт, можно сократить этот период).
Эта штука крайне интересна, как платформа для машинного обучения, и как платформа для программирования. С точки зрения "быстрого громкого успеха", группе, которая захотела бы этим пользоваться, наверное, стоит сосредоточиться на машинном обучении с помощью этих штук.
Но, в некотором смысле, смотреть на это, как на изящный программистский формализм, родственный некоторым известным вполне замечательным программистским парадигмам, но, всё же, иной, - может быть, на этом интереснее сосредоточиться, чем на машинном обучении (особенно, если заниматься этим совсем "малыми силами").
Я допишу кое-какие подробности в комментариях...
Вот так они и идут: линейное - нелинейное - линейное - нелинейное - линейное - нелинейное - ...
Это означает, что необязательно делать "нейроморфные" вычисления с потоками чисел. Можно делать их с какими угодно потоками, лишь бы можно было брать "нечто вроде суммы этих потоков с коэффициентами". Могут быть потоки векторов и тензоров, в том числе, очень разреженных и бесконечномерных, могут быть потоки функций и распределений. Не удивительно, что если рассматривать такое, то выразительная мощность возрастает с нездешней силой, и вопрос в том, как эту вновь обретённую выразительную мощность оседлать.
Вот, по моим представлениям, люди должны были бы обнаружить это обстоятельство где-то во второй половине 1980-ых годов. (И я сам это должен был тогда сделать, и я знаю ещё людей, для которых было бы естественно сообразить это в 1980-е.)
Вместо этого, похоже, наша работа 2015-го года ("dataflow matrix machines"), это и есть первая работа такого рода (по моему опыту, если работа является переоткрытием (или частичным переоткрытием), то процесс реферирования/рецензирования быстро обнаруживает это обстоятельство; в данном случае, мы получили десятки рецензий на наши тексты, и никто не сказал, что это или что-то похожее, возможно, сделано там-то и там-то).
Вот, в соответствии с предыдущим постингом, естественное состояние дел в этой науке состоит в том, что работа делается на десятки лет позже, чем ей было вы естественно возникнуть, и обычно остается не особо замеченной несколько дольше, чем 10 лет. Это - обычное, стандартное состояние дел, вот там это всё и находится, в состоянии "остается не особо замеченной несколько дольше, чем 10 лет" (пока что, ещё не прошло 10-ти лет, может быть, если повезёт, можно сократить этот период).
Эта штука крайне интересна, как платформа для машинного обучения, и как платформа для программирования. С точки зрения "быстрого громкого успеха", группе, которая захотела бы этим пользоваться, наверное, стоит сосредоточиться на машинном обучении с помощью этих штук.
Но, в некотором смысле, смотреть на это, как на изящный программистский формализм, родственный некоторым известным вполне замечательным программистским парадигмам, но, всё же, иной, - может быть, на этом интереснее сосредоточиться, чем на машинном обучении (особенно, если заниматься этим совсем "малыми силами").
Я допишу кое-какие подробности в комментариях...
no subject
Date: 2019-12-14 07:06 am (UTC)https://www.cs.brandeis.edu/~bukatin/dmm-white-paper-2019.pdf
Они сводятся к тому что: 1) на этих штуках можно программировать (а на обычных нейронных сетях реально нельзя программировать), но сложность задачи их синтеза должна быть примерно, как сложность синтеза нейронных сетей (то есть, заметно проще, чем общая задача синтеза программ). Поэтому, можно надеятся получить яркий прогресс в деле синтеза программ.
2) эти штуки легко меняют сами себя (в то время, как обычные нейронные сети меняют сами себя с большим трудом). Поэтому можно тренировать такую сеть, которая умеет менять саму себя, чтобы она меняла саму себя лучше. Это очень перспективно для популярного сейчас направления по автоматическому улучшению методов тренировки нейронных сетей.
Но, всё же, чтобы продвигаться прямо в этих направлениях, нужно чуть больше народу (или какая-то яркая идея, как продвинуться совсем малой кровью).
Поэтому, я чуть-чуть исследую более скромные проекты в этом направлении:
Вот это было сделано в самом начале весны:
https://github.com/anhinga/synapses/blob/master/regularization.md
а это чуть-чуть начато в начале осени:
https://github.com/anhinga/population-of-directions
no subject
Date: 2019-12-14 07:28 am (UTC)С другой стороны, есть родство между этим формализмом, и рядом известных систем и языков программирования. Я их потихоньку перечислю в "комментариях к этому комментарию".
Но есть и совсем непохожие особенности. У этих штук есть совсем непохожие ни на что методы меняться и менять самих себя в процессе исполнения, если это желательно.
Эти методы вовсю используют то обстоятельство, что эти сети умеют менять сами себя, и что они умеют менять сами себя, вообще говоря, непрерывным образом (если это желательно).
То есть, во-первых, можно попросить работающую сеть, чтобы она поменяла себя некоторым образом (у нас есть работающие примеры такого рода). То есть, можно "редактировать не останавливая выполнения" в очень сильном смысле этого слова.
Дальше можно взять две программы, и провести между ними непрерывную траекторию в пространстве программ, и рассмотреть "непрерывную деформацию вдоль этой траектории" - это может быть ужасно интересно (и эксперименты такого рода могут быть крайне интересны).
А теперь, я отвлекусь от этих сложностей, и попробую в "комментариях к этому комментарию" навести мосты с существующими платформами (в попытке уменьшить сложность и необычность этого дела, и увеличить доступность).
no subject
Date: 2019-12-14 08:06 am (UTC)С одной стороны, стандартный цифровой аудио-синтез, как его придумали 60 лет назад в Bell Labs, и как им все теперь пользуются, через композицию преобразователей потоков чисел - это важный подкласс этих машин, есть огромный опыт по синтезу звуков и музыки в этом стиле. Вот, на первых двух страничках этого 4-страничного текста я записал, как это хорошо бы начать двигать, для начала, в сторону синтеза анимаций и виртуальной реальности с помощью этих штук, и "далее везде" (в последнее время возникла прикладная наука про то, как делать алгоритмы над immutable структурами данных - "functional data structures" - вот это очень актуально):
https://github.com/anhinga/2019-design-notes/blob/master/research-notes/research-notes-dec-2019.pdf
Но, дальше, на что это ещё похоже, что мы знаем?
- Dataflow programming, with data flowing across the links connecting processing nodes in a "dataflow graph" (как раз наши потоки и текут по ребрам этого графа, и обрабатываются в его узлах);
- "Functional reactive programming" (this is more modern, I especially like the functional variety like Yampa in Haskell, which defines "signals" as functions from "time" and works with them (это, как раз наши потоки и есть; but then there is this whole huge field of related things: https://github.com/ivanperez-keera/Yampa and https://github.com/gelisam/frp-zoo );
- Вот, мы недавно глядели на concatenative languages вроде языка Factor здесь в комментариях: https://juan-gandhi.dreamwidth.org/4642575.html ; вот если композиция была бы не чисто линейная, а можно было бы разветвлять, чтобы получать какие-нибудь интересные directed acyclic graphs, ну хотя бы в стиле вот этих обобщений обычных threading macros, которые позволяют кое-какое ветвление: https://github.com/rplevy/swiss-arrows ; это было бы тоже похоже (может, Factor это уже умеет, он выглядит очень мощным для языков этого класса, а я его совсем не знаю, вот распечатал себе читать эту статью: https://factorcode.org/littledan/dls.pdf )
Мне кажется, ценителям всего этого "функционального языкового разнообразия", эта тема должна быть крайне интересна.
Одно из изменений моего личного статуса этой осенью, что я познакомлся гораздо ближе с здешними тусовками вокруг таких языков, как Haskell, Elm, а также Elixir (современный функциональный язык для Erlang VM, который совершенно замечательный и, вообще, может быть, то, что надо (он теперь обошёл Erlang по популярности)).
no subject
Date: 2019-12-14 01:31 pm (UTC)no subject
Date: 2019-12-14 02:11 pm (UTC)no subject
Date: 2019-12-14 02:19 pm (UTC)no subject
Date: 2019-12-14 03:24 pm (UTC)