一、基本介绍
深度学习是机器学习的一个分支,强调使用深层神经网络来学习数据的表示和特征。深度学习的核心思想是通过将多个神经网络层级地叠加在一起,从而构建出复杂的模型,能够自动从原始数据中学习高级抽象特征。深度学习是机器学习核心的一部分,解决了机器学习特征工程的问题。深度学习的关键组件是神经网络,尤其是深层神经网络。这些网络由多个层组成,每一层都包含一些神经元(或节点),这些神经元与数据的不同特征相关联。信息从网络的输入层流动到输出层,每一层都对数据进行一些变换和抽象,以提取越来越高级的特征。
1.1机器学习与深度学习的区别
- 模型复杂度:
- 机器学习:通常涉及使用相对简单的模型,如线性回归、决策树、支持向量机等。这些模型适用于许多任务,但在处理复杂数据和问题时可能效果有限。
- 深度学习:强调使用深层神经网络(由多个层组成)来学习数据的复杂特征表示。这种模型可以自动从原始数据中提取高级特征,适用于图像、自然语言处理等领域的复杂问题。
- 特征工程:
- 机器学习:通常需要手动设计和选择合适的特征,这称为特征工程。特征工程的质量直接影响模型的性能。
- 深度学习:更强调端到端的学习,即从原始数据中学习特征表示,无需手动设计特征。这减轻了特征工程的负担,但需要更大规模的数据和计算资源。
- 数据需求:
- 机器学习:通常需要相对较少的数据来训练模型,特别是在传统机器学习算法中。
- 深度学习:一般需要大量的数据来训练深度神经网络,以充分发挥其强大的能力。深度学习在大规模数据集上表现更出色。
- 计算资源:
- 机器学习:通常对计算资源的要求较低,适合在较普通的硬件上运行。
- 深度学习:由于深层神经网络的复杂性,通常需要更大规模的计算资源,如GPU或TPU。
- 应用领域:
- 机器学习:适用于各种各样的任务,从分类到回归,从聚类到降维等。
- 深度学习:在图像识别、自然语言处理、语音识别等领域取得了巨大的突破,并在这些领域表现出色。
1.2特征工程的作用
- 数据特征决定了模型的上限
- 数据预处理和特征提取是最核心的
- 算法与参数选择决定了如何逼近这个上限
1.3计算机视觉概念
- 计算机中的图像:由一个个像素点组成,一张图片被表示成三维数组的形式,每个像素的值从0-255,例如:300(长) * 100(宽) * 3(表示颜色通道RGB)
- 计算机视觉面临的挑战:
- 照射角度
- 形状改变
- 部分遮盖
- 背景混入
1.4机器学习常规套路
- 收集数据并给定标签
- 训练一个分类器
- 测试,评估
1.5为什么K近邻算法不能用来图像分类?
- 图像通常包含局部特征和全局特征,KNN算法很难在这两者之间进行有效的权衡。例如,两张相似的图像可能在局部特征上非常接近,但在全局特征上却存在差异。KNN算法在处理复杂边界情况时可能表现不佳,尤其是在没有适当的特征工程或数据预处理的情况下。通常来说,更复杂的算法,如卷积神经网络(CNN),在图像分类任务中表现更好。CNN能够自动提取图像中的高级特征,并在处理高维图像数据时具有更好的性能。
二、神经网络基础
2.1得分值
- 得分值:神经网络的得分值通常是表示模型在不同类别上的预测分数,用于最终的分类决策。
- f(x) = w*x + b
- f(x) = w*x + b
2.2损失函数
- 损失函数:损失函数衡量的是模型预测值与实际值之间的差异,而这些预测值通常是由模型的得分值产生的。
- 损失函数 = 数据损失 + 正则化惩罚项
2.3Softmax分类器
2.3.1归一化
- 将一组原始分数转换为概率分布。这种归一化方法可以将原始分数映射到一个0到1之间的范围,并确保所有类别的概率之和为1。
2.3.2计算损失值
- 利用对数损失函数,可得出预测值越接近1时,损失值越小,预测值越接近0时,损失值越大。
2.4反向传播
- 从损失函数开始,通过链式法则计算损失函数对于网络中每个参数(权重和偏置)的梯度。这一过程从输出层开始,逐层向后计算梯度,利用中间保存的信息(如激活值、权重乘积等)。利用计算得到的梯度信息,使用优化算法(如梯度下降)来更新网络的参数,使得损失函数值减小,模型更好地逼近训练数据。
2.5神经网络整体结构
神经网络是一种机器学习模型,其结构由神经元和层组成,可以用于解决各种任务,如分类、回归、图像处理等。需要注意的是,神经网络的结构可以因任务不同而有所变化。例如,卷积神经网络(CNN)在图像处理中应用广泛,递归神经网络(RNN)在序列数据处理中具有优势,而更复杂的结构如Transformer用于自然语言处理任务。这些不同的结构都是在基本的神经网络结构上进行扩展和改进的。下面是一个典型的前馈神经网络的整体结构:
2.5.1基本概念
- 输入层(Input Layer):接收原始数据或特征向量作为输入。每个输入节点对应一个特征或维度。
- 隐藏层(Hidden Layers):位于输入层和输出层之间的一层或多层。每个隐藏层包含多个神经元,每个神经元与上一层和下一层的所有神经元相连。隐藏层的数量和神经元数量是模型结构的一部分,可以根据任务需求和实验来确定。
- 隐藏层神经元的数量越多训练性能越好,有助于模型更好地拟合数据。但过多的神经元数量可能导致过拟合。从而在验证数据或测试数据上表现不佳。
- 输出层(Output Layer):产生模型的最终输出。输出层的神经元数量取决于任务类型。例如,对于二分类问题,可能只有一个输出神经元,表示概率;对于多分类问题,输出神经元的数量等于类别的数量。
- 连接权重(Connection Weights):连接输入、隐藏和输出层的神经元之间的权重。这些权重是模型需要学习的参数,它们决定了信号在神经网络中的传播方式。
- 偏置(Biases):每个神经元都有一个偏置,用于调整神经元的激活阈值。偏置的作用是确保神经元在没有输入信号时也能激活。
- 激活函数(Activation Functions):位于每个神经元之后,将神经元的加权和输出转化为非线性激活值。激活函数引入了非线性性质,使神经网络能够捕捉更复杂的特征和模式。
- Sigmoid函数:
- Relu函数:
- Sigmoid函数:
2.5.2运行流程
输入数据经过输入层,通过权重和偏置传递到隐藏层,经过激活函数后传递到输出层,产生最终的预测输出。在训练过程中,通过反向传播算法调整连接权重和偏置,使得模型能够逐渐优化预测,以最小化损失函数。
2.5.3注意事项
- 隐藏层神经元的数量是神经网络结构中的一个重要超参数,它影响着网络的表示能力和学习能力。然而,隐藏层神经元数量越多并不总是更好,需要根据具体情况进行权衡和选择。
2.6数据预处理
- 预处理结果会使得模型的效果发生很大的差异,数据预处理涉及一系列对原始数据的操作,以准备数据用于输入神经网络训练。包括如下步骤:
- 中心化:中心化是指将数据的均值移动到零点,即通过减去数据的均值,使得数据在坐标轴上围绕零点分布。中心化有助于消除特征之间的平移影响,以及使得模型在训练时更容易收敛。中心化后,数据的均值为0。
- 数据标准化:标准化是指通过除以数据的标准差,将数据的尺度缩放到统一的范围。标准化后,数据的均值为0,标准差为1。标准化有助于消除特征之间的尺度差异,使得模型更稳定。
- 中心化:中心化是指将数据的均值移动到零点,即通过减去数据的均值,使得数据在坐标轴上围绕零点分布。中心化有助于消除特征之间的平移影响,以及使得模型在训练时更容易收敛。中心化后,数据的均值为0。
2.7参数初始化
- 参数初始化是深度学习中的关键步骤,它涉及为神经网络的权重和偏置设置初始值。良好的参数初始化可以加速模型的收敛速度,避免梯度消失和梯度爆炸等问题。以下是一些常见的参数初始化方法:
- 随机初始化(Random Initialization):最常见的方法是从均匀分布或正态分布中随机采样来初始化权重和偏置。这有助于避免对称性,从而使网络学习不同的特征。需要注意的是,初始化的范围和方差需要根据网络结构和激活函数的性质进行适当的调整。
2.8Drop-OUT
- Dropout是一种用于正则化神经网络的技术,旨在减少过拟合问题,提高模型的泛化能力。Dropout通过在训练过程中随机丢弃一些神经元(即将其输出设为零),以使网络在不同的子集上训练,从而降低神经元之间的强依赖关系,防止某些神经元在训练中过于特定化于某些数据。
- Dropout的操作如下:
- 在每次训练迭代中,以一定的概率(通常为0.5)随机选择一部分神经元,将它们的输出设置为零。
- 对于每次迭代,选择被丢弃的神经元都是随机的,这样每个神经元都有机会被丢弃,不依赖于其他神经元。
- 在前向传播和反向传播过程中,被丢弃的神经元都不参与计算,这相当于训练了多个不同的子模型。
三、卷积神经网络
3.1基本概念
卷积神经网络(Convolutional Neural Network,简称CNN)是一种在计算机视觉和图像识别任务中广泛应用的深度学习模型。它通过模拟人类视觉处理方式,能够有效地提取图像或其他二维数据的特征。
- CNN的核心是卷积层(Convolutional Layer),卷积层利用一组可学习的滤波器(也称为卷积核或特征检测器)对输入数据进行局部感知和特征提取。这些滤波器通过滑动窗口的方式在图像上进行卷积操作,得到一系列的特征映射(Feature Maps),其中每个特征映射对应一个滤波器。
- CNN还包括池化层(Pooling Layer),池化层通过降采样的方式减少特征映射的空间大小,从而减少参数数量和计算复杂度,同时保留重要的特征信息。常用的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。
- 在卷积层和池化层之后,通常还会有全连接层(Fully Connected Layer)和激活函数(Activation Function)。全连接层将特征映射展平成向量,并与权重矩阵进行矩阵乘法运算,得到最终的分类结果。激活函数则引入非线性变换,增加模型的表达能力。
- CNN通过多层卷积层和池化层的堆叠,可以逐渐提取出更加抽象、高级的特征表示。这些特征表示有助于模型区分不同类别的图像,并且具有平移不变性和局部感知性等优势。因此,CNN在图像识别、物体检测、语义分割等任务上取得了很好的效果,并成为计算机视觉领域的核心技术之一。
3.2应用领域
- 图像分类:对图像进行分类,即将输入的图像分为不同的预定义类别。这在识别猫和狗的图像、车辆型号分类等任务中被广泛应用。
- 目标检测:用于检测图像中的物体,并给出物体的边界框和类别。目标检测在无人驾驶、视频监控、人脸识别等领域有重要应用。
- 语义分割:像素级别地对图像进行分割,给出每个像素所属的类别标签。语义分割在医学图像分析、地理影像解译等领域有广泛应用。
- 视频分析:不仅适用于静态图像,还可以处理视频数据。通过时间维度上的卷积操作,可以提取视频中的时空特征,如动作识别、视频内容理解等。
- 人脸识别:用于人脸检测、人脸对齐和人脸识别等任务。在社交媒体、安防系统和身份验证等方面有着广泛应用。
- 风格转换:学习不同图像风格之间的映射关系,实现图像的风格转换。这在艺术创作、图像处理等方面有很多有趣的应用。
- 医学影像分析
3.3与传统神经网络的区别
3.4卷积神经网络整体架构
- 输入层(Input Layer):接收原始输入数据,如图像或其他二维数据。
- 卷积层(Convolutional Layer):使用一组可学习的滤波器对输入数据进行卷积操作,提取局部特征信息。通常包括多个卷积核(滤波器),每个卷积核生成一个特征映射。
- 激活函数(Activation Function):引入非线性变换,增加模型的表达能力。常用的激活函数包括ReLU(Rectified Linear Unit)、Sigmoid和Tanh等。
- 池化层(Pooling Layer):通过降采样的方式减少特征映射的空间大小,从而减少参数数量和计算复杂度,同时保留重要的特征信息。常用的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。
- 全连接层(Fully Connected Layer):将特征映射展平成向量,并与权重矩阵进行矩阵乘法运算,得到最终的分类结果。全连接层在模型的最后几层通常会出现,用于将高级特征映射转化为分类或回归结果。
- 输出层(Output Layer):输出模型的预测结果,根据具体任务的需求选择相应的输出形式,如对于分类问题,通常使用Softmax函数生成类别概率分布。
3.4.1卷积层
卷积操作在CNN中起到了非常重要的作用,它可以对输入数据进行特征提取。在图像处理中,卷积操作通过将一个滤波器(也称为卷积核或内核)应用于输入图像的不同位置来完成。滤波器是一个小的矩阵,其中包含了一组权重参数。通过逐元素相乘并求和的方式,滤波器与输入图像的局部区域进行卷积运算,生成一个新的输出值。然后,移动滤波器并在整个输入图像上滑动,重复这个过程,最终生成一个特征映射(卷积特征),用于表示输入图像中的某种特定特征。
-
卷积操作是针对每个颜色通道独立进行
-
卷积操作迭代多次:一次卷积操作执行后在得到的特征图的基础上再次进行卷积循环往复。
-
卷积层涉及参数:
-
滑动窗口步长:定义了卷积核在输入图像上滑动的步长。较大的步幅可以减少输出特征图的大小(处理文字数据),而较小的步幅可以保持更多的空间信息(处理图像数据步长为1就可以)。
-
卷积核大小:定义了卷积核的尺寸,通常是一个正方形或矩形的形状。例如,一个3x3的卷积核表示宽度和高度均为3个像素。
-
卷积核数量:指定了卷积层中使用的卷积核的数量。每个卷积核都会产生一个特征映射。更多的卷积核可以捕获更多的特征信息。
-
边缘填充:在输入图像周围填充额外的像素值,以控制卷积操作后特征图的大小。填充可以用于保持特征图的大小、减少边缘信息损失以及减少过拟合。
- 零填充(Zero Padding):在图像的边界周围添加一圈值为零的像素。这种方法能够保持图像尺寸不变,并在卷积操作时,使卷积核能够涵盖图像边缘的像素。
-
-
卷积计算公式:
-
卷积参数共享:指的是在一个卷积层中,不同位置上的卷积核所使用的参数是共享的。这种共享参数的方式有助于减少模型的参数量,提高模型的泛化能力,并且能够在图像的不同位置上检测相同类型的特征。
3.4.2池化层
池化层用于减小特征图的空间维度,从而降低计算复杂度,减少过拟合,并提取更具有鲁棒性的特征。池化层有两种主要类型:最大池化(Max Pooling)和平均池化(Average Pooling)。
- 最大池化:最大池化是一种池化操作,它在每个池化区域内选择输入特征图的最大值作为输出值。最大池化有助于保留主要特征(权重更重要),同时减小特征图的维度。它在图像中的平移和局部变化下具有一定的不变性,可以帮助网络更好地捕捉物体的位置和纹理信息。
- 平均池化(不常用):选取每个区域内的平均值作为输出。池化操作通常使用固定大小的滤波器(池化窗口)在输入特征图上进行滑动,并根据池化方式选择最大值或平均值。
3.5深度卷积神经网络模型
3.5.1AlexNet
AlexNet是一种经典的深度卷积神经网络模型,由Alex Krizhevsky等人于2012年提出,并在ImageNet图像分类挑战赛中取得了很大的成功。AlexNet的设计对于深度学习的发展起到了重要的推动作用。
3.5.2VGG
VGG(Visual Geometry Group)是由牛津大学的研究团队提出的深度卷积神经网络模型,于2014年在ImageNet图像分类挑战赛中取得了优异的成绩。VGG的设计简单而有效,主要特点是使用了相同大小的卷积核和均匀的网络结构。VGG网络的一个重要贡献是展示了增加深度对于提升模型性能的重要性。通过增加网络的深度,VGG在ImageNet挑战赛上取得了很好的结果,并在许多其他计算机视觉任务上也表现出色。此外,VGG的简单而统一的结构使得人们更容易理解和实现该网络。
3.5.3ResNet(常用)
ResNet(Residual Network)是一种非常深的卷积神经网络模型,由Kaiming He等人于2015年提出。ResNet的设计主要解决了深度神经网络中的梯度消失和梯度爆炸问题,使得可以构建更深的网络而不会导致性能下降。引入了残差学习(Residual Learning)的概念,通过跳跃连接(skip connection)来让信息直接从前一层传递到后面的层。这使得网络在每个层级上可以选择性地学习残差,即前一层与后面层之间的差异。这种设计使得网络可以更容易地学习到恒等映射(identity mapping),从而保留原始数据的信息。ResNet可以构建非常深的网络,如ResNet-50、ResNet-101等,而VGG的网络相对较浅。
3.5.4感受野
感受野(Receptive Field)是指神经网络中每个神经元在输入图像上感知的区域大小。对于卷积神经网络来说,感受野决定了神经元对输入图像中不同位置的信息的接受程度。在卷积神经网络中,每个卷积层的感受野大小取决于前一层的卷积核大小、步幅和填充参数。感受野的大小可以通过逐层计算得到。对于一层卷积层来说,如果卷积核的大小为k×k,步幅为s,填充为p,则该层输出特征图上的每个神经元的感受野大小为(k-1)×s + k。感受野越大越好。
- 使用小卷积核的优点:
四、递归神经网络
4.1基本概念
递归神经网络(Recursive Neural Network,RNN)是一种能够处理具有递归结构的数据的神经网络。与传统的前馈神经网络(Feedforward Neural Network)不同,RNN具有自反馈的机制,可以将信息在网络内部进行传递和处理。RNN最初用于处理自然语言中具有递归结构的句子,例如语法树或逻辑关系。在传统的神经网络中,每个输入都会被独立地处理,而RNN在处理一个输入的同时还会将之前的状态作为输入传递给下一个时间步。这种递归的结构使得RNN可以对序列数据进行建模,并且在处理长期依赖性任务时效果更好。
然而,传统的RNN也存在一些问题,尤其是在处理长序列时,可能会出现梯度消失或梯度爆炸问题,导致学习变得困难。为了解决这些问题,一些改进的RNN变体被引入,如长短时记忆网络(LSTM)和门控循环单元(GRU)。
4.2LSTM网络
LSTM网络是一种特殊类型的循环神经网络(RNN),旨在克服传统RNN在处理长序列时可能出现的梯度消失或梯度爆炸问题。通过引入称为"门"的机制,来有效地管理和记忆序列中的信息。这些门控制着信息的流动,包括遗忘不重要的信息、更新当前信息以及输出新的信息。LSTM的关键部分包括:
- 输入门(Input Gate):决定是否将新信息添加到细胞状态中。它通过sigmoid激活函数来控制信息的输入。
- 遗忘门(Forget Gate): 决定哪些旧信息应该被遗忘。类似于输入门,它也使用sigmoid激活函数。
- 细胞状态(Cell State): 用于存储和传递信息。通过输入门和遗忘门的操作来更新。
- 输出门(Output Gate): 决定要输出的新隐藏状态,它结合了当前输入和前一个隐藏状态,并通过sigmoid和tanh激活函数来生成输出。
4.3词向量模型-Word2Vec
Word2Vec 是一种流行的词向量(Word Embedding)模型,用于将单词映射到连续的向量空间中,从而能够在计算机中更好地表示和处理文本数据。它的核心思想是通过预测上下文或目标词汇来学习单词的分布式表示,使得在向量空间中相似的词具有相似的表示。
- 如何构建训练数据:
4.4不同模型比较
4.4.1CBOW
CBOW的目标是通过给定上下文词汇来预测中心词。例如,对于句子 “I love playing soccer with my friends”,当上下文窗口设置为2时,CBOW会尝试从 “I”、“love”、“soccer” 和 “with” 的词向量预测中心词 “playing”。CBOW的优点之一是相对于Skip-gram,它的训练速度更快,因为它在每个训练样本中只需要计算一个预测。
4.4.2Skip-gram
Skip-gram的目标是从一个中心词预测其周围的上下文词汇。例如,对于句子 “I love playing soccer with my friends”,当上下文窗口设置为2时,Skip-gram会尝试从中心词"playing"预测 “I”、“love”、“soccer” 和 “with”。相对于Skip-gram,CBOW在处理不常见词汇时可能表现较差,因为它将多个上下文词汇的信息平均汇总到一个中心词中。
- 如果语料库过大,可能的结果太多,最后一层相当于softmax,计算起来十分耗时,如何解决?
- 初始方案:输入两个单词,看他们是不是前后对应的输入和输出,也就相当于一个二分类任务。
- 改进方案:负采样,每个训练样本中,除了正确的上下文词汇,还会随机选择一些“负样本”(即非上下文词汇),使模型在训练时仅需要关注少量的词汇。在大规模数据集中,使用较少的负样本(例如5-20个),而在小规模数据集中,可能需要更多的负样本(例如50个)。
4.5词向量训练过程
- 词向量训练是通过机器学习模型从文本数据中学习单词的分布式表示。下面是一般词向量训练过程的步骤:
- 数据预处理:
- 清洗文本:去除特殊字符、标点符号等,并将文本转换为小写。
- 分词:将文本分割成单词或标记的序列。
- 构建词汇表:将所有单词按照一定的条件加入词汇表,忽略低频词汇或者进行截断。
- 选择模型:常见的模型包括Word2Vec(Skip-gram或CBOW)
- 初始化词向量矩阵:对词汇表中的每个单词,初始化一个随机向量。这些向量是模型训练的初始参数。
- 通过神经网络反向传播来计算更新,此时不光更新权重参数矩阵w,也会更新输入数据。
- 数据预处理: