Nature子刊 | 适用于生物学研究人员的机器学习指南(上)

2022-04-01 19:15:59 浏览数 (1)

基础知识篇:关键概念 技术梗概

生物数据规模的扩大和固有的复杂性促使机器学习在生物学中的应用越来越多。所有的机器学习技术都能将模型与数据相匹配;然而,对于生物学研究人员来说如何正确理解和使用机器学习技术,仍然存在很多困惑。去年9月《Nature reviews molecular cell biology》发表了一篇题为“A guide to machine learning for biologists”的综述文章,不仅概述了关键的机器学习技术,还描述了不同技术如何适用于特定类型的生物数据,同时讨论了一些最佳实践和在开始进行涉及机器学习的实验时需要考虑的要点。

机器学习中的关键概念

通用术语

一个数据集由多个数据点示例组成,每个数据点或示例都可以被认为是一个实验的单一观察结果。每个数据点由(通常固定的)多个特征描述。这些特征包括长度、时间、浓度和基因表达水平等。机器学习任务是我们希望机器学习模型完成的目标的客观规范。例如,对于一个研究基因表达随时间变化的实验,我们可能想要预测特定代谢物转化为另一物种的速率。在这种情况下,“基因表达水平”和“时间”的特征可以被称为输入特征(或者只是模型的输入),“转换率”将是模型的期望输出;也就是我们感兴趣的预测数量。模型可以有任意数量的输入和输出特征。特征可以是连续的(取连续数值)或分类的(仅取离散值)。通常,分类特征是简单的二进制,要么是真(1)要么是假(0)。

有监督和无监督的学习

有监督机器学习指的是将模型与已标记的数据(或数据子集)进行拟合,其中存在一些基本真实属性,通常由人工通过实验测量或分配。例如蛋白质二级结构预测和基因组调控因子的基因组可及性预测。在这两种情况下,基本事实最终都是从实验室观察中得出的,但这些原始数据通常会以某种方式进行预处理。如在二级结构的情况下,基本真值数据来自分析蛋白质数据库中的蛋白质晶体结构数据,在后一种情况下,基本真值来自DNA测序实验中的数据。相比之下,无监督学习方法能够识别未标记数据中的模式,而无需以预定标签的形式向系统提供基本真实信息,比如在基因表达研究中发现具有相似表达水平的患者亚群,或者通过基因序列共变异预测突变效应。有时这两种方法结合在半监督学习中,即少量标记数据与大量未标记数据相结合。在获取标签数据成本较高的情况下,这可以提高性能。

分类、回归和聚类问题

当一个问题涉及将数据点分配给一组离散的类别(例如“癌症”或“非癌症”)时,该问题被称为“分类问题”,任何执行此类分类的算法都可以被称为分类器。相比之下,回归模型输出一组连续的值,例如预测蛋白质中一个残基突变后折叠的自由能变化。连续值可以设定阈值或以其他方式离散化,这意味着通常可以将回归问题重新表述为分类问题。例如,上面提到的自由能变化可以被划分为对蛋白质稳定性有利或不利的数值范围。聚类方法用于预测数据集中相似数据点的分组,通常基于数据点之间的某种相似性测量。它们是无监督的方法,不要求数据集中的示例具有标签。例如,在基因表达研究中,聚类可以找到具有相似基因表达的患者子集。

分类和标签

分类器返回的离散值集可以被设置为相互排斥的,在这种情况下,它们被称为“类(classes)”。当这些值不需要相互排斥时,它们被称为“标签(labels)”。例如,蛋白质结构中的一个残基只能位于多个二级结构类别中的一个,但可以同时被赋予α-螺旋和跨膜的非排他性标签。类和标签通常由encoding表示(例如 one-hot encoding)。

损失/成本函数

机器学习模型的输出从来都不是理想的,而且会偏离基本事实。测量这种偏差的数学函数,或者更一般地说,测量获得的输出和理想输出之间的“不一致”量的数学函数被称为“损失函数”或“成本函数”。在有监督的学习环境中,损失函数是衡量输出相对于真实输出的偏差。例子包括回归问题的均方误差损失和分类问题的二元交叉熵。

