linyiLYi / street-fighter-ai

This is an AI agent for Street Fighter II Champion Edition.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

这个训练机制大概基于什么样的一个逻辑呢?

wolfshadowkd opened this issue · comments

感觉训练的结果还挺厉害的,不知道这个的基本逻辑是什么?运行train.py之后就开始积累训练数据模型了

这里有段视频,https://weibo.com/tv/show/1034:4890912753647738?from=old_pc_videoshow
我不是专家不能乱讲解。标题是强化学习。

youtube也有,我都看了,我正在学这个例子,非常感谢林总提供这样一个机会。

视频里有几段在描述原理。
感觉有点像训练海豚,有点进步就给点甜头(加分鼓励),这是强化学习的机制。视频中也提到过拟合,
以及由于一直被罚分,导致AI认为躺平,反而能最少被罚分,所以消极怠工的情况。
我想这可能是强化学的普遍问题。
就是训练海豚,也分两派,有一派始统认为,学会一个动作,给条鱼,是不对的。因为海豚最需要的荣誉感。
而且,这样不停地喂鱼,也有一个大问题,不仅是对海豚消化不好,而且会不断打断它的训练过程。以至于,只有那些小步的进步才得到嘉奖。
事实上,是工程中,或者在战争中,我们只关心最终的结果。为了最终的结果,有时我们会李代桃僵。
而且,我认为荣誉感才是一个智能最终需要的,而不一丁点甜头。

事实上,我认为,我认为,最后,等在墙角,最后KO,不是什么智能的表现,反而像是消极怠工和机会主义的结合产物。
这应该与强化学习的本质思路局限有关。

现实社会,为什么一将难求也是如此。例如赵括,也是著名将军。但其进取能力不如白起,才会输掉战争。
有大决心的人,不在一城一池得失。积累小分,不如一个抱摔。虽然最后是抱摔赢,但这不像是主动为自己创造的机会,怎么看都像是在被动中抓住机会。这种逻辑在**人看来没毛病,但对于西方人来看,是极为危险的。因为我们不是永远有机会得到这样的机会。真正的将军,是要能创造机会。

后面这些是有感而发吧。我觉得AI还有很长的路要走。

commented

具体的原理可以参考莫凡(莫烦?)的博客,强化学习那一章,讲的非常清楚。
你可以把这个游戏当成是一个迷宫游戏,迷宫的终点就是敌人的HP<=0,而你所做的每一步,都相当于在迷宫中散步。只不过,会有一张表记录你的每一步,也就是前一步和这一步,如果你确实在向终点迈进,那么就给你加分,否则就给你减分。
具体来说,就是如果你出拳,打到对方了,那给你加分,如果不止没打到,还被对方打了,那就扣分。
自己试着实现一次走迷宫的小游戏强化学习,就能很清楚的理解我在说什么。
另外,这个思路其实完全可以规避AI的躲在墙角里的行为,很简单,如果agent.x<=墙角坐标+人物宽度+一个范围,那么就扣分,就可以很好的规避消极躲墙角。也可以用time的减少作为扣分项,强迫ai速战速决。
不过这就需要很高的游戏作弊能力,因为这些都需要用软件查找到对应状态的内容,并且更新在data.json里。
如果需要特定的出招,比如升龙拳,那也可以这样做,但是要找到升龙拳的内存地址。现在没这么干,也能发出升龙拳,可能是由于Ai自己瞎搞试验出来了,也可能是由于gym-retro自己的动作里面就包括这些动作,但是我查找他发现他只有12个动作,也就是说,去掉8个方向移动,就只剩下4个拳脚了,理论上是不包括方向与动作组合的。只能猜测是ai自己实验出了升龙拳,波动拳和旋风脚。

commented

感觉训练的结果还挺厉害的,不知道这个的基本逻辑是什么?运行train.py之后就开始积累训练数据模型了

如果取得某个结果需要经过多个步骤,那么每一步只要更接近结果了,就是有进展。不管是人还是AI,都需要积累一步步的进展,才能得到一个结果。强化学习的核心就是把进展情况告诉AI,让它自己通过各种尝试找到更好的推进方式。

人不光可以在实战中学习,还能复盘过去的经历,在走路、做梦的时候学习,PPO就是在实战之外增加了对历史经验的复盘,理论上和实际上都学的更快。