RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是強(qiáng)化學(xué)習(xí)

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-30 11:36 ? 次閱讀

強(qiáng)化學(xué)習(xí)是機(jī)器學(xué)習(xí)的方式之一,它與監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)并列,是三種機(jī)器學(xué)習(xí)訓(xùn)練方法之一。

圖片

在圍棋上擊敗世界第一李世石的 AlphaGo、在《星際爭霸2》中以 10:1 擊敗了人類頂級職業(yè)玩家的AlphaStar,他們都是強(qiáng)化學(xué)習(xí)模型。諸如此類的模型還有 AlphaGo Zero 等。

強(qiáng)化學(xué)習(xí)的原理非常簡單,它非常像心理學(xué)中新行為主義派的斯金納發(fā)現(xiàn)的操作性條件反射。

操作性條件反射是什么?當(dāng)年斯金納做了一個箱子,進(jìn)行了兩次實驗。

第一次實驗,箱子里放了一只饑餓的老鼠,在箱子的一邊有一個可供按壓的杠桿,在杠桿旁邊有一個放置食物的小盒子。動物在箱內(nèi)按下杠桿,食盒就會釋放食物進(jìn)入箱內(nèi),動物可以取食。結(jié)果:小鼠自發(fā)學(xué)會了按按鈕。這是積極強(qiáng)化。

另一次實驗是,每次小白鼠不按下按鈕,則給箱子通電,小白鼠因此學(xué)會了按按鈕以防自己遭受電擊。這是消極強(qiáng)化(負(fù)向強(qiáng)化)。

這就是斯金納發(fā)現(xiàn)的操作性條件反射,當(dāng)行為得到獎勵或懲罰時出現(xiàn)刺激,反過來控制這種行為。

圖片

強(qiáng)化學(xué)習(xí)與操作性條件反射有異曲同工之妙,以人類玩游戲為例,如果在游戲中采取某種策略購買某種類型的裝備可以取得較高的得分,那么就會進(jìn)一步“強(qiáng)化”這種策略,以期繼續(xù)取得較好的結(jié)果。

網(wǎng)上有不少強(qiáng)化學(xué)習(xí)的例子,鑒于讀者中對股票感興趣的同學(xué)比較多,我們以股票預(yù)測為例,實驗一下 wangshub 的 RL-Stock 項目。

下面就試一下這個強(qiáng)化學(xué)習(xí)項目,前往GitHub下載 RL-Stock:

https://github.com/wangshub/RL-Stock/

如果你無法使用GitHub,也可以在Python實用寶典公眾號后臺回復(fù):股票強(qiáng)化學(xué)習(xí)1 下載全文完整代碼,這份代碼包括第三部分的多進(jìn)程優(yōu)化邏輯。

1.準(zhǔn)備

開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。

**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.

**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細(xì)指南。

請注意,由于TensorFlow版本限制,這個強(qiáng)化學(xué)習(xí)項目只支持 Python3 以上,Python3.6 及以下的版本,因此我建議使用Anaconda創(chuàng)建一個新的虛擬環(huán)境運行這個項目:

conda create -n rlstock python=3.6

另外,實測依賴需要改動 requirements.txt 的tensorflow-gpu版本至1.14:

圖片

Windows環(huán)境下打開Cmd(開始—運行—CMD),蘋果系統(tǒng)環(huán)境下請打開Terminal(command+空格輸入Terminal),進(jìn)入 RL-Stock 項目文件夾輸入命令安裝依賴:

pip install -r requirements.txt

2.小試強(qiáng)化學(xué)習(xí)

運行RL-Stock項目前,需要下載數(shù)據(jù)。進(jìn)入剛創(chuàng)建的虛擬環(huán)境,運行g(shù)et_stock_data.py代碼會自動下載數(shù)據(jù)到 stockdata 目錄中:

python get_stock_data.py

