Суровый программизм

Вот читаю я, допустим, статейку про проект uTensor — совместимую с TensorFlow реализацию нейросетей для ARM Cortex M3 или M4.

https://towardsdatascience.com/why-machine-learning-on-the-edge-92fac32105e6

Штука прикольная — пусть и на «топовых», но все-таки на недорогих и довольно доступных микроконтроллерах позволяет, например, распознавать рукописный ввод:

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

Ну, для начала — математика. Для понимания хотя бы MIT’овского учебника по Deep Learning желательно иметь представление о линейной алгебре, теории вероятностей, возможно, о каких-то началах функционального анализа. Да, некоторые отрывочные сведения из этих дисциплин приведены в первой части этого учебника (так часто делают в американских учебниках — так как нет гарантий, что слушатели курса по машинному обучению перед этим действительно прослушали несколько курсов по математике) — но их явно недостаточно. Если ориентироваться на программу мехмата, например — это 2-3 курс, если безжалостно ужимать — то все равно необходимо 3-4 семестра одной только математики.

Программирование тут не менее суровое. Даже если предположить, что с Python (в объеме, необходимом для TensorFlow) человек, умеющий немного программировать на C, сможет разобраться самостоятельно — все равно здесь, как и в любом проекте с использованием микроконтроллеров, требуется отличное знание C и даже немного — C++ (даже если говорить о нем, как о C with classes — все же нужно понимать «цену» тех или иных возможностей C++). Не знаю, стоит ли в обязательные общие требования к программисту включать знания классических алгоритмов — но в целом в критичных к производительности задачах это оказывается само собой разумеющимся требованием. Тут у нас нет многоядерного процессора и гигабайтов оперативки. В «профессиональном обучении» программиста это где-то год.

Дальше — микроконтроллерная специфика. Да, «входной порог» в программирование для микроконтроллеров сейчас (благодаря все той же ARM mbed) сводится «до уровня базовых знаний C/C++ и электроники в масштабе «подключить светодиод в нужной полярности»» (c) — но для понимания штук типа CMSIS-NN желательно уже иметь представление об архитектуре ARM, всякого рода оптимизациях, DSP-инструкциях (зря что ли мы берем Cortex-M4?) и прочей такой вот низкоуровневой ерунде — возможно, вплоть до программирования на ассемблере. Электроника, нужная для такого проекта, разумеется, тоже довольно далеко ушла от «подключить светодиод в нужной полярности».

В общем, если представить учебники по каждой из дисциплин — тут «вырисовывается» книжная полка с десятком книжек страниц по 300 каждая (это минимум — некоторые особенно «хорошие» учебники по некоторым разделам computer science приближаются к полутора тысячам страниц). Можно, конечно, возразить с аргументами в духе разделения труда — мол, не обязательно специалисту по deep learning знать нюансы архитектуры ARM, да и математика ему не особо нужна, и вместо одного «универсала» тут можно взять трех-четырех выпускников трехмесячных курсов. Но с другой стороны — над ними все равно должен быть какой-то руководитель — который должен иметь представление не только о технических аспектах, но еще и направлять процесс разработки.

И заметьте — все это только для того, чтобы можно было пальчиком провести по тачскрину, а на дисплее отобразилась бы введенная цифра. Но, конечно, всегда есть и более простой путь — «еще три года назад Антон был простым раздолбаем, а сегодня он Senior Developer в Luxoft» (c). Сеньер-формошлепом, наверное, быть неплохо :)

Технический луддизм

luddism

Наткнулся на днях на статейку (прошлогоднюю, конечно, я же тормоз) про federated learning:

https://ai.googleblog.com/2017/04/federated-learning-collaborative.html

Если немного очистить ее от AI-шной шелухи и заявлений о том, как Google улучшает User Experience — то содержание сводится примерно к следующему: приложение Gboard (стандартная андроидовская клавиатура) анализирует все (или практически все) сообщения, пересылаемые между пользователями, немного их обрабатывает (вот для чего «бюджетным» устройством на Android считается смартфон с четырехядерным процессором и минимум 2 Гб оперативной памяти), и результаты обработки пересылаются в Google (вот кто жрет ваш трафик) — чтобы там могли немного улучшить качество «подсказок» Gboard. Говоря еще проще — в Google читают всю вашу переписку :)

А как от всего этого счастья отказаться, не уходя жить в тайгу к староверам?