种一棵树最好的时间是十年前,其次是现在。

什么是机器学习

机器学习指的是基于数据的方法实现智能,它是人工智能的一个子领域,是实现智能的现代方法。在普遍使用机器学习方式实现智能之前,基于规则和推理的传统方法依然在学术界占主导地位。在传统实现智能的方法中,专家系统是最常见的一种,从演化的角度看,理解专家系统,能帮我们更深入理解基于数据的机器学习。

专家系统在二十世纪七十年代开始出现然后流行起来的。在专家系统里,我们手工添加很多知识或者规则,系统会根据这些知识和规则推理出结果。某种程度上说,这类系统的智能程度,取决于我们给它多少知识,和它怎样利用这些知识。

它基于明确的规则,理解和解释起来也容易,我们还可以清楚地知道每条规则的来源和依据。有着清楚的规则是它的优点,同时也是它的缺点。

假设我们使用专家系统识别数字 0,系统里内置有这样的规则,一个闭合的圈圈就是数字 0。只要我们谨慎书写,通常都可以将 0 写成一个有板有眼的闭合圆圈。然而现实场景中每个人书写风格都不尽相同,随着系统实施,发现经常将 0 识别成 6,因为有些人写得比较随意,左上角会冒出来一小部分线条,跟系统中认为是数字 6 的规则一样,系统就会判定写的是 6。

为了避免这种情况,我们继续往系统添加一些规则,修正一下判定是 0 的规则,只要左上角冒出来的部分,不大于整个图形高度一定的比例,就忽略它。然后发现还是有问题,原来有的人写的起点和终点都冒出来一些笔划,系统直接提示错误,说不认识这个图形,因为它什么都不像,没有匹配的规则。

假设现在我们使用专家系统检测运动状态,系统里有这样的规则:速度小于 6km/h 是在走路,大于 6km/h 但是小于15km/h 在跑步,大于 15km/h 的话在骑行。看起来还不错,挺像是这么一回事的。现在我们要检测足球运动了,足球运动员有时候快跑,有时会慢慢走,有时候也会停下来休息下,怎么判断一个人在是在踢足球呢?根本没办法找到一条或一组规则定义足球运动。

专家系统知识或规则覆盖的场景有限,而且我们也不可能无限添加规则,一方面是由于我们也无法描述那些不明确的情形,更无法形成规则提供给专家系统。另外,当规则变得越来越多的时候,系统会变得非常难维护,再往其中添加或改变规则会变得很困难,出了问题也非常难排查。

机器学习

由于专家系统的脆弱性,到了二十世纪80年代,机器学习(Machine Learning)这种更新更科学的方法出现了。顾名思义,它使用机器进行学习,而不是手工编码定义规则。它使用概率来匹配,而不是布尔逻辑。

假设现在有很多足球运动员、篮球运动员产生的数据,我们使用机器学习算法处理这些数据后,得出很多规则。后续把运动员的其它数据输入前面得出的规则,发现挺像的,我们就可以判定,这个人在踢足球,那个人在打篮球,因为这就是踢足球的样子,那就是打篮球的样子。

传统方法与机器学习

传统的方式强调是什么,而机器学习强调像什么。我们从搞清楚某样事物的规则,变成了检查某样事物是否与已经存在的数据特征匹配,不再手工定义具体规则。算法从数据中发现规则,然后当我们把数据或问题提供给算法发现的规则,这些规则就会告诉我们答案。

机器学习是一种让计算机从数据中自动学习并做出决策的技术,而不是通过手动编写规则来实现。

机器学习

学习算法(Learning Algorithms)使用数据训练(Training)模型,模型是我们要的结果。

有监督学习

监督学习(Supervised learning)是一种机器学习的方法,使用已经标注好了的数据训练模型。训练数据已经包含输入和输出,训练好模型之后,希望模型能根据新的输入,预测一个输出。