参数和超参数

模型本质上是数学函数,对一些输入特征集进行操作,并产生一个或多个输出值或特征。为了能够在训练数据上进行学习,模型包含可调整的参数,其值可以在训练过程中改变,以达到模型的最佳性能。例如,在一个简单的回归模型中,每个特征都有一个乘以特征值的参数,这些参数相加后就可以做出预测。超参数是可调整的值,不被认为是模型本身的一部分,因为它们在训练过程中不被更新,但它们仍然对模型的训练和性能有影响。超参数的一个常见例子是学习速率,它控制在训练期间模型参数改变的速率或速度。

训练、验证和测试

在用于预测之前,模型需要进行训练,训练包括自动调整模型的参数以提高其性能。在有监督的学习环境中,这涉及通过最小化损失或成本函数的平均值,修改参数,使模型在训练数据集上表现良好。通常,单独的验证数据集用于监控但不影响训练过程,以便检测潜在的过度拟合。在无监督的情况下,成本函数仍然是最小化的,尽管它不对真实输出进行操作。一旦一个模型被训练出来,它就可以在未用于训练的数据上进行测试。

进行机器学习的基本步骤:在接触任何机器学习代码之前,第一步应该是完全理解手头的数据(输入)和预测任务(输出)。接下来数据应该被拆分,以便进行训练、验证和测试。然后下一步是模型选择,这取决于数据的性质和预测任务。

过度拟合和欠拟合

对训练数据进行拟合的目的是为了捕捉数据中变量之间的 "真实 "关系,从而使模型对未见过的(非训练)数据具有预测能力。过度拟合或欠拟合的模型对非训练集的数据会产生较差的预测效果。过度拟合的模型会在训练集的数据上产生很好的结果(通常是由于参数太多),但在非训练的数据上会产生很差的结果。下图中的过度拟合模型正好通过了每一个训练点,因此它在训练集上的预测误差为零。然而,很明显,这个模型已经 "记住 "了训练数据,不太可能在非训练的数据上产生好的结果。相比之下,欠拟合的模型不能充分捕捉到数据中变量之间的关系。这可能是由于对模型类型的选择不正确,对数据的假设不完整或不正确,模型中的参数太少和/或训练过程不完整。下图中描述的欠拟合模型对于它试图拟合的数据来说是不充分的;在这种情况下,很明显,这些变量具有非线性关系,不能用简单的线性模型来充分描述,因此非线性模型会更合适。

过度拟合和欠拟合示例

归纳偏差和偏差-方差权衡

模型的“归纳偏差”是指学习算法中的一组假设,这些假设使模型更倾向于学习问题的特定解决方案。它可以被认为是模型对学习问题的特定类型解决方案的偏好。这种偏好通常使用其特定的数学形式和/或使用特定的损失函数编程到模型中。例如,递归神经网络(RNN)的归纳偏差是,输入数据中存在的顺序依赖性(如代谢物浓度随时间的变化)。这种依赖性在RNN的数学形式中得到了明确的解释。不同模型类型中不同的归纳偏差使它们更适合特定类型的数据,通常也能更好地执行。另一个重要的概念是偏差和方差之间的权衡。具有高偏差的模型可以说对经过训练的模型具有更强的约束,而具有低偏差的模型对被建模的属性所做的假设较少,并且理论上可以对各种函数类型建模。模型的方差描述了经过训练的模型在不同训练数据集上进行训练时的变化程度。一般来说,我们希望模型具有非常低的偏差和方差,尽管这些目标往往是冲突的,因为低偏差的模型通常会在不同的训练集上学习不同的信号。控制偏差-方差权衡是避免过度拟合或欠拟合的关键。

机器学习技术概述

不同机器学习方法的比较

传统机器学习

非基于神经网络的方法,有时称为“传统机器学习。可以使用各种软件包来训练此类模型,包括Python中的scikit-learn、R中的caret和Julia中的MLJ

