• [技术干货] 图神经网络入门,图神经网络的挑战
    目录图神经网络背后的动机GNN 算法GNN 在 Karate 网络上的实现GNN 的应用GNN 的挑战GNN 研究论文图神经网络背后的动机由于图形能够以可以客观分析的方式表示现实世界,因此如今它们受到了很多关注。图可用于表示许多现实世界的数据集,如社交网络、分子结构、地图、网络链接数据、自然科学、蛋白质-蛋白质相互作用网络、知识图等。此外,非结构化数据,如图像文本可以以图形的形式建模。图是对一组对象(节点)及其关系(边)进行建模的数据结构。图分析作为一种独特的机器学习非欧数据结构,侧重于节点分类、图分类、链接预测、图聚类和图可视化等任务。图神经网络 (GNN) 是基于深度学习的方法,可在图域上运行。由于其在涉及非欧空间的现实世界问题中的良好表现,GNN 已成为近来广泛应用的图分析方法。图神经网络算法一个节点可以用它的特征和图中的相邻节点来表示。GNN 的目标是学习一个状态嵌入,它对每个节点的邻域信息进行编码。状态嵌入用于产生输出,例如预测节点标签的分布。GNNs 是信息扩散机制和神经网络的结合,代表了一组转换函数和一组输出函数。信息扩散机制由节点表示,节点在其中更新其状态,并通过将“消息”传递给其相邻节点来交换信息,直到它们达到稳定的平衡。转换函数以每个节点的特征、每个节点的边缘特征、相邻节点的状态和相邻节点的特征作为输入,输出是节点的新状态。图 2空手道俱乐部社交网络上的图神经网络实现在本节中,让我们看看如何将 GNN 应用于空手道网络,这是一种简单的图网络。1. 空手道网络资料背景:两个 34×34 矩阵ZACHE 对称,二进制ZACHC 对称,有值。这些数据是 Wayne Zachary 从大学空手道俱乐部成员那里收集的。ZACHE 矩阵表示俱乐部成员之间是否存在联系;ZACHC 矩阵表示关联的相对强度(发生互动的俱乐部内外情况的数量)。Zachary (1977) 利用这些数据和网络冲突解决的信息流模型来解释这个群体在成员之间发生纠纷后的分裂。2.使用的数据此数据可以转换为 2 个 CSV 文件:node.csv 存储每个俱乐部成员及其属性。34 名俱乐部成员用“Id”从 0 到 33 表示。他们所在的俱乐部 – Mr Hi(Node id 0) 或 Mr Officer(Node id 1) 用“Club”栏表示。edge.csv 存储两个俱乐部成员之间的成对交互。权重被赋予由“权重”特征表示的节点 id 之间的这些交互。Nodes.csv – Self ProjectEdges.csv – Self Project3. 使用 DGL 库进行图形表示:然后我们构建一个图,其中每个节点都是俱乐部成员,每条边代表他们的互动。在 DGL 中,节点是从零开始的连续整数。因此,在准备数据时,重要的是重新标记或重新洗牌行顺序,以便第一行对应于第一个节点,依此类推。在本例中,我们已经按照正确的顺序准备了数据,因此我们可以通过edges.csv 表中的“Src”和“Dst”列创建图形。加载 DGL 图的代码:import dglsrc = edges_data['Src'].to_numpy()dst = edges_data['Dst'].to_numpy()# Create a DGL graph from a pair of numpy arraysg = dgl.graph((src, dst))出于可视化目的,我们可以将 DGL 图转换为网络图:import networkx as nx# Since the actual graph is undirected, we convert it for visualization purpose.nx_g = g.to_networkx().to_undirected()# Kamada-Kawaii layout usually looks pretty for arbitrary graphspos = nx.kamada_kawai_layout(nx_g)nx.draw(nx_g,pos, with_labels=True)DGL 图网络4. 空手道网络上的 GNN 模型训练:将俱乐部特征添加到 DGL 图中:# The "Club" column represents whichcommunity does each node belong to.# The values are of string type, so we must convert it to either categorical# integer values or one-hot encoding.club = nodes_data['Club'].to_list()# Convert to categorical integer values with 0 for 'Mr. Hi', 1 for 'Officer'.club = torch.tensor([c == 'Officer' for c in club]).long()# We can also convert it to one-hot encoding.club_onehot = F.one_hot(club)print(club_onehot)# Use `g.ndata` like a normal dictionaryg.ndata.update({'club' : club, 'club_onehot' : club_onehot})将边缘特征更新为 DGL 图:# Get edge features from the DataFrame and feed it to graph.edge_weight = torch.tensor(edges_data['Weight'].to_numpy())# Similarly, use `g.edata` for getting/setting edge features.g.edata['weight'] = edge_weight更新节点嵌入:node_embed = nn.Embedding(g.number_of_nodes(), 5)  # Every node has an embedding of size 5.inputs = node_embed.weight                  # Use the embedding weight as the node features.nn.init.xavier_uniform_(inputs)更新 2 个组长的标签功能 - 0 和 33 ids 为:labels = g.ndata['club']labeled_nodes = [0, 33]使用 GraphSage 模型将 GNN 实现为:from dgl.nn import SAGEConv# build a two-layer GraphSAGE modelclass GraphSAGE(nn.Module):def __init__(self, in_feats, h_feats, num_classes):       super(GraphSAGE, self).__init__()       self.conv1 = SAGEConv(in_feats, h_feats, 'mean')       self.conv2 = SAGEConv(h_feats, num_classes, 'mean')def forward(self, g, in_feat):       h = self.conv1(g, in_feat)       h = F.relu(h)       h = self.conv2(g, h)       return h# Create the model with given dimensions # input layer dimension: 5, node embeddings# hidden layer dimension: 16# output layer dimension: 2, the two classes, 0 and 1net = GraphSAGE(5, 16, 2)设置损失和优化器并将模型训练为:# in this case, loss will in training loopoptimizer = torch.optim.Adam(itertools.chain(net.parameters(), node_embed.parameters()), lr=0.01)all_logits = []for e in range(100):# forwardlogits = net(g, inputs)# compute losslogp = F.log_softmax(logits, 1)loss = F.nll_loss(logp[labeled_nodes], labels[labeled_nodes])# backwardoptimizer.zero_grad()loss.backward()optimizer.step()all_logits.append(logits.detach())if e % 5 == 0:       print('In epoch {}, loss: {}'.format(e, loss))输出 :获得结果为:pred = torch.argmax(logits, axis=1)print('Accuracy', (pred == labels).sum().item() / len(pred))输出 :图神经网络的应用GNN 能够解决的问题 :节点分类:手头的任务是通过利用其邻居的标签来确定节点的标签。通常,这种类型的问题是以半监督的方式训练的,只有一部分图被标记。图分类:该过程是将整个图分为不同的类别。示例:在生物信息学中确定蛋白质是否为酶,在 NLP或社交网络分析中对文档进行分类。图形可视化:它处理图形的可视化表示,揭示数据中可能存在的结构和异常,并帮助用户理解图形。正如本博客前面提到的,一些可视化图形的方法是网络和 dgl。链接预测:该算法用于理解图中实体之间的关系,并尝试预测两个实体之间是否存在连接。它还可以用于推荐系统和预测犯罪组织。它在社交网络中用于推断社交互动或向用户推荐潜在朋友。图聚类:这意味着以图的形式对数据进行聚类。有两种不同形式的聚类在图数据顶点和图聚类上执行。顶点聚类是指 根据边权重或边距离将图的节点聚类成一组密集连接的区域。图聚类是将图作为待聚类的对象,根据聚类特征的相似性对这些对象进行聚类。图神经网络的挑战1.动态特性——由于 GNN 是动态图,处理具有动态结构的图可能是一个挑战。2.可扩展性——在社交网络或推荐系统中应用嵌入方法对于包括 GNN 在内的所有图嵌入算法来说在计算上可能很复杂。3.非结构化数据——GNNs 也难以应用于非结构化场景。为 GNN 寻找最佳图生成方法是一项具有挑战性的任务。图神经网络研究论文列出了一些论文,以深入了解 GNN 及其在某些应用领域中正在进行的工作——A Comprehensive Survey on Graph Neural Networks. arxiv 2019. https://arxiv.org/pdf/1901.00596.pdfZonghan Wu, Shirui Pan, Fengwen Chen, Guodong Long, Chengqi Zhang, Philip S. Yu.Graph Neural Networks: A Review of Methods and Applications. AI Open 2020. https://doi.org/10.1016/j.aiopen.2021.01.001Jie Zhou, Ganqu Cui, Zhengyan Zhang, Cheng Yang, Zhiyuan Liu, Maosong Sun.Supervised Neural Networks for the Classification of Structures. IEEE TNN 1997. https://ieeexplore.ieee.org/abstract/document/572108Alessandro Sperduti and Antonina Starita.A new model for learning in graph domains. IJCNN 2005. https://www.researchgate.net/profile/Franco_Scarselli/publication/4202380_A_new_model_for_earning_in_raph_domains/links/0c9605188cd580504f000000.pdfMarco Gori, Gabriele Monfardini, Franco Scarselli.Deep Learning on Graphs: A Survey. arxiv 2018.Ziwei Zhang, Peng Cui, Wenwu Zhu.
  • [技术干货] 使用TensorFlow从头开始实现这个架构
    在此之前,我已经讨论了MobileNet的体系结构接下来,我们将看到如何使用TensorFlow从头开始实现这个架构。实现:MobileNet架构:图显示了我们将在代码中实现的MobileNet体系结构。网络从Conv、BatchNorm、ReLU块开始,并从其上跟随多个MobileNet块。它最终以一个平均池和一个完全连接的层结束,并激活Softmax。我们看到该体系结构有一个模式——Conv-dw/s1,后跟Conv/s1,依此类推。这里dw是深度层和步幅数,然后是Conv层和步幅数。这两条线是MobileNet区块。“Filter Shape”列给出了核大小和要使用的滤波器数量的详细信息。列的最后一个数字表示滤波器的数量。我们看到滤波器数量从32逐渐增加到64,从64逐渐增加到128,从128逐渐增加到256,以此类推。最后一列显示了随着我们深入网络,图像的大小是如何变化的。输入大小选择为224*224像素,有3个通道,输出层分类为1000类。正常CNN架构块之间的差异(左),与MobileNet架构(右):构建网络时需要记住的几件事:所有层之后都是批量标准化和ReLU非线性。与具有Conv2D层的普通CNN模型不同,MobileNet具有Depthwise  Conv层,如图所示。工作流从TensorFlow库导入所有必要的层为MobileNet块编写辅助函数构建模型的主干使用helper函数构建模型的主要部分导入图层import tensorflow as tf# 导入所有必要的层from tensorflow.keras.layers import Input, DepthwiseConv2Dfrom tensorflow.keras.layers import Conv2D, BatchNormalizationfrom tensorflow.keras.layers import ReLU, AvgPool2D, Flatten, Densefrom tensorflow.keras import ModelKeras已经内置了一个DepthwiseConv层,所以我们不需要从头开始创建它。MobileNet块MobileNet块的表示要为MobileNet块创建函数,我们需要以下步骤:函数的输入:a.张量(x)b.卷积层的滤波器数量(滤波器)c.卷积层的步长(步长)运行:a.应用3x3分步卷积层,然后是批量标准化层和ReLU激活b.应用带有1x1卷积层的滤波器,然后是批量标准化层和ReLU激活返回张量(输出)这3个步骤在下面的代码块中实现。# MobileNet blockdef mobilnet_block (x, filters, strides):x = DepthwiseConv2D(kernel_size = 3, strides = strides, padding = 'same')(x)x = BatchNormalization()(x)x = ReLU()(x)x = Conv2D(filters = filters, kernel_size = 1, strides = 1)(x)x = BatchNormalization()(x)x = ReLU()(x)return x构建模型的主干如图2所示,第一层为Conv/s2,滤波器形状为3x32。模型的主干# 模型的主干input = Input(shape = (224,224,3))x = Conv2D(filters = 32, kernel_size = 3, strides = 2, padding = 'same')(input)x = BatchNormalization()(x)x = ReLU()(x)模型的主要部分:# 模型的主要部分x = mobilnet_block(x, filters = 64, strides = 1)x = mobilnet_block(x, filters = 128, strides = 2)x = mobilnet_block(x, filters = 128, strides = 1)x = mobilnet_block(x, filters = 256, strides = 2)x = mobilnet_block(x, filters = 256, strides = 1)x = mobilnet_block(x, filters = 512, strides = 2)for _ in range (5):x = mobilnet_block(x, filters = 512, strides = 1)x = mobilnet_block(x, filters = 1024, strides = 2)x = mobilnet_block(x, filters = 1024, strides = 1)x = AvgPool2D (pool_size = 7, strides = 1, data_format='channels_first')(x)output = Dense (units = 1000, activation = 'softmax')(x)model = Model(inputs=input, outputs=output)model.summary()模型摘要的一个片段
  • [技术干货] 2022年最新深度学习入门指南
    概述1. 深度学习是用于处理视觉相关任务的强大的方法。2. 卷积神经网络是一种深度学习模型,我们用它来处理与相关的应用程序。3. 在本指南中,我们将探索 CNN 的工作原理以及它们如何应用于图像分类任务。我们还将构建一个 CNN 模型,并使用 Keras 从头开始在训练数据集上对其进行训练。介绍我一直着迷于深度学习模型的潜力和力量,以及它们如何理解执行图像分类、图像分割、对象检测等任务。我们还遇到了一些分割算法,例如来自 X-的肿瘤/异常检测,他们在这方面的表现甚至优于医生。在本指南中,我们将全面介绍 CNN 及其在图像分类任务中的应用。我们将首先介绍卷积神经网络 (CNN) 背后的基本理论、它们的工作原理以及它们如何成为用于任何计算机视觉任务的最流行的模型之一。现在让我们开始吧……卷积神经网络CNN 或卷积神经网络是将图像作为输入并通过使用卷积运算学习图像中的局部模式的算法。而密集层/全连接层则从输入中学习全局模式。CNN 的学习局部模式具有两个特性:1. CNN 学习的模式是不变的,即在学习识别图像左下角的特定模式后,CNN 可以识别图像中的任何位置。但是,如果密集连接的网络出现在新位置的任何位置,则必须重新学习该模式。这使得 CNN 在处理和理解图像时具有数据效率。2. CNN 可以学习模式的空间层次,即第一个卷积层学习一个小的局部模式,如边缘或线,第二个卷积层学习由第一个卷积层学习的特征组成的更大的模式,依此类推。通过这种方式,CNN 学习和理解了越来越复杂和抽象的视觉概念。让我们看看下面的猫图,在这里我们可以看到,在第一个卷积层中,学习了边缘、曲线等模式。但在第二层 CNN 中,眼睛、鼻子或耳朵等特征是通过使用第一层的模式来检测的。通过这种方式,CNN了解图像并了解图像中的对象。参考特征提取现在让我们探索并了解它是如何工作的。卷积运算卷积是应用于 3D 张量的操作,称为特征图。这些特征图由两个空间轴(高度和宽度)和一个深度轴(或通道轴)组成。如果我们考虑 RGB 图像的示例,高度和宽度构成空间轴,3 个颜色通道表示深度轴。类似地,对于黑白图像,深度为 1。但在其他层的输出中,深度不是由颜色通道表示,而是代表过滤器。过滤器对输入数据的特定方面进行编码,即过滤器可以对“面部存在”或“汽车结构”等概念进行编码。卷积运算由两个关键参数组成,1. 内核大小:应用于图像的过滤器的大小。这些是典型的 3×3 或 5×5。2. 输出特征图的深度:这是卷积计算的输出滤波器的数量。卷积操作只是在输入特征图上乘加加权滤波器,以生成另一个具有不同宽度、高度和深度的 3D 张量。卷积操作通过在 3D 输入特征图上滑动这些大小为 3×3 或 5×5 过滤器的窗口,在每个可能的位置停止,然后计算特征。我们可以在下面的 gif 中看到操作,3×3 内核在 5×5 输入特征图上运行以生成 3×3 输出。参考卷积重要的是要注意网络从给定数据中学习所需的最佳过滤器。CNN 模型的权重是过滤器。现在让我们看看边框效果、填充和步幅。了解边框效果和填充现在再次让我们考虑 5×5 特征图(参考上面的 gif)。过滤器的大小为 3×3,因此有 9 个图块。现在在卷积操作期间,3×3 滤波器只能通过 5×5 特征图 9 次,因此我们的输出大小为 3×3。所以输出在这里从 5×5 缩小到 3×3,也就是说,在每个维度旁边缩小了两个图块。这里没有对输入特征图应用填充,因此称为有效填充。如果我们希望输出特征图与输入特征图的大小相同,我们需要使用填充。填充包括在输入特征图的每一侧添加适当数量的行和列,以使每个输入图块周围的中心卷积窗口成为可能。这种类型的填充称为相同的填充。以下 GIF 表示相同的填充。源边框效果和填充现在我们可以看到,当我们向 5×5 特征图添加额外的填充并应用 3×3 过滤器时,我们将能够获得与输入特征图大小相同的输出特征图。如何找到要添加到给定过滤器大小和特征图的填充?当我们遇到不同大小的特征图和过滤器以及我们如何确定对于有效和相同的情况应该使用多少填充时,自然会出现这个问题。所以要回答这个问题,我们有确定填充的公式,即1. 有效填充:因为有效填充意味着没有填充,所以padding的数量将为0。2. 相同填充:我们使用相同的填充来保留输入特征图的大小。但是卷积的输出主要取决于过滤器的大小,与输入大小无关。因此,可以根据过滤器大小确定填充,如下所示:相同填充 =(过滤器大小 - 1)/ 2现在让我们看看另一个可以影响输出大小的因素,即步幅。了解步幅步幅是影响输出特征图大小的因素之一。步幅是应用过滤器的两个连续窗口之间的距离。在上面的例子中,我们已经看到过滤器作为窗口被应用于输入特征图,并被移动一个单位或步幅。当这种转变大于1时,我们将其定义为跨步的CNN。下面的GIF是一个大步为2的CNN的例子。我们还可以观察到,当我们使用步幅的值为 2(或大于 1)时,与常规卷积(当 stride 的值 = 1 时)相比,输出特征图的大小减小(下采样因子为 2) .因此我们可以说使用步幅是对输入特征图进行下采样的方法之一。但它们在实践中很少使用,但它仍然是 CNN 的重要概念之一,了解它是很好的。现在在开始 CNN 的实现之前,让我们看一下用于对输入特征进行下采样的另一个重要概念,即池化。理解池化池化操作可以定义为一种通过使用不同的策略(例如取平均值、最大值、总和等)来积极减小/下采样输入特征图的大小的方法。现在让我们看看不同类型的池化1.最大池化:最大池化是一种广泛使用的池化策略,用于对输入特征图进行下采样。在这一层中,确定大小的窗口通过输入特征图,然后获得最大值并计算为下一层或输出特征图。我们可以在下面的 GIF 中看到,当我们使用过滤器大小 2 执行最大池化时,输入特征被下采样因子 2 或减半。我们可以通过以下公式确定使用最大池化后输出的大小:输出大小=输入大小/(池化过滤器大小)还有其他类型的池化策略,例如考虑窗口平均值的平均池化和考虑窗口权重总和的求和池化。但最大池化一直是最流行和最广泛使用的池化策略。这是因为当我们考虑过滤器窗口的最大值时,我们将能够将有关输入特征/当前特征图的大部分可用信息转移到下一个特征图。因此,当我们通过神经网络的层进行传播时,减少了数据的丢失。既然我们对 CNN 的工作原理有了一些了解,那么现在让我们从头开始实现一个 CNN。从头开始训练基于 CNN 的图像分类器现在让我们在 MNIST 数据集上训练一个 CNN 模型。MNIST 数据集由 0 到 9 的手写数字图像组成,即 10 个类。训练集由 60000 张图像组成,测试集由 10000 张图像组成。让我们使用 CNN 从头开始训练图像分类器。我们将在Keras框架中实现代码。Keras 是最受欢迎和使用最广泛的深度学习库之一。它是作为高级 API 构建的,可以轻松使用 TensorFlow。要完成以下代码实现,建议使用带有 GPU 的 Jupyter Notebook。可以通过Google Colaboratory访问相同的内容,该实验室提供基于云的 Jupyter Notebook环境和免费的 Nvidia GPU。现在让我们开始吧获取 MNIST 数据集在下载数据集之前,让我们进行必要的导入,from tensorflow.keras.datasets import mnistfrom tensorflow.keras.utils import to_categoricalfrom tensorflow.keras import layersfrom tensorflow.keras import modelsimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib import pyplot现在让我们下载数据,(train_images, train_labels), (test_images, test_labels) = mnist.load_data()上面的代码下载数据并缓存。由于我们正在加载预定义的数据集,因此该数据集已经被预处理并以元组的形式打包。现在让我们探索我们解压出来的这些张量的形状,int("Shape of training dataset: ",train_images.shape)print("Shape of test dataset: ",test_images.shape)print("Shape of training dataset labels: ",train_labels.shape)print("Shape of test dataset labels: ",test_labels.shape)输出:从上面的输出我们可以看到,训练数据集有 60000 张图片,每张图片的大小为 28×28。同样,测试数据集有 10000 张图像,图像大小为 28×28。我们还可以看到标签没有任何形状,即它是一个标量值。让我们看看一些标签,print(train_labels)print(type(train_labels))输出:我们可以看到标签都在一个 NumPy 数组中。现在让我们看看我们的一些训练图像,# plot first few imagesfor i in range(9):   # define subplot   pyplot.subplot(330 + 1 + i)   # plot raw pixel data   pyplot.imshow(train_images[i], cmap=pyplot.get_cmap('gray'))# show the figurepyplot.show()输出:我们可以通过绘制它们来可视化训练样本。在我们继续模型训练之前,让我们对我们的数据进行一些预处理。基本预处理现在让我们将图像从 (60000, 28, 28) 重塑为 (60000, 28, 28, 1) 大小,其中最后一个维度表示图像的深度。我们之前已经看到,每个图像的特征图都有三个维度,即宽度、高度和深度。由于 MNIST 训练集由黑白图像组成,我们可以将深度定义为 1。接下来,我们应该对数据集进行归一化,即将输入的所有值都在 0 和 1 之间。由于图像层的最大值是 255,我们将整个数据集除以 255。train_images = train_images.reshape((60000, 28, 28, 1))train_images = train_images.astype('float32') / 255现在让我们也对测试集应用相同的预处理。test_images = test_images.reshape((10000, 28, 28, 1))test_images = test_images.astype('float32') / 255最后,让我们将标签转换为分类格式,即它们目前作为标量,但我们正在执行 One-Hot 编码以将每个标量唯一地映射到向量。train_labels = to_categorical(train_labels)test_labels = to_categorical(test_labels)train_labels[:10]输出:我们可以看到训练标签是独热编码。现在让我们使用 Keras 创建一个基本的 CNN 模型。使用 Tensorflow-Keras 创建 CNN 模型现在让我们使用 Keras 库创建一个基本模型,model = models.Sequential()model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)))model.add(layers.MaxPool2D((2,2)))model.add(layers.Conv2D(64, (3,3), activation='relu'))model.add(layers.MaxPool2D((2,2)))model.add(layers.Conv2D(64, (3,3), activation='relu'))现在我们来分析一下上面的代码,· 首先,我们正在创建一个Sequential类型类的对象。Sequential 模型是一种模型,我们可以在其中添加和堆叠层以形成端到端模型。· 使用**.add**我们通过根据层指定各种参数来将层添加到我们的模型中。· 在上面的模型中,我们添加了一个卷积层(即 Keras 中的 Conv2D),它接受许多过滤器、内核大小和激活函数作为参数。· 接下来,添加最大池化层(即 Keras 中的 MaxPool2D)以启用池化操作。· Keras 中提供了不同类型的层。模型的上述部分负责识别和检测输入数据中存在的模式。(我们上面讨论过的工作)现在最后让我们通过定义模型的输出数量来初始化头部。model.add(layers.Flatten())model.add(layers.Dense(64, activation='relu'))model.add(layers.Dense(10, activation='softmax'))现在我们的模型已经准备好了。我们可以使用**.summary()**方法查看模型中所有层的列表 。model.summary()输出:现在让我们通过分配优化器、损失函数和模型训练时使用的指标来编译模型。model.compile(optimizer='rmsprop',             loss='categorical_crossentropy',             metrics=['accuracy'])现在让我们用训练数据和标签拟合模型并训练 5 个 epochsmodel.fit(train_images, train_labels, epochs=5, batch_size=64)结果:从训练结果中我们可以看出,该模型能够达到高达 99% 的准确率,这真是令人印象深刻!!结论我们已经看到了卷积神经网络的底层功能以及它如何从图像中提取特征。因此,我们可以得出结论,卷积神经网络是在计算机视觉应用中产生最先进结果的技术之一。       原文标题 : 2022年最新深度学习入门指南
  • [技术干货] 人工神经网络训练图像分类器
    我们将仅使用全连接层在20000张图像上训练图像分类模型。所以没有卷积和其他花哨的东西,我们将把它们留到下一篇文章中。不用说,但你真的不应该使用普通的人工神经网络来分类图像。图像是二维的,通过展平图像,你将失去使图像可识别的模式。尽管如此,它还是很有趣且可行的,并且会让你洞察这种方法的所有错误。使用的数据集和数据准备我们将使用Kaggle的狗与猫数据集。它是根据知识共享许可证授权的,这意味着你可以免费使用它:图1:狗与猫数据集:该数据集相当大——25000张图像均匀分布在不同的类中(12500张狗图像和12500张猫图像)。它应该足够大,可以训练一个像样的图像分类器,但不能使用人工神经网络。唯一的问题是——它的结构不适合直接使用。你可以按照之前的文章创建一个适当的目录结构,并将其拆分为训练集、测试集和验证集:缩小、灰度化和展平图像让我们导入相关库。我们需要很多,需要安装Numpy、Pandas、TensorFlow、PIL和Scikit Learn:我们不能将图像直接传递到Dense层。单个图像是三维的——高度、宽度、颜色通道——而Dense层需要一维输入。让我们看一个例子。以下代码加载并显示训练集中的cat图像:src_img = Image.open('data/train/cat/1.jpg')display(src_img)图2——猫的图片示例图像宽281像素,高300像素,有三个颜色通道(np.array(src_img).shape)。总的来说,它有252900个像素,在展平时转化为252900个特征。让我们尽可能节省一些资源。如果有意义的话,你应该对你的图像数据集进行灰度化。如果你能对不以颜色显示的图像进行分类,那么神经网络也应该如此。可以使用以下代码段将图像转换为灰色:gray_img = ImageOps.grayscale(src_img)display(gray_img)图3:灰色猫图像显然,它仍然是一只猫,所以颜色在这个数据集中并没有起到很大作用。灰度图像宽281像素,高300像素,但只有一个颜色通道。这意味着我们从252,900 像素减少到84,300 像素。仍然很多,但肯定是朝着正确的方向迈出了一步。数据集中的图像大小不同。这对于神经网络模型来说是个问题,因为它每次都需要相同数量的输入特征。我们可以将每个图像调整为相同的宽度和高度,以进一步减少输入特征的数量。下面的代码片段调整了图像的大小,使其既宽又高96像素:gray_resized_img = gray_img.resize(size=(96, 96))display(gray_resized_img)图4:调整大小的猫图片当然,图像有点小而且模糊,但它仍然是一只猫。但是我们的特征减少到9216个,相当于将特征的数量减少了27倍。作为最后一步,我们需要将图像展平。你可以使用Numpy中的ravel函数来执行此操作:np.ravel(gray_resized_img)图5:扁平猫图片计算机就是这样看待猫的——它只是一个9216像素的数组,范围从0到255。问题是——神经网络更喜欢0到1之间的范围。我们将整个数组除以255.0即可:img_final = np.ravel(gray_resized_img) / 255.0img_final图6-扁平和缩放的猫图像作为最后一步,我们将编写一个process_image函数,将上述所有转换应用于单个图像:让我们在随机的狗图像上进行测试,然后反转最后一步,以直观地表示图像:tst_img = process_image(img_path='data/validation/dog/10012.jpg')Image.fromarray(np.uint8(tst_img * 255).reshape((96, 96)))图7:经过变换的狗形象就这样,这个函数就像字面意思。接下来,我们将其应用于整个数据集。将图像转换为表格数据进行深度学习我们将编写另一个函数——process_folder——它迭代给定的文件夹,并在任何JPG文件上使用process_image函数。然后,它将所有图像合并到一个数据帧中,并添加一个类作为附加列(猫或狗):让我们将其应用于训练、测试和验证文件夹。每个文件夹需要调用两次,一次用于猫,一次用于狗,然后连接集合。我们还将把数据集转储到pickle文件中:下面是训练集的样子:# Training settrain_cat = process_folder(folder=pathlib.Path.cwd().joinpath('data/train/cat'))train_dog = process_folder(folder=pathlib.Path.cwd().joinpath('data/train/dog'))train_set = pd.concat([train_cat, train_dog], axis=0)with open('train_set.pkl', 'wb') as f:   pickle.dump(train_set, f)# Test settest_cat = process_folder(folder=pathlib.Path.cwd().joinpath('data/test/cat'))test_dog = process_folder(folder=pathlib.Path.cwd().joinpath('data/test/dog'))test_set = pd.concat([test_cat, test_dog], axis=0)with open('test_set.pkl', 'wb') as f:   pickle.dump(test_set, f)# Validation set valid_cat = process_folder(folder=pathlib.Path.cwd().joinpath('data/validation/cat'))valid_dog = process_folder(folder=pathlib.Path.cwd().joinpath('data/validation/dog'))valid_set = pd.concat([valid_cat, valid_dog], axis=0)with open('valid_set.pkl', 'wb') as f:   pickle.dump(valid_set, f)图8——训练集数据集包含所有猫的图像,然后是所有狗的图像。这对于训练集和验证集来说并不理想,因为神经网络会按照这个顺序看到它们。你可以使用Scikit Learn中的随机函数来随机排序:train_set = shuffle(train_set).reset_index(drop=True)valid_set = shuffle(valid_set).reset_index(drop=True)下面是它现在的样子:图9——随机后的训练集下一步是将特征与目标分离。我们将对所有三个子集进行拆分:X_train = train_set.drop('class', axis=1)y_train = train_set['class']X_valid = valid_set.drop('class', axis=1)y_valid = valid_set['class']X_test = test_set.drop('class', axis=1)y_test = test_set['class']最后,使用数字编码目标变量。有两个不同的类(cat和dog),因此每个实例的目标变量应该包含两个元素。例如,使用factorize函数进行编码:y_train.factorize()图10-factorize函数标签被转换成整数——猫为0,狗为1。你可以使用TensorFlow中的to_category函数,并传入factorize后的数组,以及不同类的数量(2):y_train = tf.keras.utils.to_categorical(y_train.factorize()[0], num_classes=2)y_valid = tf.keras.utils.to_categorical(y_valid.factorize()[0], num_classes=2)y_test = tf.keras.utils.to_categorical(y_test.factorize()[0], num_classes=2)因此,y_train现在看起来是这样的:图11——目标变量从概率的角度考虑——第一张图片有100%的几率是猫,0%的几率是狗。这些都是真实的标签,所以概率可以是0或1。我们现在终于有了训练神经网络模型所需的一切。用人工神经网络(ANN)训练图像分类模型我随机选择了层的数量和每层的节点数量,以下2部分不能更改:· 输出层——它需要两个节点,因为我们有两个不同的类。我们不能再使用sigmoid激活函数了,所以选择softmax。· 损失函数——我们使用分类交叉熵。其他部分可以随意更改:以下是我在100个epoch后得到的结果:图12:100个epoch后的ANN结果60%的准确率比猜测稍微好一点,但性能一般。尽管如此,我们还是来检查一下训练期间指标发生了什么变化。以下代码片段绘制了100个epoch中每个epoch的训练损失与验证损失:plt.plot(np.arange(1, 101), history.history['loss'], label='Training Loss')plt.plot(np.arange(1, 101), history.history['val_loss'], label='Validation Loss')plt.title('Training vs. Validation Loss', size=20)plt.xlabel('Epoch', size=14)plt.legend();图13:训练损失与验证损失该模型能很好地学习训练数据,但不能推广。随着我们对模型进行更多epoch的训练,验证损失继续增加,这表明模型不稳定且不可用。让我们看看准确度:plt.plot(np.arange(1, 101), history.history['accuracy'], label='Training Accuracy')plt.plot(np.arange(1, 101), history.history['val_accuracy'], label='Validation Accuracy')plt.title('Training vs. Validation Accuracy', size=20)plt.xlabel('Epoch', size=14)plt.legend();图14:训练准确度与验证准确度类似的图片。验证精度稳定在60%左右,而模型对训练数据的拟合度过高。对于一个包含20K训练图像的两类数据集,60%的准确率几乎是它所能达到的最差水平。原因很简单——Dense层的设计并不是为了捕捉二维图像数据的复杂性。结论现在你知道了——如何用人工神经网络训练一个图像分类模型,以及为什么你不应该这么做。这就像穿着人字拖爬山——也许你能做到,但最好不要。       原文标题 : 人工神经网络训练图像分类器
  • [基础知识] 【MindSpore易点通】深度学习系列-卷积神经网络
    小Mi前天一不留意瞄了眼公众号,发现竟然已经有了YOLOv7,顿时感觉自己落后的不是一星半点,印象中还是YOLOv5来着,怎么大伙的科研速度跟火箭有的一拼?吓得小Mi赶紧补功课。废话不多说(是不是还是熟悉的配方),今天开始先跟大家从CNN开始复习吧~鼻祖来了好了,首先详细解释下,为什么要先从CNN 开始复习呢?因为我们常见的很多网络,比如LeNet、Alexnet、VGG、RCNN、Fast RCNN、Faster RCNN、YOLO、YOLOv2、SSD等等这些网络模型的鼻祖就是CNN,只不过后面的各个儿子孙子如神仙打架一般,在各自的领域发挥着自身的优势,比如Lenet、Alexnet、Googlenet、VGG主要面向图像分类任务,RCNN、fastRCNN、fasterRCNN等作为目标检测任务的算法,而YOLO、SSD、YOLOv2又是不同于RCNN系列的另一类目标检测算法。所以是不是鼻祖很重要呢!(鼻祖的创始人Yann LeCun是第一个通过卷积神经网络在MNIST数据集上解决手写数字问题的人。)网络结构在这之前,小Mi已经在之前的深度学习系列中对深度神经网络有过简单的介绍(https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=171590),卷积神经网络结构包括:输入层Input layer、卷积层Convolution Layer、池化层Pooling layer、全连接层Full connection Layer和输出层Output Layer。输入层该层要做的处理主要是对原始图像数据进行预处理,比如去均值、归一化、PCA降维等等。卷积层好啦,为什么我们这个网络要叫卷积神经网络呢?那么重点就来了。首先让我们以最常见的二维卷积层为例,看下卷积层是如何工作的吧~在二维卷积层中,一个二维输入数组和一个二维核(kernel)数组通过互相关运算输出一个二维数组。如图所示,输⼊是一个3×3的二维数组,卷积核是一个2×2的二维数组。二维互相关运算输出结果中数字19的计算公式为:0×0+1×1+3×2+4×3=19在二维互相关运算中,卷积窗口从输⼊数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当卷积窗口滑动到某一位置时,窗口中的输入子数组与核数组按元素相乘并求和,得到输出数组中相应位置的元素。那么剩下的三个元素计算公式为:1×0+2×1+4×2+5×3=25,3×0+4×1+6×2+7×3=37,4×0+5×1+7×2+8×3=43。二维卷积层输出的二维数组可以看作是输入在空间维度(宽和高)上某⼀级的表征,也叫特征图(feature map)。影响元素x的前向计算的所有可能输入区域(可能大于输入的实际尺寸)叫做x的感受野(receptive field)。以上图为例,输入中阴影部分的四个元素是输出中阴影部分元素的感受野。将输出记为Y,如果Y与另一个形状为2×2的核数组做互相关运算,输出单个元素 z。那么,z在Y上的感受野包括Y的全部四个元素,在输入上的感受野包括其中全部9个元素。可见,可以通过更深的卷积神经网络使特征图中单个元素的感受野变得更加⼴阔,从而捕捉输入上更大尺寸的特征。因此卷积层的输出形状由输入形状和卷积核窗口形状决定,其中最重要的两个超参数便是填充和步幅了。填充(padding)是指在输入高和宽的两侧填充元素(通常是为0)。下图中在原输入高和宽的两侧分别添加了0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。在输入的高和宽两侧分别填充了0元素的二维互相关计算而卷积窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动,每次滑动的行数和列数就叫做步幅(stride)。在高和宽两个方向上步幅均为1,当然也可以使用更大步幅。比如下图就展示了在高上步幅为3、在宽上步幅为2的二维互相关运算。可以看到,输出第一列第二个元素时,卷积窗口向下滑动了三行。而在输出第一行第二个元素时卷积窗口向右滑动了两列。当卷积窗口在输入上再向右滑动两列时,由于输入元素无法填满窗口,无结果输出。高和宽上步幅分别为3和2的二维互相关运算其实通过各种实验最终我们可以发现,填充可以增加输出的高和宽,可以使得输出与输入具有相同的高和宽,而步幅可以减小输出的高和宽,例如输出的高和宽仅为输入的高和宽的1/n(n为大于1的整数)。当然啦,为什么我们一直强调是二维卷积层呢?输出的结果肯定也会与输入的数组维度有关啦,大家可以自行研究下~池化层池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性。不同于卷积层里计算输入和核的互相关性,池化层直接计算池化窗口内元素的最大值或者平均值。在最大池化中,池化窗口从输⼊数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当池化窗口滑动到某⼀位置时,窗口中的输入子数组的最大值即输出数组中相应位置的元素。池化窗口形状为2×2的最大池化阴影部分为第⼀个输出元素及其计算所使用的输入元素:max(0, 1, 3, 4) = 4剩下三个元素分别为:max(1, 2, 4, 5) = 5,max(3, 4, 6, 7) = 7,max(4, 5, 7, 8) = 8.那么平均池化的共作原理也就很好理解咯。因此池化操作就是图像的resize,就好比一张狗的图像被缩小了一倍我们还能认出狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征;同时还进行了特征降维,去除了很多无用或重复信息,并在一定程度上防止过拟合,更方便优化。全连接层这里的全连接与我们之前讲到的全连接并没有任何差异,经过池化层处理得到的结果中的所有元素都有权重连接:其中,x1、x2、x3为全连接层的输入,a1、a2、a3为输出,总结当然啦,今天跟大家分享的卷积神经网络都是从最简单的方面逐步介绍的,既然是深度学习网络系列,我们平常遇到的网络可不是只有几个二维数组,一两个卷积层那么简单,CNN在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。希望大家在我的基础上,继续学习开始跟大家提到的各种“子孙”网络吧(LeNet、Alexnet、VGG、RCNN、YOLO等等等等)!
  • [行业资讯] 移动物联网卡如何办理激活使用?
    移动物联卡是移动运营商面向企业提供物联网通讯接入服务,可提供数据传输上网功能、短信基础服务等,采用三网专用号段和独立网元为终端设备提供支持,移动物联卡的外观和手机SIM卡的外观没有太大的区别。移动物联卡又可以分为工业级物联卡和普通型物联卡。一、移动物联网卡和手机SIM卡有什么不同?工业级移动物联网卡可以适应特殊环境,因为物联网智能设备的使用环境不同,有的常年在室外,芯片硬件和制作材料以及封装工艺是要高于普通SIM卡的。移动物联卡和手机SIM卡的号码不同,移动物联卡使用的是13位号码,号码资源丰富,而普通的手机SIM卡使用的是11位号码。两者的特性不同,物联卡的使用需要物联卡平台管理,在物联卡平台管理可以进行流量查询、设备是否在线、流量充值等功能,普通手机SIM卡只需要在手机端充值查询即可。二、移动物联网卡的应用场景有哪些?移动物联卡目前主要应用于安防监控(电梯监控、家用监控、楼宇监控、交通监控),车联网(北斗定位、车载监控、GPS导航、智能后视镜),智能安防(烟雾报警器、烟感器、智能水电表),智慧农业(智能喷灌、农业果园、智能大棚)等领域广泛应用。三、移动物联网卡怎么用?物联卡是面向集团企业和相关专业领域使用的,是一种属于“集团客户”范畴的套餐卡。个人用户在营业厅是无法办理集团客户套餐的,此外,运营商也有通过各渠道的物联卡供应商出售。运营商的物联网卡资费可以分为3个标准:全国统一的资费标准、地方区域的资费标准、集团客户的资费标准。在这3种标准当中,集团客户套餐的性价比往往是最高的。四、移动物联网卡如何办理激活使用?物联卡办理可以提前考察几家物联卡代理公司,对这几家公司进行综合衡量选择其中的一家合作,一是为了靠谱,二是可以综合报价给自己的企业做足保障。然后根据企业设备使用流量的情况订购合理的套餐,还可以向合作公司申请物联卡测试,当物联卡拿到后就可以直接插入设备自动激活。
  • [其他] 人工智能-语音交流
    第一个基于电子计算语音识别统出现在1952年,AT&T贝尔实验室开发了一款Audrey的语音识别系统,能够识别10个英文数字,正确率高达98%。 70年代开始出现了大规模的语音识别研究,但当时的技术还处于萌芽阶段,停留在对孤立词、小词汇量句子的识别上。 80年代是技术取得突破的时代,一个重要原因是**全球性的电传业务**积累了大量文本,这些文本可作为机读语料用于模型的训练和统计。研究的重点也逐渐转向大词汇量、非特定人的连续语音识别。那时最主要的变化来自用**基于统计的思路**替代传统的基于匹配的思路,其中的一个关键进展是隐马尔科夫模型(HMM)的理论和应用都趋于完善。工业界也出现了广泛的应用,德州仪器研发了名为Speak&Spell语音学习机,语音识别服务商SpeechWorks成立,美国国防部高级研究计划局(DARPA)也赞助支持了一系列语音相关的项目。 90年代是语音识别基本成熟的时期,主流的高斯混合模型GMM-HMM框架逐渐趋于稳定,但与实用还有一定距离,语音识别研究的进展也逐渐趋缓。由于80年代末90年代初神经网络技术的热潮,神经网络也被用于语音识别,提出了多层感知器一隐马尔科夫模型(MLP-HMM)混合模型。但是性能上无法超越GMMHMM框架。 突破的产生始于深度学习的出现。随着深度神经网络(DNN)被应用到语音的声学建模中,人们陆续在音素识别任务和大词汇量连续语音识别任务上取得突破。基于GMM-HMM的语音识别框架被基于DNN-HMM的语音识别系统所替代,而随着系统的持续改进,又出现了深层卷积神经网络和引人长短时记忆模块(LSTM)的循环神经网络(RNN),识别效果得到了进一步提升,在许多(尤其是近场)语音识别任务上达到了可以进人人们日常生活的标准。于是我们看到以Apple Siri为首的智能语音助手、以Echo为首的智能硬件人口等等。而这些应用的普及,又进一步扩充了语料资源的收集渠道,为语言和声学模型的训练储备了丰富的燃料,使得构建大规模通用语言模型和声学模型成为可能。
  • [其他] 图神经网络!打开企业盈利的下一个风口
    【转载】 华为云社区 作者: Chenyi --- 深度学习作为一个相对成熟的AI技术,在过去作为互联网红利的出口被广泛应用在工业级生产和企业的发展中,但随着数据量的指数级增加和规则型数据类型的限制,深度学习的业务场景拓展变得更加困难。于是,市场开始将目光放在了图神经网络(GNN)技术上。图神经网络能够做出更精准的预测,为每一位用户提供不同的个性化服务,实现精准化营销,这也是如今互联网企业进行二次转型的技术突破口。 **图神经网络的行业应用** 当前的主流深度学习还是CNN、RNN等技术(对应图像识别、文本挖掘等领域)。但传统深度学习技术(CNN、RNN)并不能有效的处理结构数据,如金融领域、基因蛋白质网络、社交网络、商品推荐等。如果深度学习想要拓展到更多的关系场景,在图数据上的高阶学习采用图神经网络(GNN)技术将会取得更佳的效果。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/21/1653137228869586398.png) **金融网络:** 金融行业的数据网络是由资金交易网络,社交关系网络,媒介网络等构成的天然数据网络。并且金融网络作为最有价值的图网络之一,图神经网络GNN能挖掘出数据中巨大的潜在价值。其中一个模块是对客户的筛选,金融用户的获客成本高达几百,但图神经网络能够给予拓扑信息进行特质提取挖掘出最有价值的潜在客户,深层挖掘客户潜在需求,帮助金融业务提升效率、提高盈利。另一模块是风险控制:金融行业内部存在大量风控需求,如反洗钱、防身份欺诈、防车险骗保、防金融欺诈、信用卡伪造交易套现等等。图神经网络的拓展性和线上预测能力能够根据资金交易关系网络构建动态图模型,发现个体或群体的异常交易行为,对金融业务中的每一笔业务进行风险预测。 **社交网络:** 社交网络是另一个典型的天然图网络,根据六度空间理论,我们的社交网络存在高度重合性。利用图表征学习和图嵌入技术,图神经网络可以在社交网络和电商领域等深度网络结构场景中,构建监督或者半监督框架进行关系挖掘和高匹配度推荐操作,挖掘更多的关系,深层次的发现用户的兴趣,精确用户的属性,为用户提供多样性的服务。现实场景下提高用户精准度意味着可以改变过去传统的高投放的营销方式,极大降低获客成本。图神经网络对于社交网络的应用并不仅限于对于用户(点)的挖掘,还可以对信息的传播方式进行舆情分析,意见领袖(KOL)的挖掘等等。 **知识图谱:** 知识图谱作为图神经网络的应用比起技术本身它的场景更为人所熟知。生活中有很多场景都有知识图谱的身影,如语义搜索引擎,智能客服,生活小助手等。由图神经网络构建的知识图谱可以提供视频/直播字幕、内容审核、智能客服,保险赔付,医疗图谱、知识消岐等服务。借助知识图谱还可以将专属的行业知识定制成图网络,为行业信息进行分析,帮助企业进行转型升级。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/21/1653137252433930777.png) **基因网络:** 蛋白质的结构和相互作用关系是一个规则性很强的图网络,整体的蛋白质网络异常复杂,节点数量和边数量非常大,借助图神经网络GNN可以对基因蛋白质网络进行深度挖掘。利用蛋白质的相互作用信息,构建蛋白质相互作用网络、基因共表达网路推断蛋白质结构,从_基因_序列中预测_蛋白质_的属性,量化蛋白质和肿瘤异质性。 此外,除了典型的图结构网络,图神经网络还可以用于组织分析,企业投资等等拥有潜在关系的应用场景。通过图的可视化和基本指标来分析组织结构,如HR可以根据人力资源图来判断公司发展处于哪个阶段、结构是否健康、资源倾斜在哪个业务线,分析人力交叉情况、信息流通成本等。 未来,人工智能的运作将会更加接近人脑,图神经网络的出现使人工智能开始理解世界,认识世界,而不再只是进行统计拟合。如何让图深度学习充分挖掘其应用价值实现高维稀疏数据的应用场景落地,将是在接下来的十年中,同质化的企业进行重新洗牌的关键。 **以华为云图神经网络为例,解析图深度学习落地的实践** 2019年9月20日华为云全联接大会上,华为云重磅发布一站式AI开发管理平台ModelArts2.0。宣布华为云在图深度学习领域做出突破,华为云图神经网络正式落地。 此次ModelArts2.0发布的十余项新特性及服务,包含智能数据筛选、智能数据标注、智能数据分析、多元模型自动搜索、ModelArts SDK、图神经网络、强化学习、模型评估/诊断、模型压缩/转换、自动难例发现、在线学习等,覆盖了AI模型的全生命周期。可以看得出来,华为云ModelArts在下一盘很大的棋,图神经网络的落地是ModelArts在深度学习领域实现因果推理的一次突破,也是实现自动化AI能力必不可少的一环。 目前图深度学习依旧是AI领域最前沿的技术之一,想要设计出符合工业生产标准和企业应用的图深度学习服务仍有许多需要克服的问题。华为云图神经网络已经率先做出突破,并在一站式AI开发管理平台ModelArts完成落地。通过这个项目我们能看到更多图深度学习领域在落地过程中需要解决的问题以及实现的思路。 华为云图神经网络是GES图引擎与ModelArts联手打造的新型图神经网络技术,通过采用分布式图计算平台和深度学习计算平台并行的方式构建新的架构以此来实现大规模图神经网络分析能力。华为云图神经网络的架构师表示华为云图神经网络(GNN)框架设计原则是:职责分明,架构归一。对单个算法,将数据预处理、领域采样等稀疏处理操作下压到图引擎;深度学习层则专注于算子的优化,多种GNN算法框架统一化,复用统一的算子。 **图神经网络的发展难题** 华为云图神经网络(GNN)在漫长的开发过程中遇到了许多瓶颈,传统的深度学习框架对非规则数据考虑欠周,不会提供原生的图数据的支持,图数据访问中数据局部性差并且对延时敏感。而目前开源的GNN算法(多由学术界论文作者提供)大多是单点且零散的,尽管在TF、Pytorch等深度学习框架中能够实现各种GNN算法,但是效率通常比较低下,真正用于训练的计算时间仅占20%~40%,远低于传统深度学习训练过程中的耗时比;大量时间消耗在数据局部采样、负样本采集等IO密集的操作上。在图规模大时尤为如此,在大规模图训练时,大部分图深度学习框架的耗时非常严重,完全达不到能实际应用到工业生产中的水平。企业级图深度学习的计算中,图的规模将会根据业务需求达到百亿甚至千亿的规模,因此,一个成熟的图深度学习将会把超大规模的图网络的计算交给独立的分布式图计算平台。 **分布式图计算平台进行大规模图网络处理** 当前大部分图神经网络框架都是在处理静态图,这是由于大多数框架是把图神经网络算法当做离线计算任务来对待的,离线计算的数据是不变的(静态),对于每次计算,都需要将完整数据加载一遍,因此不适合处理动态图。但是图数据本身却往往是变化的(动态),算法在运行过程中需要不断的对图进行遍历,然后将图数据从内存中调用给深度学习进行建模,然后还要在建模过程中进行不断的回传,这个问题在小图上不是很明显,但是在亿级图网络中,就会变成严重的性能问题,并且遍历的时间将会呈指数级上升,甚至造成宕机。华为在动态图方面的主张是,采用自研GES图引擎来维护图数据,保证数据可以动态增删改。同时在一份数据上,执行多种不同的算法,无需重复加载数据;尤其是对于大规模图来说,能明显节省端到端时间。目前动态图的处理仍有可优化的地方,比如动态图上的数据更改可以当做是增量数据,最佳做法是设计增量算法来对增量数据进行分析,而不是对全量数据进行邻域采样、随机游走、求梯度等操作。对于增量的图神经网络算法的研究还比较前沿,尚未形成完备理论。 GES图引擎目前拥有20多种图场景算法和大量的图优化算法,性能上能将亿级图查询在秒级计算完成。在图算法上GES图引擎根据工业和企业需求,集成实现PageRank等二十多种常用算法,应用场景覆盖城市工业生产、管道监控、商品推荐、社交推荐、项目分析、企业洞察、知识图谱、金融风险管控、企业IT应用、关系挖掘等多项领域,并支持点查、边查、属性过滤等基本查询将查询存储等功能。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/21/1653137272530162496.png) 以Pixie算法为例,Pixie算法是华为云尝试了将多元数据构建到同一张图,并在这个异构图上配置相应的schema、点边属性、权重而设计的算法。Pixie算法是一种全新的实时推荐算法,克服了异构图的数据获取和融合问题,支持多请求节点下综合推荐,能满足各种复合型、时变、多样性推荐场景需求;大数据量下,无需预先训练模型,就能适应数据的动态变化,达到较好的实时推荐效果,可扩展性很强。 **新框架解决图算法与深度学习的高频交互问题** 基于原生图引擎提升数据处理的效率和统一的算法框架,是当前图神经网络平台研发的重难点,而图数据的遍历以及与深度学习的交互会导致图的运算效率大大降低,这也是图深度学习一直无法落地的瓶颈之一。 因此,如果图深度学习想要在性能上有所突破就需要重新设计一个新的GNN框架,以下是AI前线授权得到的华为云图神经网络框架图。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/21/1653137285176453702.png) 图1:基于图引擎的GNN新框架 (1)基于图引擎的GNN新框架:在ModelArts中的高效神经网络训练算子的基础上,结合GES既有的高性能图计算框架平台能力,利用图引擎高并发、低延时的特点,将GNN的训练过程高度并行化,如将边上的跳转概率估计、顶点邻域采样、负样本构建等等,都化解为每个顶点的局部操作;系统提供了动态调度器,让这些局部操作可高度并行化执行,就能极大提升系统的总体吞吐量。 (2)多种GNN算法框架统一化:使用统一架构实现了非监督的大规模图嵌入(例如DeepWalk, Node2Vec)和半监督的图卷积(例如GCN, GraphSage)等多类GNN算法,降低了系统的维护成本。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/21/1653137295823437442.png) 图2: 基于统一GNN架构的图嵌入与图卷积计算示意 (3)GNN与图数据管理一体化:企业级GNN应用通常都不会是一次性计算,而且数据规模也很大,因此这些数据必须要被维护和管理起来。而现有的GNN通常不具这样的考量,用户只能另建数据库维护,计算的时候再把数据整体导出。不仅资源消耗大,也引入数据一致性等诸多问题。而GES采用属性图数据模型(Property Graph)和生态兼容的事实标准Gremlin图查询语言进行分布式图数据管理和维护,需要训练的时候则在图引擎内本地调用(in situ)各类算子,并发执行,降低了端到端的性能损耗。 研发人员在相同平台上对比了本产品与多个开源版本在数据预处理、各类采样方式下的实验表现(来自华为云内部数据): ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/21/1653137307325401543.png) 图3: (上)相同平台上与开源版本在数据预处理、各类采样方式下的性能对比;(下)系统可扩展性测试结果 华为云图神经网络借助ModelArts的高效神经网络训练优势,以及GES的高性能图计算优势,大幅度提升了GNN的总体计算效率,以node2vec算法为例,在PPI数据集上,华为云图神经网络从采样到训练可在2min内完成,较传统开源实现提升20倍。 **精度和资源的权衡** 在图神经网络模型的精度方面,华为云图神经网络通过设置参数调节模型精度,并使用CPU或者GPU来训练图神经网络算法,由于图数据的特殊性,通常情况下,对于大多数类型的数据,CPU训练的性能和效果并不逊于GPU。同时针对图嵌入和图卷积两大类算法,华为云图神经网络采用了不同的优化方式来降低资源占用率,提高计算性能,图嵌入类算法利用并行加速和存储设计进行正采样和负采样的优化;图卷积部分则由于其复杂度高的是layer和layer之间的数学变化,着重优化加速矩阵。华为云方面在未来还会考虑基于自己的人工智能芯片从混合硬件架构进一步提升图神经网络的计算性能。 华为云图神经网络模型的生命周期管理则依托华为云一站式AI开发管理平台ModelArts,训练的模型可以一键部署,且整个数据-算法-模型-推理的生命周期可以通过平台提供的溯源图查看。 目前,业界要实现大规模的图神经网络应用还需要一段时间,但华为云图神经网络的落地为后续开发者提供了可供参考的理论经验和社交,金融,基因,图像语义等多关系场景的实践基础,目前华为云图神经网络已在全球机器学习与数据挖掘类学术会议上发表多篇论文,并获得2019中国人工智能峰会“紫金龙蟠奖”。 图神经网络是人工智能实现真正智能化的一步,也是人工智能开始解决深度学习难以处理的关系数据的开端。从现在开始人工智能够认识并学习世界的复杂关系,相信接下来它会以更多姿态出现在我们的生活中。
  • [其他] 基于注意力超图网络的交互协同聚类
    作者:北邮 GAMMA Lab 博士生  杨天持题目:Co-clustering Interactions via Attentive Hypergraph Neural Network会议:SIGIR2022论文链接:http://shichuan.org/doc/137.pdf代码链接:https://github.com/ytc272098215/CIAH1. 引言在社交媒体飞速发展、复杂网络激增的时代,各行各业的交互数据越来越多,比如推荐系统中的用户-商品交互网络、学术领域中的论文引文网络等。交互可以看作是发生在多个对象之间的动作。因此,研究人员通常会将对象及其中的成对关系建模为图里的节点和边 。 聚类作为一种最基本的数据挖掘任务,交互数据上的聚类(即图上的聚类)可以揭示有价值的交互聚类模式,从而作为下游任务的先验知识。早期的研究通常使用图表示方法只编码结构信息然后对对象进行聚类。然后,为了考虑属性的增益,研究人员基于属性图来探索结合结构信息和属性信息的优势以获得更好的聚类性能。最近,逐渐有研究进一步开发了异质图方法,通过进一步考虑节点或边的不同类型来更准确地对交互进行建模和编码。除了聚类的性能,聚类结果的可释性可以帮助理解模型决策背后的原因,因此也是一个重要的问题 。具体地,大多数方法试图选择重要且简洁的属性来作为聚类结果的解释。 尽管交互数据的聚类已经得到了广泛的探索,但实际中的交互数据仍然要更加复杂得多。在实际应用中,一个完整交互通常会包含多个带有属性的交互对象和如时空上下文的交互环境。例如,在电子购物领域中,如上图所示,一个完整交互包括但不限于"什么人在什么情况下在哪个商店购买了什么商品"。此外,完整交互的每一个部分对于发现交互模式都很必要。如上图上半部分所示,白领为了高效工作经常在下午点咖啡。如果我们忽略这种时间上下文中"下午"的条件,可能会得出一种片面的模式,从而可能导致在午夜向其推荐咖啡,而这违反了常识。然而,现有的聚类方法仅对真实交互中的部分信息进行了建模和利用,即要么将整个交互分解为了若干个成对的子交互以进行简化,要么只专注于对某些特定类型的交互对象进行聚类,而不是针对完整交互。因此,现有的聚类方法无法全面表征和利用完整交互过程中的信息。此外,从完整交互中选择出重要属性也可对聚类结果作出更准确的解释。相反,基于交互的不完整的建模,则可能会遗漏一些有助于解释的关键信息,例如上例中的"下午"。但是到目前为止,很少有人尝试探索完整交互中的丰富属性以进行聚类解释。在本文中,我们将首次尝试对完整交互进行聚类,而不是对传统聚类方法中的简单交互。它还可以进一步通过从完整交互的任一部分中选择出关键的属性,以此作为聚类结果的解释。但由于以下挑战,这并不是一项简单的任务:(1)如何有效地对完整交互进行建模和编码?每个完整交互都涉及了不确定个数带有属性的交互对象和交互环境以及多个对象之间的交互关系。因此,使用前文提到的图方法是不足以对这种完整交互进行建模和编码的。(2)如何从完整交互中选择出可解释的关键属性?使用注意力机制来选择属性是一种常见的解决方案。然而它在解释性能力上备受质疑,因为注意力权重有时会与属性的真正重要性不一致,尤其是在面对完整交互中的丰富属性时。(3)如何同时提高对完整交互的聚类性能和可解释性?如先前工作中所研究的,在注意力机制中,聚类与属性选择的分布之间没有严格的相关性,这将导致损害聚类的性能。 为了解决上述问题,我们提出通过注意力超图神经网络对完整交互进行协同聚类。具体地,为了对完整交互进行建模,我们首先构建了一个超图,其中由于超边可以连接任意数量的节点,因此超边非常适用于表示完整交互。然后,我们提出了一个注意力超图神经网络来显式地学习完整交互(超边)的表示,其中我们采用注意力机制来选择出重要的属性以作为聚类结果的解释。为了解决注意力权重和真实重要性之间的不一致问题,由于显著性方法在计算机视觉领域中通常被认为是重要性的真实标准,因此受显著性方法的启发,我们提出了基于显著性的一致性来使属性选择(即注意力权重)的分布与显著性方法给出的重要性保持一致。此外,为了确保类簇和属性选择分布之间的对应关系,受现有工作启发,我们提出了基于聚类的一致性:属于同一类簇内的完整交互应具有相似的属性选择分布,而不同类簇中的属性选择分布应不同。为此,我们提出了一种新颖的协同聚类方法,它对完整交互的表示和相应的属性选择分布进行协同聚类,从而提高聚类的性能和可解释性。综上所述,本文的主要贡献可归纳如下:据我们所知,这是对完整交互进行聚类的首次尝试,这可以从复杂的交互数据中发现更全面和可解释性更强的聚类模式。为此,我们为完整交互提出了一种基于注意力超图神经网络的协同聚类方法,称为CIAH。通过超图建模完整交互后,我们设计了一个注意力超图神经网络,以及一个具有基于显著性和基于聚类的一致性的新颖协同聚类方法。大量实验证明了我们的方法在完整交互的聚类上的有效性。此外,离线和在线的推荐实验也验证了其在下游应用中的实用价值。2. 方法在本节中,我们为完整交互提出了一种新颖的基于超图的协同聚类方法。如上所示,我们首先构建一个超图来对完整交互进行建模,其中每个完整交互都表示为连接所有相关对象的超边。然后我们设计了一个注意力超图神经网络来显式地学习完整交互(超边)的表示,同时我们通过注意力机制来选择相关的关键属性以作为聚类结果的解释。此外,我们还提出了一种基于显著性的一致性,即通过显著性方法使属性选择的分布与属性的真实重要性保持一致,我们将引入积分梯度方法来知道注意力。最后,我们提出了一种新颖的协同聚类方法,对完整交互和相应的属性选择分布进行协同聚类,以实现基于聚类的一致性。
  • [技术干货] 【论文分享】基于IR-VGG的多分类皮fu病实时诊断
    基于IR-VGG的多分类皮fu病实时诊断谈玲1, 荣杉山1, 夏景明2, SajibSarker2, 马雯杰11 南京信息工程大学计算机与软件学院,江苏 南京 2100442 南京信息工程大学人工智能学院,江苏 南京 2100443 南京信息工程大学雷丁学院,江苏 南京 210044摘要恶性的皮肤病变在早期阶段的治愈率极高,基于深度学习的皮肤病诊断研究近年来受到持续关注,其诊断准确率较高,然而计算资源消耗大,且依赖于医院大型计算设备。为在物联网移动设备上实现快速准确皮肤病诊断,提出一种基于IR-VGG(inverted residual visual geometry group)的多分类皮肤病实时诊断系统,使用轮廓检测算法分割出皮肤病图像病灶区域,并用反转残差块替换 VGG16 第一层卷积块以降低网络参数权重和内存开销;将原图像和分割后的病灶图像输入IR-VGG网络,通过全局和局部特征提取后,输出皮肤病诊断结果。实验结果表明,IR-VGG网络结构在SkinData-1和SkinData-2皮肤病数据集上的准确率分别可达到94.71%和85.28%,并且可以有效降低复杂度,使诊断系统较容易在物联网移动设备上进行皮肤病实时诊断。关键词: 皮肤病 ; 边缘检测分割 ; 反转残差块 ; 深度学习 ; 物联网移动设备1 引言皮肤恶性病变大概率会发生癌变。早期诊断和治疗癌前皮肤病变可以较好地预防癌症的发生。世界卫生组织(WHO, World Health Organization)的统计数据表明,全球每年发生200万至300万例非黑色素瘤皮肤癌和132万例黑色素瘤皮肤癌[1-2]。一般来说,皮肤病变的诊断需要经验丰富的皮肤科专家对病变图像进行细致的人工检查。随着物联网的发展,人体传感器网络、人工智能、云计算和无线网络通信让认知医疗服务、远程健康监控、健康指导和反馈可以通过多种传感器进行数据融合帮助实现。本文提出一种基于计算机视觉技术的皮肤病实时诊断系统,该系统资源消耗较少,便于移植到移动设备上,患者可通过手机等智能设备实现皮肤病初诊,从而为皮肤病患者提供快捷可靠的物联网化公共医疗服务奠定了基础。传统的病灶检测方法主要靠人工的ABCDE规则(不对称、边界、颜色、皮镜结构和进化)[3]、3点检查表[4]、7 点检查表[5]、Menzies方法[6]和CASH (颜色、建筑、对称、均匀)[7]特征等方法进行特征提取。近年来,计算机视觉在物联网医疗服务和医学影像智能诊断中开始获得应用。其自主检测病变的优势减少了对皮肤科医生的依赖。基于图像处理的皮肤病诊断包括:图像输入、病灶点特征提取和特征分类3部分。目前许多算法提出了自动皮镜图像分析。文献[8,9,10,11]全面总结了过去几十年的相关工作。总的来说,用计算机辅助分析模型通常包括以下4个步骤:1) 图像预处理,如去除毛发[12,13,14]和图像增强[15-16];2) 边界检测或分割[17];3) 特征提取,即颜色、纹理、边界梯度、形状相关描述符[17-19];4) 分类,如k-近邻(KNN, k-nearest neighbor)分类算法[18]、支持向量机(SVM, support vector machine)[17], AdaBoost分类器[20]等。现有的研究大多是进行特征提取工程和分类,并且假设输入图像中包含一个完整的、大小合适的病灶图像[19]。但是皮肤镜图像有时无法捕获整个病灶区域,或病灶区域只占图像的一小部分。一些研究建议使用BOF(bag-of-feature)图像检索算法在复杂情况下检测局部病变特征[20]。尽管BOF图像检索算法中的特征编码如基本直方图[21]、VLAD(vector of local aggregated descriptors)[22]特征方法和FV(fisher vector)[23]已经广泛应用于多图像分类任务中[24]。但是这种手动提取特征的方式只能有限提高分类性能,此外这些方法复杂烦琐的操作步骤使其不适用于临床实践。与手工提取特征不同,卷积神经网络(CNN, convolutional neural network)近来在图像识别领域中占据了主导地位[25,26,27,28]。卷积神经网络的主要优势在于其可靠的视觉表示能力,能对给定的训练数据集进行识别和检测[29],Jayalakshmi等[30]在卷积神经网络中加入批标准化操作,减小了模型的过拟合,在皮肤损伤图像的二分类中获得较好的分类效果,对国际皮肤影像协作组织(ISIC, International Skin Imaging Collaboration)的良性和恶性皮肤损伤的识别精度达到89.3%。胡海根等[31]通过掩盖的数据增强与深度卷积残差网络相结合的集成分类方法对黑色素瘤的诊断进行预测,通过随机和非随机掩盖的数据增强法增加了训练数据集的数量,但是对提取病灶区域的关键信息意义不大,精度为86.7%。Yu 等[32]提出用于分割的全卷积神经网络和用于分类的深度残差网络,识别精度达到85.5%。Mahbod等[33]通过多尺度、多网络集成的迁移学习对皮肤损伤分类,该方法分别以多个尺寸作为网络特征输入,由3个网络通道作为特征提取器,最后获得分类结果,该方法仅通过少量的皮肤损伤图片的训练便可得到较好的分类效果。李航等[34]通过迁移学习将预训练的 ResNet-152 的残差神经网络用来提取皮肤病变的深度卷积层特征,然后利用 SVM 对提取的黑色素瘤特征进行分类。Guha 等[35]使用自定义的卷积神经网络和 VGG16 进行迁移学习对多种皮肤疾病进行分类,与直接使用卷积神经网络架构相比,该方法识别准确率更高。Chen 等[36]在云服务器端进行自主的深度学习,构建了一个基于深度学习的全方位皮肤病识别系统。上述皮肤病分类模型虽然在准确率方面达到了较高水平,但其权重参数都非常大。上述模型也难以在高分辨率图像上达到实时的诊断速度,所以在计算资源和内存资源受限的移动设备上难以应用,也不适用于移动公共医疗服务。解决这一问题不仅要保证皮肤病诊断的准确率,还需要减少计算资源消耗,加快计算速率,这对皮肤病诊断模型提出了极高的要求。为此本文设计了一个可以在移动端设备上运行的基于IR-VGG 的多分类皮肤病实时诊断系统,本文主要贡献如下。1) 对皮肤病图片进行轮廓检测和分割,筛除图片噪声。2) 将分割后的图片和原图片同时输入特征提取器,分别提取病灶区域局部特征和皮肤病图像的全局特征,以此提升诊断模型的精准性和鲁棒性。3) 提出IR-VGG,利用反转残差块在特征提取初期减少网络参数量,保留大量特征信息。4) 使用 TensorFlow Lite 框架将皮肤病分类模型移植到Android系统的移动设备上运行。本文所提出的皮肤病诊断系统结合边缘检测分割算法和IR-VGG网络结构,一方面,通过提取全局和局部特征进行分析,提高诊断模型在皮肤疾病分类中的性能,降低医疗诊断的误诊概率;另一方面,引入反转残差块改进 VGG16 网络结构,降低诊断模型的算法复杂度,保证医疗服务在移动设备上运行的实时性。2 结束语为解决传统皮肤病诊断计算资源消耗大、实时性差的问题,提高公共医疗服务质量,实现数据共享互联的物联网医疗服务体系,本文提出一种基于IR-VGG 的多分类皮肤病实时诊断系统。在传统的VGG16分类算法中,引入反转残差块、边缘检测分割、全局和局部特征提取,不仅实现了皮肤病诊断准确率的提升,而且其网络的参数量比 VGG16 降低了90%。在数据集SkinData-1、SkinData-2上进行的实验结果表明,本文所提模型的准确率分别为94.71%、85.28%,比VGG16提升了9.69%、5.61%,而本文模型所消耗的计算资源仅为VGG16的1/10。表明本文模型在计算资源有限和实时性要求较高情况下,可以有效解决皮肤病实时诊断问题,为提高公共医疗服务质量提供了一种可行的解决方案。同时展望之后可以建立算力更充足的物联网计算基站,本文的计算设备作为边缘子节点,将采集的数据和初诊结果上传至物联网计算基站进行数据挖掘和分析,从而形成完备的物联网医疗服务体系。3 原文链接http://www.infocomm-journal.com/wlw/article/2021/2096-3750/2096-3750-5-3-00115.shtml
  • [其他] 基于图注意力机制和Transformer的异常检测
    异常检测对电力行业的发展有着重要的影响,如何根据大规模电力数据进行异常检测是重要的研究热点.目前,大多数研究通过聚类或神经网络进行异常检测. 但是这些方法忽略了时序数据之间潜在的关联关系及某些特点的重要信息,没有充分挖掘出数据的潜在价值. 因此,提出了一种基于图注意力和Transformer的异常检测模型. 该模型首先根据数据中台中获取的电力数据(主要包括用户ID、电能表ID、用户类型、电流、电压、功率等数据)构建一个异构信息网络;然后,为了减少模型参数和避免出现过拟合的现象,在图卷积网络(Graph Convolutional Network,GCN)模型的基础上,引入非负矩阵分解(Non-Negative Matrix Factorization,NNMF)的方法来进行相似性学习;最后采用图注意力网络(Graph Attention Network,GAT)和Transformer共同捕获数据间的相互关联关系,从而提高检测精度. 以中国某地区的电力数据为基础进行验证, 实验结果表明所提出的方法可以有效进行异常检测. http://www.ejournal.org.cn/CN/10.12263/DZXB.20211209 引言 异常检测指出从预期正常数据中检测出扭曲或偏 差的数据[1,3] ,这些数据通常被称为异常值 . 异常检测 已被用于许多重要领域,如视频监控、网络入侵检测、 信用欺诈检测、电力行业和医疗保健.  对于电力行业,随着电力系统信息化水平的提高, 各种电力设备和系统需要处理大量数据[4] . 然而,需要 处理的事件信息类型多样,难以从数据中提取有用信息[5] . 此外,由于各种通信故障[6] 、设备故障[7] 、电网波 动[8] 和用户行为异常等原因,出现了大量的异常数据 . 这些异常数据往往包含电网信息中的重要信息,对电 力数据的准确性和完整性有着重要影响. 因此,基于大 规模电力数据,研究异常检测算法,分析、识别、处理异 常信息,对电力行业挖掘事件信息和智能电网的分析 具有重要意义[9,10] . 目前,传统数据异常检测方法主要依靠数据专家、 业务专家等人力进行排查[11,12] . 随着各行业及各专业 数据化建设规模的逐渐扩大,依靠传统方法对海量、实 时、异构的数据异常检测方法渐显不足. 主要问题在于 人工成本大、时间周期长,依赖专家经验无法并发批量 工作,人工治理还会引发错漏现象等,无法快速、准确、 低成本地满足业务数据的使用需求;同时缺乏异构数 据环境下数据拓扑关系高效管理的手段,无法实现复 杂逻辑数据管理智能化及数据脉络关系可视化和清晰 化,与真正实现“追根溯源”式的数据核查理念还存在 一定的差距. 近年来,随着数据科学的进步以及人工智能技术 的发展,提出了一些基于数据挖掘和智能优化算法的 异常检测方法[13,14] . Wang 等人[13]采用不同的聚类算 法,根据电表收集的平均损失、线路损耗变化效率和电 流表开路记录来检测10个kV非技术损失,最后对各种 聚类算法的检测效果进行了分析和比较 . 基于异常用 户用电的差异行为特征和正常用户,Buzau等人[14] 使用 长期和短期的记忆网络和多层感知器混合的深度神经 网络来进行异常检测,它们比其他分类器具有更高的 精度. 针对考虑时序数据的关联性方面,Chahla等人[15] 提出了一种基于长短期记忆的异常检测方法,用于从 单变量时间序列数据中进行不和谐搜索,然后根据观 测的数据预测误差,最后通过统计策略进行异常检测. Barua等人[16] 提出了一个基于层次时空记忆(Hierarchi⁃ cal Temporal Memory,HTM)的新型神经认知启发架构, 用于利用微相位测量单元数据进行智能电网的实时异 常检测 . 其关键的技术思想是,HTM 学习连续数据的 稀疏性和关联性的时间表示,这对于实时的异常检测 非常有用 . Rouzbahani 等人[17] 提出了一种用于智能电 网ETD的集合深度卷积神经网络(EDCNN)算法. 该算 法首先采用随机下采样技术来处理不平衡数据,然后 利用深度卷积神经网络(DCNN)来挖掘数据之间的相 互依赖性,最后,通过嵌入一个投票机制来实现窃电检 测. 这些方法虽然取得了不错的检测效果,但是可能会 忽略掉特定用户的某些重要信息. 针对上述问题,本文提出了一种基于图注意力和 Transformer 的异常检测模型 . 该模型首先根据数据 中台中收集的电力数据构建一个异构信息网络;然 后采用图卷积网络(Graph Convdutional Netword,GCN) 和 非 负 矩 阵 分 解(Non-Negathe Matrix Factorization, NNMF)相结合的方法进行相似性分组;最后采用图注 意力机制和 Transformer 相结合的方式进行分组异常检测。
  • [新手课堂] 资讯|华为打通人才培养“最后一公里”,产教融合成效显著!
    5月17日,教育部举行“教育这十年”“1+1”系列发布采访活动的第二场新闻发布会,发布会主会场设在教育部,分会场设在陕西省和浙江大学。教育部新闻发布会首次采用媒体记者线上参会方式,全程“云发布”。 华为公司作为企业代表应邀出席发布会,华为技术有限公司高校科研与人才发展部部长曾伟胜介绍了华为参与产教融合人才培养的情况。以下为曾伟胜讲话全文各位媒体朋友,大家上午好!下面,我谨代表华为公司向各位介绍,十年来华为参与产教融合人才培养工作情况。十年间,作为一家高科技企业,我们强烈地感受到了中国高等教育在人才供给和人才素质方面得到了巨大提升。在教育主管部门和高校师生的共同努力下,大批计算机、电子信息、软件工程、人工智能、储能等学科专业方向的人才进入产业,他们积极拥抱产业、行业的变化,表现出对新技术和关键核心技术的渴望和追求,对岗位的适应性明显增强。随着经济向绿色、低碳及智能化发展,产业需要大批高质量的创新性人才,尤其是数字技术创新人才,中国的高等教育提供了源源不断的人力支撑。特别是这十年来,大量具备底层创新能力、掌握自主知识产权根技术的顶尖人才涌现,他们分布在各行各业,提高了产业链的长期竞争力、促进了企业的持续领先。“人才、科研投入和创新精神是华为能够赖以生存和发展的基础。”华为对人才特别是顶尖人才的需求量极大。仅过去两年,约有2.6万优秀的应届毕业生加入了华为,其中有超过300人是我们定义的“天才少年”,他们在关键的业务领域充分发挥作用,推动了技术理论、架构和软件的创新。我们始终相信:人才是构建华为公司未来持续竞争力的核心,优秀人才是华为事业长期发展的驱动器。由于数字技术迭代快,需要课堂教学、实习实践与产业保持同步,急需企业参与人才培养。在教育部的领导下,华为积极地将多年来在 ICT 行业中积累的技术贡献出来,于2013年启动了校企合作,打通人才培养“最后一公里”。特别是2020年5月,教育部与华为签署战略合作备忘录,双方重点在产教融合协同育人基地建设、教材建设、课程建设、师资培训、科研攻关等方面展开深入合作,着力培养掌握信息技术领域关键核心技术的人才。随后,华为联合清华大学、北京大学等72所高校,共建“智能基座”产教融合协同育人基地,以鲲鹏昇腾华为云等根技术为核心培养计算机人才,提升了自主知识产权相关技术的推广与普及。“智能基座”将鲲鹏芯片、欧拉操作系统、高斯数据库、昇腾处理器、昇思AI框架等根技术通过课堂传授给学生,让学生掌握最新技术发展趋势;同时提供包括企业课题、开源课题、社区活动、竞赛在内的多种课外实习实践活动,以提升学生的创新实践能力。具体体现在以下几个方面:一是课程建设方面。联合教育部高等学校教学指导委员会、高校知名教授 开发并陆续出版系列教材40余本;联合CMOOC联盟,开发并陆续上线20多门课程。截止目前,在72所高校建成了教学实践平台, 1500门次课程融入最新产业技术,超过20万名学生参加课程学习。二是师资建设方面。联合教育部计算机类专业教学指导委员会开展师资培训,截至目前,已完成3000余名教师现场培训,及上万名教师的在线培训。同时,支持设立优秀教师奖励计划,表彰和激励本科教学一线教师,在国家战略性紧缺人才培养方面 做出的杰出贡献。三是人才培养方面。为了帮助高校学生了解产业实际场景,华为持续组织专家与高校师生面对面,仅2021年,在教育部支持下,华为举办了百余场“校园行”活动,200余名华为产业专家走进学校与师生进行面对面交流,参与师生超过1.6万人次。此外,不断提高学生的实践创新能力,基于产业发展真实需求,向高校师生开放科研课题,于去年启动了“众智计划”。目前已开放了4000多个课题,累计投入2亿人民币,共有300多个高校团队揭榜成功, 超过3000名学生参与。并启动“优才计划”,为大学生提供实习岗位,目前已有40多家产业链企业参与进来。同时,积极支持中国国际“互联网+”大学生创新创业大赛,为了引导学生“真题真做”, 2021年发布了包括鲲鹏、昇腾、华为云、联接、鸿蒙在内的30多道华为企业命题,支持学生开展创新创业实践。四是教学技术改革方面。华为积极响应教育部号召,锻造一批高水平教学团队。启动 15个教育部-华为“智能基座”课程虚拟教研室试点建设,参与教师超过2000人。华为分布全国的40个鲲鹏昇腾生态创新中心将为高校师生提供本地资源和技术支持服务。以上就是这些年来华为在产教融合方面的工作和进展,这些工作离不开教育部的领导、高校的支持和老师们的共同努力。希望我们的教学改革成果能够遍地开花、一大批天才少年能够脱颖而出,服务于产业发展,提升国家的整体创新能力。未来,我们将继续支持产教融合工作,将成果和经验推广到更多高校,为新工科人才培养探索一条产教融合的创新之路,为实现加快建设世界重要人才中心和创新高地的目标贡献力量。转自华为计算公众号
  • [其他] 与神经网络相对的浅层学习的算法
    即使神经网络的发展如日中天,浅层算法也在一些任务中占有一席之地。 1984年,Breiman和Friedman提出决策树算法,作为一个预测模型,代表的是对象属性与对象值之间的一种映射关系。1995年,Vapnik和提出支持向量机(SVM),用一个分类超平面将样本分开从而达到分类效果。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/18/1652863147984769929.png) 这种监督式学习的方法,可广泛地应用于统计分类以及回归分析。鉴于SVM强大的理论地位和实证结果,**机器学习研究也自此分为神经网络和SVM两派**。1997年,Freund和Schapire提出了另一个坚实的ML模型AdaBoost,该算法最大的特点在于组合弱分类器形成强分类器,在脸部识别和检测方面应用很广。2001年,Breiman提出可以将多个决策树组合成为随机森林,它可以处理大量输人变量,学习过程快,准确度高。随着该方法的提出,SVM在许多之前由神网络占据自任务中获得了更好的效果,神经网络已无力与SVN竞争。之后虽然深度学习的兴起给神经网络带来了第二春,使其在图像、语音、NLP等领域都取得了领先成果,但这并不意味着其他机器学习流派的终结。 深度神经网络所需的训练成本、调参复杂度等问题仍备受诟病,SVM则因其简单性占据了一席之地,在文本处理、图像处理、网页搜索、金融征信等领域仍有着广泛应用。
  • [其他] 机器学习算法中的神经网络算法
    从20 世纪40 年代起, 就有学者开始从事神经网络的研究:McCulloch 和Pitts 发布了A Logical Calculus of the ldeas lmma-nent in Nervous Activity, 被认为是神经网络的第一篇文章;神经心理学家Hebb 出版了The Organazation of behavior书, 在书中提出了被后人称为"Hebb 规则”的学习机制。 1. 第一个大突破出现于1958 年, Rosenblatt 在计算机上模拟实现了一种他发明的叫作“ 感知机” ( Perceptron) 的模型, 这个模型可以完成一些**简单的视觉处理任务**, 也是后来神经网络的雏形、支持向量机( 一种快速可靠的分类算法) 的基础。一时间, 这种能够模拟人脑的算法得到了追捧, 国防部等政府机构纷纷开始赞助神经网络的研究,风光持续了十余年, 1969 年, Minsky 等人论证了感知机在决XOR ( 异或) 等基本逻辑问题时能力有限, 浇灭了人们对神经网络的热情, 原来的政府机构也逐渐停止资助, 直接造成了此后长达10 年的神经网络的“ 冷静时期” 。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/18/1652861611893118770.png) 期间, Werbos 在1974 年证明了在神经网络中多加一层, 并且利用“ 后向传播”( Back-propagation) 算法可以有效解决XOR 问题, 但由于当时仍处于神经网络的低潮, 这一成果并没有得到太多关注。 2. 直到80年代, 神经网络才终于迎来复兴。物理学家Hopfield在1982 年和1984 年发表了两篇关于人工神经网络研究的论文,提出了一种新的神经网络, 可以解决一大类模式识别问题, 还可以给出一类组合优化问题的近似解。他的研究引起了巨大的反响, 人们重新认识到神经网络的威力以及付诸应用的现实性。1985 年, Rumelhart 、Hinton 等许多神经网络学者成功实现了**使用“后向传播”BP算法来训练神经网络**,并在很长一段时间内将BP作为神经网络训练的专用算法。在这之后,越来越多的研究成果开始涌现。1995年,YannLeCun等人受生物视觉模型的启发,改进了**卷积神经网络(Convolution Neural Network,CNN)**。这个网络模拟了视觉皮层中的细胞(有小部分细胞对特定部分的视觉区域敏感,个体神经细胞只有在特定方向的边缘存在时才能做出反应),以类似的方式计算机能够进行图像分类任务(通过寻找低层次的简单特征,如边缘和曲线,然后运用一系列的卷积层建立一个更抽象的概念),在手写识别等小规模问题上取得了当时的最好结果。2000年之后,gio等人开创了神经网络构建语言模型的先河。直到2001年,Hochreiter等人发现使用BP算法时,**在神经网络单元饱和之后会发生梯度损失**,即模型训练超过一定迭代次数后容易产生过拟合,就是训练集和测试集数据分布不一致(就好比上学考试的时候,有的人采取题海战术,把每道题目都背下来。但是题目稍微一变,他就不会做了。因为机器非常复杂地记住了每道题的做法,却没有抽象出通用的规则)。神经网络又一次被人们所遗弃。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/18/1652862269528669537.png) 3. 然而,神经网络并未就此沉寂,许多学者仍在坚持不懈地进行研究。2006年,Hinton和他的学生在Science杂志上发表了一篇文章,从此掀起了深度学习(Deep Learning)的浪潮。深度学习能发现大数据中的复杂结构,也因此大幅提升了神经网络的效果。2009年微软研究院和Hinton合作研究基于深度神经网络语音识别,使得相对误识别率降低25%。2012年,Hinton带领学生目前最大的图像数据库ImageNet上,对分类问题取得了惊人成果,将错误率由26%降低至15%。 再往后的一个标志性时间是2014年,lan Goodfellow等学者发表论文提出题目中的“生成对抗网络",标志着GANs的诞生,并自2016年开始成为学界、业界炙手可热的概念,它为创建无监督学习模型提供了强有力的算法框架。时至今日,神经网络经历了数次潮起潮落后,又一次站在了风口浪尖,在图像识别、语音识别、机器翻译等领域,都随处可见它的身影。
  • [技术干货] 【论文分享】边缘智能驱动的高能效无人机自主导航算法研究
    边缘智能驱动的高能效无人机自主导航算法研究林椿珉, 曾烈康, 陈旭中山大学计算机学院,广东 广州 510006摘要近年来,无人机的自主导航技术在多个行业中受到了广泛的关注,相比于传统的导航技术,采用图像感知的深度学习方法具有很好的泛化能力并且不受全球定位系统(GPS, global positioning system)信号的影响,被证明是一种具有前景的自主导航方法。然而,深度学习的推断需要较大功耗,这对于能耗资源十分有限的无人机来说是一项挑战。针对该问题,基于边缘智能理论,将强化学习技术引入无人机端侧的推断过程中,根据无人机所处的环境复杂度实时感知信息,动态配置卷积神经网络的结构参数,使得无人机在保持稳定导航的同时,尽可能地减少计算功耗开销,实现无人机高可靠、低时延与高能效的自主导航飞行能力。该算法在仿真环境和现实环境中分别进行了验证,实验结果表明,相比于对比算法,所提的基于强化学习动态配置算法能够让无人机花费更少的计算能耗开销具有更长的飞行距离与更高的成功率。关键词: 无人机 ; 边缘智能 ; 深度学习 ; 强化学习 ; 自主导航1 引言近年来,无人机的自主导航能力受到了机器人领域的广泛关注,自主导航无人机的易部署、敏捷性强和机动性高等优点,让它在许多行业中得到了广泛应用,例如,消防巡检、精准农业、快递配送和公共安全巡视等[1,2,3,4]。这些应用的执行通常依赖于图像识别等计算密集型任务,传统部署方式是利用云计算基础设施,将终端侧的计算任务卸载至远程云数据中心执行,而近年来兴起的边缘计算概念则提供了一种全新的解决方案。相较于集中式算力的云计算范式,边缘计算将计算资源移动到靠近数据源的网络边缘侧,为终端应用的执行提供网络时延更低的计算环境,进一步提高服务的实时性、稳定性和可靠性。通过将边缘计算与人工智能有机结合,边缘智能能够进一步赋能端侧应用,让计算变得更加智能高效。本文基于边缘智能的观点,提出了一种全新的无人机自主导航框架,在赋予无人机边缘算力的同时,利用深度强化学习等人工智能算法,综合优化无人机运行功耗和计算时延等目标,实现了自主导航任务在无人机上的自适应执行。为了实现在低空环境中的自主导航,无人机端侧计算需要解决感知、控制与定位这3个基本的问题。解决这些问题的传统方法,首先使用GPS与惯性传感器进行定位与姿态估计,然后根据到达的目标点计算控制指令。这种方法依赖于 GPS 信号强度,在有高楼遮挡或者室内等环境时,会出现自动导航精度低或者完全失效的情况。单日相机等摄像头传感器由于其质量轻、体积小、不依赖于GPS信号等优点,适用于载重有限的无人机平台。因此基于视觉传感器的方法被越来越多地运用在无人机自主导航中。其中单目视觉同步定位与建图(SLAM, simultaneous localization and mapping)的方法虽然能够在未知环境中实现定位与导航[5-6],但是在动态场景中提取特征点的难度大,并且无人机的运动模糊图像会有鲁棒性的问题,导航可靠性较差。采用视觉感知技术的另一种方法是使用深度学习模型进行导航[7,8,9]。基于监督学习的卷积神经网络模型能够从大量图像中学习特征信息,模拟出人的操作过程,具有识别精度高、鲁棒性好和时延低等优点,在无人机自主导航领域具有广阔的前景。然而,深度卷积神经网络模型的实时计算需要较大的计算功率开销,若在载重能力与功耗资源有限的无人机上运行该类任务,其续航能力将会受到极大的限制。为了让无人机能耗利用率最大化,文献[10]设计了一种面向服务架构的云计算平台,通过将无人机的计算任务卸载到云数据中心的Kubernetes集群,缓解无人机的计算和存储压力。然而,由无人机移动性所导致的带宽波动会对该方法的性能产生巨大影响,难以保证稳定的性能表现。文献[11]设计了专用于微型无人机自主导航卷积神经网络计算的系统级芯片(SoC, system on chip),提供了较高性能的低功耗自主飞行。然而,基于专用硬件的系统设计可扩展性较差,且在实际部署中需要集成额外的传感器元件,极大地提高了开发难度。嵌入式高性能芯片的发展让边缘端设备的算力获得了极大的提升,使机载设备拥有了实时处理计算密集型任务的能力,越来越多的人工智能应用迁移到边缘进行。边缘计算与人工智能的结合催生了边缘智能技术[12,13,14],它能够使边缘设备拥有执行智能算法的能力。目前,针对边缘智能所依赖的4个特性为:低功耗性、低时延性、高准确率性和隐私安全性,学术界在边缘智能的研究方向主要包括模型优化、任务资源分配、边缘联邦智能、云边端协同[15,16,17,18,19]。其中,模型优化从边缘赋能智能的角度出发,主要解决了计算准确性与实时性、能量消耗之间的矛盾。本文将智能算法下沉到边缘设备端进行部署,结合无人机数据的本地性与智能算法的决策能力,解决资源受限问题和实时处理问题。为了实现高可靠、低时延和高能效的无人机自主导航飞行,本文将无人机导航计算任务与边缘智能计算任务卸载到无人机搭载的边缘计算设备中,避免了无人机动态飞行过程中网络带宽波动所带来的时延影响,从而满足实时导航任务对低时延的要求[15,20]。针对无人机能够携带计算能耗资源的有限性,本文提出了一种基于深度强化学习方法的环境感知导航和模型动态配置策略。该策略能够结合无人机所处的环境状态信息,通过强化学习动态获取最优卷积神经网络配置,实现在无人机平台上基于卷积神经网络模型的低时延与高能效的自主导航。本文的主要贡献可概括如下。1) 设计了一种轻量型的多输入卷积神经网络无人机自主导航框架,采用多尺度感知以及多种规模数据共同训练的方式,让模型在具有较高的精度与泛化能力的同时,能够具备多尺度图像环境特征信息感知与计算功率动态配置的能力。2) 提出了一种基于强化学习的决策算法,可根据无人机所处的环境状态信息选出适用于当前状态的功率最优的卷积神经网络计算配置。在保证无人机完成可靠地自主飞行的同时,提高了无人机可用能源的利用效率,实现低时延与高能效的无人机自主导航。3) 分别搭建了仿真环境下和现实场景中的原型系统,对本文方法进行了全面的性能验证,将所提算法与卷积神经网络模型传统静态计算方式、基于阈值选取的算法进行对比。仿真的实验结果表明,本文提出的算法与两种对比算法相比,连续飞行的距离分别延长了 5%和 13%,飞行成功率分别提高了3%和9%。现实场景的实验表明,本文的强化学习配置算法与两种对比算法相比,分别使无人机的自主导航任务续航时间提高了15%和7.5%。2 结束语本文研究了一种基于边缘智能驱动的无人机自主导航飞行方法。本文提出了一种依据无人机所处环境状态对卷积神经网络进行动态配置的深度强化学习算法,有效提高了无人机自主导航的准确性,降低无人机的计算功耗,延长了续航时间。基于仿真模拟和原型验证的多重实验结果表明,相对于传统采用静态配置的算法以及基于阈值配置的算法,本文提出的算法最高可使无人机自主导航飞行成功率提升9%,使真实续航距离提升15%。目前,本文所提框架模型的推理计算依赖于无人机的本地计算设备,虽然能够满足计算实时性,但是没能综合考虑使用边缘服务器进行协同计算。对于未来的工作,可以考虑采用模型分割等方式,将无人机本地机载设备与边缘服务器进行协同,采用分布式执行自主导航神经网络的架构,在避免传输视频流所带来的传输能耗的同时减轻无人机本地设备的计算压力,进一步提高系统的能效。本文所提算法具备一定的普遍性,不仅可用于自主导航任务,还能扩展到其他应用领域。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。3 原文链接http://www.infocomm-journal.com/wlw/article/2021/2096-3750/2096-3750-5-2-00087.shtml
总条数:945 到第
上滑加载中