Въведение и внедряване на алгоритъм за дълбоко укрепване на обучението

Обучението с подсилване е клон на машинното обучение, който е вдъхновен от поведенческата психология на хората и животните. При контролирано обучение (SL) обучението беше ограничено, тъй като винаги се нуждае от външен обучаващ сигнал, който помага за решаването на задачи, като класификация и регресия.

За разлика от SL, Reinforcement Learning се основава на различни принципи. Една от основните цели е да се създаде автономен агент, който взаимодейства със средата, за да учи и избира оптималните действия, полезни за постигане на целите си, като максимизиране на наградата. Агентът наблюдава състояние в околната среда и извършва действие, дадено на състоянието. Всеки път, когато агентът взаимодейства, като предприеме действие, той може да получи положителнаили отрицателна награда.

Оптималното поведение се подобрява с течение на времето чрез проба и грешка.Този тип обучение ми напомня за начина, по който се учим от опита. Мразим, когато правим грешки, но грешките могат да бъдат ценни, когато се учим от тях и се справяме по-добре в бъдеще. По същия начин обучението с подсилване изследва различни действия и състояния, за да намери оптималните действия. Освен това обучението на агентите е по-стабилно, когато грешките са направени рано по време на процеса на обучение.

За тези характеристики Reinforcement Learning често се прилага за игра на игри, роботика и много други проблеми, свързани с вземането на решения. Комбинацията от Reinforcement Learning с техники за Deep Learning направи възможно постигането на огромни подобрения при проблеми с високомерно пространство на състоянието. Например, това е полезно, когато агент трябва да се учи от пикселите на екрана. Тези методи се наричат ​​Обучение с дълбоко укрепване.

В този урок ще обуча агент за задачата на Acrobot. Pytorch ще бъде използван за внедряване на мрежата Deep Q, докато Google Colab notebook ще бъде използван, тъй като предоставя безплатен GPU за ускоряване на обучението.

Съдържание:

  1. „OpenAI Gym“
  2. „Инсталиране и импортиране на библиотеки“
  3. „Пространства за действие и наблюдение“
  4. „Случаен агент“
  5. „Внедряване на Deep Q мрежа“
  6. „Повторно изживяване“
  7. „Епсилон-алчна политика“
  8. Политика на Softmax
  9. Профил на проучване
  10. Обучение

1. OpenAI Gym

Gym е библиотека с отворен код, която предоставя реализации на алгоритми за обучение с подсилване [1]. Има много преподаватели, достъпни за обучение, като Cart-Pole и Pong. В този урок ще се съсредоточа върху средата на Acrobot. В предишния урок обясних добре как работи играта, ако искате да я разберете по-дълбоко.

2. Инсталирайте и импортирайте библиотеки

Трябва да инсталираме и импортираме пакети на Python. Най-важният пакет е фитнес залата, която осигурява среда за укрепване на обучението. Има и други полезни библиотеки като:

  • torch.nn за внедряване на дълбоката Q мрежа
  • IPython.display и pyvirtualdisplay.display са необходими за създаване на виртуален дисплей, върху който да се рисуват изображения от играта
  • collectionsе алтернатива на основните обекти на Python, като списък, кортеж, речник, набор. Използва се за съхраняване на опита на агента.

3. Пространства за действие и наблюдение

Можем да създадем екземпляр на Gym средата с помощта на функцията make. Можем също така да зададем произволно семе за околната среда, за да възпроизвежда всеки път едни и същи резултати. Както вероятно можете да си представите, всяка среда има различен брой действия и наблюдения. Можем лесно да видим пространствата за действие и наблюдение, като ги отпечатаме:

Пространството на действието е дискретно, така че действието може да бъде едно от тези неотрицателни числа: [0,1,2]. За разлика от пространството за действие, пространството за наблюдение е Box, което представлява n-измерна кутия. Тогава всяко наблюдение ще бъде масив от 6 числа с диапазон между -28 и 28.

