本文作者通過簡單的方式構(gòu)建了強化學(xué)習(xí)模型來訓(xùn)練無人車算法,可以為初學(xué)者提供快速入門的經(jīng)驗。
想象一下,你生活在一個沒有交通擁堵,沒有交通事故,也無需花費時間開車的世界,那會多美好。
在我之前做過的一篇關(guān)于強化學(xué)習(xí)的文章中(鏈接在文末)曾說過,自動駕駛汽車是一場革命,主要有兩個原因:
每年因交通事故將挽救125萬人的生命
省下開車的時間,它會讓你在一生中多活3年
很多公司已經(jīng)在研究自動駕駛汽車了!比如特斯拉,谷歌,Wayve等等。這些自動駕駛汽車往往使用了強化學(xué)習(xí)!
再說一遍,如果你還沒有讀上一篇文章(鏈接在文末),可以先讀一下,在這里我只做上篇文章的簡要概述。
強化學(xué)習(xí)使機器(或者稱為智能體)通過實驗學(xué)習(xí)。就像人類學(xué)習(xí)走路。起初,你以一定的方式移動你的腿,但是你會跌倒。你跌倒了很多次,但最終,經(jīng)過多次嘗試,你會慢慢學(xué)會如何移動你的腿來走路。強化學(xué)習(xí)的原則與此相同!
比較正式的說法是,具有特定狀態(tài)的環(huán)境中的智能體具有可以執(zhí)行的一組動作。在執(zhí)行這些動作后,它會收到一個獎勵,讓智能體知道這個動作有多好。當(dāng)然,我們希望得到與我們目標相符的最高的獎勵。貝爾曼方程用于說明未來的獎勵,它通常是一系列導(dǎo)致積極結(jié)果的動作。在Q學(xué)習(xí)函數(shù)(Q-Learning)中,我們使用這些獎勵來更新可以告訴我們某個狀態(tài)有好壞的Q值。在深度Q學(xué)習(xí)(Deep Q-Learning)中,我們使用可以近似Q值的深度神經(jīng)網(wǎng)絡(luò)來代替Q值。當(dāng)下次我們的智能體在環(huán)境中移動時,它將使用深度Q網(wǎng)絡(luò)(Deep Q-Network)為每個動作生成Q值,并采用具有最高Q值的動作。
概念說太多也許你不明白,直觀理解就足夠了。強化學(xué)習(xí)與我們學(xué)習(xí)的方式進行比較是:
我們采取的行動會產(chǎn)生正面或反面的后果。如果它是正面的,我們會再次采取行動,反之亦然。就這么簡單!
現(xiàn)在開始構(gòu)建我們的虛擬自動駕駛汽車,讓我們來看看構(gòu)建的過程。
1.建立環(huán)境
首先,我需要為我的車創(chuàng)建虛擬環(huán)境。我最初想到創(chuàng)建一個Unity環(huán)境,但我的筆記本電腦在創(chuàng)建Unity游戲時感覺已經(jīng)快死了。再加上機器學(xué)習(xí)和錄制軟件,我認為這么麻煩不值得。
我使用了一個名為Kivy的python包來創(chuàng)建UI。
我們從一張空地圖開始。“汽車”的目標是在地圖的左上角到右下角之間來回移動。
但是,我可以在地圖上繪制“沙地”。如果汽車碰到了沙地,就會被視為出了車禍!
我們將使用強化學(xué)習(xí)(RL),特別是深度Q-Learning來制造我們的自動駕駛汽車。RL算法都有3個關(guān)鍵元素,狀態(tài)(State),動作(Action)和獎勵(Reward)。以下我的程序中定義這些元素的方式:
狀態(tài)
汽車所處的狀態(tài)包括5個變量:
傳感器紅色
傳感器黃色
傳感器藍色
方向
負方向
前三個來自汽車前部的3個傳感器。每個傳感器(紅色,黃色,藍色)都能探測到距離自身10像素半徑內(nèi)的沙地的像素。從邏輯上講,也就是說,如果汽車左側(cè)有一堵沙墻,藍色傳感器會比黃色傳感器探測到的沙地更多。這使汽車可以確定沙地的位置,從而確定行進的方向。最后2個變量代表汽車的方向。以角度衡量,0度將指向上方。我們還添加了負方向方便優(yōu)化和提升性能。
動作
有三種可能的行動:
順時針旋轉(zhuǎn)20度
逆時針轉(zhuǎn)動20度
不轉(zhuǎn)彎
獎勵
主要獎勵包括:
-5:如果汽車駛?cè)肷车?/p>
-0.1:如果汽車離目的地越遠
0.1:如果汽車更接近目的地
這些只是主要的獎勵。我還根據(jù)汽車的性能定義了其他獎勵。例如,我后來意識到汽車離地圖的邊緣太近了,所以每當(dāng)距離邊緣10個像素內(nèi)時我就給它一個負獎勵。在實踐中,你可以自行定義獎勵,以獲得自己想要達到的效果。
2.選擇模型
我決定使用強化學(xué)習(xí),特別是深度Q學(xué)習(xí)。這是我的神經(jīng)網(wǎng)絡(luò)的架構(gòu):
輸入層:5個節(jié)點(每個狀態(tài)一個輸入節(jié)點)
隱藏層:30個節(jié)點
輸出層:3個節(jié)點(每個動作一個)
激活函數(shù):ReLU
優(yōu)化器:Adam
一個隱藏層通常足以解決這類簡單的問題。再進行訓(xùn)練需要更長的時間,并且不會帶來顯著的性能提升。
3.訓(xùn)練
訓(xùn)練時,汽車開始行駛,并逐漸適應(yīng)環(huán)境。我添加了按鈕來保存,并將以前的模型加載到當(dāng)前的自動駕駛汽車中。以下是我們實際學(xué)習(xí)的代碼片段:
4.評估和參數(shù)調(diào)整
這是智能體每個時間步獲得獎勵的圖。在圖中,智能體每次接近目標時都獲得+1獎勵,遠離則獲得-1獎勵。這由+0.1和-0.1累積而來。訓(xùn)練在1500個時間步后達到穩(wěn)定水平。
上面是更早之前生成的圖。這是當(dāng)智能體視離目標的遠近分別獲得+0.1和-0.1獎勵。如你所見,獎勵在2000步之后穩(wěn)定了,而不是這次的1500步。這兩個圖平均需要10個不同的訓(xùn)練周期。結(jié)果表明,+1和-1獎勵訓(xùn)練速度比+0.1和-0.1獎勵更快。
對該模型進行了許多其他更改。比如:
天氣調(diào)整
額外的獎勵(例如,智能體不采取最佳路線。我們增加獎勵,鼓勵智能體降低與上一圈相比達到目標的步數(shù)。)
不同的神經(jīng)網(wǎng)絡(luò)架構(gòu)(例如,層數(shù),節(jié)點數(shù),優(yōu)化器,激活函數(shù))
5.預(yù)測!
現(xiàn)在,我們的優(yōu)化模型。我們的汽車可以無碰撞地進行自動駕駛!
我在這里開發(fā)了RL驅(qū)動的自動駕駛汽車的基礎(chǔ)架構(gòu)。現(xiàn)實生活中的汽車將更難進行編碼,但我相信我們最終會成功。并且,我是在筆記本電腦上進行研發(fā),其計算能力比特斯拉公司的小數(shù)百萬倍。
-
無人車
+關(guān)注
關(guān)注
1文章
304瀏覽量
36566 -
強化學(xué)習(xí)
+關(guān)注
關(guān)注
4文章
268瀏覽量
11299
原文標題:強化學(xué)習(xí)開源項目:自己動手創(chuàng)建虛擬自動駕駛汽車
文章出處:【微信號:IV_Technology,微信公眾號:智車科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論