深度學習應用於細胞生物學

2020-12-06 AI火箭營

本文將討論深度學習如何幫助細胞生物學捕捉細胞群的多樣性和複雜性。

單細胞RNA測序(scRNAseq)幾年前通過為研究細胞群異質性提供了前所未有的解決方案,徹底改變了生命科學。影響如此巨大,科學雜誌宣布scRNAseq技術成為 2018年的突破。主要進展是認識到儘管生物細胞在顯微鏡下看起來可能在形態學上相似,但它們表達的基因意義上可能非常不同,這反過來導致細胞之間的特徵差異。為了捕獲這種細胞多樣性, Human Cell Atlas 社區宣布了一項雄心勃勃的目標,即建立人體內數萬億細胞的綜合圖譜。

隨著10X Genomics單細胞基因表達平臺的發展,從幾十萬甚至數百萬個細胞中獲得全部轉錄組信息幾乎成為常規操作。因此,scRNAseq代表了目前真正的大數據,它具有卓越的統計功能,並為單細胞數據分析應用機器和深度學習開闢了新的視野。

本文將簡要概述該領域,制定主要的分析挑戰,並展示如何在單細胞RNA測序數據分析中使用Keras和TensorFlow的深度學習來解決無監督學習問題。

為什麼單細胞生物學是深度學習的理想選擇?

對一些數據進行統計分析,我們通常必須了解

特徵數量(基因,蛋白質,遺傳變異,圖像像素等)觀察數量n(樣本,細胞,序列)之間的平衡等等)

人類基因組具有大約p = 20K蛋白質編碼基因,而最近公布的10X scRNAseq數據集包括n~1.3M和n~2M個體細胞。這意味著scRNAseq的n >> p是典型的深度學習限制,即在此極限下工作,我們可以遠遠超出基於線性代數的分析,並捕獲scRNAseq數據中的高度非線性結構。

最近的研究報告了前所未有的scRNAseq樣本量,這是深度學習的理想設置。

對於其他限制,即當n << p或n~p時,貝葉斯和Frequentist統計框架更合適。

換句話說,使用scRNAseq數據我們有一個問題:雖然過擬合和缺乏普遍性是計算生物學中常見的問題,但對於scRNAseq,我們必須注意欠擬合,即如何使用大部分數據。

