机械学习-深度学习(ReinforcementLernen)_机械行业深度学习-程序员宅基地

技术标签: 深度学习  ML  

纲要

1.问题设置:MDP(Markov decision process)
2.学习目标:reward(maximale Bewertung)
3.PL中对应的问题的维度//??
4.策略学习(Policy learning)

RL的学习目标(Lernziel RL)

就是通过寻找一个动作序列 a1,...an ,使得最终可以得到最高的评价。
(Finde eine Aktionssequenz a1,...,an ) so dass dadurch die maximale Bewertung aufgesammelt wird.)

RL的一般应用

  1. 控制机器人
  2. 游戏 :像围棋啊什么的
  3. 生产线优化或计划优化

Markov decision process(deterministisch)

五元式表示(非确定性的):
指以俄国数学家Andrei Andreijewitsch Markov的名字命名的一种决策模型。一般用五元式(S,A,T,r, p0 )表示:
S:表示状态集
A:表示动作集合(Action)
T:是一个映射 T:S*A*S [0,1]。T(s,a,s’)=p(s’|s,a)表示从状态s通过动作a到达状态s’的概率
r:就是reward的意思了,表示映射:S*A*S R。
p0 :表示开局分布,就是初始状态为对应状态的概率。
公式表示(确定性的):
在这里我们这样表示状态的转化(一般可通过观察获得)

δ:(SA)Sδ:(st,at)=st+1

我们用下面式子表示reward
r:(SA)Rr(st,at)=rt

另外这个模型最重要的一个假设是:从状态s成功过渡到状态s’的概率,只由状态s决定,而与状态s之前的状态无关。//贝叶斯吗??

Policy learning


S1r1a1S2...rn1an1Sn

寻找(最优)目标方法(Zielfunction,target function)
π:SA,   π(st)=at

使得累积reward(akkumulierte Bewertung)
Vπ(St)=rt+γrt+1+γrt+2+...=i=0γirt+i

最大。
其中0<= γ <= 1,为reward的权值(Diskontierungsfaktor)
γ 为零,则表示当前动作无敌关键。
要求 γ 大于零是为了使不会忽略后面的reward
要求 γ 小于一是为了收敛性考虑。
//但是注意到这货的取值范围是可以等于一的,这是为何??
(Ann.:absorbierender Terminalzustand:Alle Aktionen führen kostenfrei wieder in den Zustand???)

最优策略(Optimale Strategie)

最优目标函数(optimale Zielfunktion):

π(s)=argmaxπVπ(s),s

那么对应的最大的累积reward就是:
V(s)=Vπ(s)

可以通过递归进行定义:
V(St)=rt+γV(St+1)

那么我们的问题就是:如何获得 V(s)

Simple Temporal Difference Learning I(Simple Value Iteration)

idea:
V^(s) V(s) 的估计值
π(s)=argmaxa [ r(s,a)+γV^(δ(s,a)) ]
学习过程(Lernen):
随机初始化 V^(s) //随机真的好吗?
do forever:{
选取一个状态 st
执行目前最优动作,并得到对应的下一状态:
st+1=δ(st,π(st))
V^(st)=rt+γV^(st+1)
}
上面这个方法的问题是学习过程缓慢(do forever)(und hartes Ersetzen不知指啥??)
另外,在上面的算法中,似乎缺少了调整目标函数的语句??
//感觉思路和EM一样??
//下图左上为初始图,右上为对应的reward,下图为最优路径
这里写图片描述

Simple Temporal Difference Learning II

稍微修改了点学习过程
随机初始化 V^(s)
repeat:{
选择一个状态 st
repeat:{
st+1=δ(st,π(st)) ;
V^(st)=V^(st)+α[rt+γV^(st+1)V^(st)]
st=st+1
直到 st=terminal 推出循环
}
}
同样这个方法还是存在问题:
1.r(s,a), δ(s,a) (也就是状态转化的结构图)必须事先知道。
2.使用 π(s),

RL主要关心的几个问题(Problemdimensionen beim RL)

rewardr(s,a)δ(s,a)V(st+1)(direkt)(deterministisch)(vorhanden)(eindimensional)(diskret)π(s)(verzögert)(stochastisch)(nichtvorhanden)(hochdimensioinal)(kontinuierlich)

//其中系统模型不太清楚,原文是Modell(Simulatioin) des
Systems.
//注 并非是两项的对比

Q方法(Q-Funktion,aktion value function)

Q(s,a)表示在状态s通过动作a,可以获得的最大的reward。

Q(s,a)=r(s,a)+γV(δ(s,a))V(s)=maxaQ(s,a)Q(s,a)=r(s,a)+γmaxaQ(δ(s,a),a)

主要思想是:
1.学习 Q^(s,a),(s,a)SA
2.通过 π(s)=argmaxaQ(s,a) 选择最佳动作。
// In der Anwendung wenig Wissen über Zustandsübergänge nötig.表示理解不能???
这里写图片描述

Q-学习算法(Q-Lernen Algorithmus)

目标:得出Q方法的估计值 Q^(s,a)
学习方法:
初始化: s,a   Q^(s,a)=0
选择状态s
do forever:{
选择动作a并执行他
r=reward
s’= δ(s,a)
update: Q^(s,a)=r+γmaxaQ^(s,a)
s=s’
}
//为什么不把对应的max Q记录到V中,这样就不用每次都进行比较了啊,应为改变当前状态的Q,一定会同时改变当前状态的V,所以觉得还是可行的啊??
相较于前面的方法,这里当前状态的最优路径的选择,则比较简单了(naiv):

π(s)=arg maxaQ(s,a)

进行n次循环后会得到:
Q^n+1(s,a)>=Q^n(s,a),s,a,n0<=Q^n(s,a)<=Q(s,a)

当满足:
1.|r(s,a)|< c
2.状态转变是确定的
3.每个(s,a)都进行无数次操作
那么可以得到: Q^Q
//Fehler wird bei jeder Aktualisierung um den Faktor γ kleiner
//每次更新后错误减小 γ ??这个还理解不能???
//和前面的差别,前面的当前状态最优reward并非一定是最优路径选择
还存在的问题:
当处在一个状态时应该如何选择下一个动作??
是应该选择 Q^(s,a) 最大得动作吗??如果直接选择最大者,那么可能会存在下面两个问题:
1.”lokales” lernen nur bestimmter Aktionen//理解不能??什么叫local 学习
2.刚开始没有被选种的动作,以后也不会再被考虑,尽管他可能在某些时候带来更好的结果//为什么可能会有更好的结果???
概率选择(Probabilistische Auswahl):
P(ai|s)kQ^(s,ai)ikQ^(s,ai),k>0aiP(ai|s)0

//k是啥???
k的影响:
当k大时:
1.local学习
2.检测已知的方法(bekannte Aktionen untersuchen)
当k小时:
1.全局学习(global lernen)
2.检测新的方法(neue Aktionen untersuchen)
//指数函数的话应该收到k大于1还是k小于1的影响才对吧???大于1是Q的影响强度是单调递增的,小于1大于0时Q的影响强度应该是单调递减的吧???
最好的方法是:
在学习过程中调整k值,使先全局学习,在局部学习。

优化

每一轮循环都把状态s的 Q^(s,a) 向目标方向进行调整:

Q^(s,a)=Q^(s,a)+α[r+γmaxaQ^(s,a)Q^(s,a)]

存储每对(s,a)的reward值r。因为 Q^(s,a)Q^(s,a) ,当 Q^(s,a)Q^(s,a) 要做相应的调整。
通过这种方法,可以调高收敛速度,但相应的它的存储需求也提高了
//不懂这个r是怎么来的,和Q有什么关系??
应用:
这种方法一般在动作(Action)会花费较长的事件的时候才会使用(换句话说就是,他有足够的时间“思考”,比如像机器人)
另外一个优化的策略有点弄不明白,他说把大部分的步骤放在虚拟的环境中运行,而只有少部分的步骤在现实中进行//???
原文是:
Lernen mit(adaptivem) Modell:
meisten Lernschritte auf simulierter Umgebung
wenig Aktionen in reealer Umgebung
Anpassung des Models

一般化(Repräsentation,Generalisierung)

问题:
在连续状态空间中存在的问题(kontinuierlicher Zustandsraum):
1.不可能把Q值存储在一个loop-up表中//????????
(Speichern der Q-Werte in der lookup-Tabelle unmöglich)
2.循环次数过高(sehr hohe Anzhal von Lerniterationen nötig)
解决方案:
与神经元网络结合使用
//这个完全不会?????????等看完神经元网络再说吧???

非确定性的MDP(Nichtdeterministischer MDP)

问题:
状态的转变受概率P(s’|s,a)限制
解决方案:
使用期望值:

Vπ(st)=E[i=0γirt+i]

相应的就有:
Q(s,a)=E[r(s,a)]+γsP(s|s,a)maxQ(δ(s,a),a)

从动作序列中学习(Lernen von Aktionssequenzen)

动机:
为什么需要从动作序列中学习呢?
因为有时候reward必须进过一系列的动作后才能得到.比如下围棋,光看当前一步,觉得下得不咋样,必须多走几步后才能看出他的价值。
而另外有时候只有接近目标了才能对现在的动作做出评价:
后续的动作可能导致差得结果//??不知是啥意思???理解不能
(bei langen Aktionssequenzen kann erst am Ende der Sequenz gelernt werden
nachfolgend Aktionen können für den schlechten Ausgang verantwortlich sein)

Temporal Difference Learning(TD learning)

前面我们已经看过了当只考虑最邻近reward(就是直接相邻)的情况,现在我们要看的是,当我们把往下n步的reward都考虑在内的情况。
首先先看一下状态reward序列:

st,rt,st+1,rt+1,...,rT,sT

其中s_T为最终状态
先引入一个概念,在MC(Markov Chain??)方法中,我们使用Return作为 Vπ(st) 的备份(Backup),表示为:
Rt=rt+γrt+1+γ2rt+2+...γTtrT

//原文是r的T-t-1次方,感觉不对??
他是MC学习方法的额定值(Sollwert,Lehrersignal)。
当往下看一步时
R(1)t=rt+γVt(st+1)

当往下看两步时:
R(2)t=rt+γrt+1+γ2Vt(st+2)

//那这里的 rt+1 是怎么确定的
以此类推
很多时候我们的Backup并不是由上面单独的一个步数来确定的,而是通过取不同步数的reutrns的中值,比如 Ravet=R(2)t/2+R(4)t/2
更一般的,我们引入了TD( λ ),他是所有n步的return的加权取和。他表示为:
Rλt=(1λ)n=1λn1Rnt=(1λ)n=1Ttλn1R(n)+λTtRt

//最后那一小节不知道是怎么来的???
//据说引入 (1λ) 是为了确保最后权值之和为1。具体原因见往下第二张图???
这里写图片描述
前面忘记定义了,V方法的向下看n步的backup为:
ΔVt(st)=α[R(n)tVt(st)]

那么相应的向下看 λ 步的V方法的每回的更新是:
ΔVt(st)=α[TλtVt(st)]

这里写图片描述

TD学习的Forward View/Backward View(Vorwärts Sicht/Rückwärtige Sicht)

这里写图片描述
上图中上面的为Forward View,下面的为Backward View。
/*
其中Forward View并不是很了解,看了两份材料,一份说就按照前面提到权值直接判断就是了和往下看一步的情况一样,而另外一份却说,因为Forward View没有很好的因果关系,因此不能直接的被实现。原文就是图中的那句话。
具体咋弄的,等有时间再研究吧
*/
那么就直接看Backward View吧。
Backward View:
Backward View需要为每一个状态附上一个新的变量(trace Variable)e_t(s),他的定义如下:

et(s)={ γλet1(s)γλet1(s)+1s!=sts==st

其中 0<λ<1 ,我们称他为Eligibility Traces。他描述了那些状态是估计V和Q时应该考虑的。当 et(s)>0 表示这个状态将很快被考虑到,至于有多快,则由 γλ 决定。
//就算这么说,还是不理解啊??
(Dabei zeigt et(s)>0 an,dass der Zustand s kürlich besucht wurde. Kürzlich ist hierbei durch die Größe γλ definiert.
et(s) zeigt, für welche Zustände s S die Funktion V bzw. Q anzupassen ist.)
这里写图片描述
算法:
1.Initaliye V(s) arbitrarily and e(s)=0; π policy to be evaluated
2.Repeat(for each step of episode){
Initialize s
Repeat(for each step of episode({
a= π (s)
take a, observe reward r, and next state s’
δ =r+ γ V(s’)-V(s)
e(s)=e(s)+1;
For all s:{
V(s)=V(s)+ αδe(s)
e(s)= γλe(s)
}
s=s’
}
知道s为终止状态
}
//好吧确实这个算法描述和前面的算法描述有点出入,因为是我直接从别的地方挖过来的。但相比于课件上得那个算法表达,我只想说这个要好理解多了,虽然他们表述的是一个东西。
//不放到代码箱里是因为,里面不知道怎么输出特殊符号
//另外这个算法虽然看得懂,但对于为什么要这么做确完全不明白。????
//再次吐槽一下,怎么会有用两页ppt就把TD学习带过去的老师啊!!!好吧相对于只用了一页的Sarsa似乎还是不错的
//回头再研究吧
例子:SARSA(不会是贪吃蛇吧):
这里写图片描述
目标:寻找到达目标的路径
初始所有Q=0;
reward只有在目标出才有
中间图:不用Eligibility-Trace,用Q值就够了
//Miite-Lernen ohen Eligibility-Trace,Nur ein Q-Wert wird angepasst.
右边:使用Eligibility-Trace.
//Rechts-Einfluss der Anpassung mit Eligibility
//上面是课件上关于SARSA的全部内容,感觉邮件智商不管用,下面是补充:
前面介绍Backward View的时候,我们说的都是V方法和 et(s) ,现在我们使用Q方法替代V方法,使用 et(s,a) 替代 et(s) 其中 sS,(s,a)SA ,相应的我们可以得到:
Qt+1(s,a)=Qt(s,a)+αδtet(s,a)δt=rt+γQt(st+1,at+1=Qt(st,at)

另外有:
et(s,a)={ γλet1(s)+1γλet1(s)when st=s,at=aother

//必须承认上面这种写法不是很严谨,但架不住他直接明了
//下面是具体算法,约定一下用d代替 δ ,l代替 λ ,g代替 γ ,就是各自发音的首字母

1.initalize Q(s,a)arbitrarily and e(s,a)=0 all s,a
2.Repeat (for each episode)
    initialize s,a
    Repeat (for each step of episode):
        Take a, observe reward r,and next state s'
        Choose a' from s' using policy derived from Q(e.g. €-greedy)
        d=r+g*Q(s',a')-Q(s,a)
        e(s,a)=e(s,a)+1
        For all s,a:
            Q(s,a)=Q(s,a)+a*d*e(s,a)
            e(s,a)=l*g*e(s,a)
        s=s'
        a=a'
    until s is terminal

//下面还有几个例子,比如电梯操控,TD-Gammon,BISAM。以后在看吧,感觉前面的都还没弄懂呢,总之看完后有种很怪得感觉,很矛盾,像是简单和复杂的综合题。待研究????????

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Teufel_Huang/article/details/50552419

智能推荐

百兆以太网口通信速率_千兆以太网的传输速度-程序员宅基地

文章浏览阅读3.1k次。千兆以太网主流标准千兆以太网络技术早在上世纪90年代末就已成熟,其中,1995年国际标准化组织TIA/EIA颁布了1000Base-TX标准,该标准的目的是把双绞线用于千兆以太网中,其目的是在6类非屏蔽双绞线(UTP)上以1000Mbps速率传输100米。1000Base-TX基于4对双绞线,采用快速以太网中与100Base-TX标准类似的传输机制,是以两对线发送,两对线接收。由于每对线缆本身不进..._bi_da+

python图书管理系统基本增删改查函数实现_python实习报告图书-程序员宅基地

文章浏览阅读3.2k次,点赞3次,收藏55次。# 准备工作warning = ["傻", "蠢", "笨", "呆", "愚"] # 敏感词users = [{"user_name": "张三", "user_password": "18546732149"}, {"user_name": "manger", "user_password": "000000"}, {"user_name": "user1", "user_password": "123456"}]def menu(): while True: ._python实习报告图书

Python3.X 成功解决 module 'cv2' has no attribute 'xfeatures2d'_module 'cv2.cv2' has no attribute 'xfeatures2d-程序员宅基地

文章浏览阅读4.8k次。Python3.X 成功解决 module 'cv2' has no attribute 'xfeatures2d',建议安装3.3.0.10版本的contrib,更高版本的contrib里面专利保护了SIFT和SURF. 请执行 pip uninstall opencv-python 执行pip install opencv-contrib-python==3.3.0.10_module 'cv2.cv2' has no attribute 'xfeatures2d

Android 初探Retrofit2.0.1(最新版)_androdi retrofit2支持版本-程序员宅基地

文章浏览阅读3.5k次。概述看见这段开头,你应该听过Retrofit的大名但是没有真正的运用过,或者用过Retrofit1.9但是没有跟上更新的进度。无论什么原因,你都该好好了解下这篇博客。1.9和2.0.1版本差别很大。网上相关的教程很少,又因为是初探,所以本篇博客会用一个Demo说明Retrofit2.0.1的用法, Retrofit GitHub地址:https://github.com/square/retro_androdi retrofit2支持版本

React新特性Hooks使用教学,以及与高阶组件、renderProps模式的对比_react 高阶组件、render props、hooks 有什么区别-程序员宅基地

文章浏览阅读7.9k次,点赞7次,收藏28次。目录一.什么是Hooks?1.useState的作用2.useEffect的作用3.useContext的作用二、对Hooks的思考1.高阶组件实现逻辑复用高阶组件版本的计数器2.renderProps实现逻辑复用renderProps版本的计数器3.Hooks实现逻辑复用Hooks版本的计数器4.给计数器增加第二个功能——变换颜色三、源码git..._react 高阶组件、render props、hooks 有什么区别

SpringBoot Cache 配置本地缓存_springboot cache配置-程序员宅基地

文章浏览阅读6.4k次,点赞4次,收藏2次。1.添加依赖<!--spring-缓存依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId></dependency>2.配置Cache@Configurationpublic class SpringCachingConfig_springboot cache配置

随便推点

UVA_156: Ananagrams_most crossword puzzle fans are used to anagrams — -程序员宅基地

文章浏览阅读683次。DescriptionMost crossword puzzle fans are used to anagrams--groupsof words with the same letters in different orders--for exampleOPTS, SPOT, STOP, POTS and POST. Some words however do not have thisa_most crossword puzzle fans are used to anagrams — groups of words with the

测试优惠券要怎么写测试用例?_设计一个购物优惠卷测试用例-程序员宅基地

文章浏览阅读1.4k次。使用会员抵扣券跳转到购买会员界面,支付时抵扣相应金额。使用方案抵扣券跳转到方案推荐的深度页面,选择方案支付时抵扣相应金额。查看可用的优惠券,可选择使用优惠券。我的优惠券页面点击某商品抵扣券后的“去使用”能否跳转到对应类型的商品页面。显示已失效的优惠券,显示优惠券类别,到期时间。失效优惠券按失效时间排序,显示前10的优惠券,剩下的优惠券不显示:优惠券选择页面:不可选择的优惠券置灰;支付页显示可用优惠券的数量,点击后跳转到选择优惠券页面,选择好优惠券后跳转到支付页。优惠券按照优惠额度排序。检测在我的页面优惠券点_设计一个购物优惠卷测试用例

VBA合并多个Excel文件1/2_vba 多个excel合并成一个,并以增加一列等于每个excel的文件名-程序员宅基地

文章浏览阅读405次。1. 原始数据介绍原始数据为4个格式为xls的excel文件格式为:第1行为变量名,第2行及之后为数据,变量数量为8个。每个excel含义745行数据(包括首行变量名)。4个excel的数据共745*4=2980行。2.打开vba运行界面,输入相应代码。3.运行后,结果如下。程序提示:合并了4个excel文件,并列出了各个excel文件的名称。合并后的数据第1行为空行。列数为8列。总行数为2981,减去空行即:含数据的行数为2980,恰好为4个原始Excel文件的数据总量。.._vba 多个excel合并成一个,并以增加一列等于每个excel的文件名

更新文件时间戳_怎么更新gcno的时间戳-程序员宅基地

文章浏览阅读674次。find 目录 -type f -exec touch {} +_怎么更新gcno的时间戳

MyBatis_plus实现简单查询与条件查询_mybatisplus 条件搜索 get请求-程序员宅基地

文章浏览阅读427次。1)通过id进行批量查询测试demo: @Test public void test04() { List<User> userList = userMapper.selectBatchIds(Arrays.asList("1388048014324580354", "1392340666326999041")); userList.forEach(System.out::println); }sql执行结果:==> Prepar_mybatisplus 条件搜索 get请求

Python字符串转义字符含义\‘,\“,\a,\b,\n,\t,\v,\r,\f,\o,\0,\x,\\_python \a-程序员宅基地

文章浏览阅读5.6k次,点赞4次,收藏15次。Python字符串转义字符含义’ 单引号str1 = “hello,‘world’”str1“hello,‘world’”"双引号str2 = ‘hello,“world”’str2‘hello,“world”’print(str2)hello,“world”\a发出系统响铃声\b退格符\n换行符\t横向制表符(TAB)\v纵向制表符\r回车符\f换页符\o八进制数代表的字符\x十六进制代表的字符\0表示一个空字符\反斜杠..._python \a