在监督学习里,需要将训练数据的特征(Features)提取出来,将数据标注好。这个过程叫特征提取。目标特征我们称它为标签(Labels)。比如二手车的特征有:车龄、行驶里程、事故程度等,标签是价格;特征有:面积、位置、卧室数量等,标签是价格。

监督学习主要解决两大类问题:分类问题和回归问题。

分类问题

分类(Classification)模型用于将数据分类到不同的类别中。模型学习数据中已经标记好的类别信息,预测新数据属于哪一个类别。例如,垃圾邮件分类、图片分类、自动标注、疾病诊断、异常检测等。

在垃圾邮件检测中,我们使用大量垃圾邮件作为训练数据,训练好的模型模型就能对后续的邮件是否垃圾邮件进行预测了,它会对一封邮件给出一个是垃圾邮件的概率值。系统可以根据设定的值判定,如果高于设定的阈值,就将它归为垃圾邮件。

在图片分类问题中,假设我们要识别动物,我们使用大量标注好的图片进行训练,图片中有猫有狗,模型会学习照片中猫狗的特征,将它们关联起来。训练好模型之后,给一些它从未见过的猫狗图片,它就会对这张图片做出识别,是猫的概率多少,是狗的概率多少。

在疾病诊断中,会根据患者一系列特征数据来断定是否患有某种疾病。首先收集大量患者的医学检查数据和诊断结果,特征包括患者的年龄、性别、体重、血液指标、影像学特征(CT、MRI等)、饮食、锻炼、吸烟、饮酒等。诊断结果为标签,患病或没患病。然后选择分类模型训练。在检测乳腺癌时,诊断的数据集可能包括肿块的大小、形状、密度等特征,模型可以输出是否患癌的诊断结果。

在自动标注中。模型从已经标注好的数据中训练,然后识别新的数据,自动推断新数据的标签。比如自然语言处理中标注词性,生物信息学中注释基因组,计算机视觉中标注行人、交通标志等。

在异常检测中,模型从正常的产品模样(如各个角度的照片)数据中学习,然后可以对有异常的产品产品做出识别,比如检测产品的缺陷,检测电路板、芯片等电子元件上的缺陷,检测食品中的异物、瑕疵等,检测纺织品、服装上的破洞、污渍等,检测钢材表面的裂纹、气泡等。异常检测用在产品缺陷检测方面精确度高。类似的有异常交易检测、金融欺诈检测、异常操作检测、网络入侵检测等。

回归问题

回归(Regression)模型通过对过去数据的分析和模式的学习,预测新数据的数值。回归模型在多个领域有着广泛应用,比如预测房子价格、预测天气、预测交通状况、自动生成文本、机器翻译等。

预测房价的时候,模型房屋的特征,如面积、位置、房龄以及对应的价格等,对于新的特征,模型就会给出一个预测的值。预测二手车价格也类似,模型学习品牌、车龄、行驶里程、事故状况和价格等数据,在面对另一款车的时候,就会给出一个预测价。

预测天气的时候,需要收集很多天气数据。影响天气的因素有很多,像经纬度、海拔高度等这些地理地表信息很大程度影响天气,地表信息如城市、森林、草地、水体、植被覆盖情况等也是因素之一,还有季节、月份、节气、日照情况等周期性因素。在天气预测问题中,除了将这些数据作为特征之外,还要包括历史天气数据和临近地点天气数据,例如温度、湿度、气压、风速、风向、降水量、云量。标签是需要预测的未来时间点或者未来多个时间点的天气数据。选用合适的模型训练后,将当前时间点及之前若干时间点的天气数据特征输入模型,模型就会输出未来一个或多个时间点的天气预测值,

在金融领域,银行想预测申请贷款客户的信用评分来评估贷款风险。岭回归模型可以用来预测信用评分,基于客户的收入水平、借款记录、信用卡使用情况、还款历史等数据。

在物流领域,快递公司想评估包裹从发出到送达客户手中的更准确的时间,基于包裹的起始地点和目的地、中转次数、运输方式、实时交通状况、天气情况等信息,支持向量回归模型可以预测送达时间。

