深度学习,足够多层次的神经网络,本质上是对特定分类函数的构造,可以从简单的分类函数如ReLU,sigmoid函数等等,如同微积分基本定理一样构造出高维的原函数,从而能够识别复杂的物体如人脸识别。我们更加看中其可能在生物科研中对大规模数据的处理所能够挖掘出可能的模式,能够与实际的生物机制构建一定的联系,从而能够开发出一定的技术如PCR,CRISPR。因为生物多个对象的关系构建可以理解为一个多变量的函数,如房价跟很多因素相关,其复杂的相互作用关系如果随机进行组合会有指数级爆炸的可能性,要构造出一个精确的解析解是很困难甚至由于生物的复杂性而不可能的,于是统计模拟就是一个很好的思路。。而且神经网络的隐藏层就可以视为一种近似,我们认为可以通过经过训练好的神经网络算法的一些参数来提供这些生物对象相互作用的证据,这种迁移学习的背后是假设在不同复杂现象下存在某种普遍的机制,因此是通用的,即图像的一些特征如边缘颜色等等(模式的模式)。这些提取出的特征可能就具有一定的生物学意义。如我们可以找到哪些对象之间的相关性更大,对于生物科研有一定的指导作用,而且更进一步的,我们可以在统计层次来理解各种相互作用,能够针对特定对象的变化对整体的影响做出更好的预测。
生物科研可能需要有科学范式的改变,即以大数据驱动的科学发现,然后和实验彼此促进,不断提高人类对生命的理解。如从非监督算法来挖掘生物大规模数据背后的模式即生物机制。
根据一定的输入,产生一定的输出,可能就具有一定的应用价值,这种函数的映射是我们的追求,是理解世界的一个方式,具体模型的参数确定就是这个黑箱式的函数映射。而且这种映射是可通用的,能够促进社会协作体系的发展,如智能诊断可以大大减轻医生的负担甚至促进技术的提高。如医学影像诊断,通过专家标记的图像和各种诊断,通过深度学习找到相关的特征,经过训练后,能够构建专家识别的特征(做出诊断的依据)和机器学习识别的特征的相关性,从而能够以一定的准确率来给不同图像进行疾病的分类。这个学习的过程和专家从菜鸟的学习是一致的,随着数据量的增加和计算能力的堆积,这些模型可以有越来越好的表现即更高的准确度和更低的错误率,直至逼近理论上的极限。如imagenet竞赛图像分类的准确性已经超越人类。三驾马车:数据+计算力+算法
以实验的思路来不断改进,需要有好的对照,能够基于已有工作有各种创新的思想来不断改进,如不同算法的组合,对原有假设的超越等等调整,并且通过相关指标的变化来论证自己的观点。我们可以使用神经科学和发育生物学等等学科的洞见迁移到机器学习的领域,如Hubel发现的神经元只能识别有限的特征,而视觉皮层功能柱能够识别复杂事物。而进一步的,我们可能通过神经环路的组合来构建更为复杂的对象如情感情绪等等。发育的过程也有一定的启发如镶嵌发育和梯度发,有内在的编程也有根据环境的调整。大脑的工作机制,进化论式的生物发育,可能都是某种底层机制导致的如能量最低原理。还有物理也有一定的启发,如海森堡的矩阵力学和薛定谔的波动力学的等价,我们的大规模矩阵运算可以通过量子力学的实验来等价。
因为本质上我们就是通过提取复杂对象的数据来分析,提取出各种特征,在这个基础上重新建模,并根据与现实的差距反过来调整模型(如反向传播算法对参数的调整),直至与现实足够近似,视为等价(数学分析的思路)。我们需要训练好的模型具有一定的鲁棒性和泛化性。各种超参数的调整就是为了逼近某些极值从而能够收敛。为了开发算法,数学十分重要,基础的有微积分,线性代数,概率论和统计学等等。还有各种计算机的知识,程序设计语言,数据结构,算法,计算机组成原理,数据库等等。
数据需要良好的组织形式,即结构化的数据才更好地进行运算。数据的表示十分重要,可以有one-hot编码,有softmax函数映射来得出最后的分类。
神经网络基础:
从最简单的二分法(1/0)的实现如逻辑回归等等,到这些分类器的集成,构建更加复杂的分类。
函数的构造需要对参数的确定,前者是选择模型,后者是建立具体模型。这可以理解为一定计算资源的规划问题,希望能够收敛到最佳水平。如同搜索,不可能随便寻找遍历整个空间,需要一定的优化方法如剪枝。于是引入约束条件,即损失函数Lossfunction,可以是残差和,本质上都是构造,在利用梯度下降法确定参数的具体的值的时候,能够更快收敛.代价函数costfunction,是损失函数的加和后平均。当代价函数取得极值时,此时对应的参数就说最佳的参数,即算法收敛。
梯度下降法,需要求解损失函数相对于特定变量的偏导数,以及需要确定学习率a。如w=w-a×dJ(w)/dw。在一定程度上,导数的求解可以理解为差商(d(x+h)-d(x))/h,只要h足够小,可以视为逼近这个极限,即导数,可以理解为图像的斜率。当然,理论数学可以无限小(连续变化),但计算机的实现是有限的(离散数学的实现),我们只能取一个足够小但并非充分小的值,只要误差小于一定值,我们就接受。这和统计学的p值的思想是一致的。
多变量函数的构造,可能是不同函数的复合,如J(a,b,c)=3*(a+bc),因此求偏导数需要用到链式法则。我们一般情况只能观察到各个变量的微小变化对其他变量的影响。从而能够根据这些数据来反过来推断变量的组织形式即函数的具体结构。以模块化的思想来解耦,将复杂函数分解为一定的模块函数,这是计算机科学的分而治之的思想。只要变量足够多,理论上可以构造出任意连续函数,只是我们需要考虑计算的代价,只能找到一个局部最优解。。最优化的思路,理论上存在着一组参数,能够使得算法有最好的性能,我们就是不断地逼近其,所以有各种调参和模型的组合等等操作。如从简单的神经网络的隐藏层不断增加,也有卷积神经网络等等的改进。
以线性代数的思想来定义各种数据,如以一维数组代表一个向量,从而能够将特定的信息映射到一个高维的空间,然后在这个基础上探索各种关系。我们需要以表现定理来理解。如线性方程组的求解对应于现实的规划问题。在具体的编程中,由于计算机的离散特性,往往使用这些线性代数的对象如向量,矩阵来构建这些函数的映射关系。如梯度下降的学习率就是需要我们定义的一些常数。。
把现实的对象抽象到矩阵的形式,进行各种变换,可以找到不同矩阵的相似性,从而认为其对应的现实对象是相似的。有矩阵的各种运算如加减,矩阵的点积和叉积,求逆,转置等等,还有矩阵对角化可以求解特征值。典型的例子是图像是以像素矩阵来存储的。
向量化,利用numpy库进行计算可以减少计算时间,因为矩阵运算有一定的优化。vectorization,使得计算加速。毕竟很多情况下我们需要处理稀疏矩阵的情况,运算量大,耗时长,只能采取某些快速的近似算法来计算一个可以接受的结果。
可视化是我们理解数据的一个方法,python的matplotlib库提供很多工具。
浅层神经网络:最简单的模型f(x)=∑wixi+b。xi是输入,经过这个中间的隐藏层的函数映射f,能够产生一定的输出f(x),可以继续经过一定激活函数的处理如softmax函数来得到特定的分类。隐藏层的嵌套和复合函数的构造是一致的。理论上,通过对参数的调整,我们可以构造出任意满足我们需求的函数,如把图像输入映射到具体的文本输出,即图像识别。当然,浅层的神经网络没有这么好的性能,需要更加复杂的神经网络结构才能构造出来,但深度学习的性能其实也是基于浅层神经网络的简单性能不断升维实现的,可以视为微积分的原函数。而神经网络的隐藏层就对应于不同对象的特征,最后能够通过参数的调整实现高维层次的识别,对应于线性代数的基底的线性组合(特征=基底)。于是就可以抽象为大规模的矩阵运算z【i】【i】=w【i】【i】*x【i】【i】+b【i】.使用向量矩阵的形式来表示数据是有理由的,一方面是计算机存储和运算的需求,同时各种矩阵计算的优化使得大规模的运算量减少,能够以能够承受的时间和空间开销得到比较满意的结果。
激活函数是非线性的,可以实现我们需要的功能,毕竟世界本来就是复杂的,只能以线性来逼近。而非线性函数的使用,能够更好地逼近现实情况。有sigmoid函数1/(1+e,^-1),ReLU函数max(0,z),tanh函数(e^z-e^-z)/(e^z+e^-z),leakingReLU函数max(0.001z,z)
激活函数同样可以求导,可以利用梯度下降法找到使得损失函数最小的值。
反向传播算法backpropagationintuition,根据损失函数的求导来反过来对隐藏层的参数进行修改,如同一个反馈环的形成,初始输入产生损失函数的一定的值,而通过损失函数的梯度下降,对前面隐藏层的参数进行调整,最后循环反复使得损失函数的值最小,同时各个参数也收敛于特定的值。
批处理batch到随机random处理来更改参数的值,从初始化到参数更新,如w=w-a*dw,w的初始值可以是随机的,而且学习率a也是可以变化的。
足够多的矩阵运算能够使得模型的参数收敛,即训练出可以使用的算法。因此GPU的使用带来的计算能力的提升是算法发挥出重要作用的基础,而大规模的数据使得运算具有更大的意义。
如果我们突然患上重病,我们如何能够利用技术来改变自己的命运?我们可以对疾病进行建模,通过各种特征如各种指标,血常规,尿常规,粪常规等等,其他实验室检查,医学影像,病理检查等等,构造复杂的神经网络模型,通过已经整理好的结构化数据即确诊疾病和对应的指标矩阵,来对这个模型进行训练,从而能够对疾病做出诊断。然后在这个基础上,一方面可以继续学习成熟的疗法与疾病的对应,另一方面可以构造出新的疗法,如确定特定疾病需要改变的指标,以及各种已知的能够对这些指标产生影响的处理,经过训练,能够得到每个人不同情况的不同疗法,可能这就能够在绝望中挽救生命。
深层神经网络:基于浅层神经网络的叠加形成的更加复杂的模型,能够以更高的准确度来处理更加复杂的情况。本质上也是构造输入和期望输出之间的函数。其中的多隐藏层对应于不同的特征,能够构建更加复杂的函数,即特征的选择性组合对应的对象。而足够深层的网络可以构建出非常多的特征,这种高维空间的构造理论上可以与现实构建很好的对应关系。
参数的调整和训练是建模工作的重点,也是最耗计算资源的步骤,为了找到使得算法性能最好的参数组,需要经过大量的实验尝试,有一定的碰运气充分成分。超参数:学习率,隐藏层数,每层神经元数等等。
隐藏层也可以封装成为一定的模块block,即特定的特征,这些经过训练收敛的参数可以迁移到不同领域的学习。
深度学习和大脑的工作机制可能共享同一套体系,本质上都是计算,能够在特定的输入和输出之间构建中间的函数,是一种对黑箱的解构和重新实现。