AI算法实现与云平台应用( 四 )


下面(第二个红框所示)定义的是我们模型训练的方法,我们可以定义不同的损失函数 。给一个模型,不同的权重乘以图片的输入,再跟真实的Label来比,它们相差多少,不同模型可以用不同的指标 。图像分类我们经常会用这种交叉商;如果是一个回归的问题,例如相乘以后得到一个预测收入(前文的例子),这边是实际的收入,我们怎么描述它们的差别,我们可以做一个相减,然后求平方或者绝对值 。这里是为了让知道你怎么描述loss,有一个自己求梯度的系统,会给你求函数的梯度,让模型往梯度最低的地方走,然后让loss降低,loss越低表示预测值和真实值相差越小 。实际上我们可以自己实现一个自动求梯度的框架 。
图9 逻辑回归4
总结一下,逻辑回归是一个简单而强大的机器学习算法,广泛用于推荐系统,CTR等场景 。LR是一个线性模型,所以使用前需要一些特征工程的步骤 。LR的模型是一维数组,数组里面的权重可以用浮点数或者双精度浮点数来表示,数组的长度和特征的维度相同 。LR要定义loss函数作为指标,如 。LR训练时要优化loss,流行的方法是梯度下降算法,它有很多优化器,比如优化器 。LR特别容易训练,预测的性能特别高,也很容易实现分布式训练 。怎么实现分布式训练呢?一般我们会有一个 ,存它的模型,它的模型就是数组,我们把这个存起来,这个模型可以很大 。在工程上就是一个KV数据库,可以用HBase,如果单机放得下也会用Redis,甚至在内存里面也可以实现。一般不会用NoSQL去实现,昨天洪教授也提到了权重更新可能很频繁,并不需要每训练一次就把真实的值写到NoSQL里面,写到NoSQL里面会落盘,但我们并没有一致性的要求 。实际上我们很多 都是基于内存实现的,它挂了会有丢数据的情况,但我们可以定期做,保证只有最新数据就可以了,哪怕挂了通过重新训练也可以达到类似的效果 。
图10
是最近的升级版 。大家看pr稿上说用了一些人类的知识,而则摒弃了人类的知识,通过自我博弈得到更好的效果 。其实只是把棋局预测输赢的部分用一个神经网络替代了 。每下一步棋该怎么评判这一步棋好不好?里面有一个快速走子网络,输入一个棋局,预测一下这个点,看赢的概率是多少?这个快速走子网络是用一些人工的规则,例如以前根据人类的棋局得到一个公式,不一定是神经网络 。输入棋局然后输出一个结果,这一部分以前是依赖于人类的一些历史棋局 。而变化的部分是把规则给去掉,不用以前人类的数据,而是用神经网络,让神经网络学习 。如果我们只给一个棋局,我们正在比赛,下一个下棋,不管用CNN还是什么,不可能知道这个棋赢的概率多少 。所以在里面,每个样本产生出来,不可能每下一步棋就生成一个样本,然后告诉你下这步棋赢的概率,而是必须把整盘棋下完,这里面有700步棋,一直让它自动下,下完以后,最后赢了,那么这700步棋里面赢的概率会加1,最后是用统计的方法 。
里面的算法最重要的是蒙特卡罗树搜索,把它打印出来是神经网络 。其实也可以用简单的模型来替代 。使用蒙特卡罗树定义围棋规则,例如机器人不知道我已经下子的地方不能再下,这是在写代码的时候写死的 。
是有监督的学习,并不是无师自通,或者自我博弈 。其实自我博弈一开始随便下,下了一些棋局,根据这些棋局来学习的,但它比其他监督学习好的地方是不需要人类去标数据 。它这个学习相当于模仿前面的棋局,用神经网络很容易做,把以前训练好的棋局,然后写一个DNN,得到一个跟以前棋局下法拟合地最好的模型 。