狠狠躁夜夜躁人人爽超碰97香蕉|色婷婷日日躁夜夜躁|亚洲一区欧美一区在线播|久久久久久性高|伊人久久大香线蕉亚洲

歡迎來到同城快修-附近家電維修、家電清洗、家電安裝服務平臺

24小時家電維修熱線:

400—1558638

當前位置:主頁 > 空調 > 維修資訊 >

水家電飲水機故障代碼e1(智能飲水機e1故障)

發布日期:2023-01-07 17:24:49 瀏覽:
水家電飲水機故障代碼e1(智能飲水機e1故障)

前沿拓展:


自機器學習重新火起來,深度強化學習就一直是科研的一大熱點,也是最有可能實現通用人工智能的一個分支。然而對于沒有強化學習基礎的同學們,如果直接去學習深度強化學習,想必會碰到很多問題。本文嘗試普及一些最基礎的強化學習算法,并以一個小例子來輔助大家理解。

問題定義

強化學習究竟研究的是一個什么樣的問題,讓其具有實現通用人工智能的潛力?

這個問題與我們認識世界的方式相關。我們都知道這個世界時刻在變化著,而每件事物的變化,勢必是由其他一系列事物導致的。這就是我們所普遍認識的世界,一個由因果律定義的世界。由于因果律的存在,我們就有可能根據某個當前世界的狀態,計算后一時刻世界的狀態。

而我們人類,作為一個智能體,通過觀察這個世界,并進行各種各樣的自主行動,在這個世界中生存,并對其產生影響。通用人工智能的實現,就是期望能通過計算機模擬人類這樣的智能體進行各種各樣的行動決策。

為了簡化問題,我們可以像下面這樣建模這個世界和智能體。我們可以認為在某一個時刻整個世界處于狀態S1,當智能體進行了某一個行動之后,這個世界的狀態變化為了S2。智能體之所以能夠做出這一行動,是因為其心中有一個目標,并且從這個世界中得到了一定的反饋。

舉個例子。比如我們想要喝水(目標),身邊有一個杯子和一個飲水機(狀態S1),我們會觀察杯子和飲水機的位置,再伸手去拿取杯子(行動),然后將杯子靠近(反饋)飲水機,到達飲水機出水位置之后(狀態S2),飲水機開始出水,之后我們再將杯子舉到嘴邊就能喝到水了。 這個簡單的模型可以圖示如下:

智能體(Agent)通過觀察這個世界(Environment)的狀態(State: s),經過智能決策,開展了一些行動(Actions: a),這些行動進而引起了這個世界的狀態變化。智能體從這些變化的狀態中獲得關于之前行動的反饋(Reward: r),從而指導后續的行動決策。就這樣,整個世界周而復始的一直循環下去。

從這個模型出發,由于因果律的存在,是不是知道了S1這個初始狀態及智能體做出的行動A之后,我們就可以直接計算下一狀態S2了呢?理論是可行的,但實際情況要更復雜一些,因為狀態實在太多太多了,我們通常無法直接建模所有的狀態。這時,我們可以用統計學的方式來解決這個問題。我們可以認為在我們做出某一行動之后,這個世界的狀態只是有一定概率會轉換為S2,同時也有一定的概率會轉換為S2_1等等。這樣就算我們建模的狀態不全,也可以相對較好的描述這個系統。

引入統計學的思維,也就引入了不確定性,雖然如此,但是卻帶來了更合理的描述系統的方式和系統層面的確定性。

以上描述的這一模型,在強化學習的世界里,我們稱作Markov決策過程,簡稱MDP(Markov Decision Process)。這里面的不確定性也就是Markov特性。

有了這個模型之后,我們就可以從數學上來研究這個問題了。強化學習研究的正是如何在這樣的一個數學模型的基礎上去實現一個有效的算法,進而實現智能決策。

一個小例子

我們可以設計一個簡單的小游戲來輔助解決這個問題。

如上圖,機器人(智能體)可以在這樣的網格中移動:

綠色格子代表機器人可以移動到的位置灰色格子表示有障礙物,機器人不能移動到那個位置紅色格子表示一個陷阱,如果機器人移動到此,游戲失敗黃色格子代表一個出口,如果機器人移動到此,游戲成功

這個游戲中的MDP,可以描述為如下:

系統狀態:格子位置,機器人位置機器人可執行的動作:向上下左右四個方向移動狀態轉換概率:如果機器人向某個方向移動,它移動到對應方向的格子的概率假設為0.7(如果無法移動到對應方向的位置,則留在原格子的概率為0.7),移動到其他位置的概率為0.3/n,n為其他可轉換到的狀態的數量。

狀態轉換概率舉例如下(假設我們對格子進行編碼,編碼方式與excel表格的編碼方式一致,從A1到E3):

假設機器人在位置A2,如果其向上移動,有70%的概率會移動到A1,分別有15%的概率會移動到A2(留在原位)和A3假設機器人在位置A2,如果其向左或向右移動,有70%的的概率會留在原位A2,分別有15%的概率會移動到A1和A3

我們的算法要解決的問題是,在任意綠色格子里面放置一個機器人,算法可以指導機器人一步一步到達位置E1(成功完成游戲)。

方案與算法

為了實現一個智能算法解決上述機器人走格子問題,我們可以考慮給每個格子定義一個價值。這個價值表示到達這個格子后有多大可能性能成功完成游戲。

觀察這個游戲可以發現,D1的價值應該高于C1,C1的價值應該高于B1。

如果可以計算出每個格子的價值,我們是不是就解決了這個問題了呢?因為,無論機器人處于哪個位置,它只需要往價值比當前格子更高的格子方向走即可。

現在問題轉化為如何定義和計算這個價值。

我們先將目標數值化。由于到達出口格子即成功,如果機器人能到達此處,我們就給智能體反饋獎勵1。同理,如果到達陷進格子,反饋獎勵-1,到達綠色格子則獎勵0。

這個時候我們來看格子D1。如果機器人在此處,它可以往四個方向移動。如果右移,有70%的概率可以到達出口,獲得獎勵1。如果往其他三個方向走,則分別有10%的概率會到達出口,獲得獎勵1。

經過以上的分析可以發現,我們其實可以將概率與獎勵相乘來代表某個移動方向的價值。得到如下的價值數值:

向右移動:0.7 * 1 = 0.7向上/下/左移動:0.1 * 1 = 0.1

這里的數值我們可以定義為動作價值。有了這個動作價值,要計算某個格子的價值,我們其實可以直接用最大的動作價值來表示,即:max([0.7, 0.1, 0.1, 0.1]) = 0.7。

如果要計算格子C1的價值呢?這時,雖然達到格子D1的獎勵為0,但是我們可以利用剛計算好的D1的價值。還是按照前面的方式進行計算:

向右移動:0.7 * (0 + 0.7) = 0.49向上/下/左移動:0.1 * (0 + 0.7) = 0.07格子價值:max([0.49, 0.07, 0.07, 0.07]) = 0.49

到這里,一個簡單的算法呼之欲出。我們只需要找到所有有獎勵的位置,然后從那里開始去計算其他所有位置的獎勵,好像這個問題就解決了。

實際情況會稍微復雜一些。因為我們可能有很多個位置都存在獎勵,而且這些獎勵的多少可能由于任務定義而不一樣。這里更實際一些的算法是利用多次迭代來實現。

為了不失一般性,我們可以定義公式:

(表示每個動作的價值,其中:s表示當前狀態;a表示動作;s'表示下一個狀態;T(s, a, s')表示在狀態s,執行動作a轉換到狀態s'的概率;R(s, a, s')表示表示在狀態s,執行動作a轉換到狀態s'得到的獎勵)

(表示每個格子的價值,其中:s表示當前狀態,a表示動作)

一般而言,我們會引入一個額外的γ參數,對下一個狀態的價值打一定的折扣,這是因為當前獲得的獎勵一般會優于下一個狀態的價值的,畢竟下一個狀態的價值只是一個估計值。這時,上述第一個公式變為:

于是,我們的算法就可以描述為: * 對每一個狀態,初始化 V := 0 * 循環,直到V收斂: * 對每一個狀態,

這里為判斷V是否收斂,我們可以檢查當前這次迭代是否會更新V的值。 用javascript代碼實現,主要代碼如下:

