DeepStack采用了一個(gè)完全不同的方法。它持續(xù)地使用CFR中的循環(huán)推理來(lái)處理信息不對(duì)稱的問(wèn)題。但是,它并不會(huì)計(jì)算和存儲(chǔ)一個(gè)完整的優(yōu)先策略用于博弈,所以也不需要進(jìn)行簡(jiǎn)要的提煉(濃縮)。反之,在游戲中,它會(huì)在每一個(gè)具體的場(chǎng)景出現(xiàn)時(shí)就進(jìn)行考慮, 但是并不是獨(dú)立的。
通過(guò)使用一個(gè)快速的近似估計(jì)來(lái)代替某一種深度的計(jì)算,它能避免對(duì)整個(gè)游戲的剩余部分進(jìn)行推理。這種估計(jì)可以被看成是DeepStack的直覺(jué):在任何可能的撲克情境下,持有任何可能的個(gè)人牌的牌面大小的直覺(jué)。
最終,從某種程度上來(lái)說(shuō)與人類的很像的DeepStack的直覺(jué),是需要被訓(xùn)練的。我們使用了隨機(jī)生成的撲克情景用深度學(xué)習(xí)進(jìn)行訓(xùn)練。最終,我們證明了,DeepStack從理論上來(lái)說(shuō)是可行的,比起基于“濃縮”的方法,它能產(chǎn)生從實(shí)質(zhì)上需要更少地探索的策略,同時(shí),它也是世界上首個(gè)在HUNL游戲中擊敗人類專業(yè)玩家的計(jì)算機(jī)程序,平均贏率超過(guò)450 mbb/g。(mbb/g,milli-big-blinds per game ,是用于衡量撲克玩家表現(xiàn)的指數(shù),50 mbb/g可以就認(rèn)為是一個(gè)較大的優(yōu)勢(shì),750mbb/g就是對(duì)手每局都棄牌的贏率。)
神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)系統(tǒng)第一次戰(zhàn)勝人類職業(yè)玩家
跟職業(yè)選手對(duì)抗結(jié)果
為了把DeepStack跟人類專家相比較,我們雇用了國(guó)際撲克聯(lián)盟(International Federation of Poker)里的專業(yè)撲克選手。選手們?cè)?周中完成3000局比賽。為了激勵(lì)選手,給排名最高的前三(以AIVAT計(jì))分別予以5000加元、2500加元和1250加元的獎(jiǎng)勵(lì)。比賽在2016年11月7日和12月12日之間在線上舉行,撲克選手可以選擇最多同時(shí)玩4局,這在線上很常見(jiàn)??偣灿衼?lái)自17個(gè)國(guó)家的33名選手跟DeepStack進(jìn)行了較量。DeepStack跟每個(gè)人比賽的表現(xiàn)如表1:
表1:跟職業(yè)撲克選手較量結(jié)果,以AIVAT和所贏得的籌碼進(jìn)行衡量,以mbb/g為單位。
表2:向前分解根據(jù)在哪一輪而具體分析。F, C, 1/2P, P ,2P和A 分別是如下的縮寫:棄牌(Fold),跟進(jìn)(Call),二分之一底池押注(half of a pot-sized bet),底池押注(a pot-sized bet),雙倍底池押注(twice a pot-sized bet)以及全注(All in)。最后一列表示當(dāng)超過(guò)深度限制的時(shí)候用到了哪個(gè)神經(jīng)網(wǎng)絡(luò):flop 網(wǎng)絡(luò), turn 網(wǎng)絡(luò),或者輔助網(wǎng)絡(luò)。
比賽速度
分解計(jì)算和神經(jīng)網(wǎng)絡(luò)評(píng)估在一個(gè)GPU 上實(shí)現(xiàn)。這使得它可以一次快速批量調(diào)用反事實(shí)價(jià)值網(wǎng)絡(luò)上多個(gè)子公共樹。這是讓DeepStack 變快的關(guān)鍵。在Torch7中開發(fā),在NVIDIA GeForce GTX 1080顯卡上運(yùn)行。很多以上的實(shí)現(xiàn)手段都是為了讓DeepStack 快速運(yùn)行,理想上是像人打牌一樣快。表3展示了DeepStack 和人類在前一步驟的之后和提交下一個(gè)步驟之前的平均間隔時(shí)間。平均看來(lái),DeepStack 比起人類選手快很多。不過(guò)我們要記住人類選手同時(shí)可以進(jìn)行4局比賽(雖然很少有人同時(shí)進(jìn)行兩局以上),所以當(dāng)輪到人類選手比賽時(shí),它可能正在另外一盤比賽上。
表3: 人類和DeepStack 的思考時(shí)間,DeepStack 在第一輪叫注(Pre-flop)平均時(shí)間超級(jí)快,這表明第一輪叫注時(shí)的狀態(tài)通常能命中緩存。
表4: 不同程序使用局部最佳反饋(LBR:local best response)的最低程度。LBR 僅僅評(píng)估每一輪在下表中所列出的動(dòng)作。F, C, 1/2P, P ,2P 和A 縮寫意義同上。
最佳反饋估值(Best-response Values) vs 自玩估值(Self-play Values)
DeepStack 在持續(xù)分解計(jì)算中采用自玩估值而非最佳反饋估值。之前的預(yù)測(cè)試用CFR-D 解決更小的比賽,這表明自玩估值產(chǎn)生的策略通常攻擊性更小,與最佳反饋估值產(chǎn)生的策略相比,在和測(cè)試智能代理一對(duì)一的表現(xiàn)更好。圖5展示了一個(gè)例子,關(guān)于DeepStack在特定第五張牌的博弈中有著不同數(shù)字的分解迭代的攻擊性。除了缺少對(duì)它穩(wěn)固性的理論評(píng)價(jià),用自玩估值看上去就像最佳反饋估值一樣最終收斂至低攻擊性策略。