在农业领域,农民想知道今年的作物产量,以便合理安排销售和储存。基于土壤质量、施肥量、灌溉量、天气情况、病虫害记录等信息,多项式回归模型可以用来预测作物产量。养殖户想预测牲畜的生长速度,好安排饲养计划。基于饲料种类和量、环境温度、健康状况等信息,线性回归模型可以用来预测牲畜生长速度。

无监督学习

无监督学习(Unsupervised learning)是一种机器学习方法,用来处理未标注的数据,通过分析数据中的模式和结构来解决问题。

这类似于我们学习语言的方式。通过阅读和观察周围的人们说话来学习,而不是通过背诵单词和语法规则来学习。

聚类问题

聚类算法将数据分成多个组,每个组中的数据具有相似性,客户细分。

假设你是一家零售商,拥有大量客户数据,你想为不同的客户群体设计个性化的营销策略,但不知道如何对客户进行分类。K均值聚类(K-Means Clustering)可以帮助你将客户分成若干组,每组客户有相似的购买行为和偏好。例如,一些客户喜欢购买电子产品,另一些客户喜欢购买衣服。

在生物医学研究中,为了了解不同基因之间的关系,你可能需要分析基因表达数据。层次聚类(Hierarchical Clustering)可以将基因按表达模式分成层次结构的簇,帮助你识别哪些基因在相似的条件下表达相似。这对于研究疾病的基因机制和开发新的治疗方法非常有用。

降维问题

降维(Dimensionality Reduction)是指将高维数据映射到低维空间的过程,通过减少数据的维度来降低模型的复杂度,在不损失太多信息的情况下简化数据,可以提高计算效率、减少存储空间,并可能提高模型的准确性。比如,一辆汽车的里程可能与它的车龄关联性很强,降维算法可以将这两个特征合并为一个,代表汽车的磨损程度。

[!TIP] 维度灾难(Curse of Dimensionality)

维度灾难是指随着维度的增加,数据变得稀疏,导致距离失去意义,并且需要指数级的数据量来训练模型。降维可以通过降低数据的维度来缓解维度灾难。

假设你有大量高分辨率图像,存储和传输这些图像非常耗费空间和带宽。PCA(Principal Component Analysis,主成分分析)可以将高维图像数据压缩成低维数据,保留主要信息,从而显著减少数据量达到压缩目的。保持较高图像质量的同时降低图片大小,让图像存储和传输更加高效。

降维在数据可视化场景非常有用。假设你有一个包含了成千上万条数据的复杂数据集,但很难理解其中的结构和模式。t-SNE(t-Distributed Stochastic Neighbor Embedding)可以将高维数据降维到二维或三维空间。通过这种方式,你可以在图表中直观地看到数据中的群体和模式,帮助你更好地理解数据。

关联规则学习

关联规则学习是一种数据挖掘技术,主要用来发现数据项之间的有趣关系或关联模式。它在市场篮分析(Market Basket Analysis)、推荐系统、入侵检测等领域有广泛应用。

假设你是一家超市的经理,想要了解顾客在购物时通常会一起购买哪些商品。Apriori 算法可以帮助你发现这些关联规则,你发现,购买面包的顾客往往也会购买牛奶。了解这些关系之后,你优化了商品布局,打算将面包和牛奶放在一起,或者捆绑销售从而提高销售额。

假设你运营一个大型在线商店,想要为顾客个性化推荐他们可能感兴趣的商品。FP-Growth 算法可以帮助你发现哪些商品经常被一起购买,比如,你发现购买手机的顾客通常也会购买手机壳。基于这些规则,你打算在用户浏览手机的时候,给他们推荐手机壳,或者购买手机免费赠送手机壳从而用户体验和销售量。

异常检测

异常检测可以用有监督学习和无监督学习两种方法解决,具体使用哪种方法取决于具体要检测的问题和数据集的性质。在有监督学习中,训练数据中有明确的“正常”和“异常”标签,这种方法需要大量标记数据来训练模型。在无监督学习中,异常检测不需要标记数据,算法根据数据的固有结构和分布模式来识别异常。如果数据集包含大量标记异常数据,则有监督学习方法可能更有效;如果数据集没有标记异常数据或只有少量标记异常数据,则无监督学习方法可能更有效。

假设你是一家银行的风险管理人员,想要检测信用卡交易中的欺诈行为。孤立森林(Isolation Forest)算法可以帮助你识别异常交易,例如异常大的消费金额或不常见的交易地点,帮助你及时发现并防止欺诈行为。

假设你是一位网络安全工程师,负责监控公司网络中的异常活动。单类支持向量机(One-Class SVM)可以帮助你检测网络流量中的异常模式,例如异常的访问频率或数据传输量,帮助你及时发现潜在的网络入侵行为。

生成新数据

生成新数据的模型通过学习数据的分布和特征,可以生成与原始数据相似的新数据。在数据增强、药物发现、艺术创作等领域有广泛的使用。

生成对抗网络(Generative Adversarial Networks)是一种常见的无监督学习模型,用于生成高质量的新数据。GANs 由两个神经网络组成:生成器和判别器。生成器尝试生成看起来真实的图像,而判别器试图区分生成的图像和真实图像。通过这种对抗训练,生成器学会生成越来越逼真的图像。GANs 可以用来生成虚拟人脸(不存在的人脸)、风景图片,甚至根据描述生成图像,这在游戏设计、影视制作中非常有用。

在训练数据不足的情况下,GANs 可以用来生成更多的训练数据。例如,在医学影像分析中,GANs可以生成更多的X光片图像,通过生成更多的病变图像来丰富数据集,可以提高模型的准确性。

可以使用生成对抗网络的变体(如 StyleGAN)来生成特定风格的图像。StyleGAN 通过控制生成过程中的风格向量,生成具有特定风格的图像。例如,可以生成具有特定艺术风格的肖像画、卡通形象等。这在艺术创作、虚拟形象创作、设计、游戏角色设计中非常有用。

变分自编码器(Variational Autoencoders,VAEs)是一种生成模型,通过学习数据的潜在分布来生成新数据。VAEs 通过将输入数据编码到潜在空间,然后从空间中采样,并解码回图像,可以生成与训练数据相似的新图像。比如使用 VAEs 生成新的手写数字,扩展 MNIST 数据集。VAEs 在生成清晰、有结构的图像方面表现出色。

VAEs 还可以用来生成自然语言文本,它通过学习句子的潜在表示,生成与训练文本相似的新句子,比如文章段落,这在文本生成和语言建模中非常有用。

自编码器(Autoencoders)是一种通过编码和解码过程来重建输入数据的模型,虽然主要用于降维和特征学习,但也可以用于生成新数据。自编码器可以学习如何去除图像中的噪声。通过训练自编码器,它学习了如何去除图像中的噪声,还原为清晰图像。基于这个特点,自编码器还可以用来修复损坏的图像,从部分损坏的图像中恢复完整图像。

稳定扩散模型(Stable Diffusion Models)通过模拟数据逐步扩散和生成新数据,常用于生成高分辨率图像。模型通过逐步学习图像的生成过程,模型在逐步生成图像时,可以保持图像的细节和结构,生成的图像非常逼真。可以使用稳定扩散模型生成高清晰度的自然风景图片,常用在壁纸和艺术创作。

虽然聚类算法主要用于数据分组或分类,但它们也可以用于生成新数据或增强现有数据集,特别是生成具有特定属性的样本。

假设你是一家零售公司的市场分析师,拥有大量的客户数据。你希望模拟潜在的新客户来测试不同的营销策略和产品推荐系统。通过对现有客户数据进行聚类,可以了解不同客户群体的特征。然后,基于这些特征,可以生成具有相似属性的新客户数据,这可以用在营销策略制定中模拟不同客户群体的行为。

强化学习

强化学习(Reinforcement Learning,RL)是一种机器学习方法,通过智能体(agent)在环境(environment)中不断试验和学习,来优化它的行为策略(policy),以谋求最大化某个长期累计奖励(reward)。与有监督学习和无监督学习不同,强化学习不需要事先标记的样本数据,它侧重于在不确定环境中通过试错(trial and error)来发现最优行为策略。

强化学习是一种强大而灵活的学习方法,通过在不确定环境中长期试错和学习,优化智能体的行为策略。它在解决复杂决策问题和优化问题方面表现出色,在游戏AI、自动驾驶、机器人控制、金融和自然语言处理等多个领域有着广泛应用。

围棋是一种复杂的棋盘游戏,传统的计算方法很难处理庞大的搜索空间。AlphaGo 是由 DeepMind 开发的围棋 AI,它通过强化学习和深度神经网络,成功击败了人类顶级围棋选手。2016年击败了世界冠军李世乭,在2017年击败了当时排名第一的柯洁。

AlphaGo 的模型架构结合了蒙特卡罗树搜索(Monte Carlo Tree Search, MCTS)和深度神经网络,通过策略网络(Policy Network),对输入的当前棋盘状态,输出每个可能动作的概率分布,再通过价值网络(Value Network)评估当前棋盘状态的胜率。AlphaGo 通过监督学习方式使用大量的人类棋谱训练,初步训练策略网络。然后,AlphaGo 和自己对弈,利用 MCTS 和神经网络不断优化策略和价值网络。在自我对弈过程中,通过强化学习不断改进,策略网络学习选择最优动作,价值网络学习准确评估棋局。

自动驾驶需要在复杂的道路环境中实时决策和规划路径。通过强化学习,自动驾驶系统能够在复杂的交通环境中表现出良好的决策能力,处理各种交通状况,减少事故风险,提高行驶效率。在强化学习的模型架构中,状态(State)包括车辆位置、速度、周围车辆的位置和速度、道路信息、交通信号等,动作(Action)包括加速、减速、转向、变道等驾驶操作,奖励(Reward)包括安全驾驶(避免碰撞)、行驶效率(减少旅行时间)、乘客舒适度等。训练过程在高保真度的驾驶仿真器中进行,使用深度Q网络(DQN)或深度确定性策略梯度(DDPG)等深度强化学习算法,模拟各种驾驶场景和突发情况,让智能体在仿真环境中试验和学习,不断优化驾驶策略。

工业机器人需要在复杂和多变的环境中完成各种操作任务,如抓取、组装、焊接等。传统编程方法难以处理复杂的操作任务和环境变化。通过强化学习,机械臂能够自主学习如何在不同环境中完成复杂的操作任务,提高操作的灵活性和准确性,减少人为干预。在强化学习模型架构中,状态包括机械臂的关节位置和速度、末端执行器的位置、视觉传感器输入等,动作包括各个关节的转动角度、末端执行器的开闭等。奖励包括成功完成任务(如抓取到物体)、操作的平稳性和精确性、任务完成时间等。通过虚拟仿真环境中进行初步训练,模拟机械臂的操作任务。经过仿真训练后,将模型应用于真实机械臂,通过强化学习进一步优化策略,适应现实环境中的不确定性。

深度学习

传统的机器学习通常指的是那些结构相对简单的机器学习模型,它们通常只包含一层或少数几层的特征转换和学习步骤。这些模型在处理相对简单的数据集和任务时表现良好,但在复杂的、高维度的数据和任务中可能表现不足。传统机器学习有时候也称为浅层学习(Shallow Learning)。

深度学习(Deep Learning)是机器学习的一个子领域,它使用人工神经网络(Artificial Neural Networks)来学习数据。深度学习之所以被称为“深度”,是因为它使用了多层神经网络。相比传统机器学习,深度学习在特征提取、模型复杂性、数据需求和计算资源等方面具有显著不同。多层神经网络能够学习到比单层神经网络更复杂的特征表示,能够自动提取数据中的复杂特征,适用于处理大规模和复杂的数据。