当人们在开发用于生物数据的机器学习方法时,传统的机器学习一般应被看作是为给定任务寻找最合适方法的第一个探索领域。深度学习可以是一个强大的工具,而且不可否认的是,它是目前的潮流。然而,在它擅长的应用领域,它仍然受到限制:当大量数据可用时(例如数百万数据点); 当每个数据点具有多个特征时; 当特征是高度结构化的(特征之间有清晰的关系,比如图像中相邻的像素) 。

传统的机器学习方法

使用分类和回归模型。岭回归(带有正则化项的线性回归)通常是开发模型的一个很好的起点。当希望一个模型依赖于现有数据中最小数量的特征时,线性回归的其他变量,如LASSO回归和弹性网络回归算法也值得考虑。然而数据中的特征之间的关系往往是非线性的,因此在这些情况下,使用SVM这样的模型往往是更合适的选择。SVM是一种强大的回归和分类模型,它使用核函数将不可分离的问题转变为更容易解决的可分离问题。

常用于回归的模型也可用于分类。训练一个线性SVM和一个带有径向基函数核的SVM也是分类任务的一个很好的默认起点。另一种可以尝试的方法是kNN算法。此外还有一类稳健的非线性方法是基于集合的模型,如随机森林和XGBoost

使用聚类模型。聚类算法的使用在生物学中非常普遍。k-means是一种强大的通用聚类方法。DBSCAN是一种替代方法。

降维。降维技术用于将具有大量属性(或维度)的数据转化为低维形式,同时尽可能地保留数据点之间的不同关系。生物学中常见的例子包括主成分分析(PCA)、均匀流形近似和投影(UMAP)和t分布随机邻域嵌入(t-SNE)。

人工神经网络

人工神经网络模型得名于这样一个事实,即正在拟合的数学模型的形式是受大脑中神经元的连接和行为的启发,最初是为了了解大脑功能而设计的。由于深度神经网络的架构和训练的快速发展,人们对神经网络模型的兴趣与日俱增。

基本原理:神经网络的一个关键特性是它们是通用函数近似器,这意味着,在很少的假设下,正确配置的神经网络可以将任何数学函数近似到任意精度水平。换句话说,如果任何过程(生物或其他)可以被认为是一组变量的函数,那么该过程可以被建模到任意精度,只受模型的大小或复杂性的制约。人工神经元是所有神经网络模型的组成部分。人工神经元只是一个数学函数,它以特定的方式将输入映射(转换)为输出。单个人工神经元接收任意数量的输入值,对其应用特定的数学函数并返回输出值。使用的函数通常表示为:

* 其中xi代表一个单一的输入变量或特征(有n个这样的输入),wi代表该输入的可学习权重,b代表一个可学习的偏置项,σ代表一个非线性激活函数,它接受一个输入并返回一个输出。为了创建一个网络,人工神经元被排列成层,一个层的输出是下一个层的输入。网络的节点可以被认为是持有上述方程中的y值,它成为下一层的x值。

神经网络方法

多层感知器:神经网络模型的最基本布局是以全连接方式排列的人工神经元层。在这种布局中,固定数量的 "输入神经元 "代表了从输入到网络的数据中计算出的输入特征值,而一对神经元之间的每个连接代表了一个可训练的权重参数。这些权重是神经网络中的主要可调节参数,优化这些权重就是神经网络训练的意义。在网络的另一端,一些输出神经元代表网络的最终输出值。这样的网络,如果配置正确,可以用来对输入进行复杂的、分层次的决策,因为某一层的每个神经元都会接受上一层所有神经元的输入。这种简单安排的神经元层通常被称为 "多层感知器",是最早用于生物信息学应用的网络。由于其训练的简易性和速度,它们今天仍被广泛用于一些生物建模应用中。

卷积神经网络(CNN):其非常适用于类似图像的数据,这些数据具有某种类型的局部结构,并且这种结构的识别是分析的一个关键目标(例如显微镜图像中的细胞)。CNN由一个或多个卷积层组成,其中输出是将一个小型的、单层的全连接神经网络(称为 "过滤器 "或 "内核")应用于输入中的局部特征组的结果。CNN还可以被配置成在不同空间结构的数据上有效地运行。