4. Случаен агент

Това е пример за стартиране на агент, който просто избира действие на случаен принцип. Средата на Acrobot ще работи за 10 епизода, показвайки видеото на играта на всяка стъпка. Преди да стартираме агента, ние дефинираме функциите за визуализиране на видеото на средата. Тези функции са необходими, за да се активира изобразяването на средата във фитнес залата в Google Colab.

Накрая стартираме произволния агент за 10 стъпки:

Този код обобщава формалния проблем на краен процес на вземане на решения по Марков (MDP), който е общата настройка за проблем с обучението за подсилване. Знаем, че има пет компонента, които работят заедно:

  • Агенте роботизираната ръка, съставена от две стави и две връзки и ставата между двете връзки се задейства
  • Околна средасъответства на средата на Acrobot
  • Състояниесе състои от масив от 6 числа
  • Действие: има 3 възможни действия
  • Награда: -1 на всяка стъпка

Следвайки дефиницията на взаимодействието агент-среда в MDP от книгата Reinforcement Learning: An uvod, написана от Sutton и Barto, ние знаем, че:

Агентът и средата си взаимодействат при всяка от поредица от дискретни времеви стъпки, t=0,1,2,3,…. На всяка времева стъпка t агентът получава някакво представяне на състоянието на средата и въз основа на това избира действие. Една стъпка по-късно, отчасти като последица от своето действие, агентът получава числова наградаи се озовава в ново състояние [3].

И така, цикълът агент-среда е внедрен: Във всеки епизод получаваме:

  • първоначално състояние извикване на env.reset
  • агентът избира произволно действие, което приема една от стойностите [0,1,2]
  • С функцията стъпка произволното действие се прилага и се връщат четири стойности: ново състояние, наградапостигната в предишната стъпка, флаг готово това е True, когато играта приключи и диагностичната информация се използва за отстраняване на грешки.
  • Задайте текущото състояние за следващата итерация

Сега извикваме функцията show_videos, за да покажем видеоклиповете, по един за всеки епизод:

show_videos()

5. Внедрете Deep Q мрежа

В този раздел показвам как да внедря мрежа Deep Q с Pytorch в играта Acrobot. Моделът е невронна мрежа, която приема като вход измерението на пространството на състоянието и връща оптималната q-стойност, съответстваща на всяко възможно действие. Тъй като има три възможни действия за преместване на роботизираната ръка, броят на върнатите изходи е 3.

6. Изживейте повторение

След като дефинираме мрежата, можем да създадем клас, наречен ReplayMemory. Невронните мрежи могат да бъдат нестабилни или да се разминават, когато корелацията присъства в последователността от наблюдения. Поради тази причина се нуждаем и от Experience Replay, което позволява на агентите да си спомнят и да се учат от преживяванията в миналото. Освен това той рандомизира данните, като по този начин предоставя некорелирани данни.

За да извършим повторение на опит, ние съхраняваме преживяванията на агента e_t=(състояние, действие, следващо състояние, награда) на всяка времева стъпка t в набор от данни D_t={e_1,…,e_t}. По време на обучението прилагаме актуализации на Q-обучение върху проби (или мини-партиди) от опит (s,a,r,s’)~U(D), изтеглени равномерно на случаен принцип от набора от съхранени проби [4].

На практика се нуждаем от опашка с предварително определен капацитет. Когато достигнем максималния капацитет, най-старият елемент в опашката ще бъде заменен с нов. Това поведение може да бъде постигнато с помощта на обекта deque от библиотеката с колекции на python.

Максималният капацитет е единственият вход, поискан от обекта ReplayMemory. По този начин ние дефинираме атрибут на паметта, равен на deque обекта с maxlen капацитет.

Ние също така дефинираме функцията за натискане, за да добавим ново изживяване в паметта за повторение.