不僅scRNAseq目前在生命科學領域蓬勃發展,而且在單一細胞水平上提供其他類型信息(的技術變得越來越普遍。研究scATACseq的最新進展導致具有> 100K單細胞的數據集。雖然單獨的scATACseq可能無法保證發現稀有細胞群的新方法,但它提供了與scRNAseq整合的巨大潛力,從而提高了將細胞分配給特定群體的準確性。

染色質可及性區域(ATACseq)是scRNAseq分析的補充

最後,單細胞的多組學技術(CITE-SEQ,scNMTseq等),即來自同一個生物細胞多個信息源,還沒有達到很大的樣本量典型scRNAseq但對未來非常有前途的深層數據集成挑戰學習。

通過深度學習減少維度

由於scRNAseq分析的主要目標是發現新的細胞群,因此它是機器學習術語中的無監督分析。因此,用於scRNAseq的兩種最重要的分析技術是降維和聚類。

Autoencoder是一種無監督的人工神經網絡(ANN),具有有意思的的"蝴蝶"結構,通常用於減少維數。與線性技術(如主成分分析(PCA),多維尺度(MDS),因子分析(FA)等相比,自動編碼器執行非線性降維,因此可捕獲單細胞數據的高度非線性結構。

Autoencoder是一種具有"蝴蝶"結構的人工神經網絡(ANN)

在這裡,我將使用~8K臍帶血單核細胞(CBMCs))CITEseq scRNAseq數據集作為示例,證明線性和非線性自動編碼器維數減少技術之間單細胞解析度的差異。請注意,下面的代碼假設輸入文件採用表格格式,基因為列,單元格為行,文件的最後一列必須是使用你最喜歡的scRNAseq聚類技術獲得的單元格注釋。建議使用基於圖形的聚類與Louvaine社區檢測,這對於高維數據很有用,在流行的Seurat scRNAseq工作流程中實現。

import numpy as np import pandas as pd from keras.layers import Dense import matplotlib.pyplot as plt from sklearn.manifold import TSNE from keras.optimizers import Adam from sklearn.decomposition import PCA from keras.models import Sequential, Model # READ AND LOG-TRANSFORM DATA expr = pd.read_csv('MouseBrain_10X_1.3M.txt',sep=' ') X = expr.values[:,0:(expr.shape[1]-1)] Y = expr.values[:,expr.shape[1]-1] X = np.log(X + 1) # REDUCE DIMENSIONS WITH PRINCIPAL COMPONENT ANALYSIS (PCA) n_input = 50 x_train = PCA(n_components = n_input).fit_transform(X); y_train = Y plt.scatter(x_train[:, 0], x_train[:, 1], c = y_train, cmap = 'tab20', s = 10) plt.title('Principal Component Analysis (PCA)') plt.xlabel("PC1") plt.ylabel("PC2") # REDUCE DIMENSIONS WITH AUTOENCODER model = Sequential() model.add(Dense(30, activation='elu', input_shape=(n_input,))) model.add(Dense(20, activation='elu')) model.add(Dense(10, activation='elu')) model.add(Dense(2, activation='linear', name="bottleneck")) model.add(Dense(10, activation='elu')) model.add(Dense(20, activation='elu')) model.add(Dense(30, activation='elu')) model.add(Dense(n_input, activation='sigmoid')) model.compile(loss = 'mean_squared_error', optimizer = Adam()) model.fit(x_train, x_train, batch_size = 128, epochs = 500, verbose = 1) encoder = Model(model.input, model.get_layer('bottleneck').output) bottleneck_representation = encoder.predict(x_train) plt.scatter(bottleneck_representation[:,0], bottleneck_representation[:,1], c = y_train, s = 10, cmap = 'tab20') plt.title('Autoencoder: 8 Layers') plt.xlabel("Dimension 1") plt.ylabel("Dimension 2")

為了比較,還要在這裡添加t分布式隨機鄰域嵌入(tSNE)圖,這是scRNAseq區域中當前的黃金標準非線性降維技術。tSNE的一個問題是它無法處理高維數據,例如scRNAseq。因此,通常的做法是執行PCA(線性)作為預維數減少並將輸出饋送到tSNE。但是,我們可以通過使用自動編碼器以非線性方式執行預維數減少步驟來做得更好。讓我們顯示兩種策略的tSNE圖:

# TSNE ON PCA model_tsne = TSNE(learning_rate = 200, n_components = 2, random_state = 123, perplexity = 90, n_iter = 1000, verbose = 1) tsne = model_tsne.fit_transform(x_train) plt.scatter(tsne[:, 0], tsne[:, 1], c = y_train, cmap = 'tab20', s = 10) plt.title('tSNE on PCA') plt.xlabel("tSNE1") plt.ylabel("tSNE2") # TSNE ON AUTOENCODER model = Sequential() model.add(Dense(10, activation = 'elu', input_shape=(X.shape[1],))) model.add(Dense(8, activation = 'elu')) model.add(Dense(6, activation = 'elu')) model.add(Dense(4, activation = 'linear', name = "bottleneck")) model.add(Dense(6, activation = 'elu')) model.add(Dense(8, activation = 'elu')) model.add(Dense(10, activation = 'elu')) model.add(Dense(X.shape[1], activation = 'sigmoid')) model.compile(loss = 'mean_squared_error', optimizer = Adam()) model.fit(X, X, batch_size = 128, epochs = 100, shuffle = True, verbose = 1) encoder = Model(model.input, model.get_layer('bottleneck').output) bottleneck_representation = encoder.predict(X) model_tsne_auto = TSNE(learning_rate = 200, n_components = 2, random_state = 123, perplexity = 90, n_iter = 1000, verbose = 1) tsne_auto = model_tsne_auto.fit_transform(bottleneck_representation) plt.scatter(tsne_auto[:, 0], tsne_auto[:, 1], c = Y, cmap = 'tab20', s = 10) plt.title('tSNE on Autoencoder: 8 Layers') plt.xlabel("tSNE1") plt.ylabel("tSNE2")

這裡一個點是一個單元格,顏色對應不同的單元格類型。你應該觀察12個細胞群,但你基本上無法從PCA圖中看到它們(細胞嚴重重疊),因為線性維數降低無法解析單個細胞結構。自動編碼器圖像看起來更好,可以清楚地檢測到不同的細胞群。tSNE通常提供更銳利的細胞團。

然而,對於這種特殊情況,自動編碼器上的tSNE似乎提供了更密集和透明的簇,特別是對於在PCA圖上的tSNE中塗抹在整個藍色簇中的紫色細胞群。因此,深度學習有望提高檢測新細胞群的解析度。

尋找可縮放的維度減少

除了難以處理高維數據外,當細胞數量達到數十萬和數百萬時,tSNE的擴展性很差。FItSNE是Barnes-Hut tSNE的一種新的有希望的修改,它似乎可以更好地擴展到大量數據。然而,在1.3M小鼠腦細胞上運行FItSNE ,在將其安裝到內存中時遇到了麻煩。特別是,為了檢查數據的全局結構,我們想獲得高難度的tSNE圖。但是,350是我能夠在計算機集群上使用256GB RAM的節點達到的最大。運行FItSNE非常簡單,類似於它們在R中執行tSNE的方式(同樣,Cluster列包含單元格注釋):

library("data.table") source("fast_tsne.R") expr <- suppressWarnings(as.data.frame(fread("10X_Mouse_Brain_1.3M.txt",sep=" "))) my_color<-as.numeric(as.character(expr$Cluster)) expr$Cluster<-NULL expr<-as.data.frame(t(expr)) N_cells<-dim(expr)[2] print(paste0("DATASET CONTAINS ",dim(expr)[1]," GENES AND ",N_cells," CELLS")) tsne_opt_perp <- fftRtsne(t(log10(expr+20)),check_duplicates=FALSE, perplexity=350,dims=2,max_iter=5000) plot(tsne_opt_perp$Y,col=my_color,xlab="tSNE1",ylab="tSNE2",cex=0.5)

均勻流形逼近和投影(UMAP)是另一種非常有趣的非線性降維技術,目前在許多方面似乎都優於tSNE。它比tSNE快,與FItSNE一樣快,但不需要那麼多的內存,它似乎捕獲了scRNAseq數據的局部和全局結構。

from umap import UMAP model = UMAP(n_neighbors = 30, min_dist = 0.3, n_components = 2) umap = model.fit_transform(X_reduced) umap_coords = pd.DataFrame({'UMAP1':umap[:, 0], 'UMAP2':umap[:, 1]}) umap_coords.to_csv('umap_coords_10X_1.3M_MouseBrain.txt', sep=' ') plt.scatter(umap[:, 0], umap[:, 1], c = Y, cmap = 'tab20', s = 1) plt.title('UMAP') plt.xlabel("UMAP1") plt.ylabel("UMAP2")

最近發布了一些基於變分自動編碼器的有趣方法。其中之一是SCVIS,它是一種神經網絡,捕獲並可視化單細胞基因表達數據中的低維結構,此外還保留了局部和全局相鄰結構。要在1.3M小鼠腦細胞上運行SCVIS,我使用以下命令行:

python scvis train --data_matrix_file 10X_1.3M.txt --out_dir out_scvis --data_label_file 10X_1.3M_MouseBrain_CellAnnotationSeurat.txt --verbose --verbose_interval 50 --show_plot

下面我提供了使用來自10X Genomics的1.3M小鼠腦細胞的4種提到的降維技術的比較,即PCA,tSNE / FItSNE,UMAP和SCVIS:

1.3M 10X小鼠腦數據集降維技術比較

至於上述CITEseq的情況,我們可以看到,與PCA相比,非線性降維技術(SCVIS,UMAP和tSNE / FItSNE)能夠解析scRNAseq數據中的所有細胞群。在這三種技術中,UMAP是最快的,並且提供了相當好的數據低維表示。為了更精確地計算時間,SCVIS花費了大約6小時,FItSNE花了3小時和大量內存,UMAP花了大約3小時。

考慮到scRNAseq數據的增長,本文預測UMAP和Autoencoders將來會取代tSNE。

具有Keras的scRNAseq的深度自動編碼器

最後,在這裡,本文將演示如何從頭開始實現並使用Keras運行Deep Autoencoder,並不難。為了避免將整個數據集加載到內存中的困難,我選擇了前19個主要成分,我通過重新取樣發現了重要成分,即改組基因表達矩陣並檢查由置換矩陣(零假設)解釋的方差百分比。Autoencoder逐步將維度從19減少到2(自動編碼器的瓶頸),每個隱藏層都減少了一個維度。

import numpy as np import pandas as pd from keras.layers import Dense import matplotlib.pyplot as plt from keras.optimizers import Adam from sklearn.decomposition import PCA from keras.models import Sequential, Model from sklearn.preprocessing import MinMaxScaler # READ DATA AND LOG-TRANSFORM DATA expr = pd.read_csv('MouseBrain_10X_1.3M.txt', sep = ' ', header = None) X = expr.values[:,0:(expr.shape[1]-1)] Y = expr.values[:,expr.shape[1]-1] X = np.float32( np.log(X + 1) ) # REDUCE DIMENSIONS WITH PRINCIPAL COMPONENT ANALYSIS (PCA) n_input = 19 x_train = PCA(n_components = n_input).fit_transform(X) y_train = Y x_train = MinMaxScaler().fit_transform(x_train) # REDUCE DIMENSIONS WITH AUTOENCODER model = Sequential() model.add(Dense(18, activation='elu', kernel_initializer='he_uniform', input_shape=(n_input,))) model.add(Dense(17, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(16, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(15, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(14, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(13, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(12, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(11, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(10, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(9, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(8, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(7, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(6, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(5, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(4, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(3, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(2, activation='linear', kernel_initializer='he_uniform', name="bottleneck")) model.add(Dense(3, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(4, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(5, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(6, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(7, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(8, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(9, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(10, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(11, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(12, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(13, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(14, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(15, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(16, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(17, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(18, activation='elu', kernel_initializer='he_uniform')) model.add(Dense(n_input, activation='sigmoid')) model.compile(loss = 'mean_squared_error', optimizer = Adam(lr = 0.0001)) model.summary() # FIT AUTOENCODER MODEL history = model.fit(x_train, x_train, batch_size = 4096, epochs = 100, shuffle = False, verbose = 0) print("" + "Training Loss: ", history.history['loss'][-1]) plt.figure(figsize=(20, 15)) plt.plot(history.history['loss']) plt.title('Model Loss') plt.ylabel('Loss') plt.xlabel('Epoch') plt.show() encoder = Model(model.input, model.get_layer('bottleneck').output) bottleneck_representation = encoder.predict(x_train) # PLOT DIMENSIONALITY REDUCTION plt.figure(figsize=(20, 15)) plt.scatter(bottleneck_representation[:,0], bottleneck_representation[:,1], c = Y, s = 1, cmap = 'tab20') plt.title('Autoencoder: 34 Hidden Layers, 10X Genomics 1.3M Mouse Brain Cells') plt.xlabel("Dimension 1") plt.ylabel("Dimension 2") plt.show() view raw

Deep Autoencoder用於降低1.3M 10X小鼠腦細胞的維數,實現Keras

我們可以看到細胞群是完全可區分的,儘管我沒有專門尋找可能提供更好解析度的神經網絡的最佳配置。Deep Autoencoder的一個巨大優勢是它看起來非常快,因此可以擴展到大量的scRNAseq數據,在筆記本電腦只花了幾分鐘就可以使模型收斂並獲得上面的圖。

具有TensorFlow的scRNAseq的深度自動編碼器

Keras很棒,快速而且容易,但有時仍然會覺得使用TensorFlow可以更好地控制神經網絡。例如,對於Keras,人們永遠不會感覺到"手動"連接節點,這是本文對TensorFlow所理解的理解深度。後者的一個小缺點是,小批量學習這樣的有用技巧必須在TensorFlow中手動編碼,而對比則自動包含在Keras中。這裡是TensorFlow Deep Autoencoder的代碼和維數減少圖:

import numpy as np import pandas as pd import tensorflow as tf import matplotlib.pyplot as plt X = x_train # DEFINE HYPERPARAMETERS learning_rate = 0.001 training_epochs = 500 mini_batch_size = 1024 # mini_batch_size = X.shape[0]-1 display_step = 10 # how often to display loss and accuracy num_hidden_1 = 12 # 1st hidden layer num features num_hidden_2 = 8 # 2nd hidden layer num features num_hidden_3 = 4 # 3-d hidden layer num features num_bottleneck = 2 # bottleneck num features num_input = X.shape[1] # scRANAseq data input (number of genes) # TENSORFLOW GRAPH INPUT x = tf.placeholder("float") y = tf.placeholder("float") weights = { 'encoder_h1': tf.Variable(tf.random_normal([num_input, num_hidden_1])), 'encoder_h2': tf.Variable(tf.random_normal([num_hidden_1, num_hidden_2])), 'encoder_h3': tf.Variable(tf.random_normal([num_hidden_2, num_hidden_3])), 'bottleneck': tf.Variable(tf.random_normal([num_hidden_3, num_bottleneck])), 'decoder_h1': tf.Variable(tf.random_normal([num_bottleneck, num_hidden_3])), 'decoder_h2': tf.Variable(tf.random_normal([num_hidden_3, num_hidden_2])), 'decoder_h3': tf.Variable(tf.random_normal([num_hidden_2, num_hidden_1])), 'decoder_out': tf.Variable(tf.random_normal([num_hidden_1, num_input])), } biases = { 'encoder_b1': tf.Variable(tf.random_normal([num_hidden_1])), 'encoder_b2': tf.Variable(tf.random_normal([num_hidden_2])), 'encoder_b3': tf.Variable(tf.random_normal([num_hidden_3])), 'bottleneck': tf.Variable(tf.random_normal([num_bottleneck])), 'decoder_b1': tf.Variable(tf.random_normal([num_hidden_3])), 'decoder_b2': tf.Variable(tf.random_normal([num_hidden_2])), 'decoder_b3': tf.Variable(tf.random_normal([num_hidden_1])), 'decoder_out': tf.Variable(tf.random_normal([num_input])), } # CONSTRUCT AUTOENCODER MODEL print("" + "Constructing Autoencoder Model ..." + "") def encoder(x): layer_1 = tf.nn.elu(tf.add(tf.matmul(x, weights['encoder_h1']), biases['encoder_b1'])) layer_2 = tf.nn.elu(tf.add(tf.matmul(layer_1, weights['encoder_h2']), biases['encoder_b2'])) layer_3 = tf.nn.elu(tf.add(tf.matmul(layer_2, weights['encoder_h3']), biases['encoder_b3'])) bottleneck = tf.add(tf.matmul(layer_3, weights['bottleneck']), biases['bottleneck']) return bottleneck def decoder(x): layer_1 = tf.nn.elu(tf.add(tf.matmul(x, weights['decoder_h1']), biases['decoder_b1'])) layer_2 = tf.nn.elu(tf.add(tf.matmul(layer_1, weights['decoder_h2']), biases['decoder_b2'])) layer_3 = tf.nn.elu(tf.add(tf.matmul(layer_2, weights['decoder_h3']), biases['decoder_b3'])) layer_out = tf.nn.sigmoid(tf.add(tf.matmul(layer_3, weights['decoder_out']), biases['decoder_out'])) return layer_out encoder_op = encoder(x) decoder_op = decoder(encoder_op) y_pred = decoder_op y_true = x cost = tf.reduce_mean(tf.pow(y_true - y_pred, 2)) optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost) # START TRAINING AUTOENCODER print("" + "Start Training Autoencoder ..." + "") my_cost = [] tf.set_random_seed(12) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for epoch in range(training_epochs): pos = 0 idx = np.arange(X.shape[0]) my_cost_mini_batch = [] for _ in range(10000000): #print('Mini-batch {0} - {1}'.format(pos,pos + mini_batch_size)) if pos + mini_batch_size >= X.shape[0]: break batch_x = X[idx[range(pos, pos + mini_batch_size)],:] c,_ = sess.run([cost, optimizer], feed_dict={x: batch_x}) my_cost_mini_batch.append(c) pos = pos + mini_batch_size my_cost.append(np.mean(my_cost_mini_batch)) if (epoch + 1) % display_step == 0: print("Epoch:", '%04d' % (epoch + 1), "cost = ", "{:.9f}".format(np.mean(my_cost_mini_batch))) pred = sess.run(encoder(x), feed_dict={x: X}) # PLOT LOSS FUNCTION plt.figure(figsize=(20, 15)) plt.plot(range(training_epochs), my_cost) plt.xlabel("Epoch",fontsize = 20) plt.ylabel("Loss",fontsize = 20, rotation = 1) plt.show() # VISUALIZE AUTOENCODER BOTTLENECK plt.figure(figsize=(20, 15)) plt.scatter(pred[:,0], pred[:,1], c = Y, s = 1, cmap = 'tab20') plt.title('Autoencoder: 8 Hidden Layers', fontsize = 20) plt.xlabel("Dimension 1", fontsize = 20) plt.ylabel("Dimension 2", fontsize = 20) plt.show()

Deep Autoencoder用於降低1.3M 10X小鼠腦細胞的維數,TensorFlow實現

同樣,低維表示看起來很有希望。通過對配置和其他超參數的一些調整,可以獲得更好的解析度。同樣,對於Keras來說,這個TensorFlow自動編碼器實現速度非常快,與FItSNE,UMAP和SCVIS用於生成這種降維圖的時間相比只需幾分鐘。如果由於某種原因需要重新採樣程序進行分析,那麼使用FItSNE,UMAP和SCVIS就不太可行,但使用深度學習應該非常簡單。

總結

在這裡,我們了解到單細胞RNA測序(scRNAseq)正在迅速提高我們對生物細胞特徵多樣性的理解。降維可能是典型scRNAseq分析背後最重要的分析工具。由於scRNAseq技術提供的大量數據,黃金標準降維技術tSNE目前在可擴展性方面遇到困難。

通過Autoencoder和UMAP進行深度學習提供了當前最靈活和可擴展的方法來獲得scRNAseq數據的低維表示,並且很可能在未來取代tSNE。最後,我們學習了如何使用Keras和TensorFlow為巨大的10X Genomics 1.3M小鼠腦細胞scRNAseq數據集實現Deep Autoencoders。

相關焦點

  • 一種基於深度學習的低成本細胞生物學研究方法
    Foldscope 是一款超級便宜的摺紙顯微鏡,通常售價僅為1.5美元,大大的激勵了「民科」們對生物學的研究熱情。自從面世以來,它已經被廣泛應用於各種地方。有人用它研究植物細胞和昆蟲幼蟲,有人用它檢驗當地的水質量,有人用它檢驗藥品的真實性,也有人用它檢驗牛奶的微生物含量。
  • Nature | 幹細胞圖片資料庫共享,深度學習預測細胞外觀
    據Nature最新報導,艾倫細胞科學研究所(Allen Institute for Cell Science)今天發布的網站Allen Cell Explore,包含數千個幹細胞的三維立體圖像,不止是發現每個細胞的獨特外觀,通過深度學習算法,該研究所還對細胞的外觀進行了預測。
  • 谷歌開發出的深度學習算法模型,可用於預測DNA鏈等亞細胞結構的變化
    圖像處理是如何應用到生物學領域的?在生物學研究領域,細胞生物學的研究核心點就是:結構決定功能。其中,蛋白質學中就有理論明確提出,細胞的狀態由細胞內結構的位置以及細胞周期的改變來確定。在這一背景下,研究學者自然就想到從3D顯微鏡圖像切入研究細胞結構,希冀藉由圖像處理來進行生物學的研究。
  • 化學所發展基於深度學習的蛋白質單分子分析新方法
    化學所發展基於深度學習的蛋白質單分子分析新方法 2019-05-24 化學研究所 【字體:  在國家自然科學基金委、科技部和中國科學院的支持下,中科院化學研究所分子納米結構與納米技術重點實驗室方曉紅課題組長期致力於發展分析活細胞體系蛋白質動態變化的單分子顯微成像新方法,所建立的利用光漂白計數定量表徵膜蛋白化學計量比等單分子研究方法,為化學生物學和生物醫學研究提供了先進的技術(
  • 將深度學習(AI)應用於地理空間(RS、GIS、GPS)
    探測者說:AI機器學習早已被廣泛應用於地理空間。例如,在遙感中,使用K Means或ISODATA聚類算法處理衛星圖像。貝葉斯網絡、分類和回歸樹(CART)、支持向量機(SVM)和隨機森林已全部用於從用戶交互工作站中的圖像中提取特徵,這正是計算機擅長的事情。圍繞深度學習的研究導致了開源API的激增,例如Google的TensorFlow、Microsoft的CNTK。
  • AI工具將幫助我們充分利用空間生物學
    在空間生物學中,我們可以預期將AI應用於基因或蛋白質活性的逐細胞圖譜將為重大發現鋪平道路。最近出現了許多關於AI有關於細胞和組織空間生物學的知識,組織是細胞的異質混合物。這在疾病中尤其重要。細胞也是生命的基本單位,它們由鄰近它們的那些細胞形成。毫不奇怪,該研究領域試圖調查細胞和組織的異質性。過去十年見證了單細胞測序RNA的廣泛採用。
  • 現今細胞生物學的主要研究方向
    什麼是細胞生物學毫無疑問這是門研究細胞的學問,那麼我們為什麼要研究這門學問呢?通俗講:因為我們在乎生命,而細胞是生命系統中重要的組成部分,所以我們要研究它。那麼什麼是細胞生物學呢?定義:細胞生物學是研究和揭示細胞基本生命活動規律的科學。細胞生物學、分子生物學、神經生物學和生態學並列被稱為生命科學的四大基礎學科。其中,細胞的研究更是生命科學的起點和出發點。早在1925年,生物學大師就提出」一切生命的關鍵問題都要到細胞中去尋找答案「。可見,細胞生物學在生命科學中的地位。
  • 細胞生物學怎麼複習?
    細胞生物學的複習過程的中心思想和生化是大概一致的,就是推薦一章一章過,具體的點生物化學這篇推文生化第一輪複習方法
  • CellPress|單細胞技術和基於深度學習的藥物反應預測
    目前,深度學習模型已經能夠從大量複雜的序列數據中提取出特徵,用於預測藥物的反應。論文的作者總結了近來單細胞技術和基於深度學習方法的藥物敏感性預測模型。作者認為,通過利用大規模的序列數據,深度學習模型可以幫助我們更好的利用單細胞數據去完成藥物反應預測任務。下圖是單細胞數據結合深度學習模型的一個概述圖。
  • 如何將深度學習應用於無人機圖像的目標檢測
    how-we-flew-a-drone-to-monitor-construction-projects-in-africa-using-deep-learning-b792f5c9c471如何將深度學習應用於無人機圖像的目標檢測
  • 細胞分化和幹細胞生物學
    細胞分化細胞分化是生物發育的基礎,其問題也是細胞生物學、發育生物學與遺傳學的重要匯合點。如:「一個受精卵通過分裂和分化是如何發育成為複雜的有機體的。「多細胞生物細胞既有時間上的分化,也有空間上的分化;3、細胞分化與細胞的分裂狀態和速度相適應,分化必須建立在分裂的基礎上,即分化必然伴隨著分裂,但分裂的細胞不一定就分化。
  • 清華交叉信息院曾堅陽研究組發文闡釋深度學習解碼蛋白質翻譯過程
    清華交叉信息院曾堅陽研究組發文闡釋深度學習解碼蛋白質翻譯過程 清華新聞網9月29日電  9月27日,清華大學交叉信息研究院曾堅陽研究組在《細胞》子刊《細胞·系統》(Cell Systems)發表了題為《利用深度學習分析核糖體停滯現象與蛋白質翻譯動態》(「Analysis of Ribosome Stalling and Translation
  • 2020細胞生物學學會落幕 尼康廣獲行業好評
    來源:環球網中國細胞生物學學會2020年全國學術大會暨學會成立40周年慶展現已圓滿落幕。中國細胞生物學學會2020年全國學術大會開展了18個分主題的學術交流,吸引了千餘名來自全國各地的科研機構、企事業單位的專家學者,促進了中國細胞生物學領域專家的交流與合作,推動了細胞生物學學科的發展。作為再生醫療領域的實踐者,尼康也攜最新產品出席了展會,向來賓展示了尼康在再生醫療領域的豐碩成果,吸引了眾多行業專家和觀眾駐足參觀。
  • 他是我國提出細胞生物學概念的第一人,1980年首創細胞生物學專業
    、中國細胞生物學主要奠基人之一、蘭州大學生命科學學院細胞生物學研究所所長。鄭國錩在蘭州大學開設了國內最早的細胞學課程和實驗,並編寫了我國第一本《細胞生物學》高校統編教材,該書連續印刷了10萬多冊,同時由他主編的《細胞生物學實驗教材》,也是我國生物專業的「經典」實驗教材。
  • Nature Neurosci: 神經科學的深度學習框架是什麼?
    深度學習初期可能借鑑了神經科學的經驗,比如大腦視覺皮層結構的模擬,層級編碼等,但真正促使深度學習大放異彩的,卻是源於對神經科學的背離,比如目前沒有生物數據支撐的反向傳播算法,Relu函數等。雖然這些規則的加入使得深度神經網絡在各類任務上的表現得到了極大的提升,接近甚至是優於人腦的表現,但為什麼會有這樣的效果仍是一個黑箱。
  • Nat Methods:光遺傳學——細胞生物學新研究利器
    在細胞生物學領域創新的研究方法並不是特別多。光遺傳學方法過去多應用於神經系統的研究。然而,全新的方法拓展了光遺傳學應用範圍,幾乎可以用於所有組織器官的細胞生物學研究,這一全新的技術可能會細胞生物學研究帶來新的曙光!傳統對細胞信號研究幾乎都是線性的,而光遺傳學可能提供了立體、空間,以及動態的細胞信號特徵,也可能為人類認識細胞信號轉導提供了完全不同的視野!
  • AI不再黑箱:利用可解釋的膠囊網絡算法識別細胞亞型
    、為細胞分類,對生命科學具有重要意義,一系列基於基因轉錄數據和深度學習的分類方法正在興起,但方法可解釋性往往不足。近日由北京師範大學張江組、中科研基因所蔡軍組合作發表的論文中,利用改進後的膠囊網絡深度架構,應用於轉錄組分析和細胞分類,取得良好效果並具有較強的可解釋性。我們邀請論文第一作者王力飛博士,在周四(12月17日)的生命複雜性讀書會中做線上分享,解讀這項研究。分享將在B站和騰訊會議同步進行,參與方式見文末。
  • |可解釋膠囊網絡深度學習框架從單細胞RNA測序...
    文中提出了一個使用膠囊網絡(稱為scCapsNet)的可解釋的深度學習體系結構。膠囊結構(代表一組特定對象屬性的神經元向量)捕捉層次關係。通過利用競爭性單細胞類型識別,scCapsNet模型能夠進行特徵選擇以識別編碼不同亞細胞類型的基因組。將RNA表達特徵有效地整合到scCapsNet的參數矩陣中,實現了亞細胞類型識別。
  • 蔡軍/張江開發出基於深度學習的單細胞轉錄組分析模型
    單細胞轉錄組作為單個細胞的特徵,可更加精確地定義細胞的類型。常規的基於單細胞轉錄組的分類方法首先是進行無監督的聚類,然後根據每個集群(Cluster)特異表達的細胞標記基因來對集群進行標註。雖然基於無監督的分類方法更容易發現新細胞類型,但是人工標註的過程費時費力。
  • 脫細胞異體真皮生物學特性
    脫細胞異體真皮(北京桀亞萊福生產)是最近幾年興起的一種真皮替代物,已有學者在燒傷整形、耳鼻咽喉頭頸外科、牙周病學、腦膜修補等多個學科領域進行實驗研究並應用於臨床修復。脫細胞異體真皮生物學特性脫細胞異體真皮是一種天然的細胞外基質,脫細胞異體真皮結構是膠原網架,膠原分子的三股螺旋結構非常穩定,不為一般蛋白酶水解,但可為膠原酶水解,膠原的降解較慢,半壽期為數周至數年不等。異體皮產生的免疫反應主要作用於表皮細胞、真皮中的成纖維細胞、內皮細胞等細胞成分,真皮的非細胞成分細胞外基質蛋白和膠原則相對無免疫活性。