社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 3 (人工神经网络)

生信宝典 • 2 年前 • 328 次点击  

万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 1

万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 2 (传统机器学习方法如何选择)

人工神经网络

人工神经网络模型得名于这样一个事实,即所拟合的数学模型的形式受到大脑中神经元的连接性和行为的启发,最初设计用于学习大脑的功能。然而,数据科学中常用的神经网络已不再被视为大脑的模型,而是可以在某些应用中提供最先进性能的机器学习模型。近几十年来,由于深度神经网络的架构和训练的快速发展,人们对神经网络模型的兴趣与日俱增。在本节中,我们将介绍基本的神经网络,以及在生物学研究中广泛使用的各种神经网络。其中一些如图4所示。

图4 | 神经网络方法。a | 多层感知器由代表数字的节点(以圆圈表示)组成:输入值、输出值或内部(隐藏)值。节点按层排列,每一层的节点与下一层的节点之间有连接,表示已学习的参数。例如,可以使用分子特性预测药物毒性,因为预测可以从一些复杂的独立输入特征组合中得出。b | 卷积神经网络(CNN)使用在输入层上移动的滤波器,并用于计算下一层的值。整个层上操作的滤波器意味着参数是共享的,无论实体的位置如何,都可以检测到相似的实体。示例显示了一个在显微镜图像上操作的二维CNN,但在生物学中,一维和三维CNN也有应用。这里的维度是指数据中有多少空间维度,CNN内的连接可以相应地配置。例如,生物序列可以被认为是1D的,磁共振成像数据可以被认为是3D的。c | 循环神经网络(RNN)使用相同的学习参数处理序列输入的每一部分,为每个输入给出输出和更新的隐藏状态。隐藏状态用于传递有关序列前部分的信息。在这个例子中,预测转录因子在DNA序列中每个碱基的结合概率。图中RNN被展开以显示如何使用相同的层生成每个输出;这不应与为每个输出使用不同的层混淆。d | 图卷积网络使用图中的连接节点信息,如蛋白质-蛋白质相互作用网络,通过组合所有邻近节点的预测来更新网络中的节点属性。更新后的节点属性形成网络中的下一层,并在输出层预测所需的属性。e | 自编码器由 (autoencoder)一个编码器神经网络(encoder, 将输入转换为低维隐表示),以及一个解码器神经网络(decoder, 将隐表示转换成原始输入)。例如,蛋白序列可以通过 encoder 编码,再通过 decoder 解码产生新的蛋白序列。在图示中,自编码器编码和解码后,输入的5 个氨基酸残基中有 4 个得到了正确的超出,代表了序列准确性是 80%。

神经网络的基本原理。神经网络的一个关键特性是它们是通用函数逼近器,这意味着,在很少的假设下,正确配置的神经网络可以将任何数学函数逼近到任意精度水平 (如下图:任何形式的曲线都可以近似为很多条直线的组合;无论多复杂的模型,都可以死用足够数目的线性模型组合获得;台大李宏毅老师 PPT)。换言之,如果任何过程(生物学或其他)都可以被认为是一组变量的函数,那么该过程可以被建模为任意精度,仅受模型的大小或复杂性的控制。上述定义的函数逼近在数学上并不严格,但这确实突出了几十年来人们对神经网络的兴趣持续存在的一个原因。然而,这并不能保证提供一种为给定数据集产生最佳近似找到神经网络模型的最佳参数的方法。也不能保证该模型在新的数据上给出准确的预测。

人工神经元是所有神经网络模型的基石。人工神经元只是一个数学函数,它以特定的方式将输入映射(转换)为输出。单个人工神经元接受任意数量的输入值,对其应用特定的数学函数并返回输出值。使用的函数通常表示为

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

我们在以下小节中描述了人工神经元的各种组织方法,称为“神经网络架构”。组合不同的架构类型也是常见的;例如,在用于分类的卷积神经网络(CNN)中,通常使用完全连接的层来产生最终的分类输出。

多层感知器。神经网络模型的最基本布局是以完全连接的方式排列的人工神经元层,如图4a所示。在这种布局中,固定数量的“输入神经元”表示用于网络训练的数据的输入特征值,一对神经元之间的每个连接表示一个可训练的权重参数。这些权重是神经网络中的主要可调参数,优化这些权重就是通常所说的神经网络训练。在网络的另一端,许多输出神经元代表网络的最终输出值。当正确配置时,这样的网络可以用于对输入进行复杂的分层决策,因为给定层中的每个神经元都接收来自前一层中所有神经元的输入。这种简单排列的神经元层通常被称为“多层感知器”,并且是第一个可用于生物信息学应用的网络。由于它们易于训练和耗时少,现在仍广泛用于许多生物建模应用中。然而,在许多其他应用中,下面讨论的新模型体系结构已经超越了这些简单的体系结构,尽管这些新体系结构中的一些仍然经常使用完全连接层作为其子组件。

