Не так давно я думал, как организовать самообучение...

Не так давно я думал, как организовать самообучение нейросети для управления движениями робота, по-простому - ходьбы, приседания и т.д. Особенностью алгоритма, вернее даже архитектуры, должна была стать возможность параллельного обучения - машина должна была обучаться как в реальности (на базе физического робота), так и на базе математической модели в виртуальной симуляции.
В простейшем варианте решения мы имеем набор из нейросетевых алгоритмов, на входе у которых текущие статические и динамические параметры состояния системы - по простому показания имеющихся датчиков - а на выходе сигналы для двигателей (напряжение и частота). Каждый алгоритм в этом наборе отвечает за одно элементарное движение - ходьбу по прямой, поворот, прыжок, наклон и так далее.
Однако если обучать машину в натурных экспериментах, одновременно можно запускать только один. И даже наличие нескольких роботов не поможет - у каждого из них слегка разное расположение датчиков, слегка разная мощность двигателей и так далее - другими словами при перенесении алгоритма с одного робота на другого он почти гарантированно будет работать хуже. То же самое, если переносить алгоритм с симуляции на реальный объект и наоборот. И конечно использовать такие удобные в программировании эволюционные алгоритмы обучения в таких условиях становится трудно.
Но что если сделать более интересную архитектуру?
Суть в том, что управляющий движением алгоритм помещается в оболочку из трёх других алгоритмов.
Первый слегка модифицирует показатели датчиков таким образом, чтобы их показания согласовывались с показаниями виртуальных датчиков математической модели в такой же ситуации. Другими словами, корректирует неточности сборки и погрешности при измерениях массо-габаритных и динамических характеристик реальных деталей.
Второй отвечает за то, чтобы выданные алгоритмом движения сигналы для двигателей адаптировать под реальные двигатели, установленные в роботе.
Третий же нужен чтобы в реальном времени следить и корректировать параметры первых двух - в него поступают как данные о реальном положении рабочих органов робота, полученные альтернативными способами, данные с датчиков и данные с модели о предполагаемом положении. И задача этого алгоритма в том, чтобы согласовать все три набора данных между собой через ту самую корректировку.
Зачем всё это нужно?
Внутри оболочки мы оперируем идеальной моделью робота, превращаем реальный физический мир в его личное представление. Однако этот идеальный мир может быть идентичным и в огромных наборах виртуальных симуляций, и у разных машин, у которых одинакова только конструкция. А значит с одной стороны снижаются требования к точности сборки и одинаковости конструкции при создании копий и даже новых моделей. А с другой у каждого робота есть только три алгоритма, требующих индивидуального обучения, а остальные сотни и сотни алгоритмов можно просто копировать с одной машины на другую, параллельно улучшая их как в реальном физическом пространстве, так и в пространстве многочисленных симуляций.
Более того, третий алгоритм может оказаться полезным в случае деградации той или иной детали, в случае повреждения робота или в условиях не совсем стандартной ситуации - взял манипулятором ящик и уже масса и центр масс манипулятора изменились. И вместо того, чтобы пересчитывать параметры алгоритмов движения для каждого вида действий машина быстро приспосабливается под новые условия сразу для всего корпуса известных действий.
Not so long ago, I was thinking how to organize self-study of a neural network to control the movements of the robot, in a simple way - walking, squats, etc. A feature of the algorithm, or rather, even architecture, was to be able to learn in parallel - the machine had to learn both in reality (based on a physical robot) and on the basis of a mathematical model in virtual simulation.
In the simplest version of the solution, we have a set of neural network algorithms at the input of which the current static and dynamic parameters of the state of the system - according to a simple indication of the available sensors - and the output signals for the motors (voltage and frequency). Each algorithm in this set is responsible for one elementary movement - walking in a straight line, turning, jumping, tilting, and so on.
However, if you train the car in full-scale experiments, only one can be started at a time. And even the presence of several robots will not help - each of them has a slightly different arrangement of sensors, slightly different engine power, and so on - in other words, when transferring an algorithm from one robot to another, it will almost guaranteed to work worse. The same thing if you transfer the algorithm from simulation to a real object and vice versa. And of course, it becomes difficult to use such evolutionary learning algorithms that are convenient in programming in such conditions.
But what if we make a more interesting architecture?
The bottom line is that the motion control algorithm is wrapped in three other algorithms.
The first slightly modifies the indicators of the sensors so that their readings are consistent with the readings of the virtual sensors of the mathematical model in the same situation. In other words, it corrects assembly inaccuracies and errors when measuring the mass-dimensional and dynamic characteristics of real parts.
The second is responsible for adapting the signals issued by the motion algorithm for the engines to the real engines installed in the robot.
The third one is needed in order to monitor and adjust the parameters of the first two in real time - it is received as data on the real position of the working bodies of the robot, obtained by alternative methods, data from sensors and data from the model about the estimated position. And the task of this algorithm is to coordinate all three data sets with each other through the same adjustment.
Why is all this necessary?
Inside the shell, we operate with an ideal robot model, we turn the real physical world into his personal representation. However, this ideal world can be identical in huge sets of virtual simulations, and in different machines that have only the same design. So, on the one hand, the requirements for assembly accuracy and design uniformity are reduced when creating copies and even new models. On the other hand, each robot has only three algorithms that require individual training, and the remaining hundreds and hundreds of algorithms can simply be copied from one machine to another, simultaneously improving them both in real physical space and in the space of numerous simulations.
Moreover, the third algorithm may turn out to be useful in case of degradation of a particular part, in case of damage to the robot or in conditions of not quite a standard situation - the box took by the manipulator and the mass and center of mass of the manipulator have already changed. And instead of recounting the parameters of the motion algorithms for each type of action, the machine quickly adapts to new conditions immediately for the entire body of known actions.
У записи 16 лайков,
0 репостов,
1226 просмотров.
Эту запись оставил(а) на своей стене Вера Ерасова

Понравилось следующим людям