人工神经网络是一种受人类大脑启发的计算模型,它由大量的相互连接的节点(也称为神经元)组成。每个神经元都能够执行简单的计算操作,例如将输入信号与权重相乘并应用激活函数。通过将神经元组织成层,可以构建复杂的神经网络,能够学习复杂的模式和关系。

深度学习近年来取得了很大进展,广泛应用于图像识别、语音识别、自然语言处理、自动驾驶等领域,推动了人工智能的快速发展。

训练模型

从数据中通过学习算法训练的过程称为训练模型(Training Model)。

模型(Model)是一个数学结构或函数,是我们想要训练出来的工具,而算法是训练这个模型的方法。例如,我们想要训练一个线性回归模型,而梯度下降是训练这个模型的算法。算法通过训练数据来调整模型的参数,使模型最佳化。例如,使用梯度下降算法训练线性回归模型时,通过不断调整模型参数 $w_1, w_2, ..., w_n$​ 和 $b$,让预测值 $y$ 尽可能接近实际值。

算法对输入的数据应用数学关系,目的是找到数据最佳表示,这种表示称为模型。算法定义了训练模型的具体方法和步骤,以及如何从数据中学习模型参数,目的是找到构成模型的方程或函数的最佳参数或系数集,从而让模型可以很好地泛化(Generalization)到新数据。模型是目的,算法是手段。算法的选择会影响模型的性能。

泛化是指模型对新数据的适应能力,好的模型在训练数据和新数据上都有良好的表现。如果模型在训练的数据上表现很好,在新数据上表现不佳,意味着模型过度适应训练数据的细节和噪声,这称为过拟合(Overfitting),反之称为欠拟合(Underfitting)。过拟合的模型泛化能力差。

模型训练结果的好坏用损失函数来衡量,表示模型预测结果与实际结果之间差距的函数,可以根据损失函数来调整模型的参数来优化模型,目的是让损失函数最小化。

机器学习的主要任务是选择合适的算法训练数据。影响模型能力的也就是两个:数据和算法。训练数据应当足够多、覆盖面广、高质量。应避免片面的数据,以免出现“断章取义”的结果。

训练数据应满足这三个条件。

数据量足够大

人类在看过几次猫狗之后,很轻易就可以识别区分出来,但是机器做不到,目前大部分机器学习算法都需要学习大量数据才能正常工作。

数据具有代表性

例如在训练一个预测天气的模型时,使用的数据应该包含全球很长一段时间的数据,如果只训练南极的数据,可以确定模型无法很好预测赤道天气。在训练一个预测二手车价格的模型时,应使用尽可能多的汽车品牌数据,因为不同品牌很大程度影响了车价,否则模型不能很好地泛化到很多品牌。如果训练数据中某个品牌的样本数量很少,模型预测这个品牌的车价是,结果很可能有很大的偏差。

数据质量足够高

不仅数据的数量影响了结果,数据的质量也非常重要。如果充斥着大量错误、异常值和噪音(由于各种原因出现的不够真实、客观的数据),模型的表现肯定不会好。在准备数据的阶段,通常需要花费很多时间做这项工作。对于那些异常的值,先尝试手动修复,如果无法修复,可以直接丢弃。对于那些残缺的值,比如缺少了某些特征,可以尝试手动填充,比如缺少了收入数据,可以直接填写收入的中位数,或者训练过程忽略这个特征。

如果数据集里充斥着大量无关特征,这就是所谓的垃圾数据,训练出来的模型也是垃圾。一个成功的机器学习项目,训练集数据里应包含足够多的相关特征,无关特征尽可能少。在特征工程中,一项关键的工作是选取一组合适的特征集。

  • 特征选择:指的是从现有的特征里选择最合适的特征来训练。
  • 特征提取:整合现有特征,创造出新特征,比如使用降维算法将两个特征合并成一个。
  • 收集新数据创建新特征

算法的选择同样重要,算法同样影响模型的泛化能力。

过拟合