卷积神经网络 (CNN)。神经网络非常适合于图像数据,其中数据具有某种类型的局部结构,并且这种结构的识别是分析的关键目标。对于图像的示例,该局部结构可以与视场中的特定类型的对象(例如,显微图像中的细胞)相关,由输入图像中空间临近的像素中的颜色和/或边缘的特定局部图案表示。

CNN神经网络由一个或多个卷积层组成(见图4b),其中输出是将一个称为“滤波器 (filter)”或“核函数(kernel)”的小型单层完全连接的神经网络应用于输入中的局部特征变量组的结果。以图像做为输入为例,该局部区域是图像中的一小块像素。卷积层的输出也是像图像一样的阵列,承载着在整个输入数据上进行滤波器“滑窗”的结果,并计算每个位置的输出。至关重要的是,对所有的像素点都使用同一个的滤波器,这样滤波器可以更好地学习输入数据中的局部结构。在较深的CNN中,除了输入信号层层通过网络中每一层的处理单元之外,通常允许输入信号绕过一个或多个层的连接。这种类型的网络被称为“残差网络 (ResNet)”,允许训练过程更快地收敛到准确的解决方案上。

CNNs可以通过配置参数以便有效的应用于具有不同空间结构的输入数据上。例如,1D CNN的滤波器只能在一个方向上滑动(比如从左到右);这种类型的CNN适用于只有一个空间维度的数据(例如文本或生物序列)。2D CNN对具有两个空间维度的数据进行操作,例如数字图像。3D CNN对体积数据进行操作,例如磁共振成像扫描。

CNN在各种数据类型的生物学分析上取得了重大成功。最新的蛋白质结构预测工作已使用相关蛋白质序列中残基对的共进化信息来提取残基对互作和距离的信息,从而可以以前所未有的精度建立3D蛋白质结构的预测。在这种情况下,神经网络学会了挑选直接耦合互作,并且即使对于具有很少或甚至没有相近序列的新序列也可以进行准确的结构预测。CNN也已成功应用于鉴定遗传序列数据的变异信息,3D基因组折叠,DNA-蛋白质相互作用,冷冻电镜图像分析和医学背景下的图像分类(如恶性肿瘤检测),它们现在经常有与人类专家相媲美的表现。

循环神经网络。RNN最适合于有序序列形式的数据,比如序列中的一个点与下一个点之间存在某种依赖性或相关性(至少在理论上)。可能它们在生物学之外的主要应用是自然语言处理,其中文本被视为一系列单词或字符。如图4c所示,RNN可以被认为是神经网络层的其中一块,将与序列中的每个条目(或时间)相对应的数据作为输入,并为每个条目产生依赖于先前已处理的条目的输出。它们还可以用于生成整个序列的表示,该序列被传递到网络的后续层以生成输出。这是有用的,因为任何长度的序列都可以转换为固定大小的表示,并输入到多层感知器。在生物学中使用RNN的明显例子是分析基因或蛋白质序列,任务包括从基因序列中识别启动子区域、预测蛋白质二级结构或基因随时间的表达水平变化模型;在最后一种情况下,给定时间点的值将作为序列中的一个条目。RNN的更高级的长短期记忆或门控重复单位变体在生物学中有许多用途,包括蛋白质结构预测、肽链设计和根据健康记录预测临床诊断。这些更先进的方法通常与CNN结合使用,这可以提高精度。RNN在分析基于序列的数据时非常稳健。例如,在数百万蛋白质序列上训练的RNN显示出能捕获进化和结构信息的能力,并可应用于各种监督任务,包括设计新蛋白质序列等任务。

注意力机制的作用和transformers的使用。RNN的一个问题是它们在检查输入序列的特定部分时会遇到困难,这对于生成高精度输出非常重要。为了缓解这个问题,RNN引入了注意力机制,该机制允许模型在计算每个输出时访问输入序列的所有部分。最近的研究表明,注意力机制甚至可以不依赖于RNN而进行单独使用,生成的模型被称为“transformers”,在许多自然语言处理基准测试上获得了当前最好的结果。最近,Transformer模型在生物序列处理相关的务中显示出比RNN更高的准确性,但这些方法(通常使用数千个图形处理单元对数十亿个序列进行训练)是否能够胜过生物信息学中现有的基于比对的序列分析方法,还有待观察。AlphaFold2在第14届蛋白质结构预测评估(CASP14)竞赛中的杰出成功表明,使用注意力模型也有可能用于结构生物学中的任务。