如果你使用的是在Github上下載的代碼而不是Python實用寶典后臺改好的代碼,請注意 get_stock_data.py 的第46行,必須對 row["code_name"] 去除 * 號,否則Windows系統(tǒng)下可能會存在問題:

df_code.to_csv(f'{self.output_dir}/{row["code"]}.{row["code_name"].strip("*")}.csv', index=False)

數(shù)據(jù)下載完成后就可以運行 main.py 執(zhí)行強(qiáng)化學(xué)習(xí)訓(xùn)練和測試,不過在訓(xùn)練之前,我們先簡單了解下整個項目的輸入狀態(tài)、動作、和獎勵函數(shù)。

輸入狀態(tài)(觀測 Observation)

策略網(wǎng)絡(luò)觀測的就是一只股票的各類數(shù)據(jù),比如開盤價、收盤價、成交量等,它可以由許多因子組成。為了訓(xùn)練時網(wǎng)絡(luò)收斂,觀測狀態(tài)數(shù)據(jù)輸入時必須要進(jìn)行歸一化,變換到 ** [-1, 1] ** 的區(qū)間內(nèi)。RL-Stock輸入的觀測數(shù)據(jù)字段如下:

動作 Action

共有 買入 、賣出和**持有 **3 種動作,定義動作( ** action ** )為長度為 2 的數(shù)組

  • **action[0] **為操作類型;
  • action[1] 表示買入或賣出百分比;
動作類型action[0]說明
1買入action[1]
2賣出action[1]
3持有

注意,當(dāng)動作類型 action[0] = 3 時,表示不買也不拋售股票,此時 action[1] 的值無實際意義,網(wǎng)絡(luò)在訓(xùn)練過程中,Agent 會慢慢學(xué)習(xí)到這一信息。Agent,實稱代理,在我們的上下文中,你可以視其為策略。

獎勵 Reward

獎勵函數(shù)的設(shè)計,對強(qiáng)化學(xué)習(xí)的目標(biāo)至關(guān)重要。在股票交易的環(huán)境下,最應(yīng)該關(guān)心的就是當(dāng)前的盈利情況,故用當(dāng)前的利潤作為獎勵函數(shù)。

# profits
reward = self.net_worth - INITIAL_ACCOUNT_BALANCE
reward = 1 if reward > 0 else -100

為了使網(wǎng)絡(luò)更快學(xué)習(xí)到盈利的策略,當(dāng)利潤為負(fù)值時,給予網(wǎng)絡(luò)一個較大的懲罰 (-100)。

梯度策略

作者采用了基于策略梯度的PPO 算法,OpenAI 和許多文獻(xiàn)已把 PPO 作為強(qiáng)化學(xué)習(xí)研究中首選的算法。PPO 優(yōu)化算法 Python 實現(xiàn)參考 stable-baselines。

數(shù)據(jù)集及自定義

在數(shù)據(jù)集上,作者使用了1990年至2019年11月作為訓(xùn)練集,2019年12月作為測試集。

1990-01-01~2019-11-292019-12-01~2019-12-31
訓(xùn)練集測試集

如果你要調(diào)整這個訓(xùn)練集和測試集的時間,可以更改 get_stock_data.py 的以下部分:

if __name__ == '__main__':
    # 獲取全部股票的日K線數(shù)據(jù)
    # 訓(xùn)練集
    mkdir('./stockdata/train')
    downloader = Downloader('./stockdata/train', date_start='1990-01-01', date_end='2019-11-29')
    downloader.run()
     # 測試集
    mkdir('./stockdata/test')
    downloader = Downloader('./stockdata/test', date_start='2019-12-01', date_end='2019-12-31')
    downloader.run()

訓(xùn)練并測試

首先,我們嘗試一下單一代碼的訓(xùn)練和測試,修改main.py里的股票代碼,比如我這里修改為601919中遠(yuǎn)??兀?/p>

if __name__ == '__main__':
    # multi_stock_trade()
    test_a_stock_trade('sh.601919')
    # ret = find_file('./stockdata/train', '601919')
    # print(ret)

