机器学习模型训练优化概念

引言:作者相信在不久的将来,Ai就如同手机一般会成为人类必不可少的工具,而针对个体(社会,企业,家庭...)的Ai市场必然会成为巨大的需求缺口,而模型代训练将会是一个风口,本文章采用unity引擎的ml-agent机器学习工具包,讨论设计和模型优化,不涉及教程。

模型训练与优化的基本概念:相信很多学习机器学习和深度学习的小伙伴都有训练模型的烦恼,有时候训练1亿次电脑都跑蓝屏了,还是训练出个250,完完全全达不到自己的训练要求,而博主采用的优化概念是引导式训练,并且达到了一个十分不错的效果,而引导式训练又是什么呢?这个作者的灵感来源于婴儿训练,我们要教婴儿去说话,去走路等等,当然婴儿或许可以自学,但效果远不如有大人教的好,而我们的模型训练则需要去告诉我们的模型,你要去做什么。

项目背景介绍:警察抓贼

        玩法对抗介绍:一个警察需要抓走两个贼,当警察抓到其中一个贼,另外一个贼需要绕开警察解救被抓到的贼,则贼队加1分,警队扣1分。当警队抓获所有贼则警队加1分,贼队扣1分。抓捕过程采用时间机制,贼逃跑每秒增加0.01分。

未优化前训练5000万次数据:

        警察(黄色),贼1(绿色),贼2(紫色)

        d297549d1e164aedaeaa779221806049.gif

简直就是三个250,完完全全达不到博主想要的效果

再来看训练数据(TensorBoard):

16d735d457de4bc7a41dd29d5158d207.jpeg

897e6b888eae436da6f5360b2f2c6b58.jpegea843055fb874b3faf3c6471906b690e.jpeg

尝试引导式训练优化:我们去告诉智能体,“你”需要去做些什么,解除两个贼的神经网络,让它停止活动,让警明白,需要抓到两个贼才有奖励。

  1. if(villager1.PoliceWin == true && villager2.PoliceWin == true)
    {
          AddReward(+1f);
          PolicScore += 1;
          EndEpisode();
    } 
  2. 手动测试一下源码是否有问题        b681a9ea4dde449281a75814a25cc5f7.gif

没有问题就开始我们的训练,训练次数设置为1000万次,然后开始我们的训练

9f649872d3aa4e5091da7047bde8fcf9.gif

但是训练似乎还是受限制,警察不知道该如何获取分数,就算是无意中获取到了,警察也不能很好的继续延续下去,可能问题就是出现在这,或许是因为算法不合适导致的缘故。

既然如此,只能从更细微的事情开始引导训练,让警察知道要去抓小偷

下面是警察单独引导训练200万次结果,警察已经知道要去抓小偷。

3a5b3160911c4e8ba7e51d2b15e9ba12.gif

基于上面的模型我们开启小偷的神经网络进行对抗训练200万次

结果,小偷已经明白要躲避警察,还训练出蛇皮走位

43b1c725483b4f2e904d17aeb3d63219.gif

很明显它们已经知道自己要干什么了,但基于训练量不够的缘故,还是会做出意想不到的事情,比如小偷“跳楼”躲避警察。

25d38b38b7c043e98906082ef9b8da17.png

对比最初训练1000万次还是个只会“跳楼”的智能体我觉得是质的飞越,加入了引导式训练,大大减少了训练量,两个智能体也已经知道自己要做些什么。

继续扩大实验我们的项目

这次我们添加生成位置随机,使两个智能体的训练模式更为多元化和准确性

    public override void OnEpisodeBegin()
    {
        float Px = UnityEngine.Random.Range(-25f, 25f);
        float Pz = UnityEngine.Random.Range(-25f, 25f);
        float Vx = UnityEngine.Random.Range(-25f, 25f);
        float Vz = UnityEngine.Random.Range(-25f, 25f);

        Villager1.transform.localPosition = new Vector3(Px, 0, Pz);
        Villager1.velocity = Vector3.zero;
        Villager1.rotation = Quaternion.Euler(Vector3.zero);
        Villager1.angularVelocity = Vector3.zero;

        Police1.transform.localPosition = new Vector3(Vx, 0, Vz);
        Police1.velocity = Vector3.zero;
        Police1.rotation = Quaternion.Euler(Vector3.zero);
        Police1.angularVelocity = Vector3.zero;
    }

aa5c56bd5d17442a9c5636415417b586.gif

可以看到我们的智能体在随机生成位置

大约500万次训练结果,可以看到我们的警察(有辅助训练)已经明白什么该做,什么不该做了,分数也在逐步增加,而小偷还在“跳楼”躲避警察。

d324b76191954a29b32ba518696a0a18.gif

训练1000万次结果,小偷学会了“跳楼躲避追缉”,警察已经知道自己不能够“跳楼”,而是要逮捕小偷。

b9b7c7e52bd34c96986633469fe3fec2.gif

可能是小偷没有辅助学习的缘故导致,我们加入小偷的辅助学习(取消警察神经网络,使用unity原生组件NavMashAgent,使警察只会跟随小偷)

4698bd72487b46efa10ff103293a675a.gif

可以看到,小偷已经会躲避警察的追捕,说实话,看到这一幕我的内心很激动,眼眶有点湿润,这证明了引导式训练这个思想是有效的 ,迫不及待,加上我们训练好的警察模型试试335532a724534963895c0779b26cc5ef.gif

警察小偷都明白自己要做什么了,我们在这基础上训练个1000万次试试

训练完成后,只有小偷的模型训练的很棒,警察会飞天,所以改用最初的模型,可以看到小偷已经会卡身法挑衅警察了哈哈哈哈,对比一下很容易就看出双方模型训练量了

986136d1e5074a3bac741c4e8b2d9358.gif

基于这个模型,我们训练200万次

可以看到,警察已经会找到了方法,故意拉开身位去逮捕小偷,小偷也很谨慎,但不如警察智能体聪明

d07e52e977ab470583fad48bca88f26d.gif

尾言:作者始终认为,每个行业都是在分歧中成长,到一致里落幕,因为这句话作者以前想去区块链,web3行业里发展,但那里让我感受到了迷茫看不到未来,我无法理解区块链为什么变成金融的衍生品,Ai行业我找到了很明确的目标,我知道我要去做什么,我能看到属于这个行业的未来,或许20年后我可能只是某个小区的保安,但这是我的落幕,不是行业的落幕。

说说警察抓贼这个项目我研究的经历吧,因为训练的缓慢,加上每次新想法实施后的失败,网络上关于训练优化的帖子少之又少,也没有老师伙伴去交流想法,最令我印象深刻的是有一天晚上舍友都不在,我一个人呆呆的看着电脑,在自言自语,记不清我说了什么,只记得我有这样过,上一次这样还是我炒股票的时候,新想法一次次满怀期待被错误的结果所击败,或许是因为我笨的原因吧哈哈哈,但好在我坚持了下来,这次学习的经历给我最大的礼物,我觉得不是训练成果,而是我明白了做事一定要从小事做起,先把小事做好。

知识是一个人面对困难的底气,而不是成为一个人的优越感,授人以鱼不如授人以渔,这才是我写文章的初衷

人生的幸福之一莫过于自己有明确的目标

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值