前言
这是继从零开始生物信息学的的下一个学习模块,主要介绍近年来生物信息和深度学习领域的一些卓越的发展,今天,主要介绍DeepVariant是由谷歌Google基于深度卷积神经网络开发的一款突变检测软件,在2016 PrecisionFDA的TruthChallenge比赛中,DeepVariant获得了SNP检测性能综合表现优胜奖。利用测序数据拼凑更精准的人类基因图谱,还可以精确识别DNA序列中的突变。
贴上相关链接:
论文地址: 已经被Nature Biotechnology 在2018年录用,和之前在biorxiv上面的版本有些不太一样
源码地址:用tensorflow写的,如果没有编程基础的看起来会比较难受
Google Cloud Platform: 可以高效地在上面跑自己的demo,虽然我还没跑。。
Motivation
随着测序技术的发展,对于基因组中的任何给定位置,在大约10亿reads中有多个reads包含该位置的一个碱基。每个read与一个参考碱基对齐,然后将read中的每个碱基与该位置的参考碱基进行比较。当一个read包含一个与参考碱基不同的碱基时,它可能表示一个变异(真实序列的差异),也可能是一个错误,因此变异检测就变得十分重要。目前主流的方法工具还是人工编码算法如GATK和FreeBayes等等
随着深度学习的火热,如何学习序列的内在联系和高效地发现变异位点就变得十分重要。
工作流程
具体的工作流程在作者的论文中已经给出:
预处理
- 数据匹配:将测序数据和参考序列进行匹配
- 去重:标记重复和重新校准分数
- 候选集提取:根据和参考基因组不匹配的项作为候选序列。
变异候选集筛查
- 创建de Bruijn graph,根据参考序列和比对结果对每个边加权
- 利用高斯混合模型(HMMs)筛选出最相近的两个单倍体haplotypes,因为这里是通常是二倍体生物的基因组序列
- 过滤所有的比对序列
- read质量.
- 变异频率.
- 变异类型.
图像编码
现在已经有的是测序数据和参考基因组筛选后的变异的候选集,谷歌将不同变异类型和变异长度估计问题转化为一个图像的分类问题,所以第一步就是怎么生成训练的图像。
在之前的版本里,是将每一个匹配对转化为一个一定大小的3通道RGB图像,在最新的里面扩展成了7个通道,不同通道有不同的数据表达,可以更精准的表示基因数据信息:
ATCG四种碱基(base)
碱基质量(base quality)
序列比对质量(mapping quality)
正反向链(strand)
等位基因替代alternative allele
参考序列等位基因替代reference allele
CIGAR记录的信息(就是是否SNPs或者indel)
由于全基因组测序数据的平均覆盖深度一般不会超过100,DeepVariant实际产生的图像高度设置成了100,对于测序覆盖度大于100的区域,下采样到100的代销。主流测序平台产生的测序数据读长在100bp左右,对于候选的变异位点,向基因组两端延伸100bp即可将大部分覆盖待检位点的测序数据包含进来,考虑到插入缺失变异的长度,为其预留20bp的编码空间,进而图像宽度设置成了221,这样实际产生的图像大小是100×221,DeepVariant采用的CNN网络的输入层尺寸是299×299,因此需要对原始图像进行上采样到299×299,作为网络输入。
然后每个带变异位点的候选集就会生成一张7通道的高维图片,也可以理解为是299X299X7的高维矩阵,作为网络输入:
模型训练和分类
DeepVariant 将生成的图片作为输入,最后会得到一个分类结果,是一个三分类问题,分别是:
- homozygous reference:纯合子并且和参考基因组相同
- heterozygous:杂合子
- homozygous alternative:纯合子但与参考基因组不同
整个神经网络结构采用的是谷歌的开发的Inception-v3网络,是GoogleNet的改进。这是一个本来用于做图像分类的网络,下图是整个CNN网络的发展史:
有兴趣可以谷歌一下,主要是通过深层的网络以及inception结构以及各种卷积核卷积操作的优化达到的,可以有效的提取图像的特征。
将最后提取的特征进行两层的全连接,加一个softmax的概率归一化,就可以得到每个类的概率得分。
实验结果
实验训练数据集是CEPH (Centre d’Etude du Polymorphisme Humain) female sample NA12878 测试数据集是 unseen Ashkenazi male sample NA24385。
实验结果和常用的变异检测工具如GATK,freeBayes,以及16年开发的Strelka和16GT进行对比,在SNP和indel都比目前算法要好:
然后作者还分析了在不同数据集上面验证了其训练数据有可迁移性,可以说在不同数据集的异常检测都有不错的表现:
本次介绍部分就到这,欢迎和我讨论!
欢迎大家关注我的知乎专栏:从零开始生物信息学
相同内容也可以关注我的微信公众号: 壹读基因: