機器學習 計算機學習西洋跳棋

2021-09-06 13:24:10 字數 3166 閱讀 1922

西洋跳棋是一種兩人棋盤遊戲。玩家的棋子都是沿斜角走的。棋子可跳過敵方的棋子並吃掉它。

通過讓程式分析人們購物清單,來分析人們對商品的品牌、**的偏好。

通過跟蹤個人的新聞瀏覽,分析其興趣愛好、並為其推薦感覺興趣的新聞或產品。

通過對已知的手寫字元的分析,能夠讓電腦程式自動的認出手寫字元。

以上這些都是機器學習的例子,在今天,機器學習已經不知不覺的進入到人們的生活,也許你為奇怪為什麼網頁上的廣告都是顯示你最在在**或京東上最近購買的商品。最終你會發現,你使用的軟體,你操作的系統,變得越來越智慧型。

機器學習:任何電腦程式通過經驗來提高某任務處理效能的行為,都稱為機器學習。

定義

對於某類任務t和效能度量p,如果乙個電腦程式在t上以p衡量的效能隨著經驗e而自我完善,那麼我們稱這個電腦程式在經驗e中學習。

既然學習的定義如上面描述,那麼我們用機器學習來定義下西洋跳棋。

任務t:下西洋棋

效能標準p:比賽中擊攻對手的百分比

訓練經驗e:和自己或與選手對弈。

上面我們已經把下西洋棋用機器學習的方法表示出來,接下來,我們需要一步一步考慮如何完成這個學習系統的設計。

面臨的第乙個問題就是訓練經驗,因為它是整個系統的輸入:

首先,這個經驗一定要可以為我們下西洋棋每一步的決策提供直接或間接的反饋。直接的經驗比如:和種棋盤狀態和相應的正確走子;間接的經驗比如:根據最終局的勝負或走子串行反饋每步走子的貢獻度。

其次,學習器可以在多大程度上控制訓練樣例序列。可以用一些固定的走子步驟和棋局,可以允許學習器主動地去微調一些走子方式和嘗試一些它還未考慮過的全新棋局。

最後,訓練樣例的分布能多好地表示例項分布,就是說你不能一直讓學習系統一直與菜鳥對弈,這樣遇到大師級的就不能有很好的表現,因為它會遇到平時訓練時沒有遇到過的走子或棋位布局。

那麼我們就選擇和100位水平高低各不相同的選手對弈各100局,總共1萬局夠成了我們的訓練經驗。

為了完成這個下棋的學習系統,我們需要選擇:

1) 目標函式

2) 目標知識的表示

3) 一種學習機制

目標函式:我們在西洋棋對弈時,能夠操作的步驟就是走子,合法的走子有很多種,每一種都會產生乙個不同的棋局,我們的目標就是選擇出最好的走法,於是定義我們的目標函式是這樣的:

目標函式v,並用$v:b \to r$來表示$v$把任何合法的棋局對映到某乙個實數值。

我們讓目標函式$v$給好的棋局賦予較高的評分,如果系統能夠成功地學會這個目標函式$v$,那麼它便能使用此函式輕鬆地找到當前棋局的最佳走法。

於是我們的目標就落在了,怎樣給乙個棋局評分,我們需要一套規則來給所有的棋局評分。乙個棋局,其最直觀的形式就是棋局上所有點棋子狀態有或沒有,比如傳統的10*10的棋盤,那每個格仔裡要麼有子,要麼沒有子,我們可以用1或0表示,這樣一局棋局就可以表示為乙個10*10的矩陣,矩陣的元素為1或0。

我們會發現這樣表示乙個棋局還是太抽象,不容易找出判斷棋局好壞的規則,我們希望選擇一些具有表徵能力的描述,以最大可能的代替乙個棋局的資訊。如果可以選擇棋盤上黑子的數量和紅子的數量,這時候,較為一般的數量佔優的棋局會有較高的評分。下面是我們選擇的幾個棋盤狀態特徵:

feature1:棋盤上黑子的數量

feature2:棋盤上紅子的數量

feature3:棋盤上紅王的數量

feature4:棋盤上黑五的數量

feature5:被紅子威脅的黑子的數量

