Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Гибридный нижний уровень интеллект-стека

Сегодня нижний уровень интеллект-стека -- это аппаратура ускорения коннекционистских вычислений. Там всё очень бодро, кратенький обзор я дал в https://ailev.livejournal.com/1441034.html -- уменьшают время обучения, уменьшают время вывода, меняют физику аппаратуры.

А на среднем уровне интеллект-стека решают вопрос компьютерной поддержки полного спектра формальности мышления, https://ailev.livejournal.com/1438749.html -- логика и вероятность с causal inference и probabilistic programming, логика и коннекционизм с neural-symbolic computation/integration, дифференцируемая логика с relaxation representation до differentiable programming.

И вот появляется густой поток работ, в которых решается очень похожая проблема поддержки полного спектра формальности мышления, но "снизу" -- чуть ли не на уровне innate priors для архитектуры обработки информации в рамках коннекционизма с обучаемостью, так и алгоритмической тьюринговской архитектуры вычислений. Универсальный вычислительный субстрат, который можно обучить и образы распознавать, и логически/алгоритмически проводить суждения. Образно-логическая, коннекционистско-алгоритмическая среда. Гибридный коннекционистско-алгоритмический уровень интеллект-стека.

Направление это задано было когда-то Neural Turing Machine https://arxiv.org/abs/1410.5401 и Neral GPU https://arxiv.org/abs/1511.08228. И вот прямо сейчас появляется ворох новостей в этой области:

-- лучшая архитектура нейросетки для перевода естественных языков (Transformer) не могла выучить простейшее копирование строки (из abc получить abcabc). А "вычислительные нейросетки" типа Neural Turing Machine очень плохо работали с "образными задачами" типа перевода естественных языков. И вот сегодня Google Brain опубликовал Universal Transformer -- https://ai.googleblog.com/2018/08/moving-beyond-translation-with.html. Our experiments confirm that Universal Transformers are indeed able to learn from examples how to copy and reverse strings and how to perform integer addition much better than a Transformer or an RNN (although not quite as well as Neural GPUs). Furthermore, on a diverse set of challenging language understanding tasks the Universal Transformer generalizes significantly better and achieves a new state of the art on the bAbI linguistic reasoning task and the challenging LAMBADA language modeling task. But perhaps of most interest is that the Universal Transformer also improves translation quality by 0.9 BLEU1 over a base Transformer with the same number of parameters, trained in the same way on the same training data. Putting things in perspective, this almost adds another 50% relative improvement on top of the previous 2.0 BLEU improvement that the original Transformer showed over earlier models when it was released last year. The Universal Transformer thus closes the gap between practical sequence models competitive on large-scale language understanding tasks such as machine translation, and computationally universal models such as the Neural Turing Machine or the Neural GPU, which can be trained using gradient descent to perform arbitrary algorithmic tasks. Это явно шаг по направлению к гибридной архитектуре: добавление в коннекционистскую, нейросетевую архитектуру даже не эмуляции алгоритмических/символьных вычислений "по выучиваемым правилам", а "чего-то похожего на выучиваемые вычисления". Гибридный коннекционистский "образно-алгоритмический" субстрат с возможностью выучить какую-то алгоритмику оказался лучше чисто "образного".

-- а можно ли улучшить эту самую "вычислимость" в нейросетке? Ответ: можно, и это NALU (nerual arithmetic-logic unit), https://ailev.livejournal.com/1440139.html. Это тоже Google, но Google DeepMind. Всем настолько понравилась идея, что чуть ли не за сутки появилось множество реализаций этого подхода на самых разных deep learning фреймворках. А сегодня сделан интересный шаг: прокинуто множество системных уровней и сделана реализация NALU на ассемблере x86 -- http://rickyhan.com/jekyll/update/2018/08/15/neural-alu-implemented-in-python-and-assembly-x86.html. Красивая идея, "виртуальное железо" реализовывать поближе к нижнему уровню, a toy NALU implemented in x86(with SSE!) that uses real Intel FPU ALUs. Но я думаю, что это тоже ещё не предел: нужно чуток приподняться уровнем (например, писать эти "вычислительные" архитектуры на Julia, да ещё и запускать для этих архитектур нейроэволюцию -- оптимизируя и "алгоритмы", и "образы"),а результирующие архитектуры выводить не в ассемблер, а в LLVM. А затем использовать компилятор из LLVM в Verilog и сразу прошивать FPGA. Это уже делается для "традиционных сеток", которые несколько строк Питона для спецификации нейросетки в TensorFlow через компилятор XLA от Google перегоняют в LLVM, а затем из LLVM получают спецификацию на Verilog для FPGA -- https://arxiv.org/abs/1807.05317, подход LeFlow. К этому уже всё готово, так что в ближайшее время ждём реализации.