Методът sample е дефиниран за вземане на проби от паметта. Броят на преживяванията е равен на batch_size. Получаваме всички проби, ако заявеният размер на партидата е по-голям от броя на пробите в момента в паметта.

7. Епсилон-алчна политика

След извършване на повторното изживяване, следващата стъпка е да изберете и изпълните действие според политиката за epsilon-greedy. Тази политика избира случайно действие с вероятност епсилон, в противен случай изберете най-доброто действие, съответстващо на най-високата Q-стойност. Основната идея е, че агентът изследва средата, вместо да я експлоатира в началото. Колкото повече агентът се учи от средата, толкова повече ще избира оптималните действия, базирани на експлоатацията.

8. Политика на Softmax

Политиката Softmax се използва за избор на оптимално действие въз основа на разпределение, получено чрез прилагане на softmax към очакваните Q-стойности, като се има предвид температурният параметър. Има два възможни случая:

  • колкото по-висока е температурата, толкова повече разпределението ще се сближи до произволно равномерно разпределение.
  • При нулева температура политиката винаги ще избира действието с най-висока Q-стойност.

9. Проучвателен профил

Ние дефинираме експоненциално намаляващ профил на изследване, като използваме политика за softmax:

softmax_temperature = initial_temperature * exponential_decay^(i)

10. Обучение

Можем да инициализираме хиперпараметри, като оптимизатора на SGD и функцията за загуба на Huber, обекта ReplayMemory, мрежата за политика и целевата мрежа.

Функцията update_step е дефинирана за извършване на една стъпка на оптимизация. Първо, той взема проби от партида от паметта за повторение. След това създава тензори за всеки елемент от партидата. Той също така изчислява маска от некрайни състояния и обединява партидните елементи.

По-късно той изчислява всички Q-стойности на мрежата от политики, като се имат предвид действителните състояния. За разлика от мрежата на правилата, функцията на стойността се изчислява въз основа на следващите състояния, използвайки целевата мрежа.

И накрая, можем да получим очакваните Q стойности въз основа на Q-стойностите на мрежата на правилата и максималните Q-стойности, изчислени с помощта на целевата мрежа.

Сега е време да обучим агента за обучение Deep Q, изпълняващ 800 епизода. В цикъла for трябва само да извикаме всички функции, дефинирани по-рано. Също така ще показваме видеоклипа на всеки 100 епизода.

От видеото на последния епизод можем да забележим, че агентът се научи да решава задачата си. Ясно е, ако погледнете и видеото след само 100 епизода, където агентът все още проучва оптималните действия. След като обучението приключи, можем също така да покажем кумулативните стойности на резултата, получени за епизодите:

В началото натрупаната награда остава -500. След 200 епизода резултатът нараства експоненциално, оставайки постоянен на около -100. Последната стъпка е да проверите дали агентът наистина се е научил да решава задачата си. Подобно е на случаен агент, внедрен преди. Вместо да предприемем произволно действие, ние избираме оптималното действие с температурен параметър, зададен равен на 0. По този начин политиката на softmax винаги ще избира действието с най-висока Q-стойност.

Можем да наблюдаваме, че кумулативните резултати за награди остават малки при крайните резултати от теста.

Последни мисли:

В този урок предоставих общ преглед за изграждане на Deep Q мрежа с Pytorch. За да го разберете добре, по-добрият начин е да разделите кода на градивни блокове и да се фокусирате върху един блок всеки път. В началото може да изглежда трудно, ако преди това сте опитвали само контролирани и неконтролирани техники. Но след известно усилие ще можете да го разберете и дори да приложите дълбоката q мрежа в други среди. Кодът на Github е тук.

Препратки:

[1] https://gym.openai.com/docs/

[2] https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html

[3] https://web.stanford.edu/class/psych209/Readings/SuttonBartoIPRLBook2ndEd.pdf

[4] https://www.nature.com/articles/nature14236