• [技术干货] 如何全面掌握图机器学习?最新《图学习》全面综述
    图学习旨在学习现实世界中常见的复杂节点关系和图的拓扑结构,如社交网络、学术网络和电子商务网络等。这些关系使得图数据与传统的表格数据不同,其中节点依赖于非欧氏空间,包含了丰富的信息。图学习从图论发展到图数据挖掘,现在被赋予表示学习的能力,使其在各种场景中取得了出色的性能,甚至包括文本、图像、化学和生物。由于在现实世界中的广泛应用前景,图学习已经成为机器学习中一个热门且有前景的领域。近年来,已有成千上万的研究成果被提出用于解决图学习中的各种问题,引起了学术界越来越多的关注,因此对已有的有价值的研究成果进行综述变得至关重要。尽管一些研究人员已经注意到这种现象,并完成了关于图学习的令人印象深刻的调研。然而,由于图学习的快速扩展,它们未能以更合乎逻辑的方式将相关目标、方法和应用联系起来,并涵盖当前丰富的场景和具有挑战性的问题。1. 引言图学习旨在对图进行建模,图是一种广泛存在于真实场景中的非欧氏数据,与以往机器学习中的数据结构有很大不同,如社交网络[1]、[2]、[3],学术网络[4]、[5]、[6],电子商务网络[7]、[8]、[9],企业知识图谱[10]、[11]、[12]等。挖掘图中节点间复杂连接关系和拓扑结构中蕴含的丰富信息,对于图上的许多任务和应用具有重要意义。此外,传统应用也可以转换为图数据(如计算机视觉[13]、[14]、[15]、语言模型[16]、[17]、[18]、物理[19]、[20]和化学[21]、[22])。重点假设不同实体之间存在许多未直接观察到的潜在联系。这使得图学习不仅是一种处理自然图结构的方法,而且是一种思考各种问题的方式。由于图学习具有广阔的应用前景,因此在国内外引起了广泛的关注。尽管之前关于图的理论工作帮助人们理解图上的各种字符,并提供了基本的分析框架。这些工作通常集中在较小的模拟图上,这限制了它们在真实场景中的应用,特别是当图上存在复杂的关系和结构时。尽管在这一领域已经有了一些显著而详细的调查。目前还缺乏一个综合的、将相关的目标、方法和应用联系起来,形成一个有机的、逻辑的综述。此外,每年在顶级会议上都有数百篇关于图学习的研究,并且数量还在高速增长。由于其发展迅速,缺乏涵盖最新趋势和挑战的全面调研。图2按时间顺序展示了有影响力的图学习方法。这些方法主要分为3类(图挖掘方法、图表示方法和深度图学习方法)。在图学习早期,大多数方法集中于图的字符[1]或利用图的结构信息在小图[25]、[26]上完成一些下游任务。图表示学习目前占据主流地位,可归纳为图嵌入方法和图神经网络方法两大类。这两类方法都旨在学习节点、边或图的语义表示。前者直接优化嵌入,可以减少图结构信息的损失;后者利用深度神经网络,在图上建模信息传递过程。如图3所示,在本综述中,我们从图学习目标的角度提供了一个直观的分类法。根据图的元素(即节点、边和图结构)对以前对图的工作进行排序。基于这种逻辑,综述了图上的相关方法和任务。展示了图学习在现实世界中的各种应用上的出色性能。最后,提出了图学习的发展趋势和挑战,以期进一步推动该领域的研究。本综述的主要贡献总结如下。提供了一个新的分类法,以调查以前关于数据、模型和任务的研究。总结了当前图学习在现实世界中的应用。提出了图学习的当前趋势和挑战。本文的其余部分组织如下。第2节从数据、模型和任务3个角度,基于节点、边和图结构对已有工作进行了直观的分类。第3节展示了用于图学习的主要方法和当前的研究趋势。第四部分总结了该方法在实际中的应用。第5节提出了当今图学习面临的挑战。2 方法在本节中,我们将当前的模型分为两大类(即传统模型和图神经网络)。传统模型可以进一步分为3类(即矩阵分解模型、基于随机游走的模型和基于自编码器的模型)。首先回顾了传统模型,其中一些仍然活跃或与GNN相结合,并给出了当前模型的许多启示。在大多数场景下,与传统模型相比,GNN表现出更高的表达能力和出色的性能。本文将GNN归纳为两个方面。3 应用介绍当前图学习在现实世界中的主要应用,包括传统的机器学习场景,如推荐系统、自然语言处理、计算机视觉和金融科技,以及科学场景中的新兴应用,如化学、生物、物理和数学。最后,总结了图学习中流行的数据集。
  • [技术干货] 深度学习——VGG16模型详解-转载
     1、网络结构  VGG16模型很好的适用于分类和定位任务,其名称来自牛津大学几何组(Visual Geometry Group)的缩写。  根据卷积核的大小核卷积层数,VGG共有6种配置,分别为A、A-LRN、B、C、D、E,其中D和E两种是最为常用的VGG16和VGG19。  介绍结构图:  conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128; input(224x224 RGB image) :指的是输入图片大小为224244的彩色图像,通道为3,即224224*3; maxpool :是指最大池化,在vgg16中,pooling采用的是2*2的最大池化方法(如果不懂最大池化,下面有解释); FC-4096 :指的是全连接层中有4096个节点,同样地,FC-1000为该层全连接层有1000个节点; padding:指的是对矩阵在外边填充n圈,padding=1即填充1圈,5X5大小的矩阵,填充一圈后变成7X7大小; 最后补充,vgg16每层卷积的滑动步长stride=1,padding=1,卷积核大小为333;    如上图VGG16的网络结构为,VGG由5层卷积层、3层全连接层、softmax输出层构成,层与层之间使用max-pooling(最大化池)分开,所有隐层的激活单元都采用ReLU函数。具体信息如下:  卷积-卷积-池化-卷积-卷积-池化-卷积-卷积-卷积-池化-卷积-卷积-卷积-池化-卷积-卷积-卷积-池化-全连接-全连接-全连接  通道数分别为64,128,512,512,512,4096,4096,1000。卷积层通道数翻倍,直到512时不再增加。通道数的增加,使更多的信息被提取出来。全连接的4096是经验值,当然也可以是别的数,但是不要小于最后的类别。1000表示要分类的类别数。 用池化层作为分界,VGG16共有6个块结构,每个块结构中的通道数相同。因为卷积层和全连接层都有权重系数,也被称为权重层,其中卷积层13层,全连接3层,池化层不涉及权重。所以共有13+3=16层。 对于VGG16卷积神经网络而言,其13层卷积层和5层池化层负责进行特征的提取,最后的3层全连接层负责完成分类任务。 2、VGG16的卷积核  VGG使用多个较小卷积核(3x3)的卷积层代替一个卷积核较大的卷积层,一方面可以减少参数,另一方面相当于进行了更多的非线性映射,可以增加网络的拟合/表达能力。 卷积层全部都是3*3的卷积核,用上图中conv3-xxx表示,xxx表示通道数。其步长为1,用padding=same填充。 池化层的池化核为2*2 3、卷积计算   具体的过程:  输入图像尺寸为224x224x3,经64个通道为3的3x3的卷积核,步长为1,padding=same填充,卷积两次,再经ReLU激活,输出的尺寸大小为224x224x64 经max pooling(最大化池化),滤波器为2x2,步长为2,图像尺寸减半,池化后的尺寸变为112x112x64 经128个3x3的卷积核,两次卷积,ReLU激活,尺寸变为112x112x128 max pooling池化,尺寸变为56x56x128 经256个3x3的卷积核,三次卷积,ReLU激活,尺寸变为56x56x256 max pooling池化,尺寸变为28x28x256 经512个3x3的卷积核,三次卷积,ReLU激活,尺寸变为28x28x512 max pooling池化,尺寸变为14x14x512 经512个3x3的卷积核,三次卷积,ReLU,尺寸变为14x14x512 max pooling池化,尺寸变为7x7x512 然后Flatten(),将数据拉平成向量,变成一维51277=25088。 再经过两层1x1x4096,一层1x1x1000的全连接层(共三层),经ReLU激活 最后通过softmax输出1000个预测结果 从上面的过程可以看出VGG网络结构还是挺简洁的,都是由小卷积核、小池化核、ReLU组合而成。其简化图如下(以VGG16为例):    4、权重参数(不考虑偏置)  1)输入层有0个参数,所需存储容量为224x224x3=150k 2)对于第一层卷积,由于输入图的通道数是3,网络必须要有通道数为3的的卷积核,这样的卷积核有64个,因此总共有(3x3x3)x64 = 1728个参数。 所需存储容量为224x224x64=3.2M 计算量为:输入图像224×224×3,输出224×224×64,卷积核大小3×3。  所以Times=224×224×3x3×3×64=8.7×107  3)池化层有0个参数,所需存储容量为 图像尺寸x图像尺寸x通道数=xxx k 4)全连接层的权重参数数目的计算方法为:前一层节点数×本层的节点数。因此,全连接层的参数分别为: 7x7x512x4096 = 1027,645,444 4096x4096 = 16,781,321 4096x1000 = 4096000 按上述步骤计算的VGG16整个网络总共所占的存储容量为24M*4bytes=96MB/image 。  所有参数为138M VGG16具有如此之大的参数数目,可以预期它具有很高的拟合能力;  但同时缺点也很明显: 即训练时间过长,调参难度大。 需要的存储容量大,不利于部署。 5、VGG模型所需要的内存容量  借鉴一下大佬的图:    6、总结  通过增加深度能有效地提升性能; VGG16是最佳的模型,从头到尾只有3x3卷积与2x2池化,简洁优美; 卷积可代替全连接,可适应各种尺寸的图片。 ———————————————— 版权声明:本文为CSDN博主「橙子吖21」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_42012782/article/details/123222042 
  • [其他] 浅谈深度学习
    深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)。深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。深度学习在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理,多媒体学习,语音,推荐和个性化技术,以及其他相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。深度学习定义深度学习定义:一般是指通过训练多层网络结构对未知数据进行分类或回归深度学习分类:有监督学习方法——深度前馈网络、卷积神经网络、循环神经网络等;无监督学习方法——深度信念网、深度玻尔兹曼机,深度自编码器等。深度学习的思想:深度神经网络的基本思想是通过构建多层网络,对目标进行多层表示,以期通过多层的高层次特征来表示数据的抽象语义信息,获得更好的特征鲁棒性。深度学习应用图像处理领域主要应用图像分类(物体识别):整幅图像的分类或识别物体检测:检测图像中物体的位置进而识别物体图像分割:对图像中的特定物体按边缘进行分割图像回归:预测图像中物体组成部分的坐标语音识别领域主要应用语音识别:将语音识别为文字声纹识别:识别是哪个人的声音语音合成:根据文字合成特定人的语音自然语言处理领域主要应用语言模型:根据之前词预测下一个单词。情感分析:分析文本体现的情感(正负向、正负中或多态度类型)。神经机器翻译:基于统计语言模型的多语种互译。神经自动摘要:根据文本自动生成摘要。机器阅读理解:通过阅读文本回答问题、完成选择题或完型填空。自然语言推理:根据一句话(前提)推理出另一句话(结论)。综合应用图像描述:根据图像给出图像的描述句子可视问答:根据图像或视频回答问题图像生成:根据文本描述生成图像视频生成:根据故事自动生成视频
  • [其他] 浅谈深度学习Backbone
    深度学习中常用的backbone有resnet系列(resnet的各种变体)、NAS网络系列(RegNet)、Mobilenet系列、Darknet系列、HRNet系列、Transformer系列和ConvNeXt。Backbone结构分类主要分成三类:CNNs结构, Transformer结构(如ViT及衍生算法,比如PVT),CNNs+Transformer结构Backbone:翻译为骨干网络的意思,既然说是主干网络,就代表其是网络的一部分,那么是哪部分呢?这个主干网络大多时候指的是提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用。这些网络经常使用的是resnet VGG等,而不是我们自己设计的网络,因为这些网络已经证明了在分类等问题上的特征提取能力是很强的。在用这些网络作为backbone的时候,都是直接加载官方已经训练好的模型参数,后面接着我们自己的网络。让网络的这两个部分同时进行训练,因为加载的backbone模型已经具有提取特征的能力了,在我们的训练过程中,会对他进行微调,使得其更适合于我们自己的任务。Neck:是放在backbone和head之间的,是为了更好的利用backbone提取的特征。Bottleneck:瓶颈的意思,通常指的是网网络输入的数据维度和输出的维度不同,输出的维度比输入的小了许多,就像脖子一样,变细了。经常设置的参数 bottle_num=256,指的是网络输出的数据的维度是256 ,可是输入进来的可能是1024维度的。Head:head是获取网络输出内容的网络,利用之前提取的特征,head利用这些特征,做出预测。neck:是放在backbone和head之间的,是为了更好的利用backbone提取的特征bottleneck:瓶颈的意思,通常指的是网网络输入的数据维度和输出的维度不同,输出的维度比输入的小了许多,就像脖子一样,变细了。经常设置的参数 bottle_num=256,指的是网络输出的数据的维度是256 ,可是输入进来的可能是1024维度的。GAP:在设计的网络中经常能够看到gap这个层,我之前不知道是干啥的,后了解了,就是Global Average Pool全局平均池化,就是将某个通道的特征取平均值,经常使用AdaptativeAvgpoold(1),在pytorch中,这个代表自适应性全局平均池化,说人话就是将某个通道的特征取平均值self.gap = nn.AdaptiveAvgPool2d(1)Embedding: 深度学习方法都是利用使用线性和非线性转换对复杂的数据进行自动特征抽取,并将特征表示为“向量”(vector),这一过程一般也称为“嵌入”(embedding)用于预训练的任务被称为前置/代理任务(pretext task),用于微调的任务被称为下游任务(downstream task)temperature parameters 在论文中经常能看到这个温度参数的身影。
  • [技术干货] 知识蒸馏相关技术【模型蒸馏、数据蒸馏】以ERNIE-Tiny为例
    1.任务简介基于ERNIE预训练模型效果上达到业界领先,但是由于模型比较大,预测性能可能无法满足上线需求。 直接使用ERNIE-Tiny系列轻量模型fine-tune,效果可能不够理想。如果采用数据蒸馏策略,又需要提供海量未标注数据,可能并不具备客观条件。 因此,本专题采用主流的知识蒸馏的方案来压缩模型,在满足用户预测性能、预测效果的需求同时,不依赖海量未标注数据,提升开发效率。 文心提供多种不同大小的基于字粒度的ERNIE-Tiny学生模型,满足不同用户的需求。注:知识蒸馏(KD)是将复杂模型(teacher)中的dark knowledge迁移到简单模型(student)中去,teacher具有强大的能力和表现,而student则更为紧凑。通过知识蒸馏,希望student能尽可能逼近亦或是超过teacher,从而用更少的复杂度来获得类似的预测效果。1.1 模型蒸馏原理知识蒸馏是一种模型压缩常见方法,指的是在teacher-student框架中,将复杂、学习能力强的网络(teacher)学到的特征表示"知识"蒸馏出来,传递给参数量小、学习能力弱的网络(student)。 在训练过程中,往往以最优化训练集的准确率作为训练目标,但真实目标其实应该是最优化模型的泛化能力。显然如果能直接以提升模型的泛化能力为目标进行训练是最好的,但这需要正确的关于泛化能力的信息,而这些信息通常不可用。如果我们使用由大型模型产生的所有类概率作为训练小模型的目标,就可以让小模型得到不输大模型的性能。这种把大模型的知识迁移到小模型的方式就是蒸馏。基本原理可参考Hinton经典论文:cid:link_11.2 ERNIE-Tiny 模型蒸馏模型蒸馏原理可参考论文 ERNIE-Tiny : A Progressive Distillation Framework for Pretrained Transformer Compression 2021。不同于原论文的实现,为了和开发套件中的通用蒸馏学生模型保持一致,我们将蒸馏loss替换为Attention矩阵的KQ loss和 VV loss,原理可参考论文 MiniLM: Deep Self-Attention Distillation for Task-Agnostic Compression of Pre-Trained Transformers 2020 和 MiniLMv2: Multi-Head Self-Attention Relation Distillation for Compressing Pretrained Transformers 2021。实验表明通用蒸馏阶段和任务蒸馏阶段的蒸馏loss不匹配时,学生模型的效果会受到影响。BERT 等预训练语言模型 (PLM) 采用了一种训练范式,首先在一般数据中预训练模型,然后在特定任务数据上微调模型,最近取得了巨大成功。然而,PLM 因其庞大的参数而臭名昭著,并且难以部署在现实生活中的应用程序中。知识蒸馏通过在一组数据上将知识从大老师转移到小得多的学生来解决这个问题。我们认为选择三个关键组成部分,即教师、训练数据和学习目标,对于蒸馏的有效性至关重要。因此,我们提出了一个四阶段渐进式蒸馏框架 ERNIE-Tiny 来压缩 PLM,它将三个组件从一般级别逐渐变化到特定任务级别。具体来说,第一阶段,General Distillation,在预训练的老师、一般数据和潜在蒸馏损失的指导下进行蒸馏。然后,General-Enhanced Distillation 将教师模型从预训练教师转变为微调教师。之后,Task-Adaptive Distillation 将训练数据从一般数据转移到特定于任务的数据。最后,Task-Specific Distillation 在最后阶段增加了两个额外的损失,即 Soft-Label 和 Hard-Label 损失。实证结果证明了我们的框架的有效性和所带来的泛化增益 。实验表明 4 层 ERNIE-Tiny 在 GLUE 基准测试的基础上保持其 12 层教师 BERT 的 98.0% 以上的性能,超过最先进的 (SOTA) 1.0% 的 GLUE 分数相同数量的参数。此外,ERNIE-Tiny 在五个中文 NLP 任务上实现了新的压缩 SOTA,比 BERT 基础的精度高 0.4%,参数减少 7.5 倍,推理速度加快 9.4 倍。预训练的语言模型(例如,BERT (Devlin et al., 2018) 及其变体)在各种 NLP 任务中取得了显着的成功。然而,这些模型通常包含数亿个参数,由于延迟和容量限制,这给现实应用中的微调和在线服务带来了挑战。在这项工作中,我们提出了一种简单有效的方法来压缩基于大型 Transformer (Vaswani et al., 2017) 的预训练模型,称为深度自注意力蒸馏。小模型(学生)通过深度模仿大模型(老师)的自注意力模块进行训练,该模块在 Transformer 网络中起着至关重要的作用。具体来说,我们建议提炼出教师最后一个 Transformer 层的自注意力模块,这对学生来说既有效又灵活。此外,除了现有作品中使用的注意力分布(即查询和键的缩放点积)之外,我们还引入了自我注意模块中值之间的缩放点积作为新的深度自我注意知识. 此外,我们表明,引入教师助理(Mirzadeh 等人,2019 年)也有助于提炼大型预训练 Transformer 模型。实验结果表明,我们的单语模型在不同参数大小的学生模型中优于最先进的基线。特别是,它使用 50% 的 Transformer 参数和教师模型的计算在 SQuAD 2.0 和几个 GLUE 基准测试任务上保持了 99% 以上的准确率。我们还在将深度自注意力蒸馏应用于多语言预训练模型方面获得了竞争性结果。我们仅使用自注意力关系蒸馏来对预训练的 Transformer 进行任务不可知的压缩,从而在 MiniLM (Wang et al., 2020) 中推广深度自注意力蒸馏。特别是,我们将多头自注意力关系定义为每个自注意力模块内的查询、键和值向量对之间的缩放点积。然后我们利用上述关系知识来训练学生模型。除了简单统一的原则外,更有利的是,学生的注意力头数没有限制,而之前的大多数工作都必须保证教师和学生之间的头数相同。此外,细粒度的自注意力关系倾向于充分利用 Transformer 学习到的交互知识。此外,我们彻底检查了教师模型的层选择策略,而不是像 MiniLM 中那样仅仅依赖最后一层。我们对压缩单语和多语预训练模型进行了广泛的实验。实验结果表明,我们从基础规模和大型教师(BERT、RoBERTa 和 XLM-R)中提取的模型优于最先进的模型。二阶段蒸馏:通用蒸馏(General Distillation,GD):在预训练阶段训练,使用大规模无监督的数据, 帮助学生网络学习到尚未微调的教师网络中的知识,有利于提高泛化能力。为方便用户使用,我们提供了多种尺寸的通用蒸馏学生模型,可用的通用蒸馏学生模型可参考文档:通用模型 - ERNIE3.0 Tiny。任务蒸馏(Task-specific Distillation,TD):使用具体任务的数据,学习到更多任务相关的具体知识。如果已提供的通用蒸馏学生模型尺寸符合需求,用户可以主要关注接下来的任务蒸馏过程。1.3任务蒸馏步骤FT阶段:基于ERNIE 3.0 Large蒸馏模型fine-tune得到教师模型,注意这里用到的教师模型和ERNIE 3.0 Large是两个不同的模型;GED阶段(可选):使用fine-tuned教师模型和通用数据继续用通用蒸馏的方式蒸馏学生模型,进一步提升学生模型的效果;a. 热启动fine-tuned的教师模型和通用学生模型。其中,通用的学生模型由文心平台提供,从bos上下载。TD1阶段:蒸馏中间层a.只对学生模型的最后一层进行蒸馏,将学生模型transformer的attention层的k-q矩阵和v-v矩阵与教师模型的对应矩阵做KLloss,可参考 :MiniLMV2。b.热启动fine-tuned的教师模型和GED阶段得到的学生模型。其中,通用的学生模型由文心平台提供,从bos上下载,下载链接所在文档:通用模型ERNIE3.0 Tiny,或参考预置的下载脚本:c. 反向传播阶段只更新学生模型参数,教师模型参数不更新;TD2阶段:蒸馏预测层,产出最终的学生模型。a. 热启动fine-tuned的教师模型和TD1阶段训练的学生模型;b. loss包括两部分: 1) pred_loss:软标签,学生模型的预测层输出与教师模型的预测层输出的交叉熵; 2) student_ce_loss:硬标签,学生模型的预测层输出与真实label的交叉熵;c. pred_loss与student_ce_loss之和作为最终loss,进行反向传播;d. 反向传播阶段只更新学生模型参数,教师模型参数不更新;注:关于GED阶段使用的通用数据:开发套件中的通用数据是由开源项目 cid:link_0 中的中文维基百科语料(wiki2019zh)经过预处理得到。该数据只用于demo展示,实际使用时替换为业务无标注数据效果提升更明显。2. 常见问题问题1:怎么修改学生模型的层数?上面提供了多种不同的学生模型,但每个学生模型的层数、hidden size等都是固定的,如果想更改,需要在哪些地方更改?文心提供了三种不同结构的预训练学生模型,如果修改层数、hidden size等,会导致预训练学生模型参数无法加载,在此情况下,蒸馏出来的学生模型效果无法保证,建议用户还是使用文心提供的预训练模型,不更改模型结构;如果用户认为更改学生模型的结构非常有必要,需要对文心做以下改动:修改TD1阶段json配置文件的pre_train_model配置项,删除预训练学生模型的加载,只保留微调后的教师模型"pre_train_model": [ # 热启动fine-tune的teacher模型 { "name": "finetuned_teacher_model", "params_path": "./output/cls_ernie_3.0_large_ft/save_checkpoints/checkpoints_step_6000" } ]将json文件中的"student_embedding"替换为自定义的学生模型"student_embedding": { "config_path": "../../models_hub/ernie_3.0_tiny_ch_dir/ernie_config.json" },再次强调,上述修改后,由于无法加载预训练学生模型,蒸馏出来的学生模型效果无法保证。(用户训练数据量到百万样本以上可以考虑尝试一下)3.数据蒸馏任务3.1 简介在ERNIE强大的语义理解能力背后,是需要同样强大的算力才能支撑起如此大规模模型的训练和预测。很多工业应用场景对性能要求较高,若不能有效压缩则无法实际应用。因此,我们基于数据蒸馏技术构建了数据蒸馏系统。其原理是通过数据作为桥梁,将ERNIE模型的知识迁移至小模型,以达到损失很小的效果却能达到上千倍的预测速度提升的效果。目录结构 数据蒸馏任务位于 wenxin_appzoo/tasks/data_distillation├── data │ ├── dev_data │ ├── dict │ ├── download_data.sh │ ├── predict_data │ ├── test_data │ └── train_data ├── distill │ └── chnsenticorp │ ├── student │ └── teacher ├── examples │ ├── cls_bow_ch.json │ ├── cls_cnn_ch.json │ ├── cls_ernie_fc_ch_infer.json │ └── cls_ernie_fc_ch.json ├── inference │ ├── custom_inference.py │ ├── __init__.py ├── model │ ├── base_cls.py │ ├── bow_classification.py │ ├── cnn_classification.py │ ├── ernie_classification.py │ ├── __init__.py ├── run_distill.sh ├── run_infer.py ├── run_trainer.py └── trainer ├── custom_dynamic_trainer.py ├── __init__.py3.2 数据准备目前采用三种数据增强策略策略,对于不用的任务可以特定的比例混合。三种数据增强策略包括:(1)添加噪声:对原始样本中的词,以一定的概率(如0.1)替换为”UNK”标签(2)同词性词替换:对原始样本中的所有词,以一定的概率(如0.1)替换为本数据集中随机一个同词性的词(3)N-sampling:从原始样本中,随机选取位置截取长度为m的片段作为新的样本,其中片段的长度m为0到原始样本长度之间的随机值数据增强策略可参考数据增强,我们已准备好了采用上述3种增强策略制作的chnsenticorp的增强数据。3.3 离线蒸馏使用预置的ERNIE 2.0 base模型cd wenxin_appzoo/models_hub bash download_ernie_2.0_base_ch.sh下载预置的原始数据以及增强数据。cd wenxin_appzoo/tasks/data_distillation/distill bash download_data.sh运行以下命令,开始数据蒸馏cd wenxin_appzoo/tasks/data_distillation bash run_distill.sh3.3.1蒸馏过程说明run_distill.sh脚本会进行前述的三步:在任务数据上Fine-tune; 加载Fine-tune好的模型对增强数据进行打分; 使用Student模型进行训练。脚本采用hard-label蒸馏,在第二步中将会直接预测出ERNIE标注的label。run_distill.sh脚本涉及教师和学生模型的json文件,其中:./examples/cls_ernie_fc_ch.json负责教师模型的finetune, ./examples/cls_ernie_fc_ch_infer.json 负责教师模型的预测。 ./examples/cls_cnn_ch.json,负责学生模型的训练。事先构造好的增强数据放在./distill/chnsenticorp/student/unsup_train_aug在脚本的第二步中,使用 ./examples/cls_ernie_fc_ch_infer.json 进行预测:脚本从标准输入获取明文输入,并将打分输出到标准输出。用这种方式对数据增强后的无监督训练预料进行标注。最终的标注结果放在 ./distill/chnsenticorp/student/train/part.1文件中。标注结果包含两列, 第一列为明文,第二列为标注label。在第三步开始student模型的训练,其训练数据放在 distill/chnsenticorp/student/train/ 中,part.0 为原监督数据 part.1 为 ERNIE 标注数据。注:如果用户已经拥有了无监督数据,则可以将无监督数据放入distill/chnsenticorp/student/unsup_train_aug 即可。
  • [技术干货] NLP领域任务如何选择合适预训练模型以及选择合适的方案【规范建议】
    1.常见NLP任务信息抽取:从给定文本中抽取重要的信息,比如时间、地点、人物、事件、原因、结果、数字、日期、货币、专有名词等等。通俗说来,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什么结果。文本生成:机器像人一样使用自然语言进行表达和写作。依据输入的不同,文本生成技术主要包括数据到文本生成和文本到文本生成。数据到文本生成是指将包含键值对的数据转化为自然语言文本;文本到文本生成对输入文本进行转化和处理从而产生新的文本问答系统:对一个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行某种程度的语义分析,包括实体链接、关系识别,形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳的答案。对话系统:系统通过一系列的对话,跟用户进行聊天、回答、完成某一项任务。涉及到用户意图理解、通用聊天引擎、问答引擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。语音识别和生成:语音识别是将输入计算机的语音符号识别转换成书面语表示。语音生成又称文语转换、语音合成,它是指将书面文本自动转换成对应的语音表征。信息过滤:通过计算机系统自动识别和过滤符合特定条件的文档信息。通常指网络有害信息的自动识别和过滤,主要用于信息安全和防护,网络内容管理等。舆情分析:是指收集和处理海量信息,自动化地对网络舆情进行分析,以实现及时应对网络舆情的目的。信息检索:对大规模的文档进行索引。可简单对文档中的词汇,赋之以不同的权重来建立索引,也可建立更加深层的索引。在查询的时候,对输入的查询表达式比如一个检索词或者一个句子进行分析,然后在索引里面查找匹配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高的文档。机器翻译:把输入的源语言文本通过自动翻译获得另外一种语言的文本。机器翻译从最早的基于规则的方法到二十年前的基于统计的方法,再到今天的基于神经网络(编码-解码)的方法,逐渐形成了一套比较严谨的方法体系。文本挖掘:包括文本聚类、分类、情感分析以及对挖掘的信息和知识的可视化、交互式的表达界面。目前主流的技术都是基于统计机器学习的。2.如何将业务问题抽象为已得到很好解决的典型问题2.1 明确业务的输入与输出令输入文本用X表示,输出标签用Y表示,则有以下粗略的分类:2.1.1 如果Y表示某一类的概率,或者是一个定长向量,向量中的每个维度是其属于各个类的概率,且概率之和为1,则可抽象为文本多分类问题。a.一般X只有一段文本。如下所示 i.如情感分析等任务。房间 太 小 。 其他 的 都 一般 0b.如果X是2段文本(X1,X2),则是可以抽象为句对分类问题。如下所示 i:如NLI等任务。大家觉得她好看吗 大家觉得跑男好看吗? 0c.如果的每个类别的概率相互独立,即各类概率之和不为1,可抽象为文本多标签分类问题。如下所示 i:如用户评论分类、黄反识别等任务。互联网创业就如选秀 需求与服务就是价值 0 1d. 如果X有多段非文本特征输入,如整型、浮点型类型特征。则可抽象为混合特征的分类问题。如下所示 i:如CTR预估等任务。 CTR预估*CTR预估是推荐中最核心的算法之一。 相关概念: CTR预估:对每次广告的点击情况做出预测,预测用户是点击还是不点击。 CTR预估的影响因素:比如历史点击率、广告位置、时间、用户等 CTR预估相关介绍 推荐算法之4——CTR预估模型2.1.2 如果X是2段文本(X1,X2),Y表示二者的相似度,可抽象为文本匹配问题。如下所示喜欢 打篮球 的 男生 喜欢 什么样 的 女生 爱 打篮球 的 男生 喜欢 什么样 的 女生 1a.如语义相似度、相似问题匹配等任务。b.文本聚类的问题可以通过文本相似度问题进行处理。2.1.3 如果X有一段文本,Y是一个与X等长的序列,可抽象为序列标注问题。如下所示海 钓 比 赛 地 点 在 厦 门 与 金 门 之 间 的 海 域 。 O O O O O O O B-LOC I-LOC O B-LOC I-LOC O O O O O Oa.如分词、POS、NER、词槽挖掘等任务。2.1.4 如果X有一段文本,Y是一个不定长的文本,可抽象为文本生成问题。如下所示Rachel Pike : The science behind a climate headline Khoa học đằng sau một tiêu đề về khí hậua.如机器翻译、文本摘要、标题生成等任务。2.1.5.如果X为一段文本,Y表示文本X作为正常语句出现的概率或者混淆度,则属于语言模型任务。如下所示<s> but some analysts remain sour on the company but some analysts remain sour on the company <e>a.语言模型任务的子问题是基于上(下)文X预测下(上)一个词出现的概率Y,可以理解为一种特殊的文本分类。2.1.6如果X是2段文本(X1,X2),分别表示正文篇章和问题,Y是篇章中的一小段文本,表示对应问题的答案,则可抽象为阅读理解问题。{ "data": [{ "title": "", "paragraphs": [{ "context": "爬行垫根据中间材料的不同可以分为:XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫;其中XPE爬行垫、EPE爬行垫都属于PE材料加保鲜膜复合而成,都是无异味的环保材料,但是XPE爬行垫是品质较好的爬行垫,韩国进口爬行垫都是这种爬行垫,而EPE爬行垫是国内厂家为了减低成本,使用EPE(珍珠棉)作为原料生产的一款爬行垫,该材料弹性差,易碎,开孔发泡防水性弱。EVA爬行垫、PVC爬行垫是用EVA或PVC作为原材料与保鲜膜复合的而成的爬行垫,或者把图案转印在原材料上,这两款爬行垫通常有异味,如果是图案转印的爬行垫,油墨外露容易脱落。当时我儿子爬的时候,我们也买了垫子,但是始终有味。最后就没用了,铺的就的薄毯子让他爬。您好,爬行垫一般色彩鲜艳,能吸引宝宝的注意力,当宝宝刚会爬的时候,趴在上面玩,相对比较安全,不存在从床上摔下来的危险。对宝宝的爬行还是很有好处的。还有就是妈妈选择爬行垫时可以选择无害的PE棉,既防潮又隔冷隔热。外有要有一层塑料膜,能隔绝液体进入垫子内部,而且方便清洗。宝宝每次爬行,一定要记得把宝宝的手擦干净。", "qas": [{ "answers": [{ "text": "XPE", "answer_start": 17 }], "id": "DR-single-pre_and_next_paras-181574", "question": "爬行垫什么材质的好" }] }, ..., ] }] }2.1.7 如果Y是以上多种任务的组合,则可以抽象为多标签学习、多任务学习任务。a.如实体关系抽取任务,实体抽取本属于序列标注、关系抽取本属于文本多分类。2.2抽象与拆分任务取舍经验2.2.1优先考虑简单的任务,由易到难循序渐进:a.文本分类、文本匹配、序列标注、文本生成、阅读理解、多任务学习、强化学习、对抗学习等。2.2.2 复杂任务可拆分、化简成简单的子任务a.如实体关系抽取任务,可以拆分为实体识别+关系抽取的pipline进行实现。b.如文本纠错任务,可以拆分出语言模型、统计机器翻译等多种不同子任务构造复杂的pipline进行实现。c.如排序任务,输入X为多段文本,输出Y为每段文本的排序位置,可化简成文本分类问题、文本匹配问题进行处理。2.2.3 有监督学习任务优先于无监督学习任务a.因为有监督学习更可控,更易于应用最前沿的研究成果。文心目前只覆盖有监督、自监督任务。b.比如文本关键词抽取,可以有TFIDF之类的无监督解法,但效果控制较困难,不如转换为文本分类问题。2.2.4 能应用深度学习的任务优于不利用深度学习的任务a.因为深度学习算法效果一般更好,而且可以应用到最前沿的预训练模型。文心目前只采用深度学习算法。b.如果文本聚类,可以有LDA之类的解法,但效果一般不如基于深度学习的语义相似度的文本聚类。3. 明确业务目标与限制条件3.1典型业务目标与限制条件1.预测部署性能a.典型指标:qps 性能指标:QPS、TPS、系统吞吐量理解2.模型效果a.以文本分类为例,典型指标:精确率、准确率、召回率、F1值b.该评估指标应该在训练开始之前基本确定,否则很容易优化偏。3.硬件采购成本a.典型指标:钱b.GPU远贵于CPU,V100贵于P40。4.训练时间成本(GPU,卡,调参,GPU利用率)a.典型指标:每一轮训练所需要的时间。5.数据大小限制a.由于标注成本较高,很多时候是数据量很少又希望有很好的效果。6.开发迭代成本a.搭建环境成本b.迭代效率:往往是最消耗时间的部分。3.2 可供选择的方案选择平台版还是工具版选择GPU还是CPU训练,哪一款硬件,单机还是多机,单卡还是多卡,本地还是集群选择怎样的预制网络是否需要预训练模型选择哪一版本的预训练模型训练数据要多少batch_size、train_log_step、eval_step、save_model_step选多少4.根据业务目标与限制条件选择合适的方案4.1预测部署性能如果要求qps>1000a.不适合直接部署ERNIE预训练模型。b.但可尝试蒸馏策略,模型效果会存在一定损失。如果要求qps>100a.如果预算允许使用GPU,可尝试直接部署ERNIE相关预训练模型,推荐尝试ERNIE-tiny系列模型。b.如果预算只允许使用CPU,可尝试CPU集群部署ERNIE相关预训练模型。3.如果对部署性能要求不高,可随意尝试各种预训练模型。4.性能细节请参考:模型预测与部署——预测性能4.2 模型效果1.一般来说,复杂的网络优于简单的网络,多样的特征优于单一的特征,有预训练模型的效果优于无预训练模型。a.从模型复杂度来看,LSTM、GRU、CNN、BOW的复杂度与效果依次递减,速度依次提升。2.一般来说,在预训练模型中,large优于base优于tiny,新版本的模型优于旧版本的模型,针对具体任务的预训练模型优于通用版预训练模型。3.一般来说,在不欠拟合的情况下,训练数据越多模型效果越好,标注数据的质量越好效果越好。标注数据的质量优于数据的数量。4.不同任务适合的网络结构并不相同,具体任务具体分析。4.3硬件采购成本1.GPU远贵于CPU,常用训练用GPU型号为V100、P40、K40,价格依次递减。2.具体成本可参考百度云服务器-BCC-价格计算器3.如果缺少训练资源,可通过文心平台版的免费共享队列进行训练,资源紧张,且用且珍惜。4.4训练时间成本1.GPU还是CPUa.对于非ERNIE等复杂网络的模型,CPU的训练速度一般也能接受。 如果训练语料过多,数千万条以上,则建议采用CPU集群进行训练。 b.对于ERNIE模型,尽量采用GPU训练,CPU太慢,训练不起来。2.怎么用好GPU a.GPU并行训练能提升训练速度,建议优先把一个节点(trainer)的卡数用完,再考虑多机训练。因为单机多卡的GPU利用率更高,更快。而多机训练数据通信时间成本较高,时间更慢。 b.大原则:GPU利用率越高训练越快。 c.还有一点需要注意,多卡训练时是将不同的数据文件送给不同的卡,所以数据文件的个数要大于卡的个数。数据文件建议拆分细一些,这可以提升数据读取的速度。 d.熟练的同学可以尝试GPU多进程单机多卡训练、混合精度训练等方法,提升训练速度。3.train_log_step、eval_step、save_model_stepa.分别表示每多少步打印训练日志、每多少步评估一次验证集、每多少步保存一次模型。 b.设置不当也会拖慢训练时间 c.一般建议三者依次放大十倍,如:10、100、10004.batch_sizea.设置过小容易收敛慢,设置过大容易超过显存极限直接挂掉 b.如果使用ERNIE,batch_size建议小一些,使用large版本建议更小一些,如果输入语句并不是很长可以适当增加batch_size。 c.如果不使用ERNIE,可以大一些。 d.建议使用默认配置,如果想优化可以采用二分查找4.5 数据大小限制1.一般建议标注语料越多越好。2.非ERNIE模型一般需要几万至几百万条数据能收敛到较好的效果。3.ERNIE模型一般需要几千至几万条数据即可收敛到较好效果。a.一般不用ERNIE训练数百万条以上的数据,因为这会极大延长训练时间,增大资源消耗,而对效果的提升并不明显。自己有足够GPU资源的用户除外。 b.对于基线模型,建议在几万条数据上验证策略有效后再尝试增加数据量。4.如果用ERNIE模型,最少需要多少样本才能取得效果a.对于文本分类与序列标注,一般来说每个标签覆盖的样本数至少要超过200条才能有一定的效果。也就是说如果要进行50类多分类,就总共至少需要1万条样本。一般分类的类别越多任务越复杂。4.6开发迭代成本1.搭建环境成本a.如果只想训练基线模型验证效果,可以考虑使用文心平台版,免去搭建环境的成本。 b.如果需要不断调试、迭代优化模型,而由于平台版集群资源紧张造成迭代周期过长,可以尝试使用工具版。 i:这会付出搭建环境的成本,但长痛不如短痛。2.迭代效率a.使用工具版本地调试成功后再上集群训练能极大提升迭代效率。 b.使用预训练模型能提升迭代效率。 c.基线模型,建议在几万条数据上验证策略,提升迭代效率。验证有效后再尝试增加数据量5. 如何高效训练NLP任务汇总诸多NLP算法同学的建议,我们把高效训练NLP任务的基本流程总结如下:1.分析业务背景、明确任务输入与输出,将其抽象为已得到很好解决的NLP典型任务。 a.对于复杂任务,需要将其拆分成比较简单的子任务 b.文心已覆盖绝大部分NLP典型任务,可参考文心ERNIE工具版-支持任务。2.准备好几千条格式规范的训练数据,快速实现一个NLP模型基线。 a.最快速的方法是通过文心ERNIE平台版或者工具版,采用预制网络和模型无代码训练一个模型基线。 b.本步骤只需要您知道最基本的机器学习概念,划分好训练集、验证集、测试集进行训练即可。 c.评估训练出模型的效果,看是否满足你的业务需求,如果不满足,可考虑进一步优化模型效果。3.优化模型效果: a.各优化手段按照投入产出比排序如下 i:进一步分析你的业务背景和需求,分析基线模型的不足,进行更细致的技术选型。 ii:采用工具版进行本地小数据调试,极大地提升迭代效率。 iii:基于预制网络进行调参。 iv:自定义组网并进行调参。 v:基于核心接口进行高度自定义开发。 vi:直接修改文心核心源码进行开发。 b.每一种优化手段都都可以申请vip服务进行支持。如何自我判断采用哪种文心开发方式 典型的训练方式:无代码训练(不调参),无代码训练(自主调参),自定义组网训练,高阶自定义训练。以上4类训练方式的开发自由度、上手难度、建模的风险、模型效果的上限依次递增,性价比依次递减。本地工具包的调试、迭代效率最高。6总结:需掌握知识6.1 无代码调参建议具备的相关知识1.明确以下概念:有监督学习、标签、特征、训练集、验证集、测试集、逻辑回归、过拟合、欠拟合、激活函数、损失函数、神经网络、学习率、正则化、epoch、batch_size、分词、统计词表。2.知道回归与分类的区别。3.知道如何通过收敛曲线判断过拟合与欠拟合。4.知道准确率、召回率、精确度、F1值、宏平均、微平均的概念与区别。5.知道为什么训练集、验证集、测试集要保证独立同分布。6.知道什么是神经网络.7.知道什么是迁移学习、什么是预训练模型、什么是finetune、迁移学习的优点是什么。6.2 自定义组网建议具备的相关知识1.前提是已经掌握无代码调参建议具备的相关知识2.明确以下概念:Sigmoid函数公式、softmax函数公式、交叉熵公式、前向传播、反向传播、SGD、Adam、词向量、embedding、dropout、BOW、CNN、RNN、GRU、LSTM、迁移学习、3.知道神经网络为什么具有非线性切分能力。4.知道NLP中一维CNN中的卷积核大小、卷积核的个数各指代什么,时序最大池化层如何操作。5.知道NLP中CNN与LSTM的区别,各擅长处理哪类文本问题。6.知道为什么BOW模型无法识别词语顺序关系。7.知道为什么会梯度爆炸,以及如何解决。参考书籍: a.ML特征工程和优化方法 b.周志华《机器学习》前3章 c.迁移学习常见问题 a.CNN常见问题 b.深度学习优化方法 c.花书《深度学习》6-10章 d.《基于深度学习的自然语言处理》整本项目参考链接:cid:link_2
  • [问题求助] bearpi-hm-micro可以做外接摄像头模块吗
    请问各位大佬,bearpi-hm-micro可以做外接摄像头模块吗?可以后面搞深度学习吗?
  • [行业动态] 分享:中山大学通过深度学习分子模拟加速有理PROTAC设计,助力药物研发
    论文链接:https://www.nature.com/articles/s42256-022-00527-y蛋白水解靶向嵌合体 (PROTACs) 已成为通过使用泛素-蛋白酶体系统选择性降解疾病相关蛋白的有效工具。开发 PROTAC 涉及广泛的测试和试验,以探索广阔的化学空间。为了加速这一过程,中山大学的研究团队提出了一种新的深度生成模型,用于在低资源环境中合理设计 PROTAC,然后通过深度强化学习引导对具有最佳药代动力学的 PROTAC 进行采样。将这种方法应用于含溴结构域的蛋白质 4 靶蛋白,该团队生成了 5,000 种化合物,这些化合物通过基于机器学习的分类器和物理驱动的模拟进一步过滤。作为概念验证,研究人员鉴定、合成和实验测试了六种候选的含溴结构域的蛋白质 4 降解 PROTAC,其中三种通过基于细胞的测定和蛋白质印迹分析进行了验证。进一步测试了一种主要候选药物,并在小鼠中证明了良好的药代动力学。这种深度学习和分子模拟的结合可以促进合理的 PROTAC 设计和优化。该研究以「Accelerated rational PROTAC design via deep learning and molecular simulations」为题,于 2022 年 9 月 15 日发布在《Nature Machine Intelligence》。自 2001 年首次对蛋白水解靶向嵌合体(PROTACs)进行概念验证研究以来,PROTACs 已成为使用泛素-蛋白酶体系统选择性降解疾病相关蛋白的有效工具。PROTAC 包含三部分:靶向目标蛋白 (POI) 的配体(弹头)、募集 E3 泛素连接酶的配体和连接两个配体的化学接头。由于这种异双功能结构,PROTACs 能够同时结合 POI 和 E3 连接酶,形成三元复合物并促进 POI 的多泛素化和降解。因此,PROTACs 只需要与靶蛋白瞬时结合即可诱导泛素化和降解,这与传统的占用驱动抑制剂不同,后者需要与靶蛋白的可药化位点具有足够的结合亲和力。此外,PROTAC 不限于占据可成药的活性位点,因此有可能利用靶蛋白的所有表面结合位点来调节「不可成药」的靶点。因此,PROTAC 的合理设计比传统的小分子发现更具挑战性。PROTACs的合理设计可以分为三个组件的设计。虽然弹头和 E3 配体的发现与常规小分子发现过程没有根本区别,但接头的设计在实验上具有挑战性,因为 POI 和 E3 连接酶在没有有效 PROTAC 的情况下不会相互作用。传统方法必须通过大量的测试和试验来设计新的 PROTAC,效率极低。最近的许多努力通过生成接头将目标转移到从头 PROTAC 设计,因为越来越多地知道接头对 PROTAC 的物理化学性质和降解活性至关重要。不幸的是,由于三元结构的结构复杂性和动力学,连接器设计仍然是一项艰巨的挑战。阻止 PROTAC 实现其治疗潜力的另一个主要挑战是设计的分子不符合与口服药物相关的公认药物特性。由于 PROTAC 的大而灵活的性质,增强药代动力学(PK)的工程已被证明具有挑战性。因此,需要新的方法来提高新功能 PROTAC 的发现率。在对化学空间进行智能探索的基础上,深度生成模型的最新突破使从头分子设计得到了极大的推进。各种生成神经网络,例如循环神经网络、变换神经网络、自动编码器和生成对抗网络,已被证明可有效生成所需的小分子、肽和抗体。这些策略也已用于生成 PROTAC 的链接器。例如,之前 Imrie 团队开发了一种基于图形的深度生成器 (DeLinker),将三维 (3D) 结构信息直接整合到设计过程中;同时,Yang团队将链接器设计转化为句子完成任务,并引入语言模型(SyntaLinker)来生成新的链接器,给定命中片段的简化分子输入行输入系统(SMILES)。这两种方法都演示了为从头 PROTAC 设计生成各种链接器。然而,这些方法仅限于对小分子的训练,没有考虑小分子和 PROTAC 在设计策略和化学空间上的差异。此外,他们没有考虑生成分子的药物代谢和 PK 特性。这部分是因为 PROTAC 公开可用的数据量极少。例如,目前最大的开源 PROTAC 数据库仅包含 2,300 个样本,只涵盖了化学空间的一小部分。考虑到如此小的样本量,训练一个能够同时生成具有所需属性和多样性的新型 PROTAC 的模型具有挑战性。更重要的是,这些先前的生成模型都没有实现涉及合成用于体外或体内测试的新型 PROTAC 的实验验证。在新的研究工作中,中山大学的研究团队开发了 PROTAC-RL,这是一种新颖的深度生成模型,它结合了增强型 transformer 架构和记忆辅助强化学习(RL),用于合理的 PROTAC 设计。该模型将一对 E3 配体和弹头作为输入和输出设计的接头,以生成具有良好性能的化学可行 PROTAC。为了克服训练数据量少的问题,研究人员首先使用具有类似于 PROTAC 的化学空间的大量准 PROTAC 小分子集合,使用 transformer 神经网络预训练片段链接模型,通过使用带有随机 SMILES 片段的实际 PROTAC 进行微调。然后将这个经过训练的 Proformer 模型输入到具有经验奖励函数的记忆辅助 RL 中,以生成具有更好 PK 属性的 PROTAC。作为概念验证,研究人员选择了含溴结构域的蛋白 4 (BRD4) 靶蛋白,并生成了 5,000 个 PROTAC,通过分层机器学习分类器和物理驱动的分子模拟进一步聚类和筛选。根据合成的可及性,研究人员合成并实验测试了六种 BRD4 降解 PROTAC,其中三种显示出对 BRD4 的抑制活性。一个主要候选者同时表现出对 Molt4 细胞系的高抗增殖效力和对小鼠的有利 PK。这一快速发现(在 49 天内)凸显了深度学习和分子动力学相结合对促进高效 PROTAC 设计和优化所产生的重大影响。
  • [互动交流] 项目运行报错
    mindspore零基础学习手写数字识别,跟着教程用jupyter notebook运行时报这个错是为啥呀?求大佬解答
  • [其他] 基于深度学习的三维重建算法
    我们将基于深度学习的三维重建算法简要地分为三部分,更详细的文献综述将会在后续的公众号的系列文章中做介绍:在传统三维重建算法中引入深度学习方法进行改进深度学习重建算法和传统三维重建算法进行融合,优势互补模仿动物视觉,直接利用深度学习算法进行三维重建1 在传统三维重建算法中引入深度学习方法进行改进因为CNN在图像的特征匹配上有着巨大优势,所以这方面的研究有很多,比如:DeepVO其基于深度递归卷积神经网络(RCNN)直接从一系列原始RGB图像(视频)中推断出姿态,而不采用传统视觉里程计中的任何模块,改进了三维重建中的视觉里程计这一环。BA-Net其将 SfM 算法中的一环集束调整(Bundle Adjustment, BA)优化算法作为神经网络的一层,以便训练出更好的基函数生成网络,从而简化重建中的后端优化过程。• Code SLAM,如之前所提,其通过神经网络提取出若干个基函数来表示场景的深度,这些基函数可以简化传统几何方法的优化问题。2. 深度学习重建算法和传统三维重建算法进行融合,优势互补CNN-SLAM13将CNN预测的致密深度图和单目SLAM的结果进行融合,在单目SLAM接近失败的图像位置如低纹理区域,其融合方案给予更多权重于深度方案,提高了重建的效果。3. 模仿动物视觉,直接利用深度学习算法进行三维重建我们知道,三维重建领域主要的数据格式有四种:深度图(depth map)2D图片,每个像素记录从视点到物体的距离,以灰度图表示,越近越黑;体素(voxel)体积像素概念,类似于2D之于像素定义;点云(point cloud)每个点逗含有三维坐标,乃至色彩、反射强度信息;网格(mesh)即多边形网格,容易计算。因而,依据处理的数据形式不同我们将研究简要分为三部分:1)基于体素;2)基于点云;3)基于网格。而基于深度图的三维重建算法暂时还没有,因为它更多的是用来在2D图像中可视化具体的三维信息而非处理数据。(1)基于体素体素,作为最简单的形式,通过将2D卷积扩展到3D进行最简单的三维重建:Depth Map Prediction from a Single Image using a Multi-Scale Deep Network, 2014 该方法是用深度学习做三维重建的开山之作,基于体素形式,其直接用单张图像使用神经网络直接恢复深度图方法,将网络分为全局粗估计和局部精估计,并用一个尺度不变的损失函数进行回归。3D-R2N2: A unified approach for single and multi-view 3d object reconstruction, 2016Christopher等人基于体素形式提出的3D-R2N2模型使用Encoder-3DLSTM-Decoder的网络结构建立2D图形到3D体素模型的映射,完成了基于体素的单视图/多视图三维重建(多视图的输入会被当做一个序列输入到LSTM中,并输出多个结果)。但这种基于体素的方法存在一个问题,提升精度即需要提升分辨率,而分辨率的增加将大幅增加计算耗时(3D卷积,立次方的计算量)。(2)基于点云相较而言,点云是一种更为简单,统一的结构,更容易学习,并且点云在几何变换和变形时更容易操作,因为其连接性不需要更新。但需要注意的是,点云中的点缺少连接性,因而会缺乏物体表面信息,而直观的感受就是重建后的表面不平整。A Point Set Generation Network for 3D Object Reconstruction From a Single Image, 2017该方法是用点云做三维重建的开山之作,最大贡献在于解决了训练点云网络时候的损失问题,因为相同的几何形状可能在相同的近似程度上可以用不同的点云表示,如何用恰当的损失函数来进行衡量一直是基于深度学习用点云进行三维重建方法的难题。Point-Based Multi-View Stereo Network, 2019该方法通过对场景的点云进行处理,融合三维深度和二维纹理信息,提高了点云的重建精度。(3)基于网格我们知道之前的方法的缺点:基于体素,计算量大,并且分辨率和精度难平衡基于点云,点云的点之间缺少连接性,重建后物体表面不光滑相较而言,网格的表示方法具有轻量、形状细节丰富的特点,重要是相邻点之间有连接关系。因而研究者基于网格来做三维重建。我们知道,网格是由顶点,边,面来描述3D物体的,这正好对应于图卷积神经网络的M=(V,E,F)所对应。Pixel2Mesh用三角网格来做单张RGB图像的三维重建,相应的算法流程如下:Step1:对于任意的输入图像都初始化一个椭球体作为初始三维形状。Step2:将网络分为两部分:一部分用全卷积神经网络来提取输入图像的特征另一部分用图卷积网络来表示三维网格结构,Step3:对三维网格不断进行变形,最终输出物体的形状。模型通过四种损失函数来约束形状,取得了很好的效果。贡献在于用端到端的神经网络实现了从单张彩色图直接生成用网格表示的物体三维信息。总结传统的三维重建算法可以分为:这些方法各自有各自优点和使用范围,简要概括一下:而基于深度学习的三维重建算法研究主要有三种:1. 在传统三维重建算法中引入深度学习方法进行改进;2. 深度学习重建算法和传统三维重建算法进行融合,优势互补;3. 模仿动物视觉,直接利用深度学习算法进行三维重建,包括基于体素、基于点云和基于网格。文章转自小白学视觉
  • 3D重建算法综述(1)
    双目/多目视觉双目视觉主要利用左右相机得到的两幅校正图像找到左右图片的匹配点,然后根据几何原理恢复出环境的三维信息。但该方法难点在于左右相机图片的匹配,匹配地不精确都会影响最后算法成像的效果。多目视觉采用三个或三个以上摄像机来提高匹配的精度,缺点也很明显,需要消耗更多的时间,实时性也更差。这两种方法理论上都可较精确恢复深度信息,但实际上受拍摄条件的影响,其精度往往无法得到保证。常见的有SGM和SGBM算法等,其中自动驾驶数据集KITTI中,排名前五十的算法几乎有一半都是对SGM的改进。文章转自:小白学视觉
  • [其他] 理解过拟合和dropout机制
    一、过拟合,欠拟合过拟合(overfitting):学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了。欠拟合(underfitting):学习能太差,训练样本的一般性质尚未学好。下面是直观解释下面在那一个具体的例子:如果我们有6个数据,我们选择用怎么样的回归曲线对它拟合呢?看下图可以发现得到的直线  并不能较为准确的描述训练数据的形态,我们说这不是一个良好的拟合,这也叫做欠拟合如果我们再加入一个特征值  ,得到  于是我们得到二阶多项式,一个稍好的拟合。最后我们直接用五阶多项式去拟合,发现对于训练样本可以很好的拟合,但是这样的模型对预测往往效果不是非常好,这叫做过拟合(overfitting)。在这里我们可以发现,原来过拟合和欠拟合和模型复杂度是相关的,具体描述如下图也就是说,在模型相对复杂时,更容易发生过拟合,当模型过于简单时,更容易发生欠拟合。当然,为了防止过拟合,有很多方法,下面主要介绍在神经网络中经常用到的dropout。二、DropoutDropout是2012年深度学习视觉领域的开山之作paper:《ImageNet Classification with Deep Convolutional》所提到的算法,用于防止过拟合。基本思想:dropout是指在深度学习网络训练的过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃,对于随机梯度下降算法来说,由于是随机丢弃,所以每个mini-batch都在训练不同的网络。大规模神经网络的缺点:训练费时间容易产生过拟合过拟合是很多机器学习的通病,为了解决过拟合问题,我们可能会想到L2正则化、或者减小网络规模。dropout很好的解决了这个问题。因而对于一个有N个节点的神经网络,有了dropout后,就可以看做是2^n个模型的集合了,但是需要训练的参数数目依然不变,这就解脱了费时的问题。三、深入了解dropout Dropout可以看作是Bagging的极限形式,每个模型都在当一种情况中训练,同时模型的每个参数都经过与其他模型共享参数,从而高度正则化。在训练过程中,随机失活也可以被认为是对完整的神经网络抽样出一些子集,每次基于输入数据只更新子网络的参数(然而,数量巨大的子网络们并不是相互独立的,因为它们都共享参数)。在测试过程中不使用随机失活,可以理解为是对数量巨大的子网络们做了模型集成(model ensemble),以此来计算出一个平均的预测。关于Dropout的Motivation:一个是类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝。还有一个就是正则化的思想,减少神经元之间复杂的共适应关系,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。dropout就是我们让它在前向传播的时候,让某个神经元的激活值以一定的概率P,让他停止工作。以前我们网络的计算公式是:采用dropout后变成如下公式:再详细点的解释就是:我们要让某个神经元以概率P停止工作(也就是将这个神经元的激活值变为0), 那么这个概率怎么产生呢?答案就是伯努利分布,我们用伯努利函数,以概率P随机生成一个0、1的向量, 也就是上述公式中的r。源码实现如下#dropout函数的实现 def dropout(x, level): if level < 0. or level >= 1:#level是概率值,必须在0~1之间 raise Exception('Dropout level must be in interval [0, 1[.') retain_prob = 1. - level #我们通过binomial函数,生成与x一样的维数向量。binomial函数就像抛硬币一样,我们可以把每个神经元当做抛硬币一样 #硬币 正面的概率为p,n表示每个神经元试验的次数 #因为我们每个神经元只需要抛一次就可以了所以n=1,size参数是我们有多少个硬币。 sample=np.random.binomial(n=1,p=retain_prob,size=x.shape)#即将生成一个0、1分布的向量,0表示这个神经元被屏蔽,不工作了,也就是dropout了 print sample x *=sample#0、1与x相乘,我们就可以屏蔽某些神经元,让它们的值变为0 print x x /= retain_prob return x #对dropout的测试,大家可以跑一下上面的函数,了解一个输入x向量,经过dropout的结果 x=np.asarray([1,2,3,4,5,6,7,8,9,10],dtype=np.float32) dropout(x,0.4)函数中,x是本层网络的激活值。Level就是dropout就是每个神经元要被丢弃的概率。rescale:经过上面的屏蔽,使部分激活值变为0以后,我们还需要对向量进行rescale,也就是乘以 1/(1-p).我们前面说过,其实Dropout是类似于平均网络模型。我们可以这么理解,我们在训练阶段训练了1000个网络,每个网络生成的概率为Pi,然后我们在测试阶段的时候,我们肯定要把这1000个网络的输出结果都计算一遍,然后用这1000个输出,乘以各自网络的概率Pi,求得的期望值就是我们最后的平均结果。文章转自小白学视觉
  • [其他] 对象检测网络中的NMS算法详解
    01NMS定义在一个典型的对象检测管道中,网络会在中间层输出很多候选框proposals(Bounding Box-BB)。在这个阶段输出的BB大多数都会关联同一个检测对象,这个时候需要一个方法来合并这些BB成为一个对象检测框,除了FP之外。Non-maximum-suppression(NMS)通过空间距离结合并交比(IOU)完成聚类划分,对每个cluster只保留得分最高的BB,这种方法中文也被称着-非最大抑制。02算法实现NMS有两种最常见的代码实现方法- 贪心算法Greedy- 最优解算法Optimal两种方法实现的伪代码如下:GreedyOptimal两种算法提供了不同的解决思路:03NMS超参数 两个重要的参数是score阈值与overlap阈值,任何低于score阈值的BB将会被拒绝,当两个BB的IOU大于给定的overlap阈值时候,两个检测框将会被聚类分割为同一个对象检测框。Overlap阈值需要平衡精度与抑制效果:当overlap阈值越大、proposals boxes被压制的就越少,结果就是导致大量的FP(False Positives),进一步导致检测精度下降与丢失(原因在于对象与背景图像之间不平衡比率,导致FP增加数目远高于TP)当overlap阈值很小的时候,导致proposals boxes被压制的很厉害,导致recall大幅下降。提升:使用soft-NMS,在soft-NMS中score被乘以负向IOU,图示如下:下图是基于soft-NMS实现了对部分重叠对象的成功检测:文章转自小白学视觉
  • [其他] OpenCV图像处理常用手段(1)
    文章转自:小白学视觉图像二值化操作两种方法,全局固定阈值二值化和局部自适应阈值二值化全局固定阈值很容易理解,就是对整幅图像都是用一个统一的阈值来进行二值化;局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。效果: 腐蚀操作滤波操作,模糊处理模糊处理在边沿检测和去噪声方面有较为广泛的应用。OpenCV中提供了4种模糊算法,列举如下:averagemediangaussianbilateral这里我们只列举使用 均值滤波实现图像模糊:canny边缘检测将原始图像转化为灰度图,用blur函数进行图像模糊以降噪,然后用canny函数进行边缘检测。最后简单总结一下图像处理中概念离散傅里叶变换图像高频部分代表了图像的细节、纹理信息;低频代表了图像的轮廓信息。低通-》模糊高通-》锐化腐蚀和膨胀是针对白色部分(高亮部分)而言的。膨胀就是对图像高亮部分进行“领域扩张”,效果图拥有比原图更大的高亮区域;腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域。开运算:先腐蚀再膨胀,用来消除小物体闭运算:先膨胀再腐蚀,用于排除小型黑洞形态学梯度:就是膨胀图与腐蚀图之差,用于保留物体的边缘轮廓。顶帽:原图像与开运算图之差,用于分离比邻近点亮一些的斑块。黑帽:闭运算与原图像之差,用于分离比邻近点暗一些的斑块。
  • [其他] 使用OpenCV实现车道线检测
    计算机视觉在自动化系统观测环境、预测该系统控制器输入值等方面起着至关重要的作用。本文介绍了使用计算机视觉技术进行车道检测的过程,并引导我们完成识别车道区域、计算道路RoC 和估计车道中心距离的步骤。 摄像机校准(calibrateCamera.py)几乎所有摄像机使用的镜头在聚焦光线以捕捉图像时都存在一定的误差,因为这些光线由于折射在镜头边缘发生了弯曲。这种现象会导致图像边缘的扭曲。以下视频用示例解释了两种主要的失真类型,强烈建议观看。假设我们现在了解什么是径向失真,需要利用失真系数(k1、k2 和 k3)来校正径向失真。calibrateCamera.py是摄像机校准程序,默认情况下不运行该程序。建议在生成目标上的特征点和图像上的特征点的过程中至少使用20个棋盘图像。Main中的calibrate()将在/data/calibration中查找图像,但是我们也可以选择其他目录。去除图像失真的整个过程是相当有趣的,OpenCV有一个很好的教程,解释了概念并举出一些例子。透视变换(preprocess.py:8–19)检测车道的第一步是调整我们的视觉系统,以鸟瞰的角度来观察前方的道路,这将有助于计算道路的曲率,因此将有助于我们预测未来几百米的转向角大小。自上而下视图的另一个好处是,它解决了车道线相交的问题。实际上只要沿道路行驶,车道线就是平行线。鸟瞰图可以通过应用透视变换来实现,即将输入图像中车道区域四个点映射到所需点上,从而生成自顶向下的视图。这些点是根据个案确定,决定因素主要是摄像头在车辆中的位置及其视野。图2中的图片分别表示输入和转换后输出图像。阈值(preprocess.py:22)现在车道线是平行的,下一步将它们从输入图像上分割出来。输入图像包含RGB3个通道,车道线为白色或黄色。基于这个假设,输入图像可以转换为单个通道灰度图像,从而消除我们不需要的通道。另一个要转换为的颜色空间是HLS颜色空间,其中S通道可能会根据照明情况提供较好的结果。在以下示例中,将使用图像阈值,因为在给定的输入图像中它可以正常工作。图3在阈值处理后可视化输出。下阈值(220)和上阈值(225)将根据输入图像手动调整。OpenCV有基于整体嵌套边缘检测的先进技术,而无需对阈值进行任何手动调整,但本文仍然使用的是简单的阈值技术。 车道像素查找(laneDetection.py:4~70)预处理输入图像后,将在图像空间中确定并绘制车道。方法是在二进制图像(阈值图像)的下半部分绘制非零像素直方图,以观察模式:.由于像素值是二进制的,峰值代表大多数非零像素的位置,因此可以很好地指示车道线。直方图中的x坐标用作搜索相应通道的起点。滑动窗口方法的概念将应用在这里,以下视频说明了滑动窗口的概念,图5中是结果。识别车道面积(laneDetection.py:85~149)滑动窗口有助于估计每个车道区域的中心,使用这些 x 和 y 像素定位函数search_around_poly()可以适合二阶多项曲线。该函数适合 f(y)而不是 f(x),因为通道在图像中是垂直的。图6很好地说明了这一步。下一步是计算曲率半径,该半径可以使用与曲线局部部分附近的点紧密拟合的圆进行计算,如图 7 所示。曲线在特定点的曲率半径可以定义为近似圆的半径。此半径可以使用图 7 中的公式计算。最后一步是在这些点之间放置一个多边形,并将其投影回原始图像,来突出显示车道区域。曲率的车道面积和半径是根据像素值计算的,像素值与真实世界空间不同,因此必须转换为现实世界的值,这涉及到测量我们投射扭曲图像的车道部分的长度和宽度。为简单起见,我们可以假设大多数车道通常长 30 米,宽 3.7 米,并且代码使用这些值将像素空间值转换为实际仪表测量值。文章转自:小白学视觉