返回目录:范文示例
今天小编给各位分享细胞生物学名词解释的知识,文中也会对其通过深度学习应用于细胞生物学和什么是深度学习等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!
内容导航:
一、深度学习应用于细胞生物学
本文将讨论深度学习如何帮助细胞生物学捕捉细胞群的多样性和复杂性。
单细胞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整合的巨大潜力,从而提高了将细胞分配给特定群体的准确性。
最后,单细胞的多组学技术(CITE-SEQ,scNMTseq等),即来自同一个生物细胞多个信息源,还没有达到很大的样本量典型scRNAseq但对未来非常有前途的深层数据集成挑战学习。
通过深度学习减少维度由于scRNAseq分析的主要目标是发现新的细胞群,因此它是机器学习术语中的无监督分析。因此,用于scRNAseq的两种最重要的分析技术是降维和聚类。
Autoencoder是一种无监督的人工神经网络(ANN),具有有意思的的"蝴蝶"结构,通常用于减少维数。与线性技术(如主成分分析(PCA),多维尺度(MDS),因子分析(FA)等相比,自动编码器执行非线性降维,因此可捕获单细胞数据的高度非线性结构。
在这里,我将使用~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:
至于上述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的一个巨大优势是它看起来非常快,因此可以扩展到大量的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()
同样,低维表示看起来很有希望。通过对配置和其他超参数的一些调整,可以获得更好的分辨率。同样,对于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。
一、什么是深度学习
随着阿尔法狗、无人驾驶、智能翻译的横空出世,“人工智能”这个已经存在60多年的词语,仿佛一夜之间重新成为热词。同时被科技圈和企业界广泛提及的还有“机器学习”“深度学习”“神经网络”…… 但事实是,如此喧嚣热烈的气氛之下,大部分人对这一领域仍是一知半解。
如果要说谁有资格谈论目前正在进行的“人工智能革命”,特伦斯·谢诺夫斯基(Terry Sejnowski)必然是其中一个。
在智能翻译、无人驾驶、阿尔法狗、微软小冰还被认为是远在天边的愿景时,谢诺夫斯基就已经在为深度学习领域奠定基础了。
Professor Terry Sejnowski.
Image: Salk Institute
谢诺夫斯基是20世纪80年代挑战构建人工智能主流方法的一小撮研究人员之一。他们认为,受大脑生物学启发的、那些被称为“神经网络”“连接主义”和“并行分布处理”的AI实现方法,会最终解决困扰基于逻辑的AI研究的难题,从而提出了使用可以从数据中学习技能的数学模型。正是这一小群研究人员,证明了基于大脑式的计算的全新方法是可行的,从而为“深度学习”的发展奠定了基础。
借由《深度学习:智能时代的核心驱动力量》一书出版机会,美国科技媒体《The Verge》采访了特伦斯·谢诺夫斯基,与他讨论了“人工智能”“神经网络”“深度学习”“机器学习”究竟有何区别?为何“深度学习”突然变得无处不在,它能做什么?不能做什么?以下是采访全文:
《深度学习:智能时代的核心驱动力量》
中信出版集团 2019.2
Q:首先,我想问一下定义。人们几乎可以互换地使用“人工智能”,“神经网络”,“深度学习”和“机器学习”等词语。 但这些是不同的东西。你能解释一下吗?
人工智能可以追溯到1956年的美国,那时工程师们决定编写一个试图仿效智能的计算机程序。
在人工智能中,一个新领域成长起来,称为机器学习。不是编写一个按部就班的程序来做某事——这是人工智能中的传统方法——而是你收集了大量关于你试图理解的事物的数据。例如,设想您正在尝试识别对象,因此您可以收集大量它们的图像。然后,通过机器学习,这是一个可以剖析各种特征的自动化过程,就可以确定一个物体是汽车,而另一个是订书机。
机器学习是一个非常大的领域,其历史可以追溯到更久远的时期。最初,人们称之为“模式识别”。后来算法在数学上变得更加广泛和复杂。
在机器学习中有受大脑启发的神经网络,然后是深度学习。深度学习算法具有特定的体系结构,其中有许多层数据流经的网络。
基本上,深度学习是机器学习的一部分,机器学习是人工智能的一部分。
Q: 有什么“深度学习”能做而其他程序不能做的吗?
编写程序非常耗费人力。在过去,计算机是如此之慢,内存非常昂贵,以至于人们采用逻辑,也就是计算机的工作原理,来编写程序。他们通过基础机器语言来操纵信息。计算机太慢了,计算太贵了。
但现在,计算力越来越便宜,劳动力也越来越昂贵。而且计算力变得如此便宜,以至于慢慢地,让计算机学习会比让人类编写程序更有效。在那时,深度学习会开始解决以前没有人编写过程序的问题,比如在计算机视觉和翻译等领域。
机器学习是计算密集型的,但你只需编写一个程序,通过给它不同的数据集,你可以解决不同的问题。并且你不需要是领域专家。因此,对于存在大量数据的任何事物,都有对应的大量应用程序。
Q:“深度学习”现在似乎无处不在。 它是如何变得如此主导潮流?
我可以在历史上精确地找到这一特定时刻:2012年12月在NIPS会议(这是最大的AI会议)上。在那里,计算机科学家Geoff Hinton和他的两个研究生表明你可以使用一个名为ImageNet的非常大的数据集,包含10,000个类别和1000万个图像,并使用深度学习将分类错误减少20%。
通常,在该数据集上,错误在一年内减少不到1%。 在一年内,20年的研究被跨越了。
这真的打开了潮水的闸门。
Q:深度学习的灵感来自大脑。那么计算机科学和神经科学这些领域如何协同工作呢?
深度学习的灵感来自神经科学。最成功的深度学习网络是由Yann LeCun开发的卷积神经网络(CNN)。
如果你看一下CNN的架构,它不仅仅是很多单元,它们以一种基本上镜像大脑的方式连接起来。大脑中被研究的最好的一部分在视觉系统,在对视觉皮层的基础研究工作中,表明那里存在简单和复杂细胞。如果你看一下CNN架构,会发现有简单细胞和复杂细胞的等价物,这直接来自我们对视觉系统的理解。
Yann没有盲目地试图复制皮质。他尝试了许多不同的变种,但他最终收敛到的方式和那些自然收敛到的方式相同。这是一个重要的观察。自然与人工智能的趋同可以教给我们很多东西,而且还有更多的东西要去探索。
Q:我们对计算机科学的理解有多少取决于我们对大脑的理解程度?
我们现在的大部分AI都是基于我们对大脑在60年代的了解。 我们现在知道的更多,并且更多的知识被融入到架构中。
AlphaGo,这个击败围棋冠军的程序不仅包括皮质模型,还包括大脑的一部分被称为“基底神经节”的模型,这对于制定一系列决策来实现目标非常重要。 有一种称为时间差分的算法,由Richard Sutton在80年代开发,当与深度学习相结合时,能够进行人类以前从未见过的非常复杂的玩法。
当我们了解大脑的结构,并且当我们开始了解如何将它们集成到人工系统中时,它将提供越来越多的功能,超越我们现在所拥有的。
Q:人工智能也会影响神经科学吗?
它们是并行的工作。创新神经技术已经取得了巨大的进步,从一次记录一个神经元到同时记录数千个神经元,并且同时涉及大脑的许多部分,这完全开辟了一个全新的世界。
我说人工智能与人类智能之间存在着一种趋同。随着我们越来越多地了解大脑如何工作,这些认识将反映到AI中。 但与此同时,他们实际上创造了一整套学习理论,可用于理解大脑,让我们分析成千上万的神经元以及他们的活动是如何产生的。 所以神经科学和人工智能之间存在这种反馈循环,我认为这更令人兴奋和重要。
Q:你的书讨论了许多不同的深度学习应用,从自动驾驶汽车到金融交易。你觉得哪个特定领域最有趣?
我完全被震撼到的一个应用是生成对抗网络,或称GANS。使用传统的神经网络,你给出一个输入,你得到一个输出。 GAN能够在没有输入的情况下开展活动 - 产生输出。
是的,我在这些网络创建假视频的故事背景下听说过这个。他们真的会产生看似真实的新事物,对吧?
从某种意义上说,它们会产生内部活动。事实证明这是大脑运作的方式。你可以看某处并看到一些东西,然后你可以闭上眼睛,你可以开始想象出那里没有的东西。你有一个视觉想象,当周围安静时,你闹钟声会浮现想法。那是因为你的大脑是生成性的。现在,这种新型网络可以生成从未存在过的新模式。所以你可以给它,例如,数百张汽车图像,它会创建一个内部结构,可以生成从未存在的汽车的新图像,并且它们看起来完全像汽车。
Q:另一方面,您认为哪些想法可能是过度炒作?
没有人可以预测或想象这种新技术的引入会对未来的事物组织方式产生什么影响。当然这其中有炒作。我们还没有解决真正困难的问题。我们还没有通用智能,就有人说机器人将不久后会取代我们,其实机器人远远落后于人工智能,因为复制身体被发现比复制大脑更复杂。
让我们看一下这一种技术进步:激光。它是在大约50年前发明的,当时占据了整个房间。从占据整个房间到我现在演讲时使用的激光笔需要50年的技术商业化。它必须被推进到体积足够小并可以用五美元购买它的程度。同样的事情将发生在像自动驾驶汽车这样的被炒作的技术上。它并不被期望在明年或者未来10年,就变得无处不在。这过程可能需要花费50年,但重点是,在此过程中会有逐步推进,使它越来越灵活,更安全,更兼容我们组织运输网络的方式。炒作的错误在于人们的时标设定错了。他们期待太多事情太快发生,其实事物只在适当的时候。
关于深度学习的问题可以看下这个网页的视频讲解:。
二、深度学习能应用在哪些领域?
深度学习的快速发展,不仅使机器学习得到许多实际的应用,还拓展了整个AI(人工智能的)的范围。 它将任务进行拆解,使得各种类型的机器辅助变成可能,具体分为以下几类应用:
1、无人驾驶汽车:深度学习在无人驾驶领域主要用于图像处理,可以用于感知周围环境、 识别可行驶区域检测、以及识别行驶路径识别。
2、图片识别及分类:识别出图片中的对象,并建立关键词,对图片进行分类。
3、机器翻译:基于深度学习理论,借助海量计算机模拟的神经元,在海量的互联网资源的依托下,来模仿人脑理解语言,形成更加符合语法规范、容易理解的译文。
4、目标识别:即不仅可以识别出是什么物体,还可以预测物体的位置,位置一般用边框标记。
5、情感识别:通过深度学习,帮助计算机识别新闻、微博、博客、论坛等文本内容中所包含情感态度,从而及时发现产品的正负口碑。
6、艺术创作:通过深度学习,让计算机学会根据不同的作曲家风格进行音乐编曲或者基于各流派画家进行绘画创作。
三、生命科学近年来有哪些新技术?
NO.1SARAH TEICHMANN: Expand single-cell biology(扩展单细胞生物学)
Head of cellular genetics, Wellcome Trust Sanger Institute, Hinxton, UK.
在过去的十年里,我们看到研究人员可以分析的单细胞数量大幅增加,随着细胞捕获技术的发展,结合条形码标记细胞和智能化技术等方法,在未来数量还将继续增加,对此,大家可能不以为然,但这可以让我们以更高的分辨率来研究更为复杂的样品,我们可以做各种各样的实验。比如说,研究人员不再只关注一个人的样本,而是能够同时观察20到100个人的样本,这意味我们能够更好的掌握人的多样性,我们可以分析出更多的发展时间点,组织和个体,从而提高分析的统计学意义。
我们的实验室最近参与了一项研究,对6个物种的250000个细胞进行了分析,结果表明,控制先天免疫反应的基因进化速度快,并且在不同物种间具有较高的细胞间变异性,这两个特征都有助于免疫系统产生有效的微调反应。
我们还将看到在单个细胞中同时观察不同基因组模式的能力发展。例如,我们不局限于RNA,而是能够看到染色质的蛋白质-DNA复合物是开放还是封闭。这对理解细胞分化时的表观遗传状态以及免疫系统和神经系统中的表观遗传记忆具有重要意义。
将单细胞基因组学与表型关联的方法将会发生演变,例如,将蛋白质表达或形态学与既定细胞的转录组相关联。我认为我们将在2019年看到更多这种类型的东西,无论是通过纯测序还是通过成像和测序相结合的方法。事实上,我们已经见证了这两种技术的一种融合发展:测序在分辨率上越来越高,成像也越来越多元化。
NO.2
JIN-SOO KIM: Improve gene editors(改进基因编辑)
Director of the Center for Genome Engineering, Institute for Basic Science, and professor of chemistry, Seoul National University.(首尔国立大学基因学研究所基因组工程中心主任、化学教授。)
现如今,蛋白质工程推动基因组工程的发展。第一代CRISPR基因编辑系统使用核酸酶Cas9,这是一种在特定位点剪切DNA的酶。到目前为止,这种方法仍然被广泛使用,但是许多工程化的CRISPR系统正在用新变体取代天然核酸酶,例如xCas9和SpCas9-NG,这拓宽了靶向空间——基因组中可以被编辑的区域。有一些酶比第一代酶更具特异性,可以将脱靶效应最小化或避免脱靶效应。
去年,研究人员报告了阻碍CRISPR基因组编辑引入临床的新障碍。其中包括激活p53基因 (此基因与癌症风险相关);不可预料的“靶向”效应;以及对CRISPR系统的免疫原性。想要将基因组编辑用于临床应用,就必须解决这些限制。其中一些问题是由DNA双链断裂引起的,但并非所有基因组编辑酶都会产生双链断裂——“碱基编辑”会将单个DNA碱基直接转换成另一个碱基。因此,碱基编辑比传统的基因组编辑更干净利索。去年,瑞士的研究人员使用碱基编辑的方式来纠正小鼠中导致苯丙酮尿症的突变基因,苯丙酮尿症是一种先天性代谢异常疾病,患者体内会不断累积毒素。
值得注意的是,碱基编辑在它们可以编辑的序列中受到了限制,这些序列被称为原间隔相邻基序。然而蛋白质工程可以用来重新设计和改进现有的碱基编辑,甚至可以创建新的编辑,例如融合到失活Cas9的重组酶。就像碱基编辑一样,重组酶不会诱导双链断裂,但可以在用户定义的位置插入所期望的序列。此外,RNA引导的重组酶将会在新的维度上扩展基因组编辑。
基因编辑技术在临床上的常规应用可能还需要几年的时间。但是我们将在未来一两年看到新一代的工具,将会有很多的研究人员对这项技术感兴趣,到时候他们每天都会使用这些技术。届时必然会出现新的问题,但创新的解决方案也会随之出现。
NO.3
XIAOWEI ZHUANG(庄小威): Boost microscopy resolution (提高显微镜分辨率)
Professor of chemistry and chemical biology, Harvard University, Cambridge, Massachusetts; and 2019 Breakthrough Prize winner.
超分辨率显微镜的原理验证仅仅发生在十几年前,但今天这项技术相对来说再平常不过,生物学家可以接触到并丰富知识。
一个特别令人兴奋的研究领域是确定基因组的三维结构和组织。值得一提的是,基因组的三维结构在调节基因表达中起到的作用越来越大。
在过去的一年里,我们报道了一项工作,在这项工作中,我们对染色质进行了纳米级的精准成像,将它与数千个不同类型细胞的序列信息联系起来。这种空间分辨率比我们以前的工作好一到两个数量级,使我们能够观察到各个细胞将染色质组织成不同细胞之间差异很大的结构域。我们还提供了这些结构域是如何形成的证据,这使我们更好地理解染色质调节的机制。
除了染色质,我们预见到在超分辨率成像领域空间分辨率有了实质性的提高。大多数实验的分辨率只有几十纳米,虽然很小,但与被成像的分子相比却没有什么差别,特别是当我们想解决分子间的相互作用时。我们看到荧光分子和成像方法的改进,大大提高了分辨率,我们预计1纳米分辨率的成像将成为常规。
同时,瞬时分辨率变得越来越好。目前,研究人员必须在空间分辨率和成像速度之间做出妥协。但是通过更好的照明策略和更快的图像采集,这些限制可以被克服。成千上万的基因和其他类型的分子共同作用来塑造细胞的行为。能够在基因组范围内同时观察这些分子的活动,将为成像创造强有力的机会。
NO.4
JEF BOEKE: Advance synthetic genomes (先进的合成基因组)
Director of the Institute for Systems Genetics, New York University Langone Medical Center, New York City.
当我意识到从头开始写一个完整的基因组变成可能的时候,我认为这将是一个对基因组功能获得新观点的绝佳机会。
从纯科学的角度来看,研究小组在合成简单的细菌和酵母基因组方面取得了进展。但是在合成整个基因组,特别是哺乳动物基因组方面仍然存在技术挑战。
有一项降低DNA合成成本的技术将会对行业产生帮助,但是目前还没有上市。今天发生的大多数DNA合成都是基于亚磷酰胺化学过程。所得核酸聚合物的最大长度和保真度都受到限制。
许多公司和实验室都在研究酶促DNA合成——这种方法有可能比化学合成更快、更准确、更便宜。目前,还没有一家公司在商业上提供这种分子。但是去年10月,一家总部位于巴黎的叫做DNA Script的公司宣布,它已经合成了一种150碱基的寡核苷酸,几乎符合化学DNA合成的实际限制。
作为一个群体,我们还研究了如何组装人类染色体DNA的大片段,并且我们可以使用这种方法构建100千碱基或更多的区域。现在,我们将使用这种方法来解剖大的基因组区域,这些区域对于识别疾病易感性非常重要,或者是其他表型特征的基础。
我们可以在酵母细胞中快速合成这些区域,因此我们应该能够制造数十到数百种以前不可能检测到的基因组变体。使用它们,我们将能够检查全基因组关联研究中涉及的数千个基因组基因座,它们在疾病易感性方面具有一定意义。这种解剖策略可能使我们最终能够确定这些变体的作用。
NO.5
CASEY GREENE: Apply AI and deep learning(应用人工智能和深度学习)
Assistant professor of systems pharmacology and translational therapeutics, Perelman School of Medicine, University of Pennsylvania, Philadelphia.
关于细胞生物学名词解释的问题,通过《深度学习能应用在哪些领域?》、《生命科学近年来有哪些新技术?》等文章的解答希望已经帮助到您了!如您想了解更多关于细胞生物学名词解释的相关信息,请到本站进行查找!