在软件开发的世界里,开发者们常常喜欢分享各种故事,有些幽默,有些则让人感到一丝无奈。在某个轻松的夜晚,一位朋友讲述了一个令人啼笑皆非的经历。她曾经负责一个看似简单却难以实现的任务——开发一个程序,能够分析X射线图像并识别肺炎等疾病。
当时,她的经理们坚信这项任务应该可以通过简单的编程实现,甚至尝试让她与专业的放射科医生合作,希望她能从中学习并将知识转化为代码。然而,这位朋友深知放射学领域需要的不仅仅是技术,更是人类的判断力和经验。最终,这个项目因为无法实现而被取消。
时光飞逝,到了2017年末,斯坦福大学的研究团队公布了一项突破性的成果:一种通过X射线图像诊断肺炎的算法。令人惊讶的是,该算法不仅可行,而且比专业放射科医生的表现还要出色。这似乎是一个不可能的任务,那么他们是如何做到的呢?
答案是,他们并没有通过传统的编程方法来解决问题,而是利用了机器学习技术。让我们来看看这其中的区别。
在传统的编程中,开发者需要明确地告诉计算机每一步应该做什么。例如,为了开发一个视频游戏,我们需要编写大量的if...else语句和指令性命令,详细规定游戏中的每一个可能情况。尽管现代编程语言提供了更多优雅的方式来替代这些复杂的条件分支,但核心理念仍然相同:开发者需要详细描述计算机应该寻找的内容以及如何应对。
然而,这种方法存在一些问题。首先,开发者必须考虑所有可能的情况,这在处理复杂任务时变得异常困难。其次,对于某些领域,比如计算机视觉,我们并不完全了解其中的决策过程,这就使得传统编程难以实现。
机器学习则打破了这一限制。与传统编程不同,机器学习的核心在于提供大量数据给计算机,并让它自己学会如何处理这些数据。例如,通过反复试验,计算机可以逐步学习如何在游戏中取得高分。它会记住哪些行为会导致成功或失败,并不断优化自己的策略。
这种方法被称为强化学习,其工作原理类似于训练动物。当行为得到奖励时,动物会倾向于重复这种行为。同样,机器学习中的算法也会通过不断试错,逐渐提升自己的表现。
在接下来的文章中,我们将进一步探讨机器学习的其他形式,特别是监督学习,这是目前最常用的技术之一。
这篇文章改编自《编程机器学习》的第一章,这是一本面向程序员的书籍,旨在介绍从基础到深度学习的知识。它既可作为电子书阅读,也可购买纸质版。原著由Paolo Perrotta撰写,可在Medium上找到原文。