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