图卷积网络。图卷积网络特别适合于这样的数据,像图像一样没有任何明显可见的结构,由任意指定的关系或互作的实体组成的数据。与生物学相关的此类数据包括分子(由原子和键组成)和蛋白-蛋白互作网络(由蛋白质相互作用组成)。在计算术语中,图就是这种数据的表示,每个图都有一组顶点或节点,以及一系列表示节点之间各种类型的关系或连接的边。对于上面提到的例子,原子或蛋白质的可以归类为节点特征,键或相互作用可以被分类为边特征。图卷积网络使用生成的图的结构来确定神经网络模型中的信息流。如图4d所示,当在整个网络中更新每个节点的特征时,相邻节点都会被考虑到,最后一层中的节点特征用作输出(例如,蛋白质上互作的氨基酸)或组合以形成整个图的输出(例如蛋白质的折叠类型)。在进行预测时,表示不同关联的图可以整合不同的信息来源,例如结合药物-基因和食物-基因关系图来预测用于预防癌症的食物。用于训练图形卷积网络的软件包括PyTorch GeometricGraph Nets

自编码器。顾名思义,自编码器是一种神经网络架构,旨在通过将原始数据点通过自编码的形式在预定维度的新空间中降维展示(自编码),这个预定维度通常远少于输入数据的维度数量。一个神经网络(编码器)被训练为将输入数据转换为一个紧凑的内部表示,称为“隐向量”或“隐表示”,表示为新空间中的独立点。自编码器的第二部分,称为“解码器”,是一个经过训练的可以输入隐向量、输出具有原始维度的原始数据的模型(图4e)。也可以理解为,编码器尝试压缩输入,解码器尝试解压缩。自编码器、隐变量和解码器同时进行训练。虽然这听起来像是一个无意义的练习,其输出只是模拟输入,但其想法是学习输入数据的新表示,该新表示能紧凑地编码期望的特征,例如数据点之间的相似性,同时仍然保留使用学习到隐表示重建原始数据的能力。其应用包括预测两个数据点有多密切相关,并在潜在空间上形成一些结构,这对进一步的预测任务很有用。自编码器-解码器架构的另一个好处是,一旦经过训练,解码器就可以单独使用生成新的预测、生成可以在实验室进行验证的数据,并有助于合成生物学工作。自编码器已应用于一系列生物学问题,包括预测DNA甲基化状态、基因和蛋白质序列工程以及单细胞RNA测序分析。

训练和改进神经网络。方框1概述了训练机器学习模型的一般程序。然而,由于神经网络在结构上比传统的机器学习算法复杂得多,因此存在一些神经网络特有的训练点。选择神经网络作为预期应用的适当模型(图1)后,只用单个训练示例(例如,单个图像或基因序列)对其进行训练通常是一个好主意。这种经过训练的模型对于做出预测没有什么用处,但是这种训练可以很好地发现编程错误。训练损失函数应该可以很快变为零,因为网络很简单地记忆了输入;如果不是这样,则代码中可能存在错误,或者算法不够复杂以至于无法对输入数据进行建模。一旦网络通过了这一基本调试,就可以对整个训练集进行训练,从而使训练损失函数最小化。这可能需要调整超参数,例如学习率(图2e)。通过监测训练集和验证集上的损失,来判断网络是否过拟合,这表现为训练模型时损失函数持续下降,而应用于验证集上时损失开始增加。训练通常在这一点停止,这一过程称为提前停止(图2f)。神经网络的过拟合如图2d所示,这意味着模型开始简单地记忆训练集的特征,并因此开始失去泛化新数据的能力。提前停止是防止这种情况的一种好方法,但在训练期间可以使用其他技术,例如模型的正则化或节点丢弃技术,其中网络中的节点被随机忽略以迫使网络学习涉及多个节点的更鲁棒的预测策略。

用于训练神经网络的流行软件包包括PyTorchTensorflow。训练神经网络需要大量计算,通常需要具有足够内存的图形处理器 (GPU)或张量处理器 (TPU),因为这些设备可以提供比使用标准中央处理器 (CPU) 10到100倍的加速。在近年来取得成功的大型模型训练时,以及在大型数据集上执行训练时,这种加速是必须的。然而,运行一个已经训练好的模型通常要快得多,并且通常只在一个普通的中央处理器上就是可行的。通用计算服务提供商提供的云计算解决方案适用于那些无法访问图形处理器进行训练的人,值得注意的是,对于小型任务,Colaboratory(Colab)允许Python代码在图形处理器或张量处理器上免费测试。使用Colab是开始基于Python的深度学习的一种很好的方法。

往期精品(点击图片直达文字对应教程)

机器学习

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/154430
 
328 次点击