怎样用AI打飞机 (上)

怎样用AI打飞机

 

 

自监督学习

 

如上所示, 一个Agent(机器人)和一个Enviroment(环境)交互, 通过Obeservation(观察), 执行Action(行动), 获得Reward(奖励);

对比一下人脸识别的过程: 人脸样本打标签, 损失函数训练神经网络, 神经网络将人脸变为高维度上的点, 点的距离得出人脸的相似度;

无监督学习不需要样本和标签;

无监督学习需要Enviroment(环境); 神经网络通过和环境交互来学习;

Environment(环境)

OpenAI的gym是一个开源的库, 里面有很多Environment:

比如:

80年代Atari游戏公司的游戏, 用来训练打游戏:

多关节的机器人, 用来训练直立行走:

 

 

TF-Agent

TF-Agent是Google开源的Agent(机器人), 可以和Environment交互, 学习;

实现来自DeepMind的论文: DQN(Deep Q-Learning Network) --- 深度Q-Learning 神经网络;

TF-Agent对DQN做了封装, 训练机器人的时候几乎不需要考虑DQN的实现细节;

本篇本来是想用TF-Agent来训练机器人打飞机, 但是发现3年前的Keras的一个例子, 那个例子里面有DQN的实现细节;

代码

https://keras.io/examples/rl/

Keras的例子是一个打钻块的例子, 我用他来实现打飞机, 稍微改了一下:

    加载打飞机的Environment, Atari的Assault-v4;

    num_actions(机器人执行的Action)改为7;

    Keras的输出, 去掉了繁琐的打印, 减少内存消耗;

加载Environment

这里DeepMind的模块对Atari的Environment做了一层封装, 主要是把彩色图变成灰度图, 缩小, 等等;

对比一下:

原图:

包装之后的图, 缩小成了84x84的灰度图:

这样的好处是可以加快计算速度;

机器人执行的Action放在了action_space, 把它打印出来, 是一个"离散"型的值, 有7个变量:

 

其中, 0表示无操作, 1表示向上开火, 2表示左移, 等等;

 

我们执行一个右移的操作, 打印出来:

其中, Reward是获取到的奖励, done表示游戏是否结束, next_state是游戏的下一帧;

创建神经网络

输入是84x84的灰度图,4表示4个frame; 输出是7(Action);

训练

https://keras.io/examples/rl/deep_q_network_breakout/

训练的部分比较复杂, 放在下期讲;

读者可以直接阅读Keras的例子, 里面的注释十分省心;

同时阅读一下马可夫决策和Q-Learning, 加上DeepMind的论文

DeepMind的论文可以在Google的TF-Agents介绍里面找到:

https://www.tensorflow.org/agents/tutorials/0_intro_rl#the_dqn_agent

结果:

这是我一晚上的训练结果:

从300多的Reward达到了1000多的Reward

 

下期见;

 

posted on 2023-01-25 12:03  聆听风琴的巴赫  阅读(461)  评论(0编辑  收藏  举报

导航