У класичном програмирању програмери изричито израђују софтверске инструкције и из података се уопште ништа не учи. Супротно томе, машинско учење је поље рачунарске науке које користи статистичке методе како би омогућило рачунарима да уче и да извуку знање из података без изричитог програмирања.
У овом упутству за учење појачања показаћу како можемо да користимо ПиТорцх да подучимо неуронску мрежу за учвршћивање како да игра Флаппи Бирд. Али прво, мораћемо да покријемо бројне грађевинске блокове.
Алгоритми машинског учења могу се приближно поделити на два дела: Традиционални алгоритми учења и дубоко учење алгоритми. Традиционални алгоритми учења обично имају много мање параметара који се могу научити од алгоритама дубоког учења и имају много мање капацитета за учење.
Такође, традиционални алгоритми учења нису у могућности издвајање својстава : Стручњаци за вештачку интелигенцију морају да пронађу добру представу података која се затим шаље алгоритму учења. Примери традиционалних техника машинског учења укључују СВМ, случајну шуму, стабло одлука и $ к $ -средства, док је централни алгоритам у дубоком учењу дубока неуронска мрежа .
Улаз у дубоку неуронску мрежу могу бити необрађене слике, а стручњак за вештачку интелигенцију не треба да пронађе представу података - неуронска мрежа проналази најбољу представу током процеса обуке.
Много техника дубоког учења познато је веома дуго, али недавни напредак у хардверу убрзао је истраживање и развој дубоког учења. Нвидиа је одговорна за ширење поља јер су њени ГПУ-ови омогућили брзе експерименте дубоког учења.
Алгоритми машинског учења састоје се од параметара који се могу научити који су подешени у процесу тренинга и параметара који се не могу научити који се постављају пре процеса тренинга. Позвани су параметри постављени пре учења хиперпараметри .
Претрага мреже је уобичајена метода за проналажење оптималних хиперпараметара. То је метода грубе силе: То значи испробавање свих могућих комбинација хиперпараметара у дефинисаном опсегу и одабир комбинације која максимизира унапред дефинисану метрику.
Један од начина класификације алгоритама за учење је повлачење линије између надзираних и ненадгледаних алгоритама. (Али то није нужно тако једноставно: Учење ојачања лежи негде између ове две врсте.)
Када говоримо о учењу под надзором, гледамо на парове $ (к_и, и_и) $. $ к_и $ је улаз алгоритма, а $ и_и $ је излаз. Наш задатак је да пронађемо функцију која ће извршити тачно мапирање од $ к_и $ до $ и_и $.
Да би подесили параметре који се могу научити тако да дефинишу функцију која пресликава $ к_и $ у $ и_и $, потребно је дефинисати функцију губитка и оптимизатор. Оптимизатор минимализује функцију губитка. Један пример функције губитка је средње квадратна грешка (МСЕ):
[МСЕ = сум_ {и = 1} ^ {н} (и_и - широкхат {и_и}) ^ 2 ]Овде је $ и_и $ ознака истине, а $ видехат {и_и} $ предвиђена ознака. Један од оптимизатора који је веома популаран у дубоком учењу је стохастички градијентни спуст . Постоји много варијација које покушавају да побољшају методу стохастичког градијентног спуштања: Адам, Ададелта, Адаград и тако даље.
Ненадгледани алгоритми покушавају да пронађу структуру података без изричитог снабдевања ознакама. $ к $ -меанс је један од примера алгоритама без надзора који покушава да пронађе оптималне кластере у подацима. Испод је слика са 300 тачака података. $ к $ -значи алгоритми пронашли су структуру у подацима и свакој тачки података доделили ознаку кластера. Свака грозд има своју боју.
Учење за појачање користи награде: оскудне ознаке са одложеним временом. Агент предузима мере, што мења средину, од које може добити ново запажање и награду. Посматрање је подстицај који агент опажа из околине. То може бити оно што агент види, чује, помирише итд.
Награда се додељује агенту када предузме неку радњу. То агенту говори колико је добра акција. Сагледавањем запажања и награда, агент учи како се оптимално понашати у окружењу. У наставку ћу детаљније ући у ово.
Постоји неколико различитих приступа овој техници. Пре свега, ту је активно учење појачања, које овде користимо. Насупрот томе, постоји пасивно учење појачања, где су награде само друга врста посматрања, а одлуке се уместо тога доносе у складу са фиксном политиком.
Коначно, инверзно учење појачавања покушава да реконструише наградну функцију с обзиром на историју акција и њихове награде у разним државама.
Свака фиксна инстанца параметара и хиперпараметара назива се моделом. Експерименти машинског учења обично се састоје из два дела: обуке и тестирања.
Током процеса тренинга, параметри који се могу научити подешавају се помоћу података о тренингу. У процесу испитивања, параметри који се могу научити су замрзнути, а задатак је да се провери колико добро модел предвиђа претходно невиђене податке. Генерализација је способност машине за учење да тачно изведе нови, невиђени пример или задатак након што је искусио скуп података за учење.
Ако је модел превише једноставан у односу на податке, неће моћи да стане у податке о обуци и имаће лош учинак како на скупу података о обуци тако и на скупу тестова. У том случају кажемо да је модел ундерфиттинг .
Ако модел машинског учења добро функционише на скупу података о обуци, али слабо на скупу тестова, кажемо да је оверфиттинг . Прекомерно прилагођавање је ситуација када је модел сувише сложен у односу на податке. Може савршено да се уклопи у податке о тренингу, али је толико прилагођен скупу података о тренингу да има слабе резултате на тест подацима - тј. Једноставно не генералише.
Испод је слика која показује недовољно и прекомерно опремљено у поређењу са уравнотеженом ситуацијом између укупних података и функције предвиђања.
Подаци су пресудни за изградњу модела машинског учења. Обично традиционални алгоритми учења не захтевају превише података. Али због ограниченог капацитета, перформансе су такође ограничене. Испод је заплет који показује како се методе дубоког учења добро скалирају у поређењу са традиционалним алгоритмима машинског учења.
Неуронске мреже састоје се од више слојева. Слика испод приказује једноставну неуронску мрежу са четири слоја. Први слој је улазни слој, а последњи слој је излазни слој. Два слоја између улазног и излазног слоја су скривени слојеви.
Ако неуронска мрежа има више скривених слојева, називамо је дубоком неуронском мрежом. Улазни скуп $ Кс $ даје се неуронској мрежи и добија се излаз $ и $. Учење се врши помоћу алгоритма повратног ширења који комбинује функцију губитка и оптимизатор.
Размножавање се састоји из два дела: додавање напред и назад. У прослеђеном пролазу, улазни подаци се стављају на улаз неуронске мреже и добијају се излази. Израчунава се губитак између основне истине и предвиђања, а затим се у повратном пролазу параметри неуронских мрежа подешавају у односу на губитак.
Једна варијација неуронске мреже је конволуциона неуронска мрежа . Примарно се користи за задатке рачунарског вида.
Најважнији слој у конволуционим неуронским мрежама је конволуциони слој (отуда и назив). Његови параметри су направљени од филтера који се могу научити, званих и језгра. Конволуциони слојеви примењују операцију конволуције на улаз, прослеђујући резултат следећем слоју. Операција конволуције смањује број параметара који се могу научити, функционишући као врста хеуристике и чинећи неуронску мрежу лакшом за обуку.
Испод је приказано како функционише једно конволуционо језгро у конволуционом слоју. Језгро се примењује на слику и добија се савијена карактеристика.
РеЛУ слојеви се користе за увођење нелинеарности у неуронску мрежу. Нелинеарности су важне јер помоћу њих можемо моделирати све врсте функција, не само линеарне, чинећи неуронску мрежу универзалним апроксиматором функција. Ово чини да се РеЛУ функција дефинише овако:
[РеЛУ = мак (0, к) ]РеЛУ је један од примера тзв функције активације користи се за увођење нелинеарности у неуронске мреже. Примери осталих функција активирања укључују сигмоидне и хипер-тангентне функције. РеЛУ је најпопуларнија функција активације јер се показало да чини неуронску мрежу ефикаснијом у тренингу у поређењу са осталим функцијама активације.
Испод је графикон функције РеЛУ.
Као што видите, ова РеЛУ функција једноставно мења негативне вредности у нуле. Ово помаже у спречавању проблема с нагибом који нестаје . Ако градијент нестане, то неће имати велики утицај на подешавање тежине неуронске мреже.
Конволуциона неуронска мрежа састоји се од више слојева: конволуционих слојева, РеЛУ слојева и потпуно повезаних слојева. Потпуно повезани слојеви повезују сваки неурон у једном слоју са сваким неуроном другог слоја, као што се види са два скривена слоја на слици на почетку овог одељка. Последњи потпуно повезани слој пресликава излазе са претходног слоја у, у овом случају, number_of_actions
вредности.
Дубинско учење је успешно и надмашује класичне алгоритме машинског учења у неколико потпоља машинског учења, укључујући рачунарски вид, препознавање говора и учење појачања. Ова поља дубоког учења примењују се у разним доменима из стварног света: финансије, медицина, забава итд.
Учење ојачања заснива се на агент . Агент предузима радње у окружењу и од њега добија запажања и награде. Агента треба обучити да максимализује кумулативну награду. Као што је напоменуто у уводу, код класичних алгоритама машинског учења инжењери машинског учења морају да изврше екстракцију карактеристика, тј. Да створе добре карактеристике које добро представљају животну средину и које се уносе у алгоритам машинског учења.
Користећи дубоко учење, могуће је створити систем од краја до краја који узима високодимензионални унос - нпр. видео - и на њему се учи оптимална стратегија да агент предузима добре акције.
2013. године, лондонски АИ стартуп ДеепМинд створио је велики напредак у учењу управљања агентима директно са сензорских улаза високе димензије. Објавили су рад, Играње Атара уз учење дубоког појачања , у којем су показали како су научили вештачку неуронску мрежу да игра Атари игре само гледајући у екран. Њих је преузео Гоогле, а затим објавио нови чланак у Природа са неким побољшањима: Контрола на људском нивоу кроз дубоко учење ојачавања .
За разлику од осталих парадигми машинског учења, учење појачања нема супервизора, већ само сигнал за награду. Повратне информације касне: Нису тренутне као у надгледаним алгоритмима учења. Подаци су секвенцијални и радње агента утичу на наредне податке које прима.
Сада се агент налази у свом окружењу, које је у одређеном стању. Да бисмо ово детаљније описали, користимо поступак одлуке Маркова, који је формални начин моделирања овог појачања окружења за учење . Састоји се од скупа стања, скупа могућих радњи и правила (нпр. Вероватноће) за прелазак из једног стања у друго.
Агент је у стању да изводи радње, трансформишући окружење. Награду називамо $ Р_т $. То је скаларни повратни сигнал који показује колико добро агент ради у кораку $ т $.
За добре дугорочне перформансе морају се узети у обзир не само тренутне награде већ и будуће награде. Укупна награда за једну епизоду из временског корака $ т $ је $ Р_т = р_т + р_ {т + 1} + р_ {т + 2} + лдотс + р_н $. Будућност је неизвесна и што даље идемо у будућности, то ће се будућа предвиђања више разилазити. Због тога се користи снижена будућа награда: $ Р_т = р_т + гама р_ {т + 1} + гама ^ 2р_ {т + 2} + лдотс + гама ^ {нт} р_н = р_т + гама Р_ {т + 1} $. Агент треба да одабере акцију која максимизира снижену будућу награду.
Функција $ К (с, а) $ представља максималну снижену будућу награду када се акција $ а $ изврши у држави $ с $:
[К (с_т, а_т) = мак Р_ {т + 1} ]Процену будуће награде даје Белманова једначина: $ К (с, а) = р + гама мак_ {а ’} К (с’, а ’) $. Другим речима, максимална будућа награда датој држави $ с $ и акција $ а $ је тренутна награда плус максимална будућа награда за следеће стање.
Приближавање К-вредности помоћу нелинеарних функција (неуронске мреже) није врло стабилно. Због тога се понављање искуства користи за стабилност. Искуство током епизода на тренингу се чува у меморији за репродукцију. Случајне мини-серије из меморије за репродукцију користе се уместо да се користе најновији прелази. Ово разбија сличност узорака који следе, који би иначе неуронску мрежу довели до локалног минимума.
Постоје још два важна аспекта која треба поменути у вези са дубоким К-учењем: Истраживање и експлоатација. Са експлоатацијом се доноси најбоља одлука с обзиром на тренутне информације. Истраживање прикупља више информација.
Када алгоритам изведе радњу коју је предложила неуронска мрежа, он врши експлоатацију: искоришћава научено знање неуронске мреже. Супротно томе, алгоритам може предузимати насумичне радње, истражујући нове могућности и уводећи потенцијална нова знања у неуронску мрежу.
„Дееп К-леарнинг алгоритам са поновним искуством“ из рада ДеепМинд-а Играње Атара уз учење дубоког појачања приказано је доле.
ДеепМинд односи се на конволуционе мреже обучене са њиховим приступом као дубоке К-мреже (ДКН).
Флаппи Бирд је била популарна мобилна игра коју је првобитно развио вијетнамски уметник и програмер видео игара Донг Нгуиен. У њему играч контролише птицу и покушава да лети између зелених цеви не ударајући их.
Испод је снимак екрана са клон Флаппи Бирд кодиран помоћу ПиГаме-а :
Клон је од тада рачваст и модификован: Позадина, звукови и различити стилови птица и цеви су уклоњени и код је прилагођен тако да се лако може користити са једноставним оквирима за учвршћивање. Измењени мотор за игре је преузет из овај пројекат ТенсорФлов :
Али уместо да користим ТенсорФлов, изградио сам оквир за дубоко појачавање помоћу ПиТорцх-а. ПиТорцх је оквир за дубоко учење за брзо, флексибилно експериментисање. Пружа тензоре и динамичке неуронске мреже у Питхон са јаким ГПУ убрзањем.
Архитектура неуронске мреже је иста као и ДеепМинд коришћена у раду Контрола на људском нивоу кроз дубоко учење ојачавања .
Слој | Улазни | Величина филтера | Стриде | Број филтера | Активација | Оутпут |
---|---|---|---|---|---|---|
цонв1 | 84к84к4 | 8к8 | 4 | 32 | РеЛУ | 20к20к32 |
цонв2 | 20к20к32 | 4к4 | 2 | 64 | РеЛУ | 9 к 9 к 64 |
цонв3 | 9 к 9 к 64 | 3к3 | један | 64 | РеЛУ | 7 к 7 к 64 |
ФЦ4 | 7 к 7 к 64 | 512 | РеЛУ | 512 | ||
фц5 | 512 | 2 | Линеарно | 2 |
Постоје три увијена слоја и два потпуно повезана слоја. Сваки слој користи РеЛУ активацију, осим последњег, који користи линеарну активацију. Неуронска мрежа даје две вредности које представљају једине могуће радње играча: „Полети горе“ и „не ради ништа“.
Улаз се састоји од четири узастопне црно-беле слике величине 84 к 84. Испод је пример четири слике које се доводе до неуронске мреже.
Приметићете да се слике ротирају. То је зато што се излаз механизма игре клона ротира. Али ако се неуронска мрежа подучава и затим тестира помоћу таквих слика, то неће утицати на њене перформансе.
Такође можете приметити да је слика обрезана тако да је под изостављен, јер је то небитно за овај задатак. Сви пиксели који представљају луле и птицу су бели, а сви пиксели који представљају позадину су црни.
Ово је део кода који дефинише неуронску мрежу. Пондери неуронских мрежа су иницијализовани да прате једнолику расподелу $ матхцал {У} (- 0,01, 0,01) $. Дио пристрасности параметара неуронских мрежа постављен је на 0,01. Неколико различитих иницијализација били су покушани (Ксавиер униформа, Ксавиер нормална, Каиминг униформа, Каиминг нормална, униформна и нормална), али је горња иницијализација учинила да се неуронска мрежа најбрже конвергира и тренира. Величина неуронске мреже је 6,8 МБ.
class NeuralNetwork(nn.Module): def __init__(self): super(NeuralNetwork, self).__init__() self.number_of_actions = 2 self.gamma = 0.99 self.final_epsilon = 0.0001 self.initial_epsilon = 0.1 self.number_of_iterations = 2000000 self.replay_memory_size = 10000 self.minibatch_size = 32 self.conv1 = nn.Conv2d(4, 32, 8, 4) self.relu1 = nn.ReLU(inplace=True) self.conv2 = nn.Conv2d(32, 64, 4, 2) self.relu2 = nn.ReLU(inplace=True) self.conv3 = nn.Conv2d(64, 64, 3, 1) self.relu3 = nn.ReLU(inplace=True) self.fc4 = nn.Linear(3136, 512) self.relu4 = nn.ReLU(inplace=True) self.fc5 = nn.Linear(512, self.number_of_actions) def forward(self, x): out = self.conv1(x) out = self.relu1(out) out = self.conv2(out) out = self.relu2(out) out = self.conv3(out) out = self.relu3(out) out = out.view(out.size()[0], -1) out = self.fc4(out) out = self.relu4(out) out = self.fc5(out) return out
У конструктору ћете приметити да су дефинисани хиперпараметри. У сврху овог поста на блогу не врши се оптимизација хиперпараметара. Уместо тога, хиперпараметри се углавном користе из радова компаније ДеепМинд. Овде су неки хиперпараметри скалирани на нижи ниво него у раду ДеепМинд-а, јер је Флаппи Бирд мање сложен од Атари игара које су користили за подешавање.
Такође, епсилон је промењен да би био много разумнији за ову игру. ДеепМинд користи епсилон од једног, али овде користимо 0,1. То је зато што виши епсилони присиљавају птицу да пуно клапа, што је гура према горњој граници екрана, што увек резултира падом птице у цев.
Код учења за појачање има два начина: влак и тест. Током фазе теста можемо видети колико је алгоритам учења појачања научио да игра игру. Али прво, неуронску мрежу треба обучити. Морамо дефинисати функцију губитка коју треба минимизирати и оптимизаторе који ће минимизирати функцију губитка. Користићемо Адаме метода оптимизације и средња квадратна грешка за функцију губитка:
optimizer = optim.Adam(model.parameters(), lr=1e-6) criterion = nn.MSELoss()
Игра би требала бити инстанцирана:
game_state = GameState()
Меморија за понављање дефинисана је као Питхон листа:
replay_memory = []
Сада морамо да иницијализујемо прво стање. Акција је дводимензионални тензор:
Тхе frame_step
метода даје нам следећи екран, награду и информације о томе да ли је следеће стање терминално. Награда је 0.1
за сваки потез птице без умирања када не пролази кроз цев, 1
ако птица успешно прође кроз цев и -1
ако се птица сруши.
Тхе resize_and_bgr2gray
функција урезује под, мења величину екрана на слику 84к84 и мења простор боја из БГР у црно-бели. Тхе image_to_tensor
функција претвара слику у тензор ПиТорцх и ставља је у ГПУ меморију ако је доступан ЦУДА. Коначно, последња четири секвенцијална екрана су спојена заједно и спремна су за слање на неуронску мрежу.
action = torch.zeros([model.number_of_actions], dtype=torch.float32) action[0] = 1 image_data, reward, terminal = game_state.frame_step(action) image_data = resize_and_bgr2gray(image_data) image_data = image_to_tensor(image_data) state = torch.cat((image_data, image_data, image_data, image_data)).unsqueeze(0)
Почетни епсилон се поставља помоћу ове линије кода:
epsilon = model.initial_epsilon
Следи главна бесконачна петља. Коментари су написани у коду и можете упоредити код са дубинским К-учењем са алгоритмом Екпериенце Реплаи горе написаним.
Алгоритам узоркује мини серије из меморије за репродукцију и ажурира параметре неуронске мреже. Акције се извршавају помоћу епсилон похлепно истраживање . Епсилон се жарена током времена. Функција губитка која се минимизира је $ Л = фрац {1} {2} лефт [ мак_ {а ’} К (с’, а ’) - К (с, а) ригхт] ^ 2 $. $ К (с, а) $ је основна истинита вредност израчуната помоћу Белманове једначине и $ мак_ {а ’} К (с’, а ’) $ се добија из неуронске мреже. Неуронска мрежа даје две К-вредности за две могуће акције, а алгоритам предузима радњу са највећом К-вредношћу.
while iteration Сада када су сви делови на месту, ево прегледа протока података на високом нивоу помоћу наше неуронске мреже:

