法国数学家勒让德 (Adrien-Marie Legendre) ,一直痴迷于预测彗星的未来位置,鉴于彗星以前的几个位置,他准备创建一种计算其轨迹的方法。
在尝试了几种方法后,终于有了进展。
勒让德从猜测彗星的未来位置开始,通过记录数据、分析,最后通过数据验证了自己的猜测,以减少平方误差的总和。
这便是线性回归的种子。
普及的两个步骤:该算法立即帮助航海者追踪星星,以及帮助后来的生物学家(尤其是查尔斯·达尔文的堂兄Francis Galton)识别植物和动物的可遗传特征。这两项深入发展释放了线性回归的广泛潜力。1922 年,英国统计学家 Ronald Fisher 和 Karl Pearson 展示了线性回归如何适应相关性和分布的一般统计框架,使其在所有科学中都有用。而且,近一个世纪后,计算机的出现提供了数据和处理能力,可以更大程度地利用它。
应对歧义:当然,数据永远不会被完美地衡量,有些变量比其他变量更重要。这些生活事实激发了更复杂的变体。例如,带有正则化的线性回归(也称为「岭回归」,ridge regression)鼓励线性回归模型不要过多地依赖于任何一个变量,或者更确切地说,均匀地依赖于最重要的变量。如果为了简单起见,另一种形式的正则化(L1 而不是 L2)会产生 lasso(压缩估计),鼓励尽可能多的系数为零。换句话说,它学会选择具有高预测能力的变量并忽略其余的。弹性网络结合了这两种类型的正则化。当数据稀疏或特征看起来相关时,它很有用。
在每个神经元中:现在,简单的版本仍然非常有用。神经网络中最常见的神经元类型是线性回归模型,随后是非线性激活函数,使线性回归成为深度学习的基本组成部分。
2、逻辑回归
曾经有一段时间,逻辑回归只用于对一件事进行分类:如果你喝了一瓶毒药,你可能会被贴上的标签是“活着”还是“死去”呢?
而现在,不仅打电话给急救中心可以为这个问题提供更好的答案,而且逻辑回归也成了深度学习的核心。
这个函数可以追溯到 1830 年代,当时比利时统计学家 P.F. Verhulst 发明它来描述人口动态:随着时间的推移,指数增长的初始爆炸随着它消耗可用资源而趋于平缓,从而产生特征逻辑曲线。
一个多世纪过去后,美国统计学家 E. B. Wilson 和他的学生 Jane Worcester 又设计了逻辑回归来计算给定有害物质有多少是致命的。
3、梯度下降法
想象一下,黄昏过后,在山上徒步旅行,发现除了脚外,你什么也看不见。
你的手机没电了,所以你不能用 GPS 找到回家的路。
也许你会通过梯度下降法找到最快的路径,但当心,别掉下悬崖。
1847年,法国数学家Augustin-Louis Cauchy发明了近似恒星轨道的算法。
60 年后,他的同胞 Jacques Hadamard 独立开发了它来描述薄而灵活的物体(如地毯)的变形,这可能会使膝盖向下徒步更容易。
然而,在机器学习中,它最常见的用途是找到学习算法损失函数的最低点。
太糟糕了,你的手机没电了,因为算法可能没有把你推到凸山的底部。
你可能会陷入由多个山谷(局部最小值)、山峰(局部最大值)、鞍点(鞍点)和高原组成的非凸面景观中。
事实上,图像识别、文本生成和语音识别等任务都是非凸的,并且已经出现了梯度下降的许多变体来处理这种情况。
例如,该算法可能具有帮助它放大小幅上涨和下跌的动量,从而使其更有可能到达底部。
研究人员设计了如此多的变体,以至于看起来优化器的数量与局部最小值一样多。
幸运的是,局部最小值和全局最小值往往大致相等。
梯度下降是寻找任一函数的最小值的明确选择。在可以直接计算精确解的情况下,例如具有大量变量的线性回归任务中——它可以逼近一个值,而且通常速度更快、成本更低。
但它确实在复杂的非线性任务中发挥了作用。
凭借梯度下降和冒险精神,你可能可以及时赶出山区吃晚饭。
4、神经网络
先弄清楚一个问题, 大脑不是一组图形处理单元,如果它是的话,它运行的软件会比典型的人工神经网络复杂得多。
然而,神经网络的灵感来自大脑的结构: 层层相互连接的神经元,每个神经元根据其邻居的状态计算自己的输出。由此产生的一连串活动形成了一个想法ーー或者说认出了一张猫的照片。
从生物到人工:大脑通过神经元之间相互作用来学习的想法可以追溯到 1873 年,但直到 1943 年,美国神经科学家 Warren McCulloch 和 Walter Pitts 才利用简单的数学规则建立了生物神经网络模型。
1958 年,美国心理学家Frank Rosenblatt开发出感测器——这是一种在打卡机上实现的单层视觉网络,旨在为美国海军建立一个硬件版本。
Rosenblatt 的发明只能识别单线分类。
之后,乌克兰数学家 Alexey Ivakhnenko 和 Valentin Lapa 通过在任意层数中堆叠神经元网络,克服了这一限制。
1985 年,独立工作的法国计算机科学家 Yann LeCun、David Parker 和美国心理学家 David Rumelhart 及其同事,描述了使用反向传播来有效训练此类网络。
在新千年的第一个十年中,包括 Kumar Chellapilla、Dave Steinkraus 和 Rajat Raina(与吴恩达合作)在内的研究人员通过使用图形处理单元进一步推动了神经网络的发展,这使得越来越大的神经网络能从互联网生成的海量数据中得到学习。
在报道 Rosenblatt 于1958年发明的感测器时,《纽约时报》开辟了人工智能炒作的道路,报道中提到“美国海军期望拥有一台会走路、说话、看、写、自我复制和意识到自己存在的电子计算机雏形。”
虽然当时的感测器没有达到这个要求,但它产生了许多令人印象深刻的模型:用于图像的卷积神经网络;文本的循环神经网络;以及用于图像、文本、语音、视频、蛋白质结构等的transformers。
它们已经做出了令人惊叹的事情,像下围棋时的表现超过了人类水平,在诊断X射线图像等实际任务中也接近人类水平。
然而,它们在常识和逻辑推理方面的问题仍然较难应对。
5、决策树
亚里士多德是一个什么样的「野兽」?这位哲学家的追随者、第三世纪期间生活在叙利亚的 Porphyry 想出了一个合乎逻辑的方法来回答这个问题。
他将亚里士多德提出的“存在类别”从一般到具体组合起来,将亚里士多德依次归入到每个分类中:
亚里士多德的存在是物质的而不是概念或精神;他的身体是有生命的而不是无生命的;他的思想是理性的而不是非理性的。
因此,他的分类是人类。
中世纪的逻辑教师将这个序列绘制为垂直流程图:一个早期的决策树。
快进到 1963 年,密歇根大学社会学家John Sonquist和经济学家James Morgan在将调查的受访者分组时,首次在计算机中实行了决策树。
随着自动训练算法软件的出现,这种工作变得很普遍,如今包括 scikit-learn 等在内的各种机器学习库也已经使用决策树。
这套代码是由斯坦福大学和加州大学伯克利分校的四位统计学家花费了10 年时间开发的。到今天,从头开始编写决策树已经成为了《机器学习 101》中的一项家庭作业。
决策树可以执行分类或回归。它向下生长,从根部到树冠,将一个决策层次结构的输入示例分类为两个(或更多)。
想到德国医学家和人类学家Johann Blumenbach的课题:大约在 1776 年,他首先将猴子与猿(撇开人类除外)区分开来,在此之前,猴子和猿是被归为一类的。
这种分类取决于各种标准,例如是否有尾巴、胸部狭窄或宽阔、是直立还是蹲伏、还有智力的高低。使用经训练的决策树来为这类动物贴上标签,逐一考虑每个标准,最终将这两组动物分开。
鉴于 Blumenbach 的结论(后来被Charles Darwin推翻),即人类与猿的区别在于宽阔的骨盆、手和紧牙的牙齿,如果我们想扩展决策树以不仅分类猿和猴子,而是对人类进行分类,那会怎么样呢?
澳大利亚计算机科学家 John Ross Quinlan 在 1986 年通过 ID3 实现了这一可能,它扩展了决策树,以支持非二元结果。
2008 年, 在IEEE国际数据挖掘会议策划的数据挖掘十大算法名单中,一项命名为 C4.5 的扩展细化算法名列前茅。
美国统计学家 Leo Breiman 和新西兰统计学家 Adele Cutler 将这一特征转化为优势,于 2001 年开发了随机森林(random forest)——这是一个决策树的集合,每个决策树会处理不同的、重叠的示例选择,并对最终结果进行投票。
随机森林和它的表亲XGBoost不太容易过度拟合,这有助于使它们成为最受欢迎的机器学习算法之一。
这就像让亚里士多德、Porphyry、Blumenbach、Darwin、 Jane Goodall、Dian Fossey和其他 1000 位动物学家一起在房间里,确保你的分类是最好的。
6、K 平均算法
如果你在聚会上与其他人站得很近,那么你们很可能有一些共同点,这就是使用 k 均值聚类将数据点分组的想法。
无论是通过人类机构还是其他力量形成的群体,这个算法都会找到它们。
从爆炸到拨号音:美国物理学家 Stuart Lloyd 是贝尔实验室标志性创新工厂和发明原子弹的曼哈顿计划的校友,他于 1957 年首次提出 k-means 聚类,以在数字信号中分配信息,但直到 1982 年才发表这个工作。
与此同时,美国统计学家 Edward Forgy 在 1965 年描述了一种类似的方法,导致了它的替代名称为「Lloyd-Forgy 算法」。
寻找中心:考虑将聚类分成志同道合的工作组。给定房间中参与者的位置和要形成的组数,k-means 聚类可以将参与者分成大小大致相等的组,每个组都聚集在一个中心点或质心周围。
在训练期间,算法最初通过随机选择 k 人来指定 k 个质心。(K 必须手动选择,找到一个最优值有时非常重要。)然后它通过将每个人与最近的质心相关联来增长 k 个集群。
对于每个集群,它计算分配到该组的所有人的平均位置,并将该平均位置指定为新的质心。每个新的质心可能都没有被一个人占据,但那又如何呢?人们倾向于聚集在巧克力和火锅周围。
计算出新的质心后,算法将个体重新分配到离他们最近的质心。然后它计算新的质心,调整集群,等等,直到质心(以及它们周围的组)不再移动。之后,将新成员分配到正确的集群就很容易。让他们在房间里就位并寻找最近的质心。
预先警告:鉴于最初的随机质心分配,你可能最终不会与你希望与之相处的以数据为中心的可爱 AI 专家在同一组中。该算法做得很好,但不能保证找到最佳解决方案。
不同的距离:当然,聚类对象之间的距离不需要很大。两个向量之间的任何度量都可以。例如,k-means 聚类可以根据他们的服装、职业或其他属性来划分他们,而不是根据物理距离对参加派对的人进行分组。在线商店使用它根据客户的喜好或行为来划分客户,天文学家也可以将相同类型的星星分在一组。
数据点的力量:这个想法产生了一些显着的变化:
K-medoids 使用实际数据点作为质心,而不是给定集群中的平均位置。中心点是可以将到集群中所有点的距离最小化的点。这种变化更容易解释,因为质心始终是数据点。
Fuzzy C-Means Clustering 使数据点能够不同程度地参与多个集群。它根据与质心的距离,用集群的度来代替硬簇分配。
n 维狂欢:尽管如此,原始形式的算法仍然广泛有用——特别是因为作为一种无监督算法,它不需要收集昂贵的标记数据。它的使用速度也越来越快。例如,包括 scikit-learn 在内的机器学习库受益于 2002 年添加的 kd-trees,这些 kd-trees 可以非常快速地划分高维数据。