OMSCS CS7642 (Reinforcement Learning) Review and Tips
Eugene Yan (Ziyou Yan) делится отзывом и советами о курсе CS7642 (Reinforcement Learning) программы Georgia Tech OMSCS, который он прошёл в 2018 году. Курс описывается как очень насыщенный, но тяжёлый: студенты тратят до 30–40 часов в неделю. Оценка складывается из еженедельных домашних заданий (30%), трёх крупных проектов (по 15% каждый) и одного большого финального экзамена из 25 вопросов «верно/неверно» с обязательными объяснениями (25%). Самым увлекательным был второй проект — обучение агента глубокого обучения с подкреплением (автор применил Double DQN) сажать ракету в среде OpenAI LunarLander, где агент успешно приземлился лишь к 2000-й итерации. Курс охватывает методы на основе модели (value iteration, policy iteration) и без модели (Q-learning, deep Q-learning), а также мультиагентные подходы и теорию игр, и даёт серьёзную практику в чтении и воспроизведении научных статей, включая работы Sutton и DeepMind.
OMSCS CS7642 (Reinforcement Learning) Review and Tips
OMSCS CS7642 (Reinforcement Learning): отзыв и советы
[ omscs learning deeplearning python ] · 6 мин чтения
You might also be interested in this OMSCS FAQ I wrote after graduation. Or view all OMSCS related writing here: omscs.
Возможно, вам также будет интересен этот OMSCS FAQ, который я написал после выпуска. Или посмотрите все мои статьи, связанные с OMSCS, здесь: omscs.
I know, I know, I’m guilty of not writing over the last four months. Things have been super hectic with project Voyager at Lazada, switching over to the new platform in end March and then preparing for our birthday campaign in end Apr. Any free time I had outside of that was poured into the Georgia Tech Reinforcement Learning (CS7642), which is the subject of this post.
Знаю, знаю, я виноват, что не писал в течение последних четырёх месяцев. Всё было ужасно загружено из-за проекта Voyager в Lazada: переход на новую платформу в конце марта, а затем подготовка к нашей юбилейной кампании в конце апреля. Всё свободное время помимо этого уходило на курс Reinforcement Learning (CS7642) в Georgia Tech, которому и посвящён этот пост.
The course was very enriching and fun. Throughout the course, we learnt techniques that allow one to optimize outcomes while navigating the world, and were introduced to several seminal and cutting edge (at least back in 2018) papers. I highly recommend this course for anyone who’s part of the Georgia Tech OMSCS.
Курс был очень насыщенным и увлекательным. На протяжении курса мы изучали методы, позволяющие оптимизировать результаты, ориентируясь в окружающем мире, и познакомились с несколькими основополагающими и передовыми (по крайней мере, на 2018 год) статьями. Я настоятельно рекомендую этот курс всем, кто учится на программе Georgia Tech OMSCS.
An especially fun project involved landing a rocket in OpenAI’s LunarLander environment. This was implemented via deep reinforcement learning approaches. Here’s how the agent did on its first try (in reinforcement learning, we refer to the “models” as agents; more here). As you can see, it crashed right onto the surface. =(
Особенно увлекательным был проект по посадке ракеты в среде OpenAI LunarLander. Он был реализован с помощью методов глубокого обучения с подкреплением. Вот как агент справился с первой попытки (в обучении с подкреплением «модели» принято называть агентами; подробнее здесь). Как видите, он рухнул прямо на поверхность. =(
Why take this course?
Зачем проходить этот курс?
At the tail end of the Machine Learning class I took last fall, a small introduction to reinforcement learning was made. We learnt about model-based methods such as Value Iteration and Policy Iteration, as well as model-free methods such as Q-learning.
В самом конце курса Machine Learning, который я проходил прошлой осенью, было сделано небольшое введение в обучение с подкреплением. Мы узнали о методах на основе модели, таких как Value Iteration и Policy Iteration, а также о методах без модели, таких как Q-learning.
I was intrigued by model-free methods and thought it might be an interesting and practical approach to model aspects of people in the world, without a complete model of human characteristics. For example, their behavior on a website (where each click gives more information about what they will click next), their health (where each doctor’s visit or activity provides information on their overall health), etc.
Меня заинтересовали методы без модели, и я подумал, что это может быть интересным и практичным подходом к моделированию аспектов поведения людей в мире без полной модели человеческих характеристик. Например, их поведение на сайте (где каждый клик даёт больше информации о том, на что они кликнут дальше), их здоровье (где каждый визит к врачу или активность даёт информацию об их общем состоянии) и так далее.
What’s the course like?
Каков курс на практике?
In terms of workload, this class is pretty heavy. Most students reported spending up to 30 - 40 hours weekly, and even then, some still could not complete the projects.
По объёму нагрузки этот курс довольно тяжёлый. Большинство студентов сообщали, что тратят до 30–40 часов в неделю, и даже при этом некоторые так и не смогли завершить проекты.
There are about 2 hours of lectures weekly. However, these lectures largely skim the surface, and lean more towards theory. Thus, you’ll also find yourself spending an hour or two viewing additional external material (David Silver’s videos are excellent for this) and the office hours by the TAs.
Лекции занимают около 2 часов в неделю. Однако эти лекции во многом лишь скользят по поверхности и больше склоняются к теории. Поэтому вы также будете тратить час-другой на просмотр дополнительных внешних материалов (видео David Silver отлично для этого подходят) и на офис-часы с ассистентами (TA).
There’s one small homework assignment due almost every week, except on weeks where projects are due. These are largely aimed at connecting the theory to the practical, though I found some of them unnecessarily theoretical and low-level (e.g., design a Markov decision process that would take Policy Iteration more than 15 iterations to solve). These account for 30% of the overall grade, and one is expected to complete all of them. They can take about 2 - 8 hours, depending on whether you see the “trick” or not.
Почти каждую неделю сдаётся одно небольшое домашнее задание, кроме недель, когда сдаются проекты. В основном они нацелены на связь теории с практикой, хотя некоторые из них показались мне излишне теоретическими и низкоуровневыми (например, спроектировать марковский процесс принятия решений, для решения которого Policy Iteration потребовалось бы более 15 итераций). На них приходится 30% итоговой оценки, и предполагается, что вы выполните все. Они могут занимать от 2 до 8 часов в зависимости от того, заметите ли вы «фишку» или нет.
There are also three big projects, which involved writing papers no more than five pages long. The first one involved replicating the seminal TD-lambda paper by Sutton, while the third one involved replicating a paper on multi-agent reinforcement learning, including correlated equilibrium.
Также есть три крупных проекта, в рамках которых нужно было писать статьи объёмом не более пяти страниц. Первый предполагал воспроизведение основополагающей статьи Sutton о TD-lambda, а третий — воспроизведение статьи о мультиагентном обучении с подкреплением, включая коррелированное равновесие.
The second project deserves special mention—we built a deep reinforcement learning agent to land a rocket in OpenAI’s LunarLander environment! This was very fun and provided hand-on experience with deep reinforcement learning. This included reading up and replicating DeepMind’s groundbreaking papers on Reinforcement Learning. The projects account for 15% of the overall grade each, and took upwards of 30 hours for me (i.e., coding, running experiments, writing).
Второй проект заслуживает особого упоминания — мы построили агента глубокого обучения с подкреплением, чтобы сажать ракету в среде OpenAI LunarLander! Это было очень увлекательно и дало практический опыт работы с глубоким обучением с подкреплением. Сюда входило изучение и воспроизведение прорывных статей DeepMind по обучению с подкреплением. Каждый проект составляет 15% итоговой оценки, и на него у меня уходило свыше 30 часов (то есть программирование, проведение экспериментов, написание текста).
There was one gigantic exam at the end of the course, covering topics from the entire course and is the remaining 25% of the overall grade. The exam format was 25 True/False questions with explanations—just indicating true or false without any explanation would not earn you any points, even if it was correct. I prepared for these largely focused on the lectures and was able to get by.
В конце курса был один огромный экзамен, охватывающий темы всего курса, на который приходятся оставшиеся 25% итоговой оценки. Формат экзамена — 25 вопросов «верно/неверно» с объяснениями: простое указание «верно» или «неверно» без объяснения не приносило никаких баллов, даже если ответ был правильным. Я готовился к экзамену, в основном сосредоточившись на лекциях, и сумел справиться.
It wouldn’t be complete if I didn’t mention the excellent TAs that the course had. The TAs held office hours once, sometimes twice, a week, to help clarify on the lectures and provide guidance on the homework, projects, and exams. The class would not have been half as enriching without them. Of the four courses I’ve taken so far, the TAs in Reinforcement Learning were by far the best (though Pedro in Computer Vision was excellent as well).
Было бы неполно, если бы я не упомянул превосходных ассистентов (TA), которые были на этом курсе. Ассистенты проводили офис-часы раз, а иногда и дважды в неделю, чтобы разъяснять лекции и давать рекомендации по домашним заданиям, проектам и экзаменам. Без них курс не был бы и наполовину таким насыщенным. Из четырёх курсов, которые я прошёл к этому моменту, ассистенты на Reinforcement Learning были безусловно лучшими (хотя Pedro на Computer Vision тоже был великолепен).
Landing the LunarLander
Посадка LunarLander
For the OpenAI LunarLander, the goal is to land on the moon. There are four discrete actions available: do nothing, fire left orientation engine, fire main engine, fire right orientation engine. The state is the coordinates and position of the lander.
В OpenAI LunarLander цель — приземлиться на Луну. Доступны четыре дискретных действия: ничего не делать, включить левый ориентационный двигатель, включить главный двигатель, включить правый ориентационный двигатель. Состояние — это координаты и положение посадочного модуля.
The reward is a combination of how close the lander is to the landing pad and how close it is to zero speed, basically the closer it is to landing the higher the reward. There are other things that affect the reward such as, firing the main engine deducts points on every frame, moving away from the landing pad deducts points, crashing deducts points, etc. This reward function is determined by the Lunar Lander environment. The game or episode ends when the lander lands, crashes, or flies off away from the screen.
Вознаграждение складывается из того, насколько близко посадочный модуль находится к посадочной площадке и насколько близка его скорость к нулю; по сути, чем ближе он к посадке, тем выше вознаграждение. Есть и другие факторы, влияющие на вознаграждение: включение главного двигателя отнимает очки на каждом кадре, удаление от посадочной площадки отнимает очки, крушение отнимает очки и так далее. Эта функция вознаграждения определяется самой средой Lunar Lander. Игра или эпизод заканчивается, когда модуль приземляется, разбивается или улетает за пределы экрана.
We had previously seen how it performed (badly) on iteration 1, but let’s just watch it crash and burn again.
Ранее мы уже видели, как (плохо) он справился на 1-й итерации, но давайте просто ещё раз посмотрим, как он терпит крушение.
On iteration 125, it’s descending at a somewhat lower speed than iteration 1, but still far from successful.
На 125-й итерации он снижается с несколько меньшей скоростью, чем на 1-й итерации, но всё ещё далёк от успеха.
On iteration 1000, it manages to land successfully. Nonetheless, it was unduly slow in doing so and there’s plenty of room for improvement.
На 1000-й итерации ему удаётся успешно приземлиться. Тем не менее он делает это неоправданно медленно, и есть большой простор для улучшения.
On iteration 2000, it finally manages to land successfully in a fairly short amount of time.
На 2000-й итерации ему наконец удаётся успешно приземлиться за довольно короткое время.
What did I learnt?
Чему я научился?
The class teaches the fundamentals of reinforcement learning, starting with model-based methods such as value iteration and policy iteration. It also covered model-free methods such as Q-learning (i.e., the classic, tabular approach) and deep Q-learning (personally, I applied a Double DQN in the second project). In additional to single-agent approaches, it also covered multi-agent approaches and game theory, and explored multi-agent reinforcement learning.
Курс обучает основам обучения с подкреплением, начиная с методов на основе модели, таких как value iteration и policy iteration. Также были охвачены методы без модели, такие как Q-learning (то есть классический, табличный подход) и deep Q-learning (лично я применил Double DQN во втором проекте). Помимо одноагентных подходов, рассматривались и мультиагентные подходы и теория игр, а также было исследовано мультиагентное обучение с подкреплением.
In addition, the class provided significant practice with reading, understanding, and replicating papers. We learnt that this is a very difficult task, with most papers not clearly documenting their parameters, libraries, and code. Replicating the experiments was made harder given advances in technology—certain algorithms that performed poorly (e.g., failed to converge) during time of publishing might converge with current technology). One exception to this was DeepMind’s papers on reinforcement learning that provided a lot of detail on their algorithms, pseudo code, and parameters.
Кроме того, курс дал значительную практику в чтении, понимании и воспроизведении научных статей. Мы узнали, что это очень непростая задача: большинство статей не документируют чётко свои параметры, библиотеки и код. Воспроизведение экспериментов осложнялось прогрессом технологий — некоторые алгоритмы, которые на момент публикации работали плохо (например, не сходились), могут сойтись на современных технологиях. Одним исключением были статьи DeepMind по обучению с подкреплением, которые давали много деталей об их алгоритмах, псевдокоде и параметрах.
What’s next?
Что дальше?
I’m excited to learn further how reinforcement learning can help with understanding and predicting human behavior better, especially behavior that has a temporal aspect (e.g., customer journey on a website, a person’s health over time, etc). Hopefully I will be able to find useful use cases to apply them at work.
Мне не терпится узнать дальше, как обучение с подкреплением может помочь лучше понимать и предсказывать поведение людей, особенно поведение, имеющее временной аспект (например, путь клиента на сайте, состояние здоровья человека во времени и так далее). Надеюсь, я смогу найти полезные сценарии применения на работе.
In addition, there’re plenty of excellent resources available online for further learning, such as:
Кроме того, в интернете есть множество отличных ресурсов для дальнейшего обучения, например:
Семинары David Silver, которые в основном вводного уровня и охватывают работы Sutton, а также Deep RL Bootcamp от Google и Berkeley
If you found this useful, please cite this write-up as:
Если этот материал оказался полезным, пожалуйста, цитируйте его так:
Yan, Ziyou. (Jul 2018). OMSCS CS7642 (Reinforcement Learning) Review and Tips. eugeneyan.com. https://eugeneyan.com/writing/omscs-cs7642-reinforcement-learning/.
Yan, Ziyou. (Jul 2018). OMSCS CS7642 (Reinforcement Learning) Review and Tips. eugeneyan.com. https://eugeneyan.com/writing/omscs-cs7642-reinforcement-learning/.
or
или
@article{yan2018reinforcement,
title = {OMSCS CS7642 (Reinforcement Learning) Review and Tips},
author = {Yan, Ziyou},
journal = {eugeneyan.com},
year = {2018},
month = {Jul},
url = {https://eugeneyan.com/writing/omscs-cs7642-reinforcement-learning/}
}
@article{yan2018reinforcement, title = {OMSCS CS7642 (Reinforcement Learning) Review and Tips}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2018}, month = {Jul}, url = {https://eugeneyan.com/writing/omscs-cs7642-reinforcement-learning/} }
Join 11,800+ readers getting updates on machine learning, RecSys, LLMs, and engineering.
Присоединяйтесь к 11 800+ читателям, получающим новости о машинном обучении, RecSys, LLM и инженерии.