我正在建造一辆遥控自动驾驶汽车来玩。我使用 Raspberry Pi 作为板载计算机;我正在使用各种插件,例如 Raspberry Pi 摄像头和距离传感器,来反馈汽车周围的环境。我正在使用 OpenCV 将视频帧转换为张量,并且我正在使用 Google 的 TensorFlow 构建一个卷积神经网络来学习道路边界和障碍物。我的主要问题是,我应该使用监督学习来教汽车驾驶,还是应该提供目标和惩罚并进行强化学习(即,尽可能快地到达 B 点,同时不撞到任何东西并保持在道路边界内)?以下是我提出的优缺点列表。
监督学习的优点:
- 学习算法的输入非常简单。汽车学会将视频帧张量和传感器距离读数与前向、后向和角车轮位移相关联
- 我可以或多或少地教汽车按照我想要的方式驾驶(当然不会过度拟合)
- 我以前做过很多监督学习问题,这种方法似乎很适合我现有的技能
监督学习的缺点:
- 目前尚不清楚如何教速度,只要汽车不开得太快以至于偏离道路,正确的速度是相当随意的。我想我可以在训练期间开得很快,但这似乎是一种粗略的方法。也许我可以在训练期间手动添加一个与该训练会话的速度相对应的常量变量,然后在部署学习算法时,我根据我想要的速度设置这个变量?
强化学习优点:
- 如果我制造我的汽车的特定目的是与其他人的自动驾驶汽车比赛,强化学习似乎是告诉我的汽车“尽快到达那里”的自然方式
- 我读到 RL 有时用于自动无人机,所以理论上它在汽车上应该更容易,因为我不必担心上下
强化学习缺点:
我觉得强化学习需要很多额外的传感器,坦率地说,考虑到它还需要安装电池、Raspberry Pi 和面包板,我的一英尺长的汽车内部没有那么多空间
这辆车一开始会表现得非常不稳定,以至于它可能会自我毁灭。学习时间也可能过长(例如,数月或数年)
- 我以后不能加入明确的规则,例如,在玩具红灯处停下来。通过监督学习,我可以将许多 SL 算法(例如,用于识别红绿灯的 Haar Cascade 分类器)合并到一个可配置的规则引擎中,该引擎在每个视频帧之间进行评估。因此,如果规则引擎看到红色红绿灯,即使红绿灯可能不是驾驶算法训练的一部分,它也将能够覆盖驾驶 SL 算法。RL 似乎太连续了,无法做到这一点(即,仅在终端状态停止)
- 我在应用强化学习方面没有太多经验,尽管无论如何我都绝对想学习它