过拟合(Overfitting)是机器学习和统计建模中的一个常见问题,在机器学习中,过拟合指的是模型在训练数据上表现非常好,但在新数据或测试数据上表现不佳。换句话说,过拟合是在训练时,对训练数据学得太“好”了,它甚至捕捉到了训练数据中的噪声和偶然性,而不是学到了数据的普遍规律。

过拟合是机器学习中必须应对的一个重要问题,如果出现这几个现象,表明模型很可能出现过拟合:

  • 模型在训练数据上的误差很低,但在验证或测试数据上的误差很高。即低训练误差,高验证误差。
  • 训练误差持续下降,但验证误差在某个点后开始上升。通过绘制训练和验证误差随训练时间或迭代次数的变化曲线可以发现。

出现过拟合主要是由于这三个原因:

  1. 模型过于复杂:当模型过于复杂时,比如有过多的参数或层次时,模型可以很好地拟合训练数据,甚至连噪声和异常值都能拟合。

  2. 训练样本不足:当训练数据量不足时,模型可能会过度拟合这些有限的数据点,而不是从大量样本中学到普遍规律。

  3. 数据存在噪声:当数据中的存在随机噪声时,可能会被过度复杂的模型学到,也会导致过拟合。

解决过拟合有几种办法:

  • 增加数据量和增强数据:使用更多训练数据,可以帮助模型学习到更多数据的普遍规律,而不是仅仅记住训练数据中的细节;通过数据增强技术(如旋转、缩放、裁剪图像)来增加数据量,特别适用于图像和文本数据。

  • 选择合适的模型或者简化模型:应根据当前任务选择适当复杂度的模型,而不是一味追求复杂的模型;减少模型的参数数量,例如,减少神经网络的层数或节点数。

  • 正则化:通过在损失函数中加入正则化项,限制模型参数的大小,从而防止过拟合(L1/L2正则化);在神经网络中,随机丢弃部分节点,减少节点间的相互依赖,增强模型的泛化能力(Dropout)。

  • 交叉验证:将数据分成 K 个部分,多次训练和验证,确保模型对所有数据的泛化能力(K折交叉验证)。

  • 提前停止训练:在训练过程中监控验证误差,当验证误差不再下降或开始上升时,停止训练(早停法,Early Stopping)。

欠拟合

欠拟合(Underfitting)是指机器学习模型在训练数据上表现不佳的情况,表示模型无法捕捉到训练数据中的潜在模式和规律,导致模型在训练数据和测试数据上的表现都不好。

如果出现这些现象,表明模型很可能欠拟合:

  • 高训练误差,高验证误差:模型在训练数据上的高误差,说明模型没能很好地拟合训练数据;如果模型在验证数据上的误差也很高,说明模型同样未能泛化到未见过的数据。
  • 高训练误差和高验证误差,并未随着训练时间的增加明显下降,表明模型很可能欠拟合,通过绘制训练误差和验证误差随训练时间或迭代次数的变化曲线可以发现。

出现欠拟合主要有三个原因:

  1. 模型过于简单:如果模型的复杂性不足,可能无法捕捉数据中的复杂关系和模式。例如,用一个线性模型去拟合非线性数据,可能无法准确描述数据的趋势,通常会出现欠拟合。

  2. 训练不足:如果模型的训练时间或训练迭代次数不够,未能充分学习数据中的特征和规律,表现为在训练数据和测试数据上的误差都很大。这种情况也会导致欠拟合。

  3. 特征不足:如果数据中包含的特征过少或特征选择不当,导致模型无法获得足够的信息来进行准确预测。例如,仅使用房子的面积来预测房价,忽略了位置、装修等重要特征,可能导致欠拟合。

欠拟合有几种解决方法:

  1. 增加模型复杂性:通过选用更复杂的模型结构,捕捉更多数据特征和模式,例如从线性模型切换到多项式回归或神经网络等。

  2. 增加训练时间:通过增加训练迭代次数,让模型有足够的时间学习数据中的规律;通过适当调整学习率,让模型在学习过程中能够逐步收敛。

  3. 特征工程:通过选择更有代表性的特征,去除无关或冗余特征。使模型学习更多有效信息来拟合数据。

