前言

恩。。最近太忙了,一直在忙著自己的研究生畢業設計,剛剛才提交了初稿,很多內容沒有及時更新,見諒見諒...

今天來講講基於DeepVariant框架的簡化版,Simple Convolutional Neural Network for Genomic Variant Calling with TensorFlow

這是一個工程師的博客內容,他工作在一間單分子測序的公司,不算是一篇文章,但是思路還是很好的,和大家分享一下。

網頁: 主要介紹了作者的一些動機和方法介紹

源碼地址:也用tensorflow寫的,不過框架相對簡單

Motivation

深度學習的快速發展改變著對待基因組學的方式。許多初創企業都強調將人工智慧和機器學慣用於他們的研究和產品。但是工業上的公司更加註重於深度學習帶來的對於傳統工業行業的改變,谷歌的deepVariant改變了很多人對於想法,相比與對於直接數據的分析測定,一個端到端的網路的會有這麼強的表現。

作者指出了如果使用deepVariant的計算流程用於異常檢測,特別是在單分子異常檢測的情況下,會導致信息的丟失,因為DeepVariant的計算流程其實是只用了例如base quality、 變異位點序列信息等等,因此在原始序列轉圖像序列的過程中會產生信息的丟失,其次,deepvariant的網路也更加複雜, 訓練和計算都相對耗時,因此,作者希望通過設計一個專門用於單分子測序異常檢測的演算法。

工作流程

具體的工作流程在作者的論文中已經給出:

作者希望設計一個卷積神經網路用於單分子測序的異常檢測,輸入為變異候選位置的基因片段,輸出為不同的變異類型,作者分成了四種(heterozygous variant」, 「homozygous variant」, 「non-variant」, or 「complex-variant」)分別對應雜合子變異,純合子變異,非變異區段,和複雜變異;和四種不同鹼基的變異可能性。

其中鹼基可能性採用均方誤差計算,四種類別採用softmax來計算,所以整個模型可以看做為一個多任務(multi-mask 模型)

預處理

? 首先,核心還是序列轉圖像的過程,作者對於每個異常位點,會生成一個15X4X3的圖像,如上面中間的圖所示,變異的類型一共有三種,分別為SNP,inset和 deletion. 作者的版本只檢測最簡單的鹼基替換。

第一個15X4的圖像是對應異常序列的ACGT的序列信息,對於每一個變異位點,作者將左右的序列各擴展7個.生成15個長度的序列信息,並做了onehot編碼,這個和deepvarinat的方式是一樣的,第二個和第三個分別對應參考序列和變異序列的不同位點,通過不同的組合來表示不同的變異類型,比如上面圖那個就是一種類型,在第8個位點發生了一次替換,通過第二個和第三個通道的圖像來表達。最後每一個異常序列都可以生成這麼個15X4X3的圖像。

網路結構

相比於deepvariant採用的Google inception結構,作者為了更快的計算效率,採用了更為簡單的結構,直接採用了兩個卷積層和三個全連接層(2 convolution + maxpool layers followed by 3 full connect + drop-out layers),計算效率和訓練的時間都相對的簡單。整個網路訓練只要10分鐘左右,比deepvariant恩。。

訓練和測試

由於這麼版本非常簡單,作者在NA12878 PacBio上做了訓練和測試,訓練的樣本和測試樣本都非常小訓練是在chr21數據集上,測試是在chr22數據集上,都是只有幾萬個SNP變異的,但是總體的效果還是不錯的,最終的召回率達到98%.

這是chr22最終變異檢測結果

原圖在這

雖然最後的輸出類別是變異類型,實際上是可以輸出預測位置的錯誤位點的,即檢測出錯誤類型後通過輸出的鹼基類別來糾正錯誤位置

有興趣的可以看看作者的代碼,相對deepvariant整體封裝好的框架還是相對好理解很多,也便於初學者學習。有興趣也可以pull下來跑一下,需要裝個tensorflow和interetree模塊。

本次介紹部分就到這,歡迎和我討論!

歡迎大家關注我的知乎專欄:從零開始生物信息學

相同內容也可以關注我的微信公眾號: 壹讀基因:


推薦閱讀:
相关文章