算法的进化:机器会引发战争吗?
导语:现代算法是可以自学的,尤其是推荐系统算法,它可以根据每个人的喜好推荐有趣的东西给我们,比如说适合的电影、书籍、音乐等等。
现代算法是可以自学的,尤其是推荐系统算法,它可以根据每个人的喜好推荐有趣的东西给我们,比如说适合的电影、书籍、音乐等等。算法通过与用户之间的交互过程,获取用户的个人偏好信息,并从中学习进一步完善自身,发现其中的关联关系,以便为下一位用户提供更优质的推荐信息。为了满足自己的好奇心,我研究了其中一种算法,想知道它到底能有多了解我。所以,在剑桥微软实验室测试Xbox游戏机所用的Kinect视觉识别算法时,我顺便拜访了一位同事,想向他了解一个实时推荐系统的算法原理。
该推荐系统的用户界面上随机排列了约200部影片,我要做的是如果看到自己喜欢的影片,就把它拖放到屏幕的右侧。其中的确有一些是我比较喜欢的影片,于是,屏幕中的影片位置自动调整,将我可能喜欢的电影放到靠右侧的位置,而将我可能不太喜欢的电影放到靠左侧的位置。仅仅通过一部电影是不足以训练算法的,所以大部分尚未被分类的影片仍然停留在屏幕中间的区域。
《王牌大贱谍》这部影片我觉得很无聊,属于我特别不喜欢的类型,所以我就把它拖到了屏幕左侧的回收站里。这一操作为算法提供了进一步学习所需的新信息,使屏幕中影片的位置又进行了一次调整,我似乎能感觉到算法对自己提供的建议很有信心:它将伍迪・艾伦(Woody Allen)的《曼哈顿》推荐为我喜欢的电影。这部影片确实是我喜欢的,尽管算法是对的,但此时它还没有给我特别多的惊喜。它可能觉得我会比较喜欢《摇滚万岁》,所以将这部电影向右侧移动了。但事实恰好相反,我不能忍受这部影片,所以我把它拖到了回收站里。
算法本来以为我会喜欢《摇滚万岁》,但事实上我不喜欢,从这个过程中它获取到了重要的新信息。屏幕上的影片又一次进行了重新排列,并且此次调整的幅度非常大。这是因为系统后台的算法程序发生了微妙的改变―它根据我此次的选择学到了更多的“新知识”,并微调了推荐系统的模型参数。它判断我可能喜欢《摇滚万岁》这部影片的概率过高,所以通过修正特定的参数来降低其值。虽然此前它从别的既喜欢韦斯・安德森又喜欢《曼哈顿》的那部分影迷处得知,他们也喜欢《摇滚万岁》这部电影,但这一条并不适用于我。
正是这种人机交互给算法提供了持续学习的新数据,使它可以不断进行自我调整以适配我们的喜好。在当今社会,这些算法在我们做出各种抉择时发挥了巨大作用:选择电影、音乐、书籍,甚至伴侣,等等。
如果你喜欢……
电影推荐系统的算法原理比较简单。假定你喜欢电影A、B和C,而另一个用户也喜欢它们,但他还喜欢电影D,那么,D极有可能也是你所喜欢的。当然,现实中数据之间的逻辑关系并非如此简单。你喜欢电影A、B和C是因为这些影片里有你最喜欢的某位演员,但他并没有出演D这部电影。而另一个用户之所以喜欢A、B、C、D四部电影,是因为它们都是惊险刺激的间谍电影。
算法通过查看你所提供的信息,分析出你喜欢某类电影的原因,进而会把你和那些曾经做出过相同选择的人匹配、关联到一起。算法需要在大量的初始数据样本基础上展开工作,这一点跟许多机器学习算法是相同的。机器学习的一个重要特点是,人类必须参与到数据的分类过程中,以便让机器知道它所看到的到底是什么。这种管理数据的行为为算法提取潜在信息的模式做好了提前准备。
算法在用户浏览影片库的行为过程中拾取关键特征值,如浪漫爱情喜剧、科幻片,或者是某位演员、某位导演的作品。但是,这种方法并不理想。首先,非常耗时;其次,分类的过程存在不客观因素,计算机最终学会的是已知的知识,而不能发现新的潜在趋势,从而导致计算机形成拟人态的思维定式。从最原始的数据中学习并发现模式是训练算法最好的方式。
大家都知道,Netflix公司是一家会员订阅制的流媒体播放平台,开发出自己的电影推荐系统后,在2006年举办了奈飞大奖赛,期望通过竞争来发掘最优的算法。当时,Netflix已经积累了大量的电影评级数据,评分等级分为1~5星。于是,它公开了一个包含100 480 507个元素的电影评级训练集合,这些元素取自480 189个用户对17 770部电影的评价。然后,Netflix将17 770部电影的名称替换为数字序号,即变为匿名状态。比如,2666代表的可能是《银翼杀手》,也可能是《安妮・霍尔》,或其他任何一部影片。只有用户给这部电影的评分是已知的。