举例来说,假设我们在训练一个用于预测房价的模型,数据包括房子的面积、卧室数量和位置等特征。如果我们使用一个简单的线性回归模型,而且只用房子的面积作为特征,忽略了其他重要特征,可能会导致模型在训练数据和测试数据上的误差都很高,表现为欠拟合。如果我们使用一个多项式回归模型,并且加入了房子的卧室数量和位置等特征,模型能够更好地捕捉数据中的复杂关系,训练误差和验证误差都会较低,表现为更好的拟合。

测试验证模型

一个好的模型通常不是一次就能训练出来的,为了得出一个好的模型,训练之后还需要测试、评估、调整,而且这个过程很可能会反复进行。要清楚一个模型对新情形的泛化能力,唯一方式是用它没见过的数据测试它。新实例的误差率称为泛化误差样本外错误

通常不会将所有数据都用于训练,而会留出一部分用来测试模型。比如使用80%的数据进行训练,留出20%用来测试。如果数据集有一千万个实例,即使只留出1%用来测试也够了,10万个测试用例足够评估泛化误差了。

超参数

超参数(Hyperparameters)是机器学习算法中用于控制模型训练过程的参数,用来控制复杂度、学习率、正则化强度等。不同于模型参数(如权重和偏置),超参数在训练之前需要人为设定,而不是在训练过程中从数据学到的。正确选择和调优超参数对模型的性能、训练效率和泛化能力都至关重要。下面列举了一些超参数的类型:

模型结构相关超参数

  • 神经网络层数和每层神经元数:这种超参数用来设定神经网络的深度和宽度。比如,一个神经网络有三层,每层有100个神经元。
  • 激活函数:用来激活神经元的函数,如 ReLU、Sigmoid 和 Tanh。

训练过程相关超参数

  • 学习率(Learning Rate):控制模型参数更新的步长。过高的学习率可能导致训练不稳定,而过低的学习率则可能让训练过慢。
  • 批量大小(Batch Size):每次参数更新所使用的样本数。更大的批量大小能更稳定地估计梯度,但会带来更高的计算成本。
  • 迭代次数(Epochs):整个训练数据集被用来训练的次数。更多的迭代次数可能让模型学习得更好,但也可能导致过拟合。

正则化相关超参数

  • 正则化系数(Regularization Coefficient):控制正则化项的权重,如L1或L2正则化,用于防止过拟合。
  • Dropout 率:在每次更新时随机丢弃一定比例的神经元,通常用于防止神经网络的过拟合。

优化器相关超参数

  • 优化器选择:用于更新模型参数的优化算法,如 SGD、Adam、RMSprop 等。
  • 动量(Momentum):在动量优化中,用于加速 SGD 在相关方向上的更新,减少波动。

超参数通常会通过手动或自动调优的方式来确定。手动调优是指人工尝试不同的超参数值,根据模型的性能来选择最优值。自动调优是指使用算法自动搜索最优的超参数值。超参数调优是一个耗时耗力的过程,但它对于提高模型性能和泛化能力至关重要。

常用的超参数调优方法:

  • 网格搜索(Grid Search):这是一种简单粗暴的超参数调优方法。先定义多个超参数的可能组合,然后对每一种组合进行训练和评估来找到效果最好的组合。

  • 随机搜索(Random Search):随机搜索是一种更高效的超参数调优方法,它通过随机采样选择超参数的取值组合找到最优解。

  • 贝叶斯优化(Bayesian Optimization):贝叶斯优化是一种基于贝叶斯定理的超参数调优方法。它通过不断更新超参数值的概率分布来找到最优值。

  • 交叉验证(Cross-Validation):在训练过程中对数据进行多次划分和验证,从而评估不同超参数组合的性能。

版权声明: 本文为原创内容,未经许可,不得转载。