返回

在 Atari 游戏中,仅用 6-18 个神经元也能玩转:分离特征抽取与决策制定

人工智能

6-18个神经元,如何在Atari游戏中玩转?

在深度强化学习中,大型神经网络通常用于直接策略逼近,学习将高维输入映射到动作。然而,在一些相对简单的任务中,比如玩 Atari 游戏 Qbert,使用巨型网络学习到的内容中只有一小部分是实际策略。

对于 Atari 游戏,一个常见的理解是,网络内部通过前面层进行特征抽取,然后后面层使用这些特征进行决策制定。

因此,研究人员提出了一个问题:是否可以将特征抽取和决策制定分离,仅使用少量神经元就能玩转 Atari 游戏?

本文将介绍一项最新研究,该研究分离了特征抽取和决策制定,并展示了仅使用 6-18 个神经元就可以玩转多种 Atari 游戏。

分离特征抽取和决策制定

该研究的主要思想是将特征抽取和决策制定分离。具体来说,研究人员使用了两个神经网络:

  • 特征提取器网络: 该网络将原始输入(例如游戏屏幕)转换为一组特征。
  • 策略网络: 该网络使用特征提取器网络提取的特征来做出决策(例如选择动作)。

仅使用 6-18 个神经元

研究人员使用了一种称为进化策略的算法来训练神经网络。进化策略是一种受进化论启发的算法,它可以通过迭代地修改和选择神经网络来找到最优解。

研究人员发现,仅使用 6-18 个神经元就可以玩转多种 Atari 游戏,包括:

  • Qbert
  • Breakout
  • Pong
  • Seaquest

结论

这项研究表明,分离特征抽取和决策制定可以显着减少玩 Atari 游戏所需的神经元数量。这表明,在深度强化学习中,使用大型网络可能是一种低效的方法。

该研究还表明,进化策略是一种训练神经网络玩 Atari 游戏的有效算法。

示例代码

以下是可以使用 6-18 个神经元玩 Qbert 游戏的示例代码:

import gym
import numpy as np

# 创建环境
env = gym.make('Qbert-v0')

# 创建特征提取器网络
feature_extractor = ...

# 创建策略网络
policy_network = ...

# 训练神经网络
for i in range(1000):
    # 获取环境状态
    state = env.reset()

    # 提取特征
    features = feature_extractor.forward(state)

    # 做出决策
    action = policy_network.forward(features)

    # 执行动作
    next_state, reward, done, info = env.step(action)

    # 更新神经网络
    ...

# 玩游戏
while True:
    # 获取环境状态
    state = env.reset()

    # 提取特征
    features = feature_extractor.forward(state)

    # 做出决策
    action = policy_network.forward(features)

    # 执行动作
    next_state, reward, done, info = env.step(action)

    # 渲染环境
    env.render()

    # 检查是否游戏结束
    if done:
        break