Дифференцируемое всё: от чёрно-белой картины мира к рябенькой

Feb 04, 2019 15:28

Тренд цифровизации означал прежде всего переход к цифровым вычислительным машинам с их восхитительно неаналоговыми, дискретными вычислениями. Нули и единицы, никаких там тебе вероятностей нулёвости и единичности. Целые как настоящие целые, плавающие вполне себе тоже целые, только обрабатываются по-другому. Computer science -- это дискретная математика.

Нынешний тренд заключается в обратном переходе: от дискретных "да" и "нет", от базирующихся на них целых, к плавающим переменным и непрерывным функциям. Название это получило как differentiable everything. Ну ладно, differentiable, а уж everything это я прямо сейчас придумал.

Дифференцируемое программирование -- появилось как ребрендинг для deep learning, когда стало понятно, что речь идёт совсем не только о нейронных сетках с регулярной структурой, а каких-то сложных вычислительных структурах, у которых просто есть свойство дифференцируемости (и там в этих структурах нейронных сеток может быть несколько разных, а то и не нейронных сеток вообще): https://www.edge.org/response-detail/26794, https://www.edge.org/response-detail/26794. Вот тут чуть более развёрнуто https://arxiv.org/abs/1803.10228: Differentiable programming is of joint interest to the machine learning and programming language communities. As deep learning models becomes more and more sophisticated, researchers have noticed that building blocks into a large neural network model is similar to using functions, and that some powerful neural network patterns are analogous to higher-order functions in functional programming [Fong et al. 2017; Olah 2015]. This is also thanks to the development of modern deep learning frameworks which make defning neural networks “very much like a regular program” [Abadi et al. 2017; LeCun 2018]. Some recent research demonstrates this direct mapping between these two areas by implementing differentiable analogues of traditional data structures [Cortes et al. 2015], and with differentiable programming, neural networks could do more than expected [Graves et al. 2014]. In the functional programming community, a similar effort is being undertaken. Siskind and Pearlmutter implemented forward-mode AD as an operator [Siskind and Pearlmutter 2008] and reverse-mode AD as lambda [Pearlmutter and Siskind 2008], all within a functional framework. After this, they augmented a high-level language with frst-class AD using operator overloading [Siskind and Pearlmutter 2016] and implemented a differentiable functional programming library called DiffSharp [Baydin et al. 2016]. A Haskell implementation of forward-mode AD was proposed by Elliott [2009]. И дальше знаменитый твит от Andrey Karpathy, что в Software 2.0 писать программы будут не люди: "Gradient descent can write code better than you. I’m sorry." -- https://medium.com/@karpathy/software-2-0-a64152b37c35

Дальше -- больше. Самое интересное -- это дифференцируемая архитектура, continuous relaxation of the architecture representation, "связанное с непрерывностью смягчение представления архитектуры", что даёт возможность использовать другие алгоритмы (например, градиентный спуск для поиска оптимума -- оптимума в архитектуре!). Например DARTS: differentiable architecture search -- https://arxiv.org/abs/1806.09055, FBnet: Hardware-Aware Efficient ConvNet Design via Differentiable Neural Architecture Search -- https://arxiv.org/abs/1812.03443, и множество других только для архитектуры нейросетей. Но это ж общая штука, это и не для архитектуры нейросетей может быть использовано. Архитектура, понимаемая как дискретные инженерные решения, подвергается continuous relaxation of the architecture representation, allowing efficient search of the architecture using gradient descent. А потом? А потом опять дискретизация: на выходе вполне дискретные решения -- текст (речь, или даже программный код), структура нейронной сети, растеризованное изображение, что угодно. Дифференцированные представления дают огромный потенциал для порождения/generative methods.

Вот это "связанное с непрерывностью смягчение представления", уход от грубой квантованности в мозгах (не в жизни! в жизни как раз на макроуровне всё непрерывно!), сегодня вообще ведущий тренд. Переход от "истины" и "лжи", наличия или отсутствия какого-то факта к байесовским фнукциям правдоподобия -- это ровно такой переход (в том числе от этого хода ожидают помощи в борьбе с кризисом воспроизводимости, и вообще оздоровления науки -- https://habr.com/en/post/430190/. Наука оказалась не про "цифровые" чёрно-белые, нуль-единичные дискретные утверждения, а про вероятностные, непрерывные по своей природе (книга E.T.Jaynes "Probability theory: the logic of science", http://b-ok.org/book/539703/d8b66c. ... if degrees of plausibility are represented by real numbers, then there is a uniquely determined set of quantitative rules for conducting inference. That is, any other rules whose results conflict with them will necessarily violate an elementary and nearly inescapable desideratum of rationality or consistency.). Логика науки оказалась не булева (дискретная, "цифровая"), а численная (хотя и моделируемая цифрово по большей части, но думать о ней можно как об аналоговой, почему бы и нет. И это неважно, что там идёт работа с вероятностью -- главное, что булевская логика там оказалась просто частным случаем, хотя и важным).

Максим Дорофеев подсказал, что даже деминговский переход от "попадания в допуск" (да-нет, дискретная математика) к дифференцируемому отклонению и работе с этим отклонением -- это тот же переход. И голдратовский переход от "продолбали заказ-пока не продолбали" к оценке по долларадням задержки -- то же самое, переход к непрерывным, дифференцируемым представлениям. И после этого возможно использовать алгоритмы минимизации всех этих показателей в операционном менеджменте. Можно придраться к слову "алгоритмы", но меня учили ещё в те далёкие времена, когда слово "алгоритм" относилось отнюдь не только к компьютерным программам, а вычисления/исполнение алгоритмов (то есть необязательно "вычисление", просто execution -- алгоритм это ж обобщённый план, "выполнение плана с обусловленностями") предполагались отнюдь не только в компьютерах. Так что пусть будут "алгоритмы". А сам Максим Дорофеев предложил от "пустой инбокс-непустой инбокс" (булева переменная) перейти к оценке полноты инбокса по письмодням (и считает эти письмодни с точностью до тысячных -- плавающая переменная) -- https://youtu.be/Lq2fYlYeGEE.

Если чуток обобщить, и сказать, что этот переход от "чёрное-белое" к каким-то непрерывным показателям может быть ещё и векторным (от дискретных букв, например, переходим к векторам букв, векторам предложений и даже векторам текстов -- стандартный ход в современном языковом моделировании, где дискретное представление лингвистики вдруг сменилось непрерывным -- см., например, все работы из "10 волнующих идей обработки естественного языка в 2018", http://ruder.io/10-exciting-ideas-of-2018-in-nlp/), то получим state-of-the-art сегодняшней цифровизации.

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

UPDATE: обсуждение в FreeFeed -- https://freefeed.net/ailev/5814fe24-551a-406a-a574-d87660160b62, обсуждение в фейсбук -- https://www.facebook.com/ailevenchuk/posts/10214757726550821
Previous post Next post
Up