Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Инженерия нейронных сеток, ANN engineering

С ужасом осознал, что в "Открытии себя" Владимира Савченко (https://ru.wikipedia.org/wiki/Открытие_себя, http://lib.ru/RUFANT/SAWCHENKO/otkrytie.txt) ещё в 1967 году описывались нейронные сетки, роман и сегодня абсолютно на фронтире! Он ведь не только про клонирование человека и прочий биопанк, он ещё и про конструирование и поведение вычислителей, которые подозрительно смахивают на современные глубокие нейронные сетки:
Значит, схема опыта такая: к входам ЦВМ-12 подсоединяем кристаллоблок о 88 тысячах ячеек, а к входам кристаллоблока - весь прочий инвентарь: микрофоны, датчики запахов, влажности, температуры, тензометрические щупы, фотоматрицы с фокусирующей насадкой, "шапку Мономаха" для считывания биотоков мозга. Источник внешней информации - это я сам, то есть нечто двигающееся, звучащее, меняющее формы и свои координаты в пространстве, обладающее температурой и нервными потенциалами. Можно увидеть, услышать, потрогать щупами, измерить температуру и давление крови, проанализировать запах изо рта, даже залезть в душу и в мысли - пожалуйста! Сигналы от датчиков должны поступать в кристаллоблок, возбуждать там различные ячейки - кристаллоблок формирует и "упаковывает" сигналы в логичные комбинации для ЦВМ-12 - она расправляется с ними, как с обычными задачами, и выдает на выходе нечто осмысленное. Чтобы ей это легче было делать, я ввел в память машины все числа-слова из словаря машинного перевода от "А" до "Я".

И... ничего. Сельсин-моторчики, тонко подвывая, водили щупами и объективами, когда я перемещался по комнате. Контрольные осциллографы показывали вереницу импульсов, которые проскакивали от кристаллоблока к машине. Ток протекал. Лампочки мигали. Но в течение первого месяца рычажки цифропечатающего автомата ни разу не дернулись, чтобы отстучать на перфоленте хоть один знак.

Я утыкал кристаллоблок всеми датчиками. Я пел и читал стихи, жестикулировал, бегал и прыгал перед объективами; раздевался и одевался, давал себя ощупывать (брр-р! - эти холодные прикосновения щупов...). Я надевал "шапку Мономаха" и - о господи! - старался "внушить"... Я был согласен на любую абракадабру. Но ЦВМ-12 не могла выдать абракадабру, не так она устроена. Если задача имеет решение - она решает, нет - останавливается. И она останавливалась. Судя по мерцанию лампочек на пульте, в ней что-то переключалось, но каждые пять-шесть минут вспыхивал сигнал "стоп", я нажимал кнопку сброса информации. Все начиналось сначала.

Наконец я принялся рассуждать. Машина не могла не производить арифметических и логических операций с импульсами от кристаллоблока - иначе что же ей еще делать? Значит, и после этих операций информация получается настолько сырой и противоречивой, что машина, образно говоря, не может свести логические концы с концами - и стоп! Значит, одного цикла вычислений в машине просто мало. Значит... и здесь мне, как всегда в подобных случаях, стало неловко перед собой, что не додумался сразу, - значит, надо организовать обратную связь между машиной (от тех ее блоков, где еще бродят импульсы) и кристаллоблоком! Ну, конечно: тогда сырая информация из ЦВМ-12 вернется на входы этого хитрого куба, переработается там еще раз, пойдет в машину и так далее, до полной ясности.

Я воспрянул: ну, теперь!.. Далее можно абстрагироваться от воспоминаний о том, как сгорели полторы сотни логических ячеек и десяток матриц в машине из-за того, что не были согласованы режимы ЦВМ и кристаллоблока (дым, вонь, транзисторы палят, как патроны в печке, а я, вместо того чтобы вырубить напряжение на щите, хватаю со стены огнетушитель), как я добывал новые ячейки, паял переходные схемы, заново подгонял режимы всех блоков - трудности техническойреализации, о чем разговор. Главное - дело сдвинулось с места!

15 февраля в лаборатории раздался долгожданный перестук: автомат отбил на перфоленте строчку чисел! Вот она, первая фраза машины (прежде чем расшифровать ее, я ходил вокруг стола, на котором лежал клочок ленты, курил и опустошенно как-то улыбался: машина начала вести себя...): "Память 107 бит".
Инженерия была примерно на тех же принципах, что и сейчас: слоёв побольше, связей побольше, а как оно там в итоге разложится -- не так важно, всё равно всё проучится.
когда все ячейки были собраны на панелях и грани микроэлектронного куба представляли собою нивы разноцветных проволочек, на ее растерянный вопрос: "А как же теперь их соединять?" - лихо ответил:
- А как хотите! Синие с красными - и чтоб было приятно для глаз.
В "Открытии себя" всяко подчёркивается, что речь идёт не столько об учёных, сколько именно об инженерах!

Сегодня я на Quora ответил на вопрос про "науку нейронных сетей" (http://www.quora.com/What-is-the-theory-of-neural-networks/answer/Anatoly-Levenchuk) -- науки там нет (если не считать хода на эволюционную физику -- http://ailev.livejournal.com/1197148.html) но плоды этот ход даст не сегодня, сплошные эвристики. Именно так устроена инженерия, она срабатывает даже там, где науки ещё нет. Более того, там и инженерии-то толком нет -- как в те далёкие времена, когда программная инженерия была ещё не инженерией, а невесть чем вокруг computer science.

Напомню, software engineering появилась в 1968 году, после знаменитой конференции NATO -- https://en.wikipedia.org/wiki/History_of_software_engineering). Да, Владимир Савченко написал "Открытие себя" за год до появления программной инженерии, а человек начал шагать по Луне через год после этого. Спиной вперёд тоже начали прыгать только в 1968 (https://en.wikipedia.org/wiki/Fosbury_Flop). Богатое было времечко, год революции. Сейчас, похоже, тоже какая-то "революция" витает в воздухе. Шестерёнки двинулись, колёсики заскрипели.

Сейчас вот data science тоже уже есть, а соответствующей инженерии пока нетути -- нет даже её объекта (не данные же строить!). Если понимать, что обучение нейронной сетки без учителя -- это чистая наука (открытие онтологии, способа описать мир -- неважно, что в этой предметной области это будут называть "фичи", всё это ведь representation learning, http://ailev.livejournal.com/1045081.html), то даже слово "инженерия" можно пытаться опротестовать. Но всё одно речь идёт о создании какой-то целевой системы с заданными свойствами, и включённость в неё какой-то науки по большому счёту инженерной сути дела не меняет.

Но до полного осознания инженерной проблематики ещё далеко. В разговорах про нейронные сетки вовсю поминается их архитектура и и даже проводятся испытания, но мало говорится ещё о требованиях -- даже испытания явно не против требований, да и архитектура тоже часто не фокусирована требованиями. То есть это инженерия, но не совсем ещё системная, это "какая-то" инженерия. С другой стороны, движение в сторону системной инженерии нейронных сетей уже началось: в той же Quora на вопрос про "самый лёгкий способ выучить машинное обучение" отвечают советом одновременно научиться и machine learning и инженерии и совместить оба этих знания в работе (http://www.quora.com/Whats-the-easiest-way-to-learn-machine-learning/answer/Cory-Hicks-1).

Глубоки нейронные сетки сегодня "крафтят", это ремесло, искусство, набор трюков. Но мы же знаем, что будет дальше? Нужно отчудить метод, сделать его передаваемым (сейчас передают не столько метод, сколько опыт -- как совокупность "трюков").

Нет, речь не идёт о neural engineering (https://en.wikipedia.org/wiki/Neural_engineering), где традиционно путают птичек с самолётами -- живые нейронные сетки и искусственные нейронные сетки. В neural engineering цель создания сеток не столько обеспечить решение какой-то проблемы для стейкхолдера, сколько "наиболее точно отмоделировать настоящую нейронную сеть настоящего мозга".

Нам нужна artificial neural network engineering, создание искусственных нейронных сетей для использования их в продуктах и сервисах -- типа вчера объявленного переводчика надписей в смартфоне (да, перевод надписей со вчерашнего дня больше не выполняется на серверах Гугля, достаточно процессора самого телефона -- http://googleresearch.blogspot.ru/2015/07/how-google-translate-squeezes-deep.html).

Это обычная инженерная работа, но она не совсем сводится к классической программной инженерии. Это такая очень специфичная программная инженерия, существенная её специализация. Возможно, там и название будет другое (так, вместо engineering в англоязычных текстах часто используют design -- neural network design). Более того, неизвестно сколько просуществует эта дисциплина: вон, вебмастеринг продержался всего лет пять-шесть (и будет смешно, если для нейронных сеток тоже появится на несколько лет профессия "нейромастер" или "сетьмастер").

Эх, интересное сегодня времечко. А ведь о самом вкусном в нейронных сетях почти ещё и не говорят:
-- мультимодальность: одновременная работа с разными неструктурированными и разными структурированными данными в комплексе (чтение нейронной сеткой книжки с текстом, картинками, таблицами и формулами -- под чьи-то голосовые разъяснения и с обращением в какие-то реляционные и графовые базы данных)
-- обучение без учителя, метамоделирование (сетка-как-учёный: нужно найти компактное описание какой-то предметной области, построить её онтологию, метамодель).
-- сетки строят себя сами (с генерацией программ в компиляторах получилось хорошо, а вот генерация прикладных программ не так успешна -- кодогенерация ещё не слишком распространена. Посмотрим, что будет с нейронными сетками в этом плане: как нейронные сетки будут порождать и настраивать другие нейронные сетки)
-- выдача команд в реальном времени, диалоги и т.д. (переход к рекуррентным сеткам и обучению с подкреплением). Вся роботика сюда попадает, а заодно и медицина (рекомендация лечения).
-- работа с памятью и вниманием (хотя это совсем не похожие на человеческие память и внимание, но вот, например, свежатинка из этой области: резко улучшили качество перевода: http://devblogs.nvidia.com/parallelforall/introduction-neural-machine-translation-gpus-part-3/)
-- ...список можно продолжать и продолжать.

Растёт и качество самих сеток:
-- предлагаются массово-параллельные архитектуры (сейчас алгоритмы нейронных сеток не слишком хорошо распараллеливаются -- и нужны специальные усилия, типа http://arxiv.org/abs/1507.04296). Про аппаратуру для этого я уже писал, например про FPGA тут: http://ailev.livejournal.com/1204705.html
-- появляются архитектуры быстрого научения для очень глубоких сеток (http://arxiv.org/abs/1507.06228). Кстати deep должно переводиться не как "глубинная", а как "глубокая" -- это означает многослойность, а не нахождение на глубине (мелкая/shallow сетка однослойна). Ну, и не нужно забывать, что глубокими бывают не только нейронные сетки (хотя есть тенденция все deep architectures сейчас называть нейронными сетями, там бывают и другие звери, которые на нейроны непохожи вовсе. Но от прилипшего ещё "от мозга" слова уже не отделаешься. Вот, гляньте на короткий списочек архитектур в https://en.wikipedia.org/wiki/Deep_learning, и это совсем неполный список, это ж википедия).

Сильно напоминает развитие информатики в 50-х: ламповые компьютеры и всё крайне медленно, фортран ещё не изобрели, но зато доказано много математических теорем об универсальности подобных вычислений и уже есть архитектура фон Неймана. Сейчас тоже доказано много математических теорем об универсальности нейросетевых вычислений (универсальность представления функций -- http://neuralnetworksanddeeplearning.com/chap4.html, эквивалентность машине Тьюринга -- http://binds.cs.umass.edu/papers/1995_Siegelmann_Science.pdf). И тоже пока нет какого-то более-менее универсального языка описания архитектуры и настройки гиперпараметров (хотя все эти Caffe и Torch как раз шаги в этом направлении -- в развитых библиотеках программ есть что-то похожее на специализированные языки задания сети). И всё крайне медленно и не масштабируется, как на лампах. Но уже какие-то задачи можно решать.

К чему это я? А к тому, что для этой инженерии искусственных нейронных сетей (artificial neural networks engineering, ANN engineering) и основанных на ней систем всё одно потребуется системноинженерное мышление. И в мой потенциальный учебничек-трёхтомничек правильно было бы включить ещё один раздел -- по глубоким архитектурам (прошлый список разделов я писал год назад -- и даже нейронет там был, но нейросеток ещё не было: http://ailev.livejournal.com/1136987.html. Впрочем, там и разворота к технологическому менеджменту тоже не было ещё).

Хотя вряд ли я немедленно начну писать очередную книжку -- книжки дело неблагодарное. Хватит пока и постов в блоге.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 19 comments