开发者社区> 致Great_VIP> 正文

图神经网络01-基于Graph的机器学习简介(下)

简介: 图神经网络01-基于Graph的机器学习简介(下)
+关注继续查看

4 Graphs ML的应用实例


我们前面也提到过基于Graphs的机器学习可以做哪些任务:


13.png


  • Graph级别的预测,比如预测Graph的类型以及图的生成,比如预测整个分子团的属性
  • 节点级别的任务:这个也是较常见的,比如节点标签预测、节点学习等,判断节点是用户或者商品
  • 社区级别:发现新的子图,构建新的节点社区或者簇,常见的方式是图聚类
  • 边级别的预测:预测两个节点之间是否存在新的关系
  • 其他任务:图生成-比如新的药物结构图发现;图演化

    14.png


4.1 Node级别的Graph机器学习实例


  • 震惊科学界!DeepMind AI破解「蛋白质折叠」难题,攻克生物学50年巨大挑战

白质折叠(英语:Protein folding)是蛋白质获得其功能性结构和构象的物理过程。通过这一物理过程,蛋白质从无规则卷曲折叠成特定的功能性三维结构


原文链接:https://www.leiphone.com/news/202012/lklVFjHWl2C7xUFh.html

DeepMind在官方博客中称:AlphaFold的最新版本,在通过氨基酸序列精确预测蛋白质折叠结构方面,已经获得权威蛋白质结构预测评估机构(Critical Assessment of protein Structure Prediction,CASP)的认可。


此消息一出,立刻登上了Nature杂志封面,标题直接评论为:“它将改变一切!”。


15.png


震惊科学界!DeepMind AI破解「蛋白质折叠」难题,攻克生物学50年巨大挑战


同一时间,谷歌CEO兼首席执行官桑达尔·皮查伊 (Sundar Pichai)、斯坦福教授李飞飞、马斯克等众多科技大佬也在第一时间转推祝贺!

那么这场惊动科技圈、生物学界和科学界的重大突破,到底是一项怎样的研究?


16.png


自由建模类蛋白质靶标的两个示例

AlphaFold背后的AI机制

折叠的蛋白质可以看作是一个“空间图形”,其中残基是节点和边紧密连接在一起。


17.png


震惊科学界!DeepMind AI破解「蛋白质折叠」难题,攻克生物学50年巨大挑战

该图代表了AlphaFold系统的神经网络模型体系结构。该模型对蛋白质序列和氨基酸残基进行操作——在两种表示之间传递迭代信息以生成结构。


这一过程对于理解蛋白质内部的物理相互作用以及它们的进化史很重要。

对于AlphaFold的最新版本,研究人员创建了一个基于注意力机制的神经网络系统,经过端到端的训练来试图解释这个图的结构,同时对它所构建的隐式图进行推理。它通过使用多重序列对齐 (MSA) 和氨基酸残基对的表示来精化这个图形结构。


通过迭代这个过程,系统可以对蛋白质的基本物理结构做出准确的预测,并能够在几天的时间内确定高度精确的结构。此外,AlphaFold 还可以使用内部置信度来预测每个预测的蛋白质结构的哪些部分是可靠的。


AlphaFold系统所使用的数据,来自包括约170,000个蛋白质结构,以及未知结构的蛋白质序列的大型数据库。在训练时,它使用了大约128个 TPU v3内核 (大致相当于100-200个GPU) ,并仅运行了数周。这在当今机器学习中使用的大多数最先进的大型模型的上下文中是相对较小的计算量。


4.2 Edge级别的Graph机器学习实例


  • 基于社交网络的推荐系统

    18.png

    基于商品节点表示推荐相似商品

    19.png


  • 药物的副作用预测
    很多病人同时吃多种药物来治疗复杂的或者并发症,研究调查发现:
  • 在70-79岁之间病人有46%的 人会摄入超过5种药物
  • 很多病人会同时摄入20多种药物来治疗心脏病,抑郁症,失眠等症状;
    任务:假设有一对药物,然后预测两者之间的不良副作用


20.png

例如:辛伐他汀(Simvastatin)和环丙沙星(Ciprofloxacin)合在一起时分解肌肉组织的可能性有多大


21.png


通过实验结果可以发现:

阿托伐他汀与氨氯地平和替卡格雷的药物相互作用可能导致严重的横纹肌溶解


22.png


4.3 Subgraph级别的Graph机器学习实例


  • 交通预测

随着图网络的发展,其在非欧氏数据上的应用被进一步开发,而交通预测就是图网络的一个主要应用领域。交通预测指的是根据历史交通数据和交通网络的拓扑结构来预测未来的交通状况,包括但不限于速度、流量、拥堵等。交通流量预测是其他上层任务如路径规划的基础,是工业界非常关心的任务。

原文:https://blog.csdn.net/zhouchen1998/article/details/110136808



23.png


class ChebConv(nn.Module):
    def __init__(self, in_c, out_c, K, bias=True, normalize=True):
        """
        ChebNet conv
        :param in_c: input channels
        :param out_c:  output channels
        :param K: the order of Chebyshev Polynomial
        :param bias:  if use bias
        :param normalize:  if use norm
        """
        super(ChebConv, self).__init__()
        self.normalize = normalize
        self.weight = nn.Parameter(torch.Tensor(K + 1, 1, in_c, out_c))  # [K+1, 1, in_c, out_c]
        init.xavier_normal_(self.weight)
        if bias:
            self.bias = nn.Parameter(torch.Tensor(1, 1, out_c))
            init.zeros_(self.bias)
        else:
            self.register_parameter("bias", None)
        self.K = K + 1
    def forward(self, inputs, graph):
        """
        :param inputs: he input data, [B, N, C]
        :param graph: the graph structure, [N, N]
        :return: convolution result, [B, N, D]
        """
        L = ChebConv.get_laplacian(graph, self.normalize)  # [N, N]
        mul_L = self.cheb_polynomial(L).unsqueeze(1)  # [K, 1, N, N]
        result = torch.matmul(mul_L, inputs)  # [K, B, N, C]
        result = torch.matmul(result, self.weight)  # [K, B, N, D]
        result = torch.sum(result, dim=0) + self.bias  # [B, N, D]
        return result
    def cheb_polynomial(self, laplacian):
        """
        Compute the Chebyshev Polynomial, according to the graph laplacian
        :param laplacian: the multi order Chebyshev laplacian, [K, N, N]
        :return:
        """
        N = laplacian.size(0)  # [N, N]
        multi_order_laplacian = torch.zeros([self.K, N, N], device=laplacian.device, dtype=torch.float)  # [K, N, N]
        multi_order_laplacian[0] = torch.eye(N, device=laplacian.device, dtype=torch.float)
        if self.K == 1:
            return multi_order_laplacian
        else:
            multi_order_laplacian[1] = laplacian
            if self.K == 2:
                return multi_order_laplacian
            else:
                for k in range(2, self.K):
                    multi_order_laplacian[k] = 2 * torch.mm(laplacian, multi_order_laplacian[k - 1]) - \
                                               multi_order_laplacian[k - 2]
        return multi_order_laplacian
    @staticmethod
    def get_laplacian(graph, normalize):
        """
        compute the laplacian of the graph
        :param graph: the graph structure without self loop, [N, N]
        :param normalize: whether to used the normalized laplacian
        :return:
        """
        if normalize:
            D = torch.diag(torch.sum(graph, dim=-1) ** (-1 / 2))
            L = torch.eye(graph.size(0), device=graph.device, dtype=graph.dtype) - torch.mm(torch.mm(D, graph), D)
        else:
            D = torch.diag(torch.sum(graph, dim=-1))
            L = D - graph
        return L
class ChebNet(nn.Module):
    def __init__(self, in_c, hid_c, out_c, K):
        """
        :param in_c: int, number of input channels.
        :param hid_c: int, number of hidden channels.
        :param out_c: int, number of output channels.
        :param K:
        """
        super(ChebNet, self).__init__()
        self.conv1 = ChebConv(in_c=in_c, out_c=hid_c, K=K)
        self.conv2 = ChebConv(in_c=hid_c, out_c=out_c, K=K)
        self.act = nn.ReLU()
    def forward(self, data, device):
        graph_data = data["graph"].to(device)[0]  # [N, N]
        flow_x = data["flow_x"].to(device)  # [B, N, H, D]
        B, N = flow_x.size(0), flow_x.size(1)
        flow_x = flow_x.view(B, N, -1)  # [B, N, H*D]
        output_1 = self.act(self.conv1(flow_x, graph_data))
        output_2 = self.act(self.conv2(output_1, graph_data))
        return output_2.unsqueeze(2)


24.png


其中图构成了网络


25.png


扩展阅读: 两篇图神经网络交通预测 |A3T-GCN:用于交通预测的注意力时间图卷积网络 https://zhuanlan.zhihu.com/p/162815713


4.4 Graph级别的机器学习任务


  • 药物发现
    1)基于自回归流模型的分子图生成模型—— GraphAF
    GraphAF是一种新颖的分子图生成模型,不仅在数据密度估计上具有高度的模型灵活性,而且支持训练高效的并行计算。采取迭代采样,在生成过程中加入有效性检测以保证生成的化学分子真实、有效。
    2)可以预测分子逆合成路线的模型——G2Gs
    G2Gs是第一个基于图且不依赖于反应模版的逆合成预测方法,在接近或达到最先进方法表现的情况下,避免了反应模版和昂贵的子图同构,且具有更好的可扩展性。


26.png


27.png


28.png


扩展阅读:


AI+医疗:图表示学习在新药发现中的妙用 https://www.aminer.cn/research_report/5f5974b71f22880f6e944ca4

特别评述 | 人工智能助力药物研发:可解释性深度神经网络分子表征模型

http://www.phirda.com/artilce_20712.html?cId=3

Survey | 基于图卷积网络的药物发现方法 https://www.jiqizhixin.com/articles/2019-09-04-13

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
19263 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
28526 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
13307 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22275 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
15948 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20389 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14885 0
+关注
400
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载