Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Образовательные ступеньки к деланию роботов, две недели спустя

Сегодня вьюнош вернулся из лагеря роботон, где они делали и программировали ардуино-тележку с манипулятором. Из школьной "образовательной робототехники" нужно срочно драпать, и этот текст продолжит планирование побега, начатое в https://ailev.livejournal.com/1432847.html, https://ailev.livejournal.com/1433113.html и https://ailev.livejournal.com/1434025.html.

Итак, строим кратчайшую образовательную цепочку курсов для девятиклассника, желающего делать роботов, но не очень желающего учиться (особенно учиться фундаментальным дисциплинам).

Всего у нас будет два образовательных трека: по системной инженерии и по искусственному интеллекту для роботов.

1. Системная инженерия
-- системное мышление прямо по курсу в Курсере (http://systemsthinkingcourse.ru/) и моему учебнику. Да, там для магистров. Но уж что поймёт, то поймёт. Для инженера это must, это обойти нельзя.
-- онтологика в текущем объёме курса Школы системного менеджмента: http://system-school.ru/ontologics. Это тоже трудно, но системное мышление после этого должно стать понятней.
-- системная инженерия по линии, намеченной в докладе "Практики системной инженерии" https://ailev.livejournal.com/1433768.html (концептуальный курс системной инженерии, и далее курсы моделирования концепции продукта, инженерии требований, инженерии системной архитектуры и т.д. -- текущими темпами до этого дойдёт ещё через год, и доступность курсов этих через год сильно изменится).
-- системное конструирование (попросту -- generative design, работа с САПР). Тут нужно ещё думать, как это устроить. Робот вполне себе физичен, и нужно его как-то делать. Навскидку находится https://www.udemy.com/topologyoptimization/ Generative Modeling - Designer Based Structural Optimization. Topology Optimization - Creating Optimal Next Generation Designs with 3D CAD - Solid Edge - Solidworks - Blender. Пререквизитом тут https://www.udemy.com/3dcadbasics/, 3D CAD Fundamentals with SIEMENS Solid Edge, STEM to STEAM - An Artistic Approach to 3D Modeling. Я не самый большой поклонник Siemens, но сходу других цепочек курсов, ведущих к generative design в части робототехники, а не строительных конструкций, я не нашёл. Ничего, с этим можно не слишком спешить. Хотя в роботоне уже было 3D-моделирование с выходом на 3D-печать, хотя этим и не мой вьюнош этим занимался, а другой член его команды. То есть и откладывать курс надолго нельзя, чтобы не утратить связь с физической реальностью.

И отсюда из 3D нужно прокладывать дорожку к моделированию робота в физическом мире -- https://www.nvidia.com/en-us/deep-learning-ai/industries/robotics/, https://www.nvidia.com/en-us/deep-learning-ai/industries/robotics/. И уже тут все эти reinforecment learning и прочая из embodied intelligence -- но это уже в другом разделе.

В новом учебном году будет ещё и кусочек электроники: программирование на Verilog двухбитного процессора на FPGA, или что-то похожее (это продолжение прошлогоднего курса в МФТИ-Потенциал).

2. Искусственный интеллект для роботов
-- берём как верхушку графа пререквизитов курс Become A Robotics Software Engineer, https://www.udacity.com/course/robotics-software-engineer--nd209, добавляем необходимые пререквизиты, а дальше их разворачиваем (так что начало обучения -- примерно с конца списка):
-- из особых пререквизитов тут рекомендуется курс по ROS, этим можно будет заниматься, когда сюда дойдём: http://wiki.ros.org/Courses
-- bash, пока даже не задаюсь вопросом, где этому учат. Но это тоже оказывается пререквизитом.
-- ньютоновская механика. Курсов по ней множество, но пока непонятно, в каком объёме это нужно для курса робототехники. Думаю, что по конкретному курсу можно будет принять решение потом, когда речь пойдёт об использовании этих знаний.
-- вроде как нужен курс по Artificial Intelligence for Robotics by Georia Tech (programming a robotic car): https://www.udacity.com/course/artificial-intelligence-for-robotics--cs373
-- добавляем неоходимые из общих соображений Become a Deep Reinforcement Learning Expert от Unity, NVIDIA DLI, https://www.udacity.com/course/deep-reinforcement-learning-nanodegree--nd893,
-- какие-то азы deep learning. Обсуждение (http://forums.fast.ai/t/about-andrew-ngs-deeplearning-ai-courses/9830/17) показало, что лучший вариант -- это совмещение подхода fast.ai в его традиции top-down, code first, application centered (http://www.fast.ai/2016/10/08/teaching-philosophy/) и подхода deeplearning.ai с его bottom-up классическим постепенным введением в предмет: 1. Просто берём оба курса deep learning из http://www.fast.ai/, а именно, Practical Deep Learning for Coders http://course.fast.ai/ и Cutting Edge Deep Learning for Coders, http://course.fast.ai/part2.html. И 2. Добавляем специализацию Deep Learning https://www.coursera.org/specializations/deep-learning от deeplearning.ai
-- matrix calculus for deep learning в объёме https://arxiv.org/pdf/1802.01528.pdf. Все в восторге, ибо это необходимая линейная алгебра и матан в одном флаконе, правильно перемешанные. Но к этому материалу нет упражнений! Только учебник, но нет задачника! Это проблема. Но хотя бы понятно с содержанием образования, и дальше можно думать. Ещё есть подсказка, что после этого хорошо бы ещё добавить 27 страниц с картинками текста A guide to convolution arithmetic for deep learning -- http://forums.fast.ai/uploads/default/original/2X/f/fcdd0c559e9c68cee37462dba30c2ac1a4c0289d.pdf. И тоже без упражнений!
-- computational linear algebra: http://www.fast.ai/2017/07/17/num-lin-alg/. Особенность в том, что линейная алгебра в теории сильно отличается от линейной алгебры в компьютерной реализации. И реализацию хорошо бы представлять хоть как-то. Да, это немножко глубже, чем "умножайте матрицы, используя функцию из библиотеки", но это и достоинство. И это курс fast.ai в его традиции top-down, code first, application centered (http://www.fast.ai/2016/10/08/teaching-philosophy/), хотя там и предупреждают, что курс по пререквизитам более advanced, чем тамошние курсы deep learning. И вот тут как пререквизит рекомендуют просто хороший видеокурс линейной алгебры: https://www.youtube.com/playlist?list=PLZHQObOWTQDMsr9K-rj53DwVRMYO3t5Yr и интерактивный курс http://immersivemath.com/ila/learnmore.html. Но тут нет упражнений! Но все показывают пальцем именно на них!
-- статистика, причём нужна байесовская, и на Питоне. Нашёл пока вот это: https://github.com/fonnesbeck/scipy2014_tutorial
-- Питон, включая объект-ориентированность (питон мой вьюнош вроде как знает, но по факту без объектов). Обычное требование во всех остальных курсах -- это годичный опыт программирования. Боюсь, что там имеется ввиду не годичный опыт программирования "для олимпиад", чему учат сейчас во всех школах (и именно это знает мой вьюнош). И не годичный опыт веб-программирования. Боюсь, что речь идёт и не о SICP. Я пока склоняюсь к SICP-на-Питоне, http://composingprograms.com/. Но SICP это для упорных и любопытных именно к computer science, а мой вьюнош явно не таков -- он готов позаниматься роботом, но поразбираться с каким-нибудь наследованием и инкапсуляцией для того, чтобы потом лучше заниматься роботом, вьюнош не готов. Поэтому я склоняюсь к SICP-на-питоне, но не понимаю формата курса. Скажем, много упражнений на освоение концептов и с автоматической проверкой тут бы вполне подошли, но по факту в курсе немного трудных заданий, которые непонятно кто будет проверять. Такой вариант вряд ли сработает. Поэтому с содержанием определились, а с формой (то есть конкретным курсом) -- нет. Возможно, это будет какой-нибудь репетитор, который возьмёт вьюноша за шкирку и проведёт его через http://composingprograms.com/. Ну, или кто-то ткнёт пальцем во что-то получше и поновее (скажем, есть https://runestone.academy/runestone/static/thinkcspy/index.html -- How to Think Like a Computer Scientist: Interactive Edition, это хотя бы с упражнениями).
-- начало всего недостающего математического (воспринимаем заодно как лёгкий старт обучения на английском языке) берём в Khan Academy: Statistics and Probability -- https://www.khanacademy.org/math/statistics-probability, Linear Algebra -- https://www.khanacademy.org/math/linear-algebra,
Multivariable Calculus -- https://www.khanacademy.org/math/multivariable-calculus

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

Вот снизу потихоньку и поползём, прямо сейчас и начнём. Царских дорог в эту геометрию нет, оценок времени дать пока невозможно, но уже понятно, что всё будет либо "долго", либо "очень долго".

Любые предложения, замечания, рекомендации, конечно, приветствуются. Единственная проблема, так это меня больше интересуют рекомендации "как быстрее пройти к работе с роботами" и "как быстрее связать кодирование и математику" и "как уменьшить количество учителей в проекте", а не "как поглубже изучить алгебру вместе с линейной алгеброй и геометрией, взяв учебник и задачник Кострикина. Вот Кострикин и прочее из этой серии (по-русски, академически глубоко, только в бумаге) будут только при осознании потребности в углублённом понимании какой-то отдельной дисциплины -- так что "вот возьмите вот эту книжку и будет вам счастье" можно не предлагать, вьюнош книжек не читает, интереса к бумаге нет в принципе. Ему ещё понятно, зачем нужно решить сто-двести задач, но непонятно, зачем читать бумажную книжку, в принципе непонятно -- на уровне глубоких идеологических установок. И тут либо это принимать, либо всё обучение закончится итальянской забастовкой: мы будем делать вид, что обучение идёт, а вьюнош будет делать вид, что он честно читает все эти тексты и даже честно пытается что-то понять. Увы, обращение к "традиционным методам образования, по которым учились наши дедушки и бабушки" с нашим вьюношем неэффективно.

Нам пока нужно просто прорваться к программированию роботов, но не на Ардуино, а на Jetson Xavier (к моменту окончания этой программы Jetson TX2 уже будет неактуальным, я думаю). Углублять знание отдельных разделов математики, физики, электроники, компьютерной науки и т.д. -- это потом, по мере взросления и осознания потребности в чуток более фундаментальном образовании. Это в полной мере соответствует гипотезе "из середины вверх и вниз", когда начинаем заниматься фундаментальным образованием не из прикладных дисциплин (top-down), не из фундаментальных идей (bottom up), а из среднего уровня знаний к прикладным дисциплинам, обращаясь к более фундаментальным дисциплинам по мере осознания недостатка понимания.

UPDATE: обсуждение в фейсбук -- https://www.facebook.com/ailevenchuk/posts/10213260644004693 (и мне тут же в этих комментах напоминают, что у меня был текст про обучение робототехнике, где я расписывал системные уровни робота: пункт 6 в https://ailev.livejournal.com/1351873.html. Да, но профессионализация в каком-то уровне это будет на втором проходе, сейчас просто пытаемся выполнить какие-то пререквизиты для уже имеющегося курса, а не синтезировать всю программу с нуля "по системной науке").

UPDATE: обсуждение во фрифид -- https://freefeed.net/ailev/64d5a2bc-558c-4a2b-a336-ca2430503b58 (есть dataquest.io), в фейсбуке -- https://www.facebook.com/ailevenchuk/posts/10213260644004693 (про то, что образование должно быть привязано к системным уровням робота, вдоль линии рассуждений https://ailev.livejournal.com/1351873.html)
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 13 comments