深度学习是一步一步发展而来的,新的成就也是在原有的基础上,逐步取得突破,有一些东西是一点一点变化,突破发展而来的,也就是每一次小的突破和每一次小的突破累积起来,构成一个明显的进步。我们可以通过观察其中不变的东西,同时仔细考量其中变化的东西,我们就能够看出一些端倪,也会更有把握和信心。
在更多成功的思想基础上,逐步的突破和创新发展带来新的亮丽风景。透过细致观察,我们可以发现成功有迹可循,结果可以理解,成功可以接受,成果可以复制。
变化,代表着进步;不变,意味着“有效设定”的继承!我们可以看到在“有效继承”和“突破性变化”二者之上的进步,以及精彩呈现!
从一个很高的角度来看,所有的神经网路架构都是对输入数据的表示——以向量或嵌入矩阵的形式。这种方法将有用的统计或语义信息(图像信息)进行编码。这些隐表示可以被用来进行一些有用的任务。神经网络通过反馈(即损失函数)来构建更好的表示。
1、目前的状态,人类和机器都能很好地区分猫和狗,这是因为图像中本就具有丰富的结构,而这些结构可以被人类和机器学习模型使用。同样,自然语言中也有丰富的结构,这些结构也可以被人类和机器学习模型利用。更好地利用这些结构有助于我们提升认知能力和行动能力。
2、卷积神经网络就是机器学习利用自然图像中一些已知结构的创造性方法。同样,Transformer是机器学习利用自然语言中一些(已知)结构的创造性方法。
3、多层感知机的输入是二维图像,其隐藏表示在数学上是一个矩阵,在代码中表示为二维张量。
(多层感知机)
(卷积神经网络)
卷积网络的提出,利用了图像中的局部性和移不变性,这两个性质可以将多层感知机简化为卷积神经网络,参数量可以从10亿量级下降至数百量级,且能够取得基本一致的效果。当然,改变输入或隐藏表示的维度。这种大幅度减少参数的代价是:我们的特征现在是平移不变的,并且在确定每个隐藏激活的值时,我们的层只能包含局部信息。所有的学习都依赖于强加归纳偏见。当这种偏差与现实相符时,我们就得到了样本效率高的模型,可以很好地推广到看不见的数据。但是,当然,如果这些偏差与现实不符,例如,如果图像不是平移不变的,我们的模型甚至可能难以适应我们的训练数据。
从多层感知机到卷积神经网络,我们可以看到其中对图像模态数据属性特点的利用。
4、 虽然深度神经网络的概念非常简单——将神经网络堆叠在一起,但是选择不同的网络架构和超参数,这些神经网络的性能会发生很大的变化。例如,transformer选择注意力机制模型,与之前的编码器-解码器架构中选择RNN或LSTM时,二者的性能变化。下面会对比AlexNet和Transformer之间的异同点,观察其中的相同和不同之处,找寻共性特点,以及变化带来的进步。
从LeNet到AlexNet,其中最突出的变化之一,是非线性激活函数的改变。AlexNet使⽤ReLU⽽不是sigmoid作为其激活函数,LeNet则使用sigmoid作为激活函数。
重要概念:非线性变换
非线性变换(Non-linear Transformation): 通过使用激活函数(如ReLU、Sigmoid、Tanh等),神经网络能够引入非线性,这使得网络能够学习和模拟更加复杂的函数映射,从而提高表示的能力。
非线性变换在神经网络中扮演着重要的角色,非线性变换的一些关键作用和特点的介绍如下:
-
模拟复杂关系: 非线性激活函数使得神经网络能够学习和模拟输入数据之间的复杂非线性关系。没有非线性激活函数,无论神经网络有多少层,都只能表示线性关系。
-
增加表达能力: 非线性变换扩展了神经网络的表达能力,允许网络捕捉和表示更丰富的数据特征。
-
解决非线性问题: 现实世界中的许多问题本质上是非线性的。非线性激活函数使得神经网络能够解决这些问题,如图像识别、语音处理等。
-
激活函数的选择:
- ReLU(Rectified Linear Unit):在正区间内线性,计算简单,训练速度快,是目前最常用的激活函数之一。
- Sigmoid:将输出压缩到(0, 1)区间,常用于二分类问题的输出层。
- Tanh:将输出压缩到(-1, 1)区间,常用于需要输出在负值和正值之间分布的情况。
-
避免线性叠加: 如果一个神经网络中所有的层都是线性的,那么无论层数多少,都可以被压缩为一个单一的线性层,这将大大限制网络的能力。非线性激活函数打破了这种线性叠加。
-
反向传播中的链式法则: 在神经网络的训练过程中,反向传播算法利用了激活函数的导数来计算梯度。非线性激活函数的可导性质保证了这一过程的可行性。
-
缓解梯度消失问题: 某些非线性激活函数(如ReLU)可以在一定程度上缓解梯度消失问题,有助于在深层网络中传播梯度。
-
稀疏激活: 如ReLU这样的激活函数可以实现稀疏激活,即在给定的输入下只有一部分神经元被激活,这有助于提高网络的效率和泛化能力。
-
损失函数的非线性: 神经网络的输出层通常会使用一个非线性激活函数,与损失函数相结合,以适应不同类型问题的需要,如交叉熵损失常用于分类问题。
-
设计复杂网络结构: 非线性变换使得设计复杂的网络结构成为可能,如残差网络(ResNet)利用跳跃连接来解决深度网络中的梯度消失问题。
-
泛化能力: 非线性激活函数有助于提高神经网络的泛化能力,使得网络不仅在训练数据上表现良好,也能在未见过的数据上取得较好的性能。
非线性变换是神经网络设计中的一个基本且重要的组成部分,它赋予了神经网络处理复杂数据和任务的能力。
5、层数增加的成功:AlexNet的较高层建立在这些底层表示的基础上,以表示更大的特征,如眼睛、鼻子、草叶等,而更高的层可以检测整个物体,如人、飞机、狗或飞盘。最终的隐藏神经元可以学习图像的综合表示,从而使属于不同类别的数据易于区分。
补充:Transformer也是如此,较高层很够表示更大的语言特征,如句子、段落,而更高的层可以检测到整个语义,如整篇文章。最终的隐藏神经元可以学习语言的综合表示,从而使属于不同类别的数据易于区分。
重要概念:层次化表示
层次化表示(Hierarchical Representation): 神经网络通常设计为多个层次的架构,每个层次都构建在前一个层次的基础上,形成一种层次化的特征表示。这种层次化的信息处理方式使得网络能够捕捉数据中的多尺度和多级别的特征
层次化表示是神经网络中的一个核心概念,尤其在深度学习和卷积神经网络(CNN)中表现得尤为明显。以下是层次化表示的一些关键点:
-
概念基础: 层次化表示基于这样的观察:现实世界中的许多复杂对象和现象可以通过它们的成分和部分以层次化的方式进行分解。例如,在图像中,像素是基本单元,它们组合成边缘,边缘再组合成形状,形状最终构成可识别的对象。
-
从简单到复杂: 在神经网络中,较低层次通常学习到简单的、局部的特征(如线条和角点),而较高层次则学习到更复杂的、全局的特征(如物体的部分或整个物体)。
-
逐层抽象: 每一层的输出都成为下一层的输入,从而形成了一种逐层抽象的过程。这种层次化的处理方式使得网络能够从原始数据中提取出越来越高级的特征。
-
卷积神经网络(CNN): CNN是层次化表示的一个典型例子。它们使用卷积层来学习图像的局部特征,然后通过池化层(Pooling Layer)来降低特征的空间维度,并通过全连接层(Fully Connected Layer)或其他高层结构来整合这些特征以进行决策。
-
循环神经网络(RNN): RNN通过在序列数据上操作,捕捉时间序列中的层次化信息,如在自然语言处理中,RNN可以捕捉到单词、短语和整个句子的结构。
-
自注意力机制: 在某些神经网络架构中,如Transformer模型,自注意力机制允许网络在序列的不同部分之间直接建立联系,这可以看作是一种跨越不同层次的特征交互。
-
泛化能力: 层次化表示提高了网络的泛化能力,因为它允许网络学习到数据中更抽象和鲁棒的特征表示,这些特征表示对于不同的任务和数据变化更为稳定。
-
计算效率: 通过层次化的设计,神经网络可以在高层上处理更加抽象的表示,这通常需要更少的参数,从而提高计算效率。
-
迁移学习: 层次化表示的一个额外好处是它允许迁移学习,即网络在某个任务上学习到的低层次特征可以在其他相关任务上复用。
-
网络深度: 网络的深度(即层数)对层次化表示的质量有很大影响。更深的网络能够学习到更复杂的层次化表示,但同时也更难以训练。
某种意义上说,层次化表示是神经网络能够有效处理复杂数据和任务的关键因素之一,它使得网络能够从原始输入中自动发现和提取有用信息,构建出有助于各种机器学习任务的特征表示。
6、尽管一直有一群执着的研究者不断钻研,试图学习视觉数据的逐级表征,然而很长一段时间里这些尝试都未有突破。深度卷积神经网络的突破出现在2012年。逐级表征,是多层神经网络最突出的特点之一,高层表示依赖于低层的表示,从而提升网络的表示能力,学习更好的表示,这是神经网络的核心功能之一。好的表示,意味更好的任务性能,更广泛和更有价值的应用。
transformer中的逐级表征:
通过将前一段翻译成数学符号以及向量的方式去创建对整个体系结构的认知。将长句 中的第个单词的隐藏特征 从 ℓ 层更新至ℓ+1 层(这是一个构建更好表示的过程)。
在Transformer模型中,逐级表征(也称为分层或层次化表示)是通过模型的不同层级逐步构建的。每一层都对输入数据进行处理,以捕获不同级别的特征和模式。以下是Transformer模型中逐级表征的关键特点:
-
自注意力机制: Transformers使用自注意力机制来捕捉输入序列中不同位置之间的关系。在每个自注意力层中,模型会计算输入序列中每个元素对其他所有元素的注意力权重。
-
多头注意力: Transformers中的多头注意力允许模型同时在不同的表示子空间中关注输入的不同部分,这增强了模型捕获复杂关系的能力。
-
逐层抽象: 通过多个自注意力层,Transformer模型能够逐层抽象输入数据,每一层都构建在前一层的输出之上,从而形成逐级的特征表示。
-
位置编码: 由于Transformer缺乏像循环神经网络那样的递归结构,它使用位置编码来保留序列中元素的顺序信息。
-
逐层特征融合: 通过逐层的自注意力处理,模型能够将输入序列中的长距离依赖关系逐步融合到逐层的特征表示中。
-
层间残差连接: Transformers在每个自注意力层和前馈网络层之后使用残差连接,这有助于避免在深层网络中出现的梯度消失问题。
-
层归一化: 通常在残差连接之后应用层归一化,这有助于稳定训练过程,并可能提高模型的泛化能力。
-
深度和宽度: Transformers模型的深度(层数)和宽度(每层中注意力头的数量或神经元的数量)共同决定了模型的表示能力。
-
跨模态表征: Transformers不仅用于处理自然语言处理任务,还可以用于跨模态任务,如结合图像和文本,其中模型需要学习到能够连接不同类型数据的逐级表征。
-
预训练和微调: 在预训练阶段,Transformer模型通常在大规模数据集上进行训练,以学习通用的语言表示。在微调阶段,模型在特定任务上进行进一步训练,以构建任务特定的逐级表征。
-
模型容量: Transformer模型的容量(即模型大小和复杂度)影响其学习逐级表征的能力,更大的模型通常能够捕获更复杂的特征。
Transformer模型的逐级表征是其强大的性能和灵活性的基础,使得它在自然语言处理和其他领域的任务中都取得了显著的成功。
7、与芯片设计中工程师从放置晶体管到逻辑元件再到逻辑块的过程类似,神经网络架构的设计也逐渐变得更加抽象。开始研究人员从单个神经元的角度思考问题,后来发展到整个层,现在又转向块,重复层的模式。这个可以通过整个transformer架构的设计中观察到,不同类型的层、块的堆叠设计。
使⽤块的想法⾸先出现在⽜津⼤学的视觉⼏何组(visual geometry group)的VGG⽹络中。通过使⽤循环 和⼦程序,可以很容易地在任何现代深度学习框架的代码中实现这些重复的架构。
从单个神经元到整个层,再到重复层的模式,神经网络的设计和应用不断演进,以适应日益复杂的任务和数据类型。这个过程实际上体现了深度学习领域在理解、设计和优化神经网络结构方面的深刻进步。
神经网络的设计和应用的演进过程:
神经网络的设计和应用已经经历了显著的演进过程,这样的演进是为了适应不断增长的复杂任务和多样化的数据类型。演进过程更详细的描述:
-
单个神经元: 最初的神经网络研究集中在单个神经元的模型上,如McCulloch-Pitts神经元模型和感知机。这些模型是理解神经网络如何处理信息的基础。
-
单层网络: 随后,研究者将单个神经元组合成单层网络,这些网络能够解决简单的分类和模式识别任务。
-
多层感知器(MLP): 多层感知器通过增加一个或多个隐藏层来提高网络的学习能力,这使得网络能够学习更复杂的函数映射。
-
卷积神经网络(CNN): CNN通过引入卷积层来专门处理图像数据,利用局部感受野和权重共享来捕捉图像的局部特征。
-
循环神经网络(RNN): RNN设计用于处理序列数据,通过在序列的不同时间步上传递信息来捕捉时间依赖性。
-
深度网络和重复层: 深度学习革命带来了深度网络的设计,其中相同的层或块被重复堆叠多次,形成了非常深的网络结构。这种设计提高了模型的学习能力,并解决了梯度消失问题。
-
残差网络(ResNet): ResNet通过引入残差连接,允许训练更深层次的网络,其中相同的网络结构被重复使用。
-
Transformer模型: Transformers采用了自注意力机制,并且其核心是由多个相同的自注意力和前馈网络层组成的。这种设计允许模型并行处理序列中的所有元素。
-
模块化设计: 现代神经网络设计强调模块化,其中网络的不同部分可以独立设计和优化,以适应特定的任务需求。
-
优化算法和正则化技术: 随着网络深度的增加,开发了新的优化算法和正则化技术,如Adam优化器和Dropout正则化,以提高模型的训练效率和泛化能力。
-
计算效率和模型压缩: 在设计神经网络时,研究人员越来越关注计算效率和模型大小,以便于在资源受限的设备上部署模型。
-
注意力机制和稀疏性: 注意力机制的引入不仅提高了模型的性能,还带来了计算上的稀疏性,这有助于提高模型的效率。
-
跨领域应用: 神经网络的设计和优化也开始考虑跨领域应用,如自然语言处理、计算机视觉和语音处理等领域的融合。
这个演进过程体现了深度学习领域在理解、设计和优化神经网络结构方面的深刻进步,也展示了研究人员对算法、硬件和应用需求之间相互作用的深入理解。随着技术的不断发展,可预见神经网络的设计将继续演进,以解决更多的挑战性问题。
8、迁移学习
迁移学习(Transfer Learning): 通过迁移学习,神经网络可以在一个任务上训练得到的知识应用到另一个相关任务上,这有助于网络在数据较少的情况下也能构建出好的表示。
迁移学习允许一个模型在一个任务上学习得到的知识(通常是特征表示)被应用到另一个相关任务上。迁移学习的一些关键点如下:
-
数据效率: 迁移学习可以提高模型在新任务上的训练效率,尤其是在数据较少的情况下。
-
利用预训练模型: 通常涉及使用在大型数据集(如ImageNet)上预训练的模型,并将其应用于特定的、数据量较小的任务。
-
特征重用: 在源任务中学习到的特征表示可以重用在目标任务中,因为这些特征可能捕捉到了对两个任务都有用的通用信息。
-
适应性: 迁移学习使模型能够适应新的、不同的任务,而不需要从头开始训练。
-
减少计算资源: 由于预训练模型已经学习了大量有用的特征,迁移学习减少了训练模型所需的计算资源。
-
微调(Fine-tuning): 在迁移学习中,通常在固定预训练模型的一部分参数的同时,对模型的其他部分进行微调,以适应新的任务。
-
领域适应(Domain Adaptation): 迁移学习可以用于领域适应,其中模型在一个领域(如医疗图像)上训练,然后迁移到另一个领域(如自然图像)。
-
多任务学习: 迁移学习与多任务学习结合,可以帮助模型在一个任务上的学习提升其在其他任务上的性能。
-
零样本和少样本学习: 迁移学习是零样本和少样本学习的关键技术,它允许模型在没有或几乎没有标注数据的情况下进行任务。
-
跨模态迁移: 迁移学习也可以在不同的数据模态之间进行,例如,从文本数据迁移到图像数据。
-
模型泛化能力: 通过迁移学习,模型可以提高其泛化能力,因为它结合了来自不同任务的知识。
-
知识蒸馏: 迁移学习可以与知识蒸馏技术结合,其中预训练的大模型的知识被转移到一个更小、更高效的模型中。
-
挑战和限制: 迁移学习也面临一些挑战,如源任务和目标任务之间的差异可能导致负迁移(negative transfer)。选择合适的源任务和目标任务对于成功迁移至关重要。
迁移学习是深度学习中一个非常强大的工具,它使得模型能够快速适应新任务,并且可以显著提高在数据匮乏情况下的学习效率。