運行下面的命令,執(zhí)行此深度學(xué)習(xí)模型的訓(xùn)練和測試。

python main.py

訓(xùn)練完成后,會自動進(jìn)行模擬操作測試集這20個交易日,然后會輸出這20個交易日的測試結(jié)果:

------------------------------
Step: 20
Balance: 0.713083354256014
Shares held: 2060 (Total sold: 2392)
Avg cost for held shares: 5.072161917927474 (Total sales value: 12195.091008936648)
Net worth: 10930.56492977963 (Max net worth: 10930.56492977963)
Profit: 930.5649297796299
------------------------------
Step: 21
Balance: 0.713083354256014
Shares held: 2060 (Total sold: 2392)
Avg cost for held shares: 5.072161917927474 (Total sales value: 12195.091008936648)
Net worth: 10815.713083354256 (Max net worth: 10930.56492977963)
Profit: 815.713083354256

利潤圖如下:

圖片

然后我們看一下中遠(yuǎn)???019年12月的走勢:

圖片

可以看到這個月的中遠(yuǎn)海控是一個上升趨勢,一共上漲了12%,而這個模型捕捉到其中8%左右的利潤,還是相當(dāng)不錯的。

當(dāng)然,凡事不能只看個體,下面我們修改下作者的源代碼,試一下其在市場里的整體表現(xiàn)。

3.強(qiáng)化學(xué)習(xí)模型整體表現(xiàn)

由于作者原有的模型是單進(jìn)程的計算,為了測試全市場的表現(xiàn),我進(jìn)行了多進(jìn)程改造。

我將作者的訓(xùn)練及測試任務(wù)集成到一個函數(shù)中,并使用celery做并行:

@app.task
def multi_stock_trade(code):
    stock_file = find_file('./stockdata/train', str(code))
    if stock_file:
        try:
            profits = stock_trade(stock_file)
            with open(f'result/code-{code}.pkl', 'wb') as f:
                pickle.dump(profits, f)
        except Exception as err:
            print(err)

將訓(xùn)練集的時間范圍設(shè)置為1990年到2021年,測試集的測試周期改為最近一個月:

1990-01-01~2021-11-252021-11-26~2021-12-25
訓(xùn)練集測試集

開啟redis-server 及 Celery Worker:

# redis-server 獨占一個進(jìn)程,所以需要另開一個窗口
celery -A tasks worker -l info

遍歷所有的股票代碼做并發(fā)測試:

files = os.listdir("stockdata/train")
files_test = os.listdir("stockdata/test")
all_files_list = list(set(files) & set(files_test))
for i in all_files_list:
    # 使用celery做并發(fā)
    code = ".".join(i.split(".")[:2])
    # multi_stock_trade.apply_async(args=(code,))
    multi_stock_trade(code)

再對生成的結(jié)果進(jìn)行統(tǒng)計,測試結(jié)果如下:

圖片

對這個模型在2021-11-26到2021-12-25的測試結(jié)果表明,有40.8%的股票進(jìn)行了交易并且獲利,有49.9%的股票沒有進(jìn)行操作,有9.4%的股票進(jìn)行了交易并虧損。平均每次交易利潤為445元,作為一個測試策略,這個結(jié)果已經(jīng)很不錯了。

由于只是一個測試策略,這里就不做詳細(xì)的風(fēng)險分析了,實際上我們還需要觀察這個策略的最大回撤率、夏普率等指標(biāo)才能更好地評判此策略的好壞。

我認(rèn)為這個項目還有很大的改造空間,原邏輯中只觀察了OHLC等基本數(shù)據(jù),我們還可以增加很多指標(biāo),比如基于Ta-lib,算出MACD、RSI等技術(shù)指標(biāo),再將其加入Observation中,讓模型觀察學(xué)習(xí)這些數(shù)據(jù)的特征,可能會有不錯的表現(xiàn)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3226

    瀏覽量

    48806
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8406

    瀏覽量

    132558
  • 強(qiáng)化學(xué)習(xí)

    關(guān)注

    4

    文章

    266

    瀏覽量

    11246
