Deep Learning 101
机器学习与深度学习
机器学习(Machine Learning,ML)是一种通过对数据进行学习和训练,使计算机系统能够从中发现模式并做出预测或决策的技术。它通过利用统计学和算法来使计算机系统具有自我学习能力,而不需要明确地编程指令。机器学习的主要特点包括对数据的自动学习和模式识别、预测能力、以及对新数据的泛化能力。
深度学习(Deep Learning,DL)是机器学习的一个分支,它使用人工神经网络来模拟人类大脑的工作方式,以便更好地处理大规模的复杂数据。深度学习的特点包括多层次的神经网络结构、对大规模数据的高效处理能力、以及对特征的自动提取和抽象能力。
参数与模型
参数(Parameter):在机器学习和深度学习中,参数可以被看作是能够调整程序行为的旋钮,它们决定了模型的表现。在训练过程中,这些参数会被调整以使模型更好地拟合数据,从而提高模型的性能。例如,在神经网络中,参数可以是权重和偏置值。
模型(Model):模型可以被看作是通过调整参数而生成的不同程序(输入-输出映射)的集合,它代表了对数据的某种假设或拟合。当我们确定了一组参数后,就得到了一个特定的模型,这个模型将被用于对新数据的预测或决策。
学习算法(Learning Algorithm):学习算法是用来确定最佳参数集的元程序,它通过对数据集进行训练和调整参数来使得模型达到最佳性能。学习算法的目标是最小化某种性能度量方式(比如损失函数)的取值,以使模型能够更好地拟合数据并具有更好的泛化能力。
学习与训练
学习(Learning):在机器学习中,学习指的是通过训练过程来发现正确的参数集,从而使模型能够执行所需的行为。这个过程可以被看作是模型从数据中获取知识或经验的过程,使得模型能够对未见过的数据做出准确的预测或决策。
训练(Training):训练是指使用数据集来调整模型的参数,以使其能够更好地拟合数据并具有更好的泛化能力。在训练过程中,模型会根据数据集中的样本进行参数的调整,以使模型的预测结果与真实值之间的误差尽可能小。通过不断地反复迭代训练过程,模型的性能会逐渐提高,从而使其能够更准确地对新数据进行预测或决策。
泛化能力(Generalization Ability)是指机器学习模型对于未见过的数据的处理能力。一个拥有良好泛化能力的模型能够在面对新的、之前未见过的数据时,做出准确的预测或决策。换句话说,泛化能力衡量了模型对于新数据的适应能力和预测准确性,而不仅仅是在训练时使用的数据上表现良好。
训练过程
通常包含如下步骤:
- 从一个随机初始化的模型开始,这个模型基本上没有获得任何“知识”或“经验”
- 收集一些数据样本
- 调整模型的参数,以使其在这些样本上表现更出色
- 重复步骤(2)和(3),直到模型在任务中表现令人满意
关键组件
当面对各种类型的机器学习问题时,通常会涉及以下组件:
- 数据(Data):可用于学习的数据。
- 模型(Model):用于对数据进行转换的模型。
- 目标函数(Objective Function):用于量化模型有效性的函数。
- 算法(Algorithm):用于调整模型参数以优化目标函数的算法。
数据
- 样本(example, sample):数据集中的个体数据单元,代表了整个数据集中的一部分。
- 独立同分布(i.i.d.):表示样本是相互独立且来自相同的分布,即每个样本都是独立且具有相同的概率分布。
- 特征(features,或协变量(covariates)):构成样本的属性,它们是描述样本特征的数据项,用于模型进行预测和分析。
- 标签(label,或目标(target)):在监督学习中,需要预测的属性,也是模型的目标输出。
- 维数(dimensionality):描述数据集中每个样本所具有的属性数量
每个数据集由一个个样本组成,大多时候,它们遵循独立同分布。 样本有时也叫做数据点或者数据实例,通常每个样本由一组称为特征的属性组成,机器学习模型会根据这些属性进行预测。
在监督学习问题中,要预测的是一个特殊的属性,它被称为标签。
当每个样本的特征类别数量都是相同的时候,其特征向量是固定长度的,这个长度被称为数据的维数。 固定长度的特征向量是一个方便的属性,它可以用来量化学习大量样本。
数据处理
仅仅拥有海量的数据是不够的,我们还需要正确的数据。如果数据中充满了错误,或者如果数据的特征不能预测任务目标,那么模型很可能无效。
“Garbage in, garbage out.”
训练数据集与测试数据集
训练数据集和测试数据集是在机器学习和统计建模中常用的两个概念,用于评估模型的性能和泛化能力。
训练数据集(Training Dataset)
- 定义:用来训练机器学习模型或统计模型的数据集,包含了模型用来学习的样本数据。
- 用途:用于模型学习样本数据的特征和模式,以便进行预测或分类任务。
- 特点:通常占总体数据的大部分,用来训练模型的参数和权重。
- 重要性:训练数据集的质量直接影响模型的性能,决定了模型是否能够对新的数据做出准确的预测。
测试数据集(Test Dataset)
- 定义:用来评估模型性能和泛化能力的数据集,包含了模型未曾见过的样本数据。
- 用途:评估模型对新数据的预测能力,检验模型是否能够泛化到未知数据。
- 特点:与训练数据集相互独立,通常不会参与模型参数的学习过程。
- 重要性:测试数据集的使用能够有效地评估模型在真实场景中的表现,避免过拟合或欠拟合的问题。
模型
深度学习与经典方法的区别主要在于:前者关注的功能强大的模型,这些模型由神经网络错综复杂的交织在一起,包含层层数据转换,因此被称为深度学习。
目标函数
- 目标函数(objective function):用来衡量模型性能的函数,通常是需要最小化或最大化的数学函数。
- 损失函数(loss function)或成本函数(cost function):用来衡量模型预测与真实值之间差距的函数,通常是目标函数的一部分。
在机器学习中,我们需要定义模型的优劣程度的度量,这个度量在大多数情况是“可优化”的,这被称之为目标函数(objective function)。我们通常定义一个目标函数,并希望优化它到最低点。因为越低越好,所以这些函数有时被称为损失函数或成本函数。
- 平方误差:一种常用的损失函数,用于衡量模型预测值与真实值之间的差距。它的计算公式为对每个样本的预测值与真实值之差进行平方,然后将所有样本的平方差值相加
$$[ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y_i})^2 ]$$
有些目标函数(如平方误差)很容易被优化,有些目标(如错误率)由于不可微性或其他复杂性难以直接优化。 在这些情况下,通常会优化替代目标
过拟合与欠拟合
过拟合和欠拟合是机器学习中常见的两种模型性能问题,它们影响着模型对新数据的泛化能力。
过拟合(Overfitting)
- 定义:模型在训练数据集上表现良好,但在未见过的新数据上表现较差的情况。模型过度地学习了训练数据的噪声和细节,而忽略了数据中的整体规律。
- 特点:在训练数据集上表现很好,但在测试数据集上表现较差,泛化能力差。
- 原因:模型过于复杂,参数过多,或者训练数据量太少。
- 解决方法:减少模型复杂度、增加训练数据量、正则化、提前停止训练等方法都可以缓解过拟合问题。
欠拟合(Underfitting)
- 定义:模型在训练数据集和测试数据集上的表现都较差的情况,模型未能很好地捕捉数据的特征和规律。
- 特点:在训练数据集和测试数据集上表现都较差,模型学习不足。
- 原因:模型过于简单,参数过少,或者特征提取不足。
- 解决方法:增加模型复杂度、增加特征数量、使用更复杂的模型或者进行特征工程都可以缓解欠拟合问题。
梯度下降
深度学习中,大多流行的优化算法通常基于一种基本方法——梯度下降
基本原理
- 目标:找到能使目标函数取得最小值的参数值。
- 梯度:目标函数的梯度指向使函数值增加最快的方向,负梯度方向则是使函数值减小最快的方向。
- 更新参数:通过不断沿着负梯度方向更新模型参数,可以逐渐接近目标函数的最小值。
算法步骤
- 初始化:随机初始化模型参数。
- 计算梯度:计算目标函数对参数的梯度(即参数的变化率)。
- 更新参数:沿着梯度的负方向,按照一定的步长(学习率)更新模型参数。
- 迭代:重复执行步骤 2 和步骤 3,直到满足停止条件(如达到最大迭代次数或梯度变化很小时)。
学习率(Learning Rate)
- 学习率决定了参数更新的步长,过大的学习率可能导致震荡或不收敛,而过小的学习率可能导致收敛速度过慢。
- 选择合适的学习率是梯度下降算法中需要考虑的重要因素之一。
变种算法
- 随机梯度下降(Stochastic Gradient Descent, SGD):每次迭代随机选择一个样本计算梯度。
- 批量梯度下降(Batch Gradient Descent):每次迭代使用整个训练集计算梯度。
- 小批量梯度下降(Mini-Batch Gradient Descent):每次迭代使用部分样本计算梯度。
各种机器学习问题
监督学习
监督学习(supervised learning)从标记的训练数据中学习输入和输出之间的映射关系。训练数据包括输入和对应的输出标签,模型的任务是学习如何根据输入预测相应的输出。
回归
回归(regression)问题是指预测连续数值输出的问题。在回归分析中,输入变量与输出变量之间的关系被建模为一个函数,这个函数能够描述输入变量如何影响输出变量。典型的回归问题包括预测房价、股票价格、气温等连续数值的情况。回归模型的输出是一个连续的数值,可以是任意实数,例如预测一个人的年龄、预测销售额等。
分类
分类(classification)问题是指将输入数据划分到不同的类别中的问题。在分类任务中,模型需要学习如何将输入数据映射到预定义的类别中。典型的分类问题包括垃圾邮件识别、图像分类、疾病诊断等。分类模型的输出是离散的类别标签,通常是预先定义好的几种类别中的一种或几种。
多标签分类
多标签分类(multi-label classification)是指在机器学习和统计学中的一种分类问题,其中每个样本可以被分配给多个标签。与传统的单标签分类不同,多标签分类允许一个样本同时属于多个类别或标签。
在多标签分类中,每个样本的标签是一个二进制向量,向量的每个维度对应一个可能的类别,如果该样本属于这个类别,则对应维度的取值为 1,否则为 0。多标签分类的目标是训练一个模型,能够根据样本的特征预测出每个可能的标签是否适用于该样本。
推荐
推荐系统(recommender system)是一种信息过滤系统,旨在预测用户对特定项目的评价或偏好,并向用户推荐他们可能感兴趣的项目。推荐系统通常用于电子商务平台、社交媒体、音乐和视频流媒体服务等领域,以提高用户体验、促进销售和增加用户参与度。
推荐系统的工作原理通常基于用户行为数据、项目信息和其他上下文信息。其中,用户行为数据可能包括用户的浏览历史、购买记录、评分和喜好等;项目信息则涵盖了项目的特征、类别、标签等;而上下文信息可以包括时间、地理位置等。这些数据被用来训练推荐系统模型,以便预测用户对新项目的兴趣,并向用户提供个性化的推荐。
无监督学习
无监督学习的目标是从未标记的数据中发现隐藏的模式、结构或规律。与监督学习不同,无监督学习不需要标记的输出数据,而是侧重于对输入数据的统计特性和结构进行分析和建模。
聚类
聚类(clustering)旨在将数据集中的样本分成具有相似特征的组或簇。聚类算法试图发现数据中的内在结构,将相似的样本分配到同一个簇中,并使得不同簇之间的样本尽可能不同。聚类在数据挖掘、模式识别和信息检索等领域有着重要的应用。
聚类算法的目标是最小化簇内样本的差异性,同时最大化不同簇之间的差异性。常见的聚类算法包括 K-means、层次聚类、DBSCAN 等。这些算法在处理不同类型的数据和问题时具有不同的优势和适用性。
主成分分析
主成分分析(Principal Component Analysis,PCA)用于数据降维和特征提取。PCA 旨在通过线性变换,将原始数据转换为一组新的坐标系,使得数据在新坐标系中的变化方差最大化。通过这种方式,PCA 可以帮助发现数据中最重要的特征,并减少数据的维度,从而简化数据分析和模型构建的复杂度。
PCA 的基本思想是找到一个新的特征空间,其中数据的方差最大化。这个新的特征空间通常是由数据中的一组正交基(也称为主成分)构成,这些主成分是原始特征的线性组合。在实际应用中,通常只选择最具代表性的主成分,将数据映射到这个子空间中,以达到降维的目的。
因果关系
因果关系(causality)指的是一种事件或变量之间的因果联系。在因果关系中,一个事件或变量的发生(因)导致另一个事件或变量的发生(果)。因果关系是科学研究和推理中的重要概念,因为它能够帮助我们理解事物之间的联系和影响,以及预测未来事件的发生。
概率图模型
概率图模型(probabilistic graphical models)是一种表示和推断随机变量之间关系的工具。它通过图的形式表示变量之间的依赖关系,并使用概率分布来描述这些变量之间的关联。概率图模型通常分为两种主要类型:贝叶斯网络和马尔可夫随机场。
生成对抗网络
生成对抗网络(Generative Adversarial Networks,GANs)由生成器和判别器两部分组成,旨在学习能够生成逼真数据的生成器模型。GANs 的核心思想是通过对抗训练的方式来训练生成器模型,使其能够生成与真实数据相似的虚假数据,同时训练判别器模型来区分真实数据和生成的数据。
生成器的目标是生成逼真的样本,而判别器的目标是尽可能准确地区分真实样本和生成样本。在训练过程中,生成器和判别器相互竞争、相互对抗,通过这种竞争和对抗的过程,生成器逐渐学习生成更逼真的数据,而判别器也逐渐提高对真实与伪造数据的识别能力。
强化学习
强化学习(reinforcement learning)旨在让智能体通过与环境的交互学习如何做出决策以达到最大化预期回报的目标。在强化学习中,智能体通过观察状态、采取行动和接收奖励来学习适当的行为策略,从而使得未来的累积奖励最大化。
强化学习与监督学习和无监督学习不同,它更像是一种试错学习的过程。智能体根据环境的反馈(奖励信号)不断调整自己的行为策略,以使得长期回报最大化。强化学习的一个关键特征是延迟奖励,即某个行动的奖励可能不会立即出现,而是在未来的一系列行动之后才能体现出来。
强化学习的经典算法包括 Q-learning、SARSA、深度 Q 网络(DQN)、策略梯度方法等。这些算法在游戏领域、机器人控制、自动驾驶等领域取得了许多成功的应用。
近年的高光时刻
容量控制
容量控制是为了控制模型的复杂度和泛化能力而采取的一系列技术
Dropout(随机失活)
- 定义:在训练过程中随机将神经元输出置零,以减少神经网络的复杂度和降低过拟合风险。
- 原理:在每次训练迭代中,以一定的概率将部分神经元的输出置零,这样可以迫使网络不依赖于特定的神经元,从而降低模型的复杂度。
- 作用:能够在一定程度上减少模型的过拟合,并提高模型的泛化能力。
噪声注入
- 定义:通过向输入数据或模型参数中添加随机噪声来降低模型对训练数据的过度拟合。
- 原理:在训练过程中,向输入数据中加入随机噪声,或者向模型参数中添加随机扰动,以增加模型对数据的鲁棒性,减少过拟合的风险。
- 作用:通过引入随机性,可以帮助模型更好地适应不同的数据分布,提高泛化能力。
注意力机制
注意力机制是一种用于增强神经网络模型对输入数据的关注度的技术,主要目标是让模型在处理输入数据时能够更加集中地关注对当前任务最为重要的部分,从而提高模型的性能和泛化能力。
基本原理
- 关注重点:允许模型在处理输入数据时动态地分配不同程度的关注度,使得模型能够专注于与当前任务相关的信息。
- 权重分配:通过学习到的权重,模型可以决定在每个时间步或每个空间位置上对输入的不同部分进行加权组合,从而生成更加有效的表示。
- 应用领域:在机器翻译、语言建模、问答系统、图像标注等任务中得到了广泛应用,并且在提升模型性能方面取得了显著的成绩。
类型
- 自注意力(Self-Attention):用于处理序列数据的注意力机制,可以帮助模型捕捉序列中不同位置的依赖关系,如在 Transformer 模型中的应用。
- 多头注意力(Multi-Head Attention):将输入通过多组不同的注意力机制进行处理,以增强模型对不同特征的关注度,如在 Transformer 中的应用。
- 交叉注意力(Cross-Attention):用于处理不同序列之间的关系,通常应用于序列到序列的任务,如机器翻译。
多阶段设计
多阶段设计用于处理具有长期依赖性和灵活逻辑推理的任务。它们在解决序列建模和推理问题方面具有独特的优势。
存储器网络(Memory Networks)
- 定义:一类具有显式记忆机制的神经网络模型,用于处理需要长期记忆和推理的任务。
- 结构:通常包含一个外部存储器(如一个键-值存储)和一些控制器,控制器通过查询外部存储器来获取和更新信息。
- 应用:广泛应用于问答系统、语言建模和推理任务中,能够有效地处理长期依赖性和复杂的推理逻辑。
神经编程器-解释器(Neural Programmer-Interpreter, NPI)
- 定义:一种结合了神经网络和程序执行引擎的模型,用于执行基于程序的推理任务。
- 结构:NPI 包含了一个神经网络编程器和一个程序解释器,编程器生成程序代码,解释器执行程序并输出结果。
- 应用:通常用于处理需要灵活逻辑推理和程序执行的任务,如图形推理、程序执行和复杂逻辑推理。
生成对抗网络
生成对抗网络(GAN,Generative Adversarial Network)由一对博弈的神经网络组成,分别被称为生成器(Generator)和判别器(Discriminator)。
生成对抗网络的核心思想是通过两个网络相互博弈的方式,使得生成器能够生成逼真的数据样本,而判别器能够准确区分真实样本和生成样本,从而达到提升生成器性能的目的。
基本原理
- 生成器(Generator):目标是生成逼真的数据样本,例如图像、文本或音频。它接收一个随机噪声向量作为输入,然后输出一个与真实样本相似的新样本。
- 判别器(Discriminator):目标是对生成器生成的样本进行评估,判断样本是真实样本还是生成样本。它接收样本作为输入,输出一个标量,表示样本是真实样本的概率。
- 博弈过程:生成器和判别器相互博弈,生成器试图欺骗判别器,使其无法区分真假样本,而判别器则努力提高自己的判别能力。
训练过程
- 初始化:生成器和判别器的参数随机初始化。
- 交替训练:每轮训练中,先固定生成器参数,训练判别器以最大化对真实样本和生成样本的分类能力;然后固定判别器参数,训练生成器以最小化判别器对生成样本的分类误差。
- 收敛:经过多轮训练后,生成器会逐渐学习到生成逼真的样本,而判别器会逐渐学习到更加准确的分类规则。
应用
- 图像生成:生成对抗网络在图像生成领域取得了巨大成功,能够生成逼真的人脸、风景等图像。
- 图像修复:生成对抗网络可以用于图像超分辨率、去噪等任务,使得图像质量得到提升。
- 风格迁移:生成对抗网络可以实现图像的风格转换,将一种图像的风格应用到另一种图像上。
并行计算
并行计算是一种通过同时执行多个计算任务来加速整体计算过程的计算模式。在并行计算中,多个计算单元可以同时执行不同的计算任务,从而在相同时间内处理更多的数据或更复杂的计算任务。并行计算的应用范围非常广泛,涵盖了科学计算、大数据处理、人工智能等多个领域。
类型
- 任务并行:不同的计算任务被分配给不同的处理器或计算单元进行并行执行,适用于需要执行多个独立任务的场景。
- 数据并行:同一计算任务的不同数据被分配给不同的处理器或计算单元进行并行处理,适用于需要对大规模数据集进行计算的场景。
- 指令级并行:一条指令的不同部分在不同的处理器上同时执行,适用于需要对同一数据进行多个不同操作的场景。
优势
- 提高计算速度:并行计算能够显著提高计算速度,特别是在处理大规模数据或复杂计算任务时表现出明显的优势。
- 提高计算效率:通过充分利用多个计算单元,可以在相同时间内完成更多的计算工作,提高计算资源的利用率。
- 解决复杂问题:并行计算可以处理更加复杂和庞大的计算问题,为科学研究和工程实践提供了更多的可能性。
应用领域
- 科学计算:在天气预报、气候模拟、物理模拟等领域,需要大规模的并行计算来处理复杂的数学模型。
- 大数据处理:在分布式数据处理系统中,通过并行计算可以加速数据的处理和分析。
- 人工智能:在深度学习模型的训练过程中,通过并行计算可以加速模型的训练和推理过程。