Вот эти два потока работ (1. усиление коннекционистской "образности" через коннекционистскую "алгоритмику" и 2. усиление и разгон через приближение к железу коннекционистской "алгоритмики") должны быстро склеиться. К тому же это всё может легко пройти под зонтиком Гугля (поглядите, все работы по факту оттуда), с редкими университетскими вкраплениями.

"Коннективизм" и "коннекционизм" -- синонимы, в сети встречаются почти равное число раз, оба переводы connectionism. В этом тексте я использовал "коннекционизм" и "коннекционистский подход", но не факт, что в другом тексте я не напишу "коннективизм" и "коннективистский подход". И тут нужно понимать, что я описываю в этом посте тренд "однородных нейросетевых структур", в некотором роде обратный от тренда differentiable programming: коннективистские архитектуры состоят из более-менее однородных элементов, а differentiable programming, probabilistic programing не предусматривают какой-то однородности, в них структуры весьма различаются, их некоторое богатство. В жизни же, конечно, будет какой-то промежуточный вариант. В мозгу тоже клетки не все одинаковые.

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

По факту современные GPU являются именно такими чипами, и особенно наглядно это видно на новом чипе NVIDIA с архитектурой Turing (https://ailev.livejournal.com/1441670.html): там алгоритмическая часть чипа (в данном случае не совсем универсальная, а ориентированная на ray tracing, но на архитектурном уровне можно было бы подумать, что там могло бы быть) совмещается с коннекционистской частью (её поддерживают Tensor Cores). Сейчас NVIDIA SDK NGX для визуальных эффектов имеет плагины именно для нейрообработки (https://developer.nvidia.com/rtx/ngx), но архитектурно как связаны там коннекционистские-нейро и классические алгоритмические-тьюринговские вычисления в этих "нейрообработках" может быть совершенно неочевидно -- так что можно только гадать, в каком направлении могут развиваться гибридные архитектуры типа Turing. Это может быть устроено "как мозг" на двух разных системных уровнях:
-- как сейчас в NVIDIA Turing, или NVIDIA Xavier когда разные части чипа поддерживают разные вычисления, разную встроенную логику. Это сейчас мейнстрим, по этому пути не только NVIDIA бегом бежит, просто остальные чуток отстали в плане массовости. Разные отделы мозга выполняют разные функции, реализованы они по-разному.
-- как в биологическом мозге: универсальный коннекционистский субстрат, выучивающий/эмулирующий классические алгоритмы ("медленное мышление по Канеману, эмулируемое человечьим мозгом: дикие затраты мыслетоплива, но оно есть! И оно выучивается, innate priors минимальны!"). Вот тут в комментах у нас тред с cantechnik про устранение лишних уровней виртуализации -- если транслировать LLVM архитектуру не в FPGA, даже не в ASIC, а сразу в аналог (какие-нибудь мемристоры или оптику, как в пункте 3 комментируемого поста по ссылке), то может не так уж и плохо получиться даже с эмуляцией/выучиванием: https://ailev.livejournal.com/1441034.html. Разные отделы мозга выполняют разные функции, но реализованы они одинаково.

Вот прямо сейчас расцветают сто цветов гибридизации нижних уровней интеллект-стека (равно как сто чуть менее заметных сегодня, но не менее важных цветов гибридизации его верхних уровней). Восхитительный момент, когда всё происходит стремительно со скоростью двух прорывов в неделю. Совершенно невозможно предсказать, что будет буквально через месяц-другой, и как оно отразится на цивилизации. Думаю, что отразится сильно, и быстрее, чем все это себе представляют. Другое дело, что к чудесам привыкают, и привыкают быстро. Уже сегодня ведь можно задать своему телефону где-нибудь в глухом переулке ночью классический вопрос "Как пройти в библиотеку?" и получить внятный ответ, причём с предупреждением, что "эта библиотека откроется через восемь часов, в 11:00 -- тот же самый Гугль или Алиса в телефоне знают и часы работы всех заведений вокруг). Чудо? Чудо. Никто не удивляется, только ругаются, что это всё не слишком надёжно работает. Ну, plug and play тоже когда-то ругали, говорили, что plug and pray. И модем дозваниваться мог полночи до провайдера. А сегодня всё работает в полпинка. Вот и гибридный интеллект-стек, который сможет и в логику, и в чуйку -- он тоже будет сначала шалить, а потом просто надёжно работать.

UPDATE: дискуссия в фесбуке -- https://www.facebook.com/groups/1505369016451458/permalink/2151897705131916/.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 4 comments