featurn6:被黑子威脅的紅子的數量

但是上面6個特徵它們說明棋局好壞的能力也不同,有的代表性強,有的代表性弱,所以我們要給它們賦予一定的權重:

$$v(b)=w_0+w_1 x_1+w_2 x_2+w_3 x_3+w_4 x_4+w_5 x_5+w_6 x_6$$

那麼v(b)就是乙個目標函式,對於每一種走子b,目標函式都可以計算出乙個實數值來說明棋局的好壞。

比如黑子贏了的棋局,我們將它的函式值定位為v(bi)=+100,這種情況下,已經沒有紅子,那麼這個棋局就可以表示為:

$$$$

有了上面這些表示,我們就可以運用一些對局的局來訓練我們的系統,那麼就想通過這些樣本來選擇一組最合適的權值,讓所有棋局與我們最終的**結果都盡可能一致。

任何乙個樣本棋局都要表示為這樣乙個資料對$$,其中的$v(b)$我們通過給出來些近似函式$\hat(b)$來手動的標記。

剩下的事情就是為這個學習演算法選擇最合適訓練樣例的權。一種常用的方法是把最佳的假設(或權重向量集合)定義為使訓練值和假設**出的值間的誤差平方和e最小。

$$e=\sum_{}(v_(b)-\hat(b))^2$$

這裡我們可以採用最小均方法來求最佳權值,或叫lsm訓練法則

對於每乙個訓練樣本$$

使用當前的權重計算$\hat(b)$

對每乙個權重$w_i$進行如下更新:

$$w_i \gets w_i +\eta (v_ (b)-\hat(b))x_i$$

這裡是乙個小的常數,用來調整權值的更新幅度,比如果誤差為0時,權值就不會更新。

執行系統:這個模組用學會的目標函式(決策器)來下棋。它把一局新的棋局作為輸入,然後會產生一組解答路線。

鑑定器:它將一組解答路線生成為一組訓練資料。

泛化器:它以訓練樣本作為輸入,產生乙個輸出假設,作為它對目標函式的估計。

實驗生成器:它以泛化器中生成的假設來生成乙個決策器,決定每種棋局下應該執行的走子。

如此設計的程式能擊敗人類的西洋跳棋冠軍嗎?或許不能,部分原因在於我們對目標函式的表示過於簡單了,我們可以設計更複雜更具有表徵性的特徵。學習的方式也是多種多樣:

我們可以簡單的只儲存訓練樣例,然後去尋找儲存的「最接近」的情形來匹配新的情況——最近鄰法。

可以產生大量的跳棋程式,讓它們相互比賽,保留最成功的程式並進一步用模擬進化的方式來培育或變異它們——遺傳演算法。

而人們有著不一樣的學習機制,我們可以分析或向自己解釋比賽中碰到的成敗的原因——基於解釋的學習。這當然也是機器學習最高端的形式。

計算機學習感悟

學計算機近一年了,感覺這一年在大學裡浪費了太多的時間,而學到的東西卻那麼少。最近看了幾個大牛的成長經歷,想想自己的學校雖然不是那麼出名,但總得來說還是挺優秀的,自己資質雖然不敢說有多麼優秀,但總得來說也是可以的,那為什麼現在和他們有那麼大的差距呢?我從他們成長的經歷中看到了這個原因,那就是是否靜心地...

計算機補碼學習

補碼 按位取反,末位加一。很簡單,容易記,但是為什麼要這麼做?首先是補碼出現的原因。第一 簡化計算機的減法計算,避免出現借位的情況。以十進位制為例,如果要計算200 199,無可避免的要進行兩次借位,每一次借位,要儲存幾個資料,借了多少 借位後的資料是多少 被借的資料成了多少,這樣就需要很多原件來儲...

關於計算機學習

我認為計算機領域真正的學習應該是 部落格式 的,即遵循 遇到問題 查閱資料 弄懂問題 有成就感 總結記錄 早些時候我把這個叫做 需求驅動學習 在整個專案遷移結束之後,嘟嘟開始對遷移過程進行復盤,發現以下幾點需要搞明白 為啥多程序變數不能共享 為啥有gil在多執行緒就不好用了 為啥乙個非同步任務阻塞會...