MDPVISolver.solve = function () { var values = m.zeroArray([this.states.length]); var valuesNew = values; var iterations = 0; do { var qValuesAll = []; values = valuesNew; valuesNew = []; for (var i = 0; i < this.states.length; i++) { var state = this.states[i]; var qValues = this.qValues(values, state); qValuesAll.push(qValues); var value = this.value(qValues); valuesNew.push(value); } console.log('finished iteration ' + (++iterations)); // console.log('values: ', values); } while(!this.converged(values, valuesNew)); ...}

這里我已經實現了上述的游戲的一個Demo,見這里「鏈接」,完整代碼見這里gmlove.github.io/grid-world.js at source · gmlove/gmlove.github.io · GitHub865行到890行。

上述算法就是強化學習里面的經典算法 價值迭代 算法了。而我們上面定義V的迭代形式的公式就是著名的 Bellman 公式了,其最初由 Richard Bellman 提出。

另一個思路

上述算法存在一個問題,我們最后得到的是一系列狀態價值(每個格子的價值),為了得到我們想要的行動,我們還需要根據根據狀態價值,計算行動價值,即上述Q(s, a)。使用上有所不便。

那么有沒有辦法改進呢?再來思考一下這個問題的目標,實際上我們想要找到一種指導機器人行動的策略。這里的策略可以表示為:在任意一個位置,算法可以給出一個恰當的行動。

我們能不能直接去衡量某一個策略的價值呢?因為一旦有了這個策略的價值,我們就可以考慮直接去優化這個策略,而不是去對所有的狀態計算價值。

對于某一策略,由于其可以基于當前狀態指導我們作出行動,我們可以定義它為一個 輸入為狀態 輸出為行動 的函數,即π: a = π(s)

既然這樣,參考價值迭代算法中的狀態價值(格子價值)定義,我們可以定義策略價值函數為:

(策略π的價值,其中:s表示當前狀態;a = π(s)表示動作;s'表示下一個狀態;T(s, π(s), s')表示在狀態s,執行動作a=π(s)轉換到狀態s'的概率;R(s, π(s), s')表示在狀態s,執行動作a=π(s)轉換到狀態s'得到的獎勵)

上面的公式是一個迭代形式的定義,既然如此,我們可以參考之前的狀態價值迭代算法,迭代計算這個策略的價值,最后這個價值可能會收斂到某個具體的值。

然而就算可以計算策略的價值,我們如何得到一個有效的策略呢?如果沒有策略,其實也無從計算其價值。

能不能隨機初始化一個策略?在這基礎上計算其價值,進而得到更好的策略。

對于以上解決問題的思路,我第一次看到的時候,也不禁暗暗贊嘆。事實上,這就是我這里想要給大家介紹的另一個強化學習經典算法:策略迭代 算法。

如何根據一個策略尋找更優策略?可以這樣做:

計算在當前策略下,哪一個行動能得到最大價值選擇價值最大的行動作為新策略的行動

用公式表述如下:

(下一個(第i+1個)更優策略π(i+1),其中:s表示當前狀態;a = π(s)表示動作;s'表示下一個狀態;T(s, a, s')表示在狀態s,執行動作a轉換到狀態s'的概率;R(s, a, s')表示在狀態s,執行動作a轉換到狀態s'得到的獎勵)

到這里,這個 策略迭代 算法就差不多完成了。用JavaScript代碼實現,主要代碼如下:

MDPPISolver.solve = function () { var policy = this.randomPolicy(); var policyNew = policy; do { policy = policyNew; values = this.solveForPolicy(policy); policyNew = this.improvePolicy(values, policy); } while (!this.converged(policy, policyNew)); ...}

完整代碼見這里「鏈接」932行到1024行。

擴展狀態空間降維

雖然我們可以用上述兩個經典算法解決這個問題,但是它們的效率是很低的,算法復雜度用大O計算法可以表示為O(ass)。對于這個非常簡單的問題,計算速度尚能接受,但是如果我們考慮一些更復雜的問題,就會發現這里的狀態s的取值空間可能會非常大。

比如對于下面這個吃豆子的游戲,這里的狀態數量為:

狀態數量 = 格子數量 * N (N為每個格子的可能狀態:比如是否有吃豆人、是否有豆子、是否有敵人及敵人的類型等等)

過大的狀態空間就導致上述經典算法實際無法執行,也就無法滿足實際需求。

一個可能的優化手段是人為的設計一些特征來表示某個狀態s,這樣就實現了對s進行降維的操作。比如對于上面吃豆子的游戲,我們可以建模這樣幾個特征:

離最近的豆子的方向和距離離每個敵人的方向和距離敵人的移動速度和方向

有了這樣的很小的狀態空間,上述算法就可以執行了。

深度強化學習DQN

有了上述狀態空間降維的辦法,我們可以考慮是不是可以用一個深度神經網絡來替代人工特征的過程呢?當然是可以的,這就是前幾年 Deep Mind 轟動學界和產業界的關于 深度強化學習 的論文中的內容了。