一维CNN只在一个方向滑动的过滤器(例如从左到右);这种类型的CNN适合于只有一个空间维度的数据(如文本或生物序列)。二维CNN对具有两个空间维度的数据进行操作,如数字化图像。三维CNN在体积数据上操作,如磁共振成像扫描。CNN在生物学中对各种数据类型都取得了重大成功,包括蛋白质结构预测、基因序列数据的变异识别、3D基因组折叠、DNA -蛋白质相互作用、低温电子显微镜图像分析和医学重要背景下的图像分类(如恶性肿瘤的检测)等。

循环神经网络(RNN):其最适用于有序序列形式的数据,这样的数据在序列中的一个点和下一个点之间存在(至少在概念上)某种依赖性或关联性。RNN可以被认为是一个神经网络层块,它将序列中每个条目(或时间步长)对应的数据作为输入,并为每个条目产生一个输出,该输出依赖于先前处理过的条目。它们也可以用来生成整个序列的表示,并传递给网络的后续层以生成输出。

在生物学中使用RNN的明显例子包括分析基因或蛋白质序列,其任务包括从基因序列中识别启动子区域、预测蛋白质二级结构或建模随时间变化的基因表达水平等。RNN更高级的长期短期记忆或门循环单元变体在生物学上有许多用途,包括蛋白质结构预测、肽设计和根据健康记录预测临床诊断。这些更先进的方法通常与CNN结合使用,可以提高准确性。RNN在分析基于序列的数据时非常稳健。在RNNs中发现的一个问题是它们难以检查输入序列的特定部分,这对于产生高度准确的输出是很重要的。在RNN中加入注意力机制,使模型在计算每个输出时能够访问输入序列的所有部分,是为了缓解这个问题。最近,转化器模型(Transformers)在生物序列的任务上显示出比RNN更高的准确性。AlphaFold2在CASP14中取得的突出成功表明使用注意力的模型也有希望用于结构生物学的任务。

图卷积神经网络(GCN):其特别适用于那些虽然没有像图像那样明显的可见结构,但由任意的特定关系或相互作用连接的实体组成的数据。与生物学有关的此类数据的例子包括分子(由原子和键组成)和蛋白质-蛋白质相互作用网络(由蛋白质相互作用组成)。图卷积网络使用生成的图的结构来确定神经网络模型中的信息流,例如结合药物-基因和食物-基因关系图来预测预防癌症的食物。用于训练图卷积网络的软件包括PyTorch Geometric和Graph Nets。

自编码器(Autoencoders):是一种神经网络结构,通过将数据点表示为具有预定维度的新空间中的点(通常远小于输入维度的数量),对数据点集合进行自编码。其应用包括预测两个数据点之间的密切关系,以及在潜在空间上实施一些结构,这些结构对于进一步的预测任务非常有用。

编码-解码体系(encoder–decoder architecture)一旦经过训练,解码器就可以单独使用,以生成新的合成数据样本的预测,这些样本可以在实验室进行测试,并有助于合成生物学的工作。自编码技术已被应用于一系列生物学问题,包括预测DNA甲基化状态、基因和蛋白质序列工程以及单细胞转录组测序分析

由于神经网络在结构上比传统的机器学习算法复杂得多,因此存在一些神经网络特有的问题。选择一个神经网络作为预期应用的合适模型,只在一个训练示例(例如,单个图像或基因序列)上训练它通常是较高的选择。当网络简单地记忆输入时,训练损失函数应该很快变为零;如果没有,则代码中可能有错误,或者算法不够复杂,无法对输入数据建模。一旦网络通过了这个基本的调试测试,就可以对整个训练集进行训练。用于训练神经网络的流行软件包包括PyTorch和Tensorflow,训练神经网络对计算的要求很高。值得注意的是,对于小任务,Colaboratory(Colab)允许在GPU或TPU上免费测试Python代码。使用Colab是开始基于Python的深度学习的一种很好的方式。

未完待续...

参考文献

Greener, J.G., Kandathil, S.M., Moffat, L. et al. A guide to machine learning for biologists.Nat Rev Mol Cell Biol 23, 40–55 (2022).

图片均来源于参考文献,如有侵权请联系删除。

0 人点赞