Представитель Шуры Люберецкого в ЖЖ (brat_luber) wrote,
Представитель Шуры Люберецкого в ЖЖ
brat_luber

Category:

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

Вот читаю я, допустим, статейку про проект 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). Сеньер-формошлепом, наверное, быть неплохо :)

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments