怎么工作 AI 学习是什么意思
假设有一大堆猫的照片和狗的照片。想让计算机把两者分开,该怎么做?可以把耳朵的形状、鼻子、毛一条条写成规则,可每张照片长得都不一样,规则写也写不完。所以换一条路:给机器看一大堆带答案的照片,让它自己找出区别。机器“学习”,说的正是这件事。
人来写规则
到目前为止看到的程序,都是照着人写的命令原样执行。想让它做点什么,得先由人想好规则写下来。拿过滤垃圾邮件来举例吧。
有“促销”这个词就扔掉,链接太多就扔掉,全是大写字母就扔掉。像这样把规则一条条写好,似乎大部分垃圾邮件都能挡下来。
把规则一条条打开、关上,过滤一下邮件。就算规则全开,换了模样的一封垃圾邮件还是会漏过去。
规则开得越多,挡下的垃圾邮件越多。可总有一封漏到最后,因为发垃圾邮件的人为了不被抓住,会不停地换模样:不写“促销”,改写“赠品”;把链接藏进图片里。
每次都得再写一条新规则,规则于是没完没了地增加。规则之间还会打架,定得太严,连正常邮件也会被扔掉。靠人一条条写规则,很难跟上这样的变化。
从例子里找规则
这回把路反过来走。不写规则,而是给机器看一大堆带答案的例子:成千上万封邮件,每封都标着“这是垃圾邮件”或“这是正常邮件”。
机器一边看这些例子,一边自己找出垃圾邮件之间的相似之处,和正常邮件之间的相似之处。这样找到的模式,就是机器自己定的规则。像这样从带答案的例子里学习,叫监督学习。
把带答案的例子一个个给它看。例子越多,分开两群的模式就越清楚。
例子越积越多,分开两群的界线就越来越清楚。界线不是人画的,是机器直接从例子里找出来的。
了不起的是,就连人很难用语言说清楚的区别,只要例子够多,它也能抓住。不过,一开始找到的模式还很粗糙,可能会把几个例子分错。这个模式该怎么打磨?
边犯错边一点点改
学习不是一次就完成的。机器看一个例子,先给出答案,再和正确答案比一比。错了,就量一量错了多少,把模式稍微改一点。
下一个例子又错了,就再改。这样重复无数次,出错的次数就会越来越少。怎样量错了多少、怎样改,后面会以损失函数和梯度下降的名字详细讲。
一批一批地多给些例子。每点一次,机器就改一次模式,准确率上升,错的例子减少。
每多给一批例子,准确率就上升一些。一开始只能猜对一半多一点的模式,打磨几轮后,十个里能猜对九个。
不过它不会无止境地变得完美。到了某个地步,就只能一点点地变好,最后可能还剩一个例子怎么也判不对。即便如此,比起手写规则的时候,我们用少得多的力气走到了这里。那么,这样打磨好的模式用来做什么?
也能预测新输入
学习真正的回报在这里。用来学习的例子,答案本来就知道;真正有用,是在遇到从没见过的新邮件的时候。
机器把新邮件拿来跟打磨好的模式对照,判断它是垃圾邮件还是正常邮件。因为它找到的是模式,而不是背下了例子,所以第一次见到的邮件也能给出答案。像这样对新输入猜测答案,叫预测。
点一封没用来学习的新邮件。机器用学到的模式预测它是垃圾还是正常,还会告诉你猜对没有。
没见过的邮件,大部分也分对了。它不是拿出背好的答案,而是把从例子里找到的模式用在新输入上。所以形状稍有不同,也能看相似之处来判断。
可也有像最后一封那样猜错的时候,因为模式并不完美。所以机器学习会另外留出一些没用来学习的例子,用它们来衡量对新输入能猜得多准。
小结
归纳起来是这样:普通程序照着人写的规则运行,可世上的事太复杂,规则写不完。所以机器学习把路反过来走:给它看一大堆带答案的例子,机器就会找出共同的模式,也就是规则。
错了就一点点改,越来越准,再用这个模式去预测从没见过的输入。不写规则而从例子里学,这就是核心。
依次点要点回顾一下。(人写规则 → 从例子找规则 → 边犯错边改 → 预测新输入)
现在你知道机器“学习”是什么意思了:不是人一点一点地教,而是机器看例子,自己找出规则。今天能认照片、听懂话的机器,都是从这个想法出发的。
不过,要从例子里找模式,先得会概括和解读数据。怎样用中间在哪、分散得多开这样几个数来描述一堆数据,下一课讲统计时会说明。