原文地址:
https://community.arm.com/processors/b/blog/posts/teaching-scratchy-to-walk-with-neural-networks
神经网络教会小怪物走路
如果给你Cortex-M4处理器,一两个马达,少许乐高积木,再加一些电线和绑带,你会用它们来做什么呢? 一位德国的嵌入式系统开发者Sebastian Förster,决定用这些东西搭建一个四条腿机器人,并且用神经网络教会他走路。
这个被命名为小怪物的机器人,一共有四个伺服电机控制四条腿,使用超声波探测距离,主控用的是STM32F407探索开发板。
Arm深度学习技术总监Mark Connor专程和Sebstian见面并对他进行了采访,请他谈了一下为什么要做这个“小怪物”以及他的心得体会
那么, Sebastian,能否谈谈你怎么想到要去做这个“小怪物”的吗?
“是这样的,我目前硕士学位论文的题目就是有关如何在更小的Cortex-M处理器上实现机器学习。通过一个神经网络的实例来做性能测试。而作为测试的一部分,我把FANN神经网络库移植到了Cortex-M4上,并且我不想做太学术太死板的东西,而且我希望是有型的东西,最后我选择了做个机器人。如你所见,其实我没做的很复杂,就先把一些乐高积木连到电机上,然后再连到一块有足够Flash和SRAM的STM32F4开发板上”
“所以我论文的结论最后就是-其实我小怪物的成功也证明了- 在小型的基于Cortex-M设备上运行重型机器学习算法是完全可能的”
你有没有试图自己对腿部动作进行编程?
“当然没有,这显然应该是让AI去干的!小怪物的结构允许我可以独立地训练向前和向后的步法,让我大吃一惊的是,虽然它没有膝关节,但是也能工作。因为Deep Mind在 Atari Q-Learner上取得了很大的成功,所以我也决定使用Q-Learning,并且我可以在他们的基础之上编写Q-learning的代理。 FANN库其实是由其他人开发并在LGPL许可下开源的,我只是单纯移植到了Cortex-M4上”
你是如何决定网络拓扑的?
“SRAM的大小限制了拓补结构。 神经网络可以做的更大,但使用额外的变量会消耗非常多的存储器空间,而我更想直接在Cortex-M4上直接进行训练。在我看来,使用两个或三个前馈层并没有太大区别,尽管我没有直接比较它们 – 而我想压榨一下处理器!”
用微控制器进行当前的神经网络研究是否容易?
“其实裸C(非CUDA)框架完全可以适用于512Kb闪存和256Kb SRAM。 我很幸运地找到FANN,但是我需要编写一个小文件系统,以便库可以直接从闪存加载保存的网络权重。”
你对那些有兴趣构建和培训自己的机器人的开发者,有什么建议吗?
“无论你做什么,都不要放弃探究特征和超参数。 如果你已经能想到一些东西,你就可以创造它!“
以下是“小怪物”的真实视频,
Youtube网址,建议翻墙观看
https://youtu.be/fHCm0gQRzC4
懂德语的兄弟们请看Sebstian的原版博客:
https://sebastianfoerster86.wordpress.com/2016/11/07/robot-controlled-by-artificial-neural-network/
我觉得很有必要在优酷弄一个Arm社区的视频帐号,把上面这种youtube的视频统一搬运一下..毕竟这样方便一点。
多谢建议,Arm在优酷上有账号:http://i.youku.com/armchina 。 这个视频我上传社区了,可以直接在社区观看。因为Arm优酷自频道主要是放Arm原创视频,所以这次没有把这个第三方视频放上去,也请理解 :)