Сделаем роботизированную руку с нуля (обучение с подкреплением)

машинное обучение

Я создал веб-страницу, которая делится контентом машинного обучения под названиемНе заморачивайтесь с Python, В последнее время многие друзья оставили сообщение выше, в котором говорилось, что они хотят увидеть несколько руководств о том, как практиковать знания, которые они узнают, поэтому моя первая реакция — провести практическую битву обучения с подкреплением и сделать это «самостоятельно». обучение" роботизированной руке. Так что я тамздесьНаписал всю прямую трансляцию о том, как сделать робота-манипулятора сам. Ха-ха. Ноне беспокоить питонаНет напоминания о подписке, когда будет новый туториал.Увидев, что у меня много поклонников на Zhihu, я размещу его на своем сайте.«Механическая рука» начинаетсяПоделиться на Чжиху.

И сообщите вам заранее, что содержание «Учебника по созданию робота-манипулятора с нуля» включает в себя.

Это Чжиху, то есть следующее содержание является первым разделом из 5 вышеперечисленных разделов"построить структуру". Следующие 4 раздела не будут написаны на Жиху (муторно крутить). Заинтересованные друзья могут проверить прямо по ссылке выше.

Зачем эта практика

Основная цель этой практики — дать нам возможность научиться и использовать ее, а также построить структуру обучения с подкреплением с нуля.Серия учебных пособий по обучению с подкреплениемЯ получил много знаний по обучению с подкреплением и научился использовать различные алгоритмы, начиная с самых простых.Q-Learningк комбинированной нейронной сетиDQN, а затем к непрерывному действиюDDPGи распределенное обучениеA3CиDPPO. Но мы не практиковали это ни разу., потому что большую часть времени в этой серии мы сосредоточились только на самом алгоритме. Но настройка среды моделирования и настройка параметров не менее важны. Поэтому мы сделаем это в этой серии, чтобы дать вам реальное введение в обучение с подкреплением.

как сделать

Практика простая, я использую ту, которую сам написал год назадтренировочный код, пусть рука робота учится достигать определенной заданной точки.

Но на этот раз я оптимизировал структуру кода и представил всем упражнение, которое я сделал, чтобы вы также могли шаг за шагом узнать, что следует учитывать при обучении с подкреплением и как создать разумную среду. следующие аспекты.

структура основного кода

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

В частности, сценарии для этих трех аспектов могут быть следующими:

  • Скрипт окружения (env.py)
  • Сценарий обучения с подкреплением (rl.py)
  • Скрипт основного цикла (main.py)

Мы импортируем среду и метод обучения с подкреплением в сценарий основного цикла, поэтому сценарий основного цикла объединяет два предыдущих.код, вы обнаружите, что я упаковываю каждый шаг отдельно, часть 1, часть 2... есть три вышеуказанных файла сценария Мы будем добавлять необходимые части в каждую часть одну за другой.

В этом разделе мы начнем с самого основного main.py, Это включает в себя основной цикл программы, который также является частью обучения.Как можно упростить структуру обучения следующим образом, я взялgymФорма модулей.Так что, если вы использовали друзей в спортзале, вы найдете это очень знакомым.

# main.py 
# 导入环境和学习方法 
from part1.env 
import ArmEnv 
from part1.rl import DDPG 

# 设置全局变量 
MAX_EPISODES = 500 
MAX_EP_STEPS = 200 

# 设置环境 
env = ArmEnv() 
s_dim = env.state_dim 
a_dim = env.action_dim 
a_bound = env.action_bound 

# 设置学习方法 (这里使用 DDPG) 
rl = DDPG(a_dim, s_dim, a_bound) 

# 开始训练 
for i in range(MAX_EPISODES): 
    s = env.reset() # 初始化回合设置 
    for j in range(MAX_EP_STEPS): 
        env.render() # 环境的渲染 
        a = rl.choose_action(s) # RL 选择动作 
        s_, r, done = env.step(a) # 在环境中施加动作 
        
        # DDPG 这种强化学习需要存放记忆库 
        rl.store_transition(s, a, r, s_) 
        if rl.memory_full: 
            rl.learn() # 记忆库满了, 开始学习 
        s = s_ # 变为下一回合

На данный момент мы понимаем, что в rl.py и env.py у нас должно быть несколько функций и атрибутов.

  • rl.py
    • rl.choose_action(s)
    • rl.store_transition(s, a, r, s_)
    • rl.learn()
    • rl.memory_full
  • env.py
    • env.reset()
    • env.render()
    • env.step(a)
    • env.state_dim
    • env.action_dim
    • env.action_bound

С помощью этих рекомендаций мы можем сделать предварительное планирование в rl.py и env.py, Таким образом, вы можете создать еще один скрипт env.py, сначала напишите следующееArmEnvЗатем добавьте к нему упомянутые выше функции.

# env.py

class ArmEnv(object):
    def __init__(self):
        pass
    def step(self, action):
        pass
    def reset(self):
        pass
    def render(self):
        pass

Затем создайте сценарий rl.py для хранения метода RL, который вы хотите использовать.Поскольку я хочу установить эту среду руки как среду непрерывного действия (угол, когда робот вращает руку, является непрерывным значением), поэтому я Алгоритм DDPG Но если среда, которую вы хотите установить, представляет собой дискретное действие (например, робот может выбрать только 4 клавиши: вверх, вниз, влево и вправо), вам может потребоваться выбрать другие алгоритмы RL и разные способы взаимодействия с окружающей средой.

# rl.py

class DDPG(object):
    def __init__(self, a_dim, s_dim, a_bound,):
        pass
    def choose_action(self, s):
        pass
    def learn(self):
        pass
    def store_transition(self, s, a, r, s_):
        pass 

С этими фреймворками наша основная структура готова, и давайте перейдем к ее созданию.Создайте среду моделирования.

В действии: создание и обучение роботов-манипуляторов с нуля