Ево једног кратког низа са обученом неуронском мрежом.

Горе приказана неуронска мрежа је обучена користећи врхунски Нвидиа ГТКС 1080 ГПУ неколико сати; користећи решење засновано на ЦПУ-у, овај задатак би потрајао неколико дана. ФПС механизма игре постављен је на веома велики број током тренинга: 999 ... 999 - другим речима, што више кадрова у секунди. У фази тестирања, ФПС је постављен на 30.
Испод је графикон који показује како се максимална К-вредност променила током итерација. Приказана је свака 10 000. итерација. Скок надоле значи да за одређени кадар (једна итерација је један кадар) неуронска мрежа предвиђа да ће птица добити врло ниску награду у будућности - тј. Срушит ће се врло брзо.

Доступни су пуни код и претходно обучени модел овде .
Учење дубоког ојачања: 2Д, 3Д и чак стварни живот
У овом водичу за учење ојачавања ПиТорцх показао сам како рачунар може да научи да игра Флаппи Бирд без икаквог претходног знања о игри, користећи само приступ покушаја и погрешака као што би то учинио човек када се први пут сусретне са игром.
Занимљиво је да се алгоритам може имплементирати у неколико редова кода користећи ПиТорцх оквир. Рад на којем се метода у овом блогу темељи релативно је стар и на располагању је пуно новијих радова са разним модификацијама које омогућавају бржу конвергенцију. Од тада се дубоко учење појачавања користи за играње 3Д игара и у стварним роботским системима.
Компаније попут ДеепМинд , Малууба , и Намјеснички интензивно раде на учењу дубоких појачања. Таква технологија је коришћена у АлпхаГо-у, који је победио Лее Седол-а, једног од најбољих светских играча у Го-у. У то време се сматрало да ће требати најмање десет година док машине не могу победити најбоље играче Гоа.
Поплава интереса и улагања у дубоко учвршћивање (и у вештачку интелигенцију уопште) може чак довести до потенцијалних вештачких Генерал интелигенција (АГИ) - интелигенција на људском нивоу (или чак и шире) која се може изразити у облику алгоритма и симулирати на рачунарима. Али АГИ ће морати да буде предмет другог чланка.
Референце:
- Демистификација учења дубоког појачања
- Учење дубоког појачања за Флаппи Бирд
- „Конволуциона неуронска мрежа“ на Википедији
- „Учење ојачања“ на Википедији
- „Процес одлучивања о Маркову“ на Википедији
- Университи Цоллеге Лондон курс о РЛ
Повезан: Водич за дубоко учење: од перцептора до дубоких мрежа Разумевање основа
Шта је учење без надзора?
Учење без надзора је приступ машинском учењу који проналази структуру у подацима. За разлику од учења под надзором, подаци нису означени.
Шта је пасивно учење ојачавања?
У пасивном учењу појачања, агент учи и следи политику. Добија „награде“, али их може само посматрати, било да су добре или не. Супротно томе, активно учење појачавања чини да агенти науче да предузму најбоље мере за сваку државу како би максимизирали кумулативне будуће награде.
Шта је инверзно учење поткрепљења?
У учењу појачања, агент има приступ повратним информацијама у облику „награде“ сваки пут када предузме неку акцију у неком стању у окружењу. Учење инверзним појачавањем покушава да реконструише функцију награђивања с обзиром на историју награда примљених за акције у одређеним државама.
Које су врсте неуронских мрежа?
Многи типови неуронских мрежа засновани су на комбинацијама слојева које користе, нпр. конволуциони слојеви, потпуно повезани слојеви и ЛСТМ слојеви. Типови неуронских мрежа укључују конволуционе неуронске мреже (ЦНН), повратне неуронске мреже (РНН) и вишеслојне неуронске мреже перцептрона (МЛП или „ванилија“).
Шта је ДеепМинд АИ?
ДеепМинд Тецхнологиес Лимитед је компанија за вештачку интелигенцију са седиштем у Лондону. Развили су АлпхаГо, који је победио Лее Седол, светског првака у Го-у. Компанију је Гоогле стекао 2014. године.