DQN的全稱是Deep Q-Network,它的核心是一個Q值迭代的算法。Q值迭代公式就是我們 價值迭代 公式中的關于行動價值的公式的一個迭代形式。算法也是不斷迭代直到收斂。

我在另一篇文章中有關于DQN的更多內容。詳情見這里讓機器自己玩游戲 | Bright LGM's Blog。

更多的問題

考慮一個更實際的問題,上述經典算法假設我們知道了狀態轉移函數T。但實際上當前世界可能對于我們是全新的,T對于我們而言當然也是未知的。這個時候有什么辦法呢?一個簡單的思路是我們可以通過不斷在這個世界中進行探索,去了解這個世界的運作方式,也就是不斷的弄清了這個T函數。在強化學習的研究中,抽象一下這個過程,即通過不斷采樣來近似估計T函數。

另一個實際的問題是,有時候我們可能無法執行這么多次探索,或者每次探索的成本太高以至于負擔不起。這時,一個有效的思路是,我們可以從別人的經驗中學習,或者通過看電影讀書進行學習。當前的強化學習方法也在這個方向上進行了很多探索。

對于如何高效的進行學習,還有一個思路,那就是我們能否模仿某個已有的不錯的行動策略呢?比如,假設我們希望訓練機器人做家務,那么是不是可以通過演示一遍給機器人看,然后機器人通過模仿進行學習呢?這就是模仿學習思路去解決這個問題。

關于這個領域,我們還可以想出更多的問題,比如,如何讓機器人自己去探索解決問題的方法?如何處理連續的動作(文章開始時提到的喝水的例子,這里移動雙手的過程其實就是連續動作決策的過程)?如何自動設置獎勵甚至不設置獎勵?很多越來越難問題被一個一個提出,同時又正在被不斷提出的新思路一個一個攻克。

總結

總結起來,強化學習其實就是關于如何學習的研究。這個領域發展至今能解決的問題還比較有限,我們離最終的通用人工智能的路還很長。同時,很多新的有挑戰性的問題不斷被提出來,被大家研究,很多創新的解決問題的思路也不斷被發掘出來。正是我們對這個領域充滿熱情,才推動了這個領域如此蓬勃的發展。相信終有一天這個問題能被我們人類攻克。

相關文章:讓機器自己玩游戲「鏈接」

關注我:Githubgmlove (Bright Liao) · GitHub 個人博客Bright LGM's Blog 以往博客

原文鏈接:https://insights.thoughtworks.cn/reinforcement-learning/強化學習入門 - ThoughtWorks洞見

文/ThoughtWorks 廖光明

更多精彩洞見,請關注微信公眾號:ThoughtWorks洞見

拓展知識:

主站蜘蛛池模板: 人妻少妇无码精品视频区| 亚洲精品成人片在线观看精品字幕| 日本在线 一区二区| 粗大的内捧猛烈进出少妇视频| 男女吃奶做爰猛烈紧视频| 亚洲精品欧美综合一区二区| 国产日韩精品一区二区在线观看| 无码专区国产精品视频| 日韩精品欧美在线视频在线| 欧美视频一区二区免费| 草草网站影院白丝内射| 中文字幕av一区二区三区不卡| 成人毛片18女人毛片免费| 久久久久久毛片免费播放| 国产sm调教折磨视频| 国产精品天干天干有线观看| 成人乱人乱一区二区三区 | 色老头在线一区二区三区| 激情综合色五月丁香六月亚洲| 亚洲日韩va无码中文字幕| 欧美精品一区在线播放| 一区二区三区不卡欧美| 久久人人97超碰a片精品| 巨大欧美黑人xxxxbbbb| 国产午夜精品一区二区免费| 日韩毛片一区二区三区免费播放| 一本一道久久综合狠狠老| 国产午夜成人久久无码一区二区 | 在线一区二区视频| 国产精品免费一区二区在线观看| 欧美颜射内射中出口爆在线| 欧洲 日韩一区| 熟女一区二区中文| 天天影视网天天综合色| 奇米影视久久一区二区亚洲| 亚洲高清国产拍精品网络战 | 久久熟妇99一区二区| 久久久久久a亚洲欧洲av| 欧美蜜桃一区二区三区在线观看| 又粗又硬又大又爽免费视频播放| 亚州日本乱码一区二区三区|