收藏 人收藏

    評論

    相關(guān)推薦

    什么是深度強(qiáng)化學(xué)習(xí)?深度強(qiáng)化學(xué)習(xí)算法應(yīng)用分析

    什么是深度強(qiáng)化學(xué)習(xí)? 眾所周知,人類擅長解決各種挑戰(zhàn)性的問題,從低級的運動控制(如:步行、跑步、打網(wǎng)球)到高級的認(rèn)知任務(wù)。
    發(fā)表于 07-01 10:29 ?1435次閱讀
    什么是深度<b class='flag-5'>強(qiáng)化學(xué)習(xí)</b>?深度<b class='flag-5'>強(qiáng)化學(xué)習(xí)</b>算法應(yīng)用分析

    反向強(qiáng)化學(xué)習(xí)的思路

    強(qiáng)化學(xué)習(xí)的另一種策略(二)
    發(fā)表于 04-03 12:10

    深度強(qiáng)化學(xué)習(xí)實戰(zhàn)

    一:深度學(xué)習(xí)DeepLearning實戰(zhàn)時間地點:1 月 15日— 1 月18 日二:深度強(qiáng)化學(xué)習(xí)核心技術(shù)實戰(zhàn)時間地點: 1 月 27 日— 1 月30 日(第一天報到 授課三天;提前環(huán)境部署 電腦
    發(fā)表于 01-10 13:42

    將深度學(xué)習(xí)強(qiáng)化學(xué)習(xí)相結(jié)合的深度強(qiáng)化學(xué)習(xí)DRL

    深度強(qiáng)化學(xué)習(xí)DRL自提出以來, 已在理論和應(yīng)用方面均取得了顯著的成果。尤其是谷歌DeepMind團(tuán)隊基于深度強(qiáng)化學(xué)習(xí)DRL研發(fā)的AlphaGo,將深度強(qiáng)化學(xué)習(xí)DRL成推上新的熱點和高度,成為人工智能歷史上一個新的里程碑。因此,深
    發(fā)表于 06-29 18:36 ?2.8w次閱讀

    薩頓科普了強(qiáng)化學(xué)習(xí)、深度強(qiáng)化學(xué)習(xí),并談到了這項技術(shù)的潛力和發(fā)展方向

    薩頓在專訪中(再次)科普了強(qiáng)化學(xué)習(xí)、深度強(qiáng)化學(xué)習(xí),并談到了這項技術(shù)的潛力,以及接下來的發(fā)展方向:預(yù)測學(xué)習(xí)
    的頭像 發(fā)表于 12-27 09:07 ?1.1w次閱讀

    如何深度強(qiáng)化學(xué)習(xí) 人工智能和深度學(xué)習(xí)的進(jìn)階

    傳統(tǒng)上,強(qiáng)化學(xué)習(xí)在人工智能領(lǐng)域占據(jù)著一個合適的地位。但強(qiáng)化學(xué)習(xí)在過去幾年已開始在很多人工智能計劃中發(fā)揮更大的作用。
    的頭像 發(fā)表于 03-03 14:16 ?4212次閱讀

    人工智能機(jī)器學(xué)習(xí)強(qiáng)化學(xué)習(xí)

    強(qiáng)化學(xué)習(xí)是智能系統(tǒng)從環(huán)境到行為映射的學(xué)習(xí),以使獎勵信號(強(qiáng)化信號)函數(shù)值最大,強(qiáng)化學(xué)習(xí)不同于連接主義學(xué)習(xí)中的監(jiān)督
    發(fā)表于 05-30 06:53 ?1409次閱讀

    什么是強(qiáng)化學(xué)習(xí)?純強(qiáng)化學(xué)習(xí)有意義嗎?強(qiáng)化學(xué)習(xí)有什么的致命缺陷?

    強(qiáng)化學(xué)習(xí)是人工智能基本的子領(lǐng)域之一,在強(qiáng)化學(xué)習(xí)的框架中,智能體通過與環(huán)境互動,來學(xué)習(xí)采取何種動作能使其在給定環(huán)境中的長期獎勵最大化,就像在上述的棋盤游戲寓言中,你通過與棋盤的互動來學(xué)習(xí)
    的頭像 發(fā)表于 07-15 10:56 ?1.8w次閱讀
    什么是<b class='flag-5'>強(qiáng)化學(xué)習(xí)</b>?純<b class='flag-5'>強(qiáng)化學(xué)習(xí)</b>有意義嗎?<b class='flag-5'>強(qiáng)化學(xué)習(xí)</b>有什么的致命缺陷?

    基于強(qiáng)化學(xué)習(xí)的MADDPG算法原理及實現(xiàn)

    之前接觸的強(qiáng)化學(xué)習(xí)算法都是單個智能體的強(qiáng)化學(xué)習(xí)算法,但是也有很多重要的應(yīng)用場景牽涉到多個智能體之間的交互。
    的頭像 發(fā)表于 11-02 16:18 ?2.2w次閱讀

    深度強(qiáng)化學(xué)習(xí)你知道是什么嗎

    強(qiáng)化學(xué)習(xí)非常適合實現(xiàn)自主決策,相比之下監(jiān)督學(xué)習(xí)與無監(jiān)督學(xué)習(xí)技術(shù)則無法獨立完成此項工作。
    發(fā)表于 12-10 14:34 ?1271次閱讀

    DeepMind發(fā)布強(qiáng)化學(xué)習(xí)庫RLax

    RLax(發(fā)音為“ relax”)是建立在JAX之上的庫,它公開了用于實施強(qiáng)化學(xué)習(xí)智能體的有用構(gòu)建塊。。報道:深度強(qiáng)化學(xué)習(xí)實驗室作者:DeepRL ...
    的頭像 發(fā)表于 12-10 18:43 ?730次閱讀

    強(qiáng)化學(xué)習(xí)在智能對話上的應(yīng)用介紹

    本文主要介紹深度強(qiáng)化學(xué)習(xí)在任務(wù)型對話上的應(yīng)用,兩者的結(jié)合點主要是將深度強(qiáng)化學(xué)習(xí)應(yīng)用于任務(wù)型對話的策略學(xué)習(xí)上來源:騰訊技術(shù)工程微信號
    的頭像 發(fā)表于 12-10 19:02 ?1034次閱讀

    ESP32上的深度強(qiáng)化學(xué)習(xí)

    電子發(fā)燒友網(wǎng)站提供《ESP32上的深度強(qiáng)化學(xué)習(xí).zip》資料免費下載
    發(fā)表于 12-27 10:31 ?0次下載
    ESP32上的深度<b class='flag-5'>強(qiáng)化學(xué)習(xí)</b>

    人工智能強(qiáng)化學(xué)習(xí)開源分享

    電子發(fā)燒友網(wǎng)站提供《人工智能強(qiáng)化學(xué)習(xí)開源分享.zip》資料免費下載
    發(fā)表于 06-20 09:27 ?1次下載
    人工智能<b class='flag-5'>強(qiáng)化學(xué)習(xí)</b>開源分享

    如何使用 PyTorch 進(jìn)行強(qiáng)化學(xué)習(xí)

    強(qiáng)化學(xué)習(xí)(Reinforcement Learning, RL)是一種機(jī)器學(xué)習(xí)方法,它通過與環(huán)境的交互來學(xué)習(xí)如何做出決策,以最大化累積獎勵。PyTorch 是一個流行的開源機(jī)器學(xué)習(xí)庫,
    的頭像 發(fā)表于 11-05 17:34 ?278次閱讀
    RM新时代网站-首页