一,基础概念
1.1 相关名词
1.1.1 机器学习(ML)
-
定义:是一种人工智能的分支,机器学习的目标是让计算机具备从经验中学习的能力。
-
分类:
- 传统机器学习:通常依赖于手工设计的特征(决策树,支持向量机,随机森林)
- 深度学习
-
子领域:
- 监督学习(Supervised Learning):
- 监督学习是机器学习中最常见的分支之一,它涉及从带有标签的训练数据中学习模型,以进行预测或分类。例如,图像分类、文本分类等任务都属于监督学习。
- 无监督学习(Unsupervised Learning):
- 无监督学习是在没有标签的数据中寻找隐藏结构或模式的分支。聚类(Clustering)和降维(Dimensionality Reduction)是无监督学习的例子。
- 半监督学习(Semi-Supervised Learning):
- 半监督学习结合了监督学习和无监督学习的元素,它使用带有标签的和未标记的数据进行训练。这对于数据标记成本较高的情况非常有用。
- 强化学习(Reinforcement Learning):
- 强化学习是一个涉及智能体与环境交互、学习最佳动作策略的领域。它在游戏、机器人控制和自动驾驶等领域有广泛应用。
- 迁移学习(Transfer Learning):
- 迁移学习旨在将在一个任务上学到的知识和经验应用到解决一个相关但不完全相同的新任务中,以提高性能。它在数据稀缺、领域适应等方面具有重要意义。
- 生成建模(Generative Modeling):
- 生成模型试图学习数据的生成过程,以生成与原始数据相似的新样本。GAN(生成对抗网络)和VAE(变分自编码器)是生成建模的代表。
- 自监督学习(Self-Supervised Learning):
- 自监督学习是一种从数据中自动生成标签的方法,通常通过将数据的某些部分作为输入来学习模型,以预测其他部分。它在自然语言处理和计算机视觉等领域广泛应用。
- 神经网络(Neural Networks):
- 神经网络是一种基于生物神经元模型的机器学习模型,它包括深度神经网络(DNN)、卷积神经网络(CNN)、循环神经网络(RNN)等不同类型。
- 自然语言处理(NLP):
- 自然语言处理是研究如何使计算机理解和生成自然语言文本的领域,包括文本分类、命名实体识别、机器翻译等任务。
- 计算机视觉(Computer Vision):
- 计算机视觉涉及将机器学习应用于图像和视频分析,包括图像分类、目标检测、图像生成等任务。
- 弱监督学习(Weakly Supervised Learning):
- 弱监督学习是一种在训练数据中只有部分标签可用的情况下进行学习的方法。
- 时序数据分析(Time Series Analysis):
- 时序数据分析涉及处理时间序列数据,例如股票价格、气象数据等,以进行预测和分析
- 监督学习(Supervised Learning):
1.1.2 深度学习(DL)
- 定义:强调使用深度神经网络来学习数据的高级特征表示
- 优势:自动提取数据中的特征,无需手工设计特征
1.1.3 损失函数/目标函数
-
损失函数定义:用于度量模型的预测值与实际值之间的差距或误差
-
损失函数目标:是将这种差距最小化
-
目标函数:更广泛的术语,它可以用来表示整个机器学习或深度学习任务的优化目标。损失函数是目标函数的一个组成部分
1.1.4 训练误差/泛化误差
-
训练误差:模型在训练集上的误差,误差大小等于训练时的损失函数的值
-
泛化误差:模型在测实际上的性能
-
模型复杂度和误差的关系:
模型复杂度越高训练误差越小,但是泛化误差不一定最小,优化深度学习模型的目标就是降低模型的泛化误差
1.1.5 过拟合/欠拟合
-
过拟合
-
表现:过拟合表现为模型在训练数据上表现很好(训练误差好),但在测试数据或实际应用中的新数据上表现不佳(泛化误差不好)
-
原因:
- 较高模型复杂性或参数数量时,这使得模型能够记住训练数据中的噪声和细节。
- 当训练数据量较小
- 特征选择不当
- 练时间过长
- 未使用正则化技术
-
解决办法:增加训练数据,简化模型,正则化引入权重衰减,丢弃法将隐藏单元按一定概率丢弃,使用交叉验证来评估模型的性能
-
欠拟合
-
表现:模型无法得到较低的训练误差
1.1.6 正则化
- 作用:用于防止模型过度拟合训练数据,提高模型的泛化能力
- 手段:向模型的损失函数中添加额外的项来实现
- 常见方法:
- L1正则化:
- 通过在损失函数中添加参数的绝对值之和来实现。
- L1 正则化的目标是使一些参数变为零,从而实现特征选择,即自动选择最重要的特征,去除不重要的特征。这有助于减少模型的复杂性,并提高泛化能力。
- L1 正则化的损失项:λ * Σ|θᵢ|
- 其中,λ是正则化强度的超参数,θᵢ表示模型的参数。
- L2正则化
- 它通过在损失函数中添加参数的平方之和来实现。
- L2 正则化的目标是减小参数的值,但不会使它们变为零,从而减小参数之间的差异,提高模型的稳定性。它有助于防止模型的过拟合。
- L2 正则化的损失项:λ * Σ(θᵢ²)
- L1正则化:
1.1.7 优化算法
- 作用:用于调整模型的参数以最小化或最大化一个目标函数,以提高模型的性能。
- 常见优化算法:
- 梯度下降(Gradient Descent):
- 梯度下降是最基本的优化算法之一。它通过计算目标函数关于模型参数的梯度,并沿着梯度的反方向更新参数,从而使目标函数逐渐减小。随机梯度下降(Stochastic Gradient Descent,SGD)是一种常见的变种,它在每个训练样本上进行参数更新,通常更快但可能不稳定。
- Adam:
- Adam(Adaptive Moment Estimation)是一种自适应学习率的优化算法。它结合了梯度的一阶矩估计(梯度的均值)和二阶矩估计(梯度的方差),以动态调整学习率,适应不同参数的更新速度。
- RMSProp(Root Mean Square Propagation):
- RMSProp是一种自适应学习率的优化算法,类似于Adam。它根据梯度的平方的指数加权移动平均值来调整学习率,以便更好地适应不同参数的更新速度。
- Momentum:
- 动量优化算法通过引入动量项来加速优化过程。它利用梯度的指数加权移动平均值来更新参数,从而减少震荡并加速收敛。
- 梯度下降(Gradient Descent):
1.1.8 学习率
- 作用:重要超参数,控制了模型参数在每次迭代中的更新幅度
- 影响:对训练深度学习模型的收敛性和性能影响重大
1.1.9 正向传播/反向传播
- 正向传播
- 是指数据从模型的输入层向前传递,经过一系列神经网络层的计算,最终得到模型的输出
- 在正向传播过程中,模型的参数保持不变
- 反向传播
- 正向传播后,通过计算目标函数对模型参数的梯度,然后将梯度信息反向传播回模型的各个层次,以便更新参数
- 反向传播是优化算法的一个关键步骤,用于计算梯度信息,使优化算法能够调整参数以最小化目标函数
- 步骤:
- 通过正向传播计算模型的输出预测值
- 计算损失函数,用于衡量预测值与实际值之间的差距
- 然后,通过链式法则,反向传播从输出层开始,逐层计算梯度,以确定损失函数对每个参数的影响
- 最后,使用梯度下降或其他优化算法,根据计算得到的梯度信息来更新模型的参数,使损失函数逐渐减小,模型性能逐渐提高
1.1.10 分类问题/回归问题
-
深度学习问题分为两大类:分类问题和回归问题
-
分类问题:
- 目标:将输入数据分为不同的类别或标签中的一个。
- 分类模型:如卷积神经网络(CNN)、支持向量机(SVM)、决策树等
- 损失函数:通常是交叉熵损失(Cross-Entropy Loss)
-
回归问题:
- 目标:预测一个连续值的输出
- 回归模型,如线性回归、神经网络回归、决策树回归等
- 损失函数:通常是均方误差(Mean Squared Error,MSE)或类似的函数,用于衡量预测值与实际值之间的差距
1.1.11 全连接层(稠密层)
- 定义:输出神经元和各个输入完全连接
1.1.12 激活函数
- 作用引入非线性变换(对隐藏层按元素运算的非线性函数进行变换,在作为下一个全连接层的输入)
-
ReLU函数
R e L U ( x ) = m a x ( x , 0 ) ReLU(x)=max(x,0) ReLU(x)=max(x,0)
仅保留正数元素,负数元素清零优势:
- 非常简单,计算效率高
- 对梯度消失问题有一定程度的缓解,使得网络更容易训练。
- 导数在大多数点上都是非零的,这有助于梯度下降的收敛。
劣势:
- 当输入是负数时,ReLU的输出为零,这会导致相应的神经元在训练期间停止更新。
-
sigmoid函数
s i g m o i d ( x ) = 1 1 + e x p ( − x ) sigmoid(x)=\frac{1}{1+exp(-x)} sigmoid(x)=1+exp(−x)1
将元素的值变到0到1之间优势:
- 输出在0和1之间,适用于二元分类问题
劣势:
- 容易发生梯度消失问题
- 涉及指数运算,慢
-
tanh函数:双曲正切
t a n h ( x ) = 1 − e x p ( − 2 x ) 1 + e x p ( − 2 x ) tanh(x)=\frac{1-exp(-2x)}{1+exp(-2x)} tanh(x)=1+exp(−2x)1−exp(−2x)
优势:- 输出在-1和1之间,适用于双边分类问题。
劣势:
- 涉及指数运算,慢
1.2 线性回归
注:线性回归,softmax回归和MMLP都是深度学习常用的模型算法
- 作用:建模和分析变量之间关系的线性方法。它假设目标变量是自变量的线性组合,通过拟合一个线性模型来预测目标变量
- 结构:只有一个输入特征,一个输出(预测值),没有隐藏层
- 评价:深度学习的特例(一层),被视为只有一个层的神经网络模型
1.3 softmax回归
- 作用:用于处理多类别分类问题。它通过将多个二分类逻辑回归模型进行组合,将输入数据映射到多个类别的概率分布
- 结构:一个输入层、一个输出层,但没有隐藏层
- 评价:深度学习的特例(一层),被视为具有多类别输出的神经网络,softmax回归的输出单元从一个变成了多个
1.4 多层感知机:MLP
- MLP 可以解决各种问题,包括分类和回归,具有更强大的非线性表示能力
- 结构:一个或多个隐藏层,每个隐藏层包含多个神经元
- 层数:涉及计算的层数,不包括输入层
- 问题:使添加再多隐藏层,依然与仅含输出层的单层神经网络等价
- 解决方案:引入非线性变换的激活函数
1.4.1 MLP中的激活函数
- 每个隐藏层的神经元中,会将输入的加权和与偏置项通过激活函数进行非线性变换,得到该神经元的输出
二,深度学习算法流程
2.1 数据准备
- 收集和整理数据集:获取包含输入特征和相应目标(标签)的数据集,确保数据质量和合理性
- 数据预处理:对数据进行清洗、归一化、标准化、缺失值填充等操作,以便提高模型训练的效果
2.2 模型构建
- 选择模型架构:根据问题的性质,选择合适的深度学习模型,如前馈神经网络、卷积神经网络、循环神经网络等
- 设计网络结构:确定网络的层数、每层的神经元数量、激活函数等,以及可能需要的正则化、批归一化等操作
- 初始化参数:对模型的权重和偏置进行初始化,以便开始训练过程
2.3 选择损失函数和优化算法
-
损失函数:根据问题类型,选择适当的损失函数,如均方误差用于回归问题,交叉熵用于分类问题
-
优化算法:选择梯度下降法的变体来最小化损失函数,以更新模型的参数
2.4 模型训练
-
前向传播:将输入数据传递到网络中,得到模型的预测值
-
计算损失:使用选定的损失函数计算模型预测与真实值之间的误差
-
反向传播:利用链式法则计算损失函数对每个参数的梯度,以便更新参数
-
参数更新:根据优化算法的规则,使用梯度信息更新模型的权重和偏置
-
重复以上步骤:重复进行多次迭代,直到模型收敛或达到预先定义的停止准则
2.5 模型评估
- 使用验证集或测试集评估模型的性能,可以使用各种指标如准确率、均方误差等,根据问题的特性选择适当的评估指标
2.6 调参和优化
- 根据模型在验证集上的表现,对模型的超参数进行调整,如学习率、正则化参数等。
- 可以考虑使用交叉验证等方法来选择最佳模型
2.7 模型部署和应用
-
将训练好的模型部署到实际应用中,用于实时或批量处理新的数据。
-
在部署过程中,可能需要考虑模型的性能、效率、内存占用等因素。
三,前馈神经网络:FNN
- 评价:最基本神经网络模型,其信息传递是单向的,从输入层经过若干个隐藏层,最终到达输出层
- 结构:由多个神经元组成,分为输入层、若干个隐藏层和输出层。输入层接受输入数据,输出层产生最终的预测或输出
- 单向传递:信息在网络中的传递是单向的(RNN则不是,具有反馈连接,因为隐藏层的结果又传递回去)
- 权重:每个连接都有一个相应的权重,用于调整传递的信号强度
- 偏置:用于调整神经元的激活阈值
- 训练:反向传播算法来进行训练,即根据损失函数的梯度来更新权重和偏置,以最小化损失函数
四,深度神经网络:DNN
- 和FNN的关系:当前馈神经网络包含多个隐藏层时,被称为深度前馈神经网络,它是前馈神经网络的推广
- 优势:深度神经网络由于拥有更多的隐藏层,可以学习到更高层次的特征表示,这使得它在处理复杂任务时具有更强大的表达能力
五,卷积神经网络:CNN
5.1 卷积层
- 评价:CNN中最重要的组成部分
- 作用:卷积层使用一个或多个卷积核(filter)在输入数据上滑动,通过对局部区域进行卷积操作来提取特征
5.1.1 二维卷积计算
- 输入数组:是一个3×3的二维数组
- 卷积核:是一个2×2的二维数组(又称过滤器,卷积核)
- 互相关计算:对应元素相乘再相加
- 在CNN中,我们使用的卷积操作实际上是互相关计算
- 因为网络自动学习卷积核的权重,而不需要手动设计。因此,即使我们使用互相关计算,网络也能够自动学习到正确的卷积核
- 卷积运算=输入数组左右上下翻转再做互相关运算
5.1.2 二维卷积层
- 卷积层的模型参数:卷积核和标量偏差
5.1.3 特征图/感受野
- 特征图:二维卷积层的输出(也是一个二维数组)
- 感受野:影响元素前向计算的所有可能输入区域
5.1.4 填充和步幅
- 假设输入窗口尺寸和核大小尺寸分别为:
n h × n w k h × k w n_h×n_w\\k_h×k_w nh×nwkh×kw
- 则输出尺寸为:
( n h − k h + 1 ) × ( n w − k w + 1 ) (n_h-k_h+1)×(n_w-k_w+1) (nh−kh+1)×(nw−kw+1)
-
填充和步幅是两个超参数,用于改变输出形状
-
填充:在输入高和宽两侧填充元素(一般是补零),用于增加输出高和宽
- 假设在两边补ph行和pw列,则输出尺寸为:
( n h − k h + p h + 1 ) × ( n w − k w + p w + 1 ) (n_h-k_h+p_h+1)×(n_w-k_w+p_w+1) (nh−kh+ph+1)×(nw−kw+pw+1)
通常情况下,可以按下列设置方法得输入输出等尺寸:
p
h
=
k
h
−
1
p
w
=
k
w
−
1
p_h=k_h-1\\p_w=k_w-1
ph=kh−1pw=kw−1
通常情况下,采用奇数高和宽的卷积核,因为可以让两段填充个数相等
- 步幅:每次滑动的行数和列数,用于减少输出的高和宽
- 假设在高上步幅为sh和宽上步幅为sw,则输出尺寸为:
[ ( n h − k h + p h + 1 ) / s h ] × [ ( n w − k w + p w + 1 ) / s w ] [(n_h-k_h+p_h+1)/s_h]×[(n_w-k_w+p_w+1)/s_w] [(nh−kh+ph+1)/sh]×[(nw−kw+pw+1)/sw]
5.1.5 多输入通道(通道维度)
-
三维数组:【c通道数×h高×w宽】
-
要求:卷积核的通道数ci要与输入数据的通道数ci相同,这样才能做互相关
-
计算:
-
多输入单输出:
- 二维互相关计算:输入通道的两个通道分别和卷积核的两个通道计算互相关
- 最后通道相加,输出通道数为1
-
多输出通道:
- 每个通道创建一个卷积核
-
5.1.6 逐点卷积:1×1卷积
- 1x1 卷积层,也称为 “逐点卷积”
- 在深度学习中有重要的作用,尤其是在一些特定的网络结构中
- 主要作用:
- 通道变换(Channel Transformation):1x1 卷积层可以用来改变输入数据的通道数量,即通过增加或减少通道的数量来调整数据的维度。这对于调整网络的复杂度和通道数以满足任务需求非常有用
- 特征组合和权重调整:虽然 1x1 卷积核的感受野很小,但它可以用来组合输入特征图的不同通道,并为每个通道分配不同的权重。这允许网络在不同通道之间进行特征交互和特征选择,从而增强了模型的表达能力
- 降维和升维:1x1 卷积层可以用于降低特征图的维度,从而减少计算量,这在一些深度网络中用于加速计算。同时,它也可以用于升维,增加特征图的维度,以更好地捕捉特征信息
- 非线性映射:1x1 卷积层通常包含非线性激活函数(如 ReLU),从而引入非线性映射,有助于网络学习复杂的非线性关系
- 网络设计:1x1 卷积在设计深度网络架构时非常有用。例如,Inception 网络中的 “Inception 模块” 使用了多个 1x1 卷积层来实现不同尺度的特征组合,从而提高了网络的性能
5.1.7 权值共享
- 在卷积层中,每个卷积核的权重在整个输入上是共享的。这意味着同一种特征可以在不同的位置被检测到,从而提高了网络对平移不变性的学习能力
- 平移不变性:如果某个特征在图像的一个位置被检测到,那么相同的特征在图像的其他位置也能被检测到
- 具有空间局部性的数据非常有效,因为它使得网络能够学习到与特征的位置无关的表示,从而提高了模型的泛化能力
5.2 卷积网络的激活函数
- 位置:用于卷积层的输出上
- 作用:引入非线性建模能力
- 默认:ReLU激活函数
5.3 池化层
-
池化层与卷积层一样,每次对输入数据的一个固定形状窗口(池化窗口)中的元素计算输出
-
位置:卷积层之后
-
作用:
- 减小特征图的空间维度:过对输入特征图进行下采样,降低计算量和减少模型的参数数量
- 降低模型的复杂度:降低计算量和减少模型的参数数量
- 特征选择:通过选取每个池化窗口中的最大值或平均值,池化层聚焦于感兴趣的特征,丢弃了不重要的信息
- 防止过拟合:降维效应有助于减少过拟合风险。降低空间维度,模型更倾向于捕捉数据中的通用特征,而非细节
-
常见:
- 最大池化
- 平均池化
-
也具有填充和步幅,用于调整输出形状
-
不同:对多通道分别池化而不用相加,因此输入通道数与输出通道数相等(卷积层多通道维度=1)
5.4 全连接层
-
位置:一系列卷积和池化层后
-
作用:以便进行最终的分类或回归等任务
5.5 输出层
- 作用:输出层通常使用一个或多个神经元来表示网络的最终输出
- 位置:最后
- 对于分类任务,输出层通常使用softmax激活函数、
5.6 Dropout层
-
作用:随机地将一部分神经元的输出置为零,是一种减少过拟合的正则化技术
-
位置:
- 全连接层之间:可以使得不同的神经元组合产生更多的特征,从而降低过拟合
- 卷积层之后:可以随机地将部分特征图中的像素置为零,从而减少特征图之间的相关性,降低过拟合的风险
-
评价:
- 一种非常有效的正则化技术
- 通常在训练阶段使用,在测试阶段则不使用,因为希望模型能够利用所有的信息来进行预测
5.7 批量归一化层:BN层
-
作用:是一种用于加速深度网络训练的技术,通过对每一层的输入进行归一化来加速训练过程
-
原理:标准化处理后输入数据各个特征分布相近,往往容易训练处有效模型
-
位置:
-
在全连接层中仿射变换和激活函数之间
- 步骤:假设全连接层输入为u,权重参数和偏置参数为w和b,激活函数为φ
x = W u + b φ ( B N ( x ) ) x=Wu+b\\φ(BN(x)) x=Wu+bφ(BN(x))
-
考虑一个由m个样本组成的小批量,仿射变换的输出也是一个小批量B={x1,…,xm}
-
先对小批量B求均值μb和方差σb
-
对每个x做标准化
x ^ = x − μ b σ b 2 + ϵ \hat{x}=\frac{x-μ_b}{\sqrt{σ_b^2}+ϵ} x^=σb2+ϵx−μb
-
ε是一个小常数保证分母大于0
-
BN层引入了两个科学系参数拉伸γ和偏移β,两个参数与x尺寸一样
y = γ ⊙ x ^ + β y=γ\odot\hat{x}+β y=γ⊙x^+β
-
卷积计算后和激活函数之前
如果是计算多输出通道,需要这些通道的输出分别做批归一化
-
5.8 残差网络:ResNet
-
解决问题:网络中添加更多层训练效果不升反降,即使添加BN层使得训练更容易问题依旧存在
-
残差网络,希望学习出残差映射f(x)-x(残差块)
-
作用:
- 残差映射更容易优化,更容易捕捉恒等映射的细微波动
- 残差块输入可通过夸层的数据线路更快地前向传播
-
结构设计:
- 沿用VGG3×3的卷积层设计
- 有两个相同输出通道的3×3卷积层
- 每个卷积层后一个BN层和ReLU激活函数
5.9 稠密网络:DenseNet
-
包含稠密快和过渡层
-
稠密快:在前向传播时,每个快的输入和输出通道维度上连接
-
过渡层:用于控制模型复杂度
- 问题:每个稠密快会使得通道数的增加,复杂模型
- 解决:
- 通过1×1的卷积层:减小通道数
- 通过步幅为2的平均池化层减半高和宽:进一步模型复杂度
六,循环神经网络:RNN
-
卷积神经网络:有效处理空间信息
-
循环神经网络:有效处理时序信息,引入状态变量存储过去信息 ,并用其与当前输入共同决定输出
6.1 语言模型
-
假设一段长度为T的文本,词依次是w1,w2,w3,w4,…,wT
语言模型将计算改序列的概率:
p ( w 1 , w 2 , . . . , w T ) p(w_1,w_2,...,w_T) p(w1,w2,...,wT)语言模型是一种用于自然语言处理的重要技术,它是一个数学模型,用于预测或生成文本的概率分布。语言模型的主要任务是理解并建模文本的语法、语义和上下文,以便生成自然流畅的文本或评估给定文本的概率。
6.1.1 语言模型的计算
- 假设每个词是依次生成的,语言模型如下:
P ( w 1 , w 2 , w 3 , w 4 ) = ∏ t = 1 T p ( w t ∣ w 1 , . . . , w t − 1 ) P(w_1,w_2,w_3,w_4)=\prod_{t=1}^{T} p(wt\lvert{w_1,...,w_t-1}) P(w1,w2,w3,w4)=t=1∏Tp(wt∣w1,...,wt−1)
- 我们需要计算词的概率,以及一个词在给定前几个词的情况下的条件概率(即为语言模型参数)
- 词的概率p(w1):通过该词语在训练集的相对词频计算:w1在训练集出现次数/训练集
- 条件概率p(w2|w1):也可以通过相对词频计算:计算w1,w2相邻的频率/w1词频
6.1.2 n元语法
-
随着序列长度增加,计算概论难度呈指数等级增加
-
n元语法通过马尔科夫假设,简化概率计算,是基于n-1阶马尔科夫链的语言模型
马尔科夫假设:一个词的出现只有前面n个词相关,即n阶马尔科夫链
n=1时:
p ( w 3 ∣ w 1 , w 2 ) = p ( w 3 ∣ w 2 ) p(w_3\lvert{w_1,w_2})=p(w_3\lvert{w_2}) p(w3∣w1,w2)=p(w3∣w2)
如果是n-1阶马尔科夫链,则语言模型:
P ( w 1 , w 2 , w 3 , w 4 ) ≈ ∏ t = 1 T p ( w t ∣ w t − ( n − 1 ) , . . . , w t − 1 ) P(w_1,w_2,w_3,w_4)\approx\prod_{t=1}^{T} p(wt\lvert{w_{t-(n-1)},...,w_t-1}) P(w1,w2,w3,w4)≈t=1∏Tp(wt∣wt−(n−1),...,wt−1)
6.2 循环神经网络
6.2.1 含隐藏状态的基本结构
-
考虑输入数据存在时间相关性
-
假设:
- X_t是序列中时间步t的小批量输入
- H_t是该时间步的隐藏变量
- 我们保存上一个时刻的隐藏变量H_t-1
- 更新一个新的权重参数W_hh,该参数描述当前时间步如何使用上个时间步的隐藏变量(隐藏状态)
H t = φ ( X t W x h + H t − 1 W h h ‾ + b h ) H_t=φ(X_tW_{xh}+\underline{H_{t-1}W_{hh}}+b_h) Ht=φ(XtWxh+Ht−1Whh+bh)
- 因此,隐藏变量能够捕捉截止当前时间步序列的历史信息
O t = H t W h q + b q O_t=H_tW_{hq}+b_q Ot=HtWhq+bq
-
上图展示了循环神经网络三个相邻时间步的计算逻辑
-
X_t W_xh+H_t-1 Whh等价于将Xt和H_t-1相连接矩阵乘以W_xh和W_h
6.2.2 通过时间反向传播:BPTT
-
原因:在循环神经网络中,网络的层次结构是动态的,因为它们在时间上展开,形成了一个时间序列。BPTT 正是针对这种情况进行了设计。
-
步骤:
- 时序展开:首先,将循环神经网络在时间上展开成一个前向的无循环神经网络。这样可以将时序数据分成多个时刻的输入,并将每个时刻的输出作为下一时刻的输入。
- 前向传播:对于每一个时刻,进行正常的前向传播,得到网络的输出。
- 计算损失:使用得到的输出与真实标签计算损失函数。
- 反向传播:从当前时刻开始,使用反向传播算法计算损失函数对参数的梯度。
- 梯度累积:将各个时刻的梯度进行累积,得到最终的梯度。
- 参数更新:使用优化算法(如随机梯度下降)来更新模型的参数,以最小化损失函数
6.2.3 时间步数和时间步
-
在循环神经网络(Recurrent Neural Network,RNN)中,“时间步数”(time steps)和"时间步"(time step)是与序列数据建模相关的重要概念。它们用来描述 RNN 处理序列数据的方式。
-
时间步数(Time Steps):
时间步数通常表示在序列数据中的数据点的数量或序列的长度。如果你正在处理一个文本序列,时间步数就表示文本中的单词数或字符数。如果你正在处理时间序列数据,时间步数表示观测值的数量
时间步数告诉你有多少个时刻需要经过 RNN 处理。在训练和推断过程中,RNN 将按照时间步数逐个时刻地处理输入序列
-
时间步(Time Step):
时间步是指序列数据中的一个特定时刻或时间点。在自然语言处理中,时间步可以对应于一个单词或一个字符。在时间序列数据中,时间步对应于一次观测或采样
RNN 在每个时间步接收当前时间步的输入,并生成相应的输出。这些输出通常与该时间步的输入和前一个时间步的隐藏状态有关
6.2.4 普通循环网络的问题
- 时间步数T较大或者时间步t较小时,容易发生衰减和爆炸
- 因此循环神经网络难以捕捉时间步距离较大的依赖关系
- 解决方法**:引入了门控机制**以提高对长序列的建模能力:GRU, LSTM
6.3 门控循环单元:GRU
6.3.1 重置门和更新门
- 重置门和更新门均为当前时间步输入Xt与上一个隐藏状态Ht-1,输出由Sigmoid激活函数的全连接层计算得到
R i = σ ( X i H x r + H t − 1 W h r + b r ) Z i = σ ( X i H x z + H t − 1 W h z + b z ) R_i=σ(X_iH_xr+H_{t-1}W_{hr}+b_r)\\Z_i=σ(X_iH_xz+H_{t-1}W_{hz}+b_z) Ri=σ(XiHxr+Ht−1Whr+br)Zi=σ(XiHxz+Ht−1Whz+bz)
6.3.2 候选隐藏状态
-
当前时间步重置门与上一时间隐藏状态元素乘法
如果重置门元素接近0,那么意味着重置对应隐藏状态元素为0,,丢弃上一时间步的隐藏状态
如过元素接近1,那么保留上一时间步的隐藏状态
-
按照元素乘法的结果与当前时间步的输入连接
-
通过含有激活函数tanh的全连接层计算出候选隐藏状态
H ^ = t a n h ( X t W x h + ( R ⊙ H t − 1 ) W h h + b h ) \hat{H}=tanh(X_tW_{xh}+(R\odot{H_{t-1}})W_{hh}+b_h) H^=tanh(XtWxh+(R⊙Ht−1)Whh+bh)
- 重置门:用于丢弃与预测无关信息
6.3.3 隐藏状态
-
最后时间步t的隐藏状态H_t的计算:
-
当前时间步的更新门Z来对上一时间步的隐藏状态H_t-1和当前时间步候选隐藏状态做组合
H t = Z t ⊙ H t − 1 + ( 1 − Z t ) ⊙ H t ^ H_t=Z_t\odot{H_{t-1}}+(1-Z_t)\odot{\hat{H_t}} Ht=Zt⊙Ht−1+(1−Zt)⊙Ht^
-
更新门:控制了用多少过去历史信息,确定在当前时刻应该存储哪些新信息
-
综上所述:
- 重置门有助于捕获短期依赖关系,决定哪些信息应该被记忆,哪些信息应该被遗忘
- 更新门有助于捕获长期依赖关系,确定在当前时刻应该存储哪些新信息
6.4 长短时记忆网络:LSTM
6.4.1 输入门,输出门,遗忘门
- 引入了三个门:输入门,遗忘门,输出门,以及与隐藏状态相同的记忆细胞
- 长短时记忆的输入均为当前时间步输入Xt和上一时间步隐藏状态Ht-1,输出由Sigmund激活函数全连接层计算
I t = σ ( X t W x i + H t − 1 W h i + b r i ) F i = σ ( X t W x f + H t − 1 W h f + b f ) O t = σ ( X t H x o + H t − 1 W h o + b o ) I_t=σ(X_tW_xi+H_{t-1}W_{hi}+b_ri)\\F_i=σ(X_tW_xf+H_{t-1}W_{hf}+b_f)\\O_t=σ(X_tH_xo+H_{t-1}W_{ho}+b_o) It=σ(XtWxi+Ht−1Whi+bri)Fi=σ(XtWxf+Ht−1Whf+bf)Ot=σ(XtHxo+Ht−1Who+bo)
6.4.2 候选记忆细胞
- 时间步t的候选记忆细胞为:
C t ^ = t a n h ( X t W x c + H t − 1 W h c + b c ) \hat{C_{t}}=tanh(X_tW_{xc}+H_{t-1}W_{hc}+b_c) Ct^=tanh(XtWxc+Ht−1Whc+bc)
6.4.3 记忆细胞
- 当前时间步的记忆细胞:组合了上一时间步的记忆细胞和当前步的候选记忆细胞
C t = F t ⊙ C t − 1 + I t ⊙ C t ^ C_t=F_t\odot{C_{t-1}}+I_t\odot{\hat{C_t}} Ct=Ft⊙Ct−1+It⊙Ct^
-
遗忘门:控制上一时间步的记忆细胞C中的信息是否传递到当前记忆细胞
-
输入门:控制当前时刻的输入X通过候选记忆细胞C~如何流入当前记忆细胞
-
如果遗忘门为0输入门为1,则过去记忆细胞将一直通过时间保存并传递至当前时间步
6.4.4 隐藏状态
- 输出门:控制记忆细胞到隐藏状态H的信息流动
H t = O t ⊙ t a n h ( C t ) H_t=O_t\odot{tanh(C_t)} Ht=Ot⊙tanh(Ct)
- 输出门近似1:记忆细胞将传递到的隐藏状态供给输出门使用
- 输出门近似0:记忆细胞只自己保留
七,生成对抗网络:GAN
7.1 生成对抗构成
- 基本原理:通过两个网络相互竞争,从而使得生成器不断地改进其生成的假样本,同时判别器不断提高识别真假样本的能力
- 类别;生成式模型,无监督学习
7.1.1 生成器
- 作用:生成器负责生成与真实样本相似的虚假数据
- 输入:它接收一个随机噪声向量作为输入,并将其映射到与训练数据相似的分布中,从而生成假样本
- 更新:生成器通过反向传播算法来更新其参数,从而使得生成的假样本越来越逼真
7.1.2 判别器
- 作用:负责将输入样本分为真实样本和虚假样本。它接收真实样本和生成器生成的假样本,并尝试区分它们
- 更新:判别器也通过反向传播算法来更新其参数,从而提高对真实样本和虚假样本的分类准确度
- 结构:一般是卷积网络,因为他是一个分类网络
7.1.3 Nsah平衡
- 当生成器生成的假样本足够逼真时,判别器将无法区分真实样本和假样本,这时达到了一个 Nash 平衡点
- 判别器的分类准确度随机猜测
7.2 生成对抗训练过程
- 注意:计算了两次损失,分别更新了判别器参数和生成器参数
- 初始化:
- 初始化生成器和判别器的权重
- 生成假样本:
- 生成器接收随机噪声作为输入,并生成一批假样本
- 提供真假样本:
- 将生成器生成的假样本与真实样本一起提供给判别器
- 计算损失:
- 判别器根据提供的样本计算损失,用于衡量它对样本的分类准确度
- 更新判别器:
- 判别器根据计算的损失进行反向传播,更新自己的参数
- 生成更逼真的假样本:
- 生成器再次接收随机噪声,并生成新的一批假样本
- 提供新的真假样本:
- 将新生成的假样本与真实样本一起提供给判别器
- 计算生成器损失:
- 判别器根据提供的样本计算损失,但这次的目标是让判别器将生成器生成的假样本误认为是真实样本,这个损失成为生成损失
- 更新生成器:
- 生成器根据计算的损失进行反向传播,更新自己的参数
- 重复迭代:
- 重复以上步骤,直到生成器生成的样本足够逼真,或者达到预先设定的训练次数
7.3 GAN的变体
- DCGAN(Deep Convolutional GAN):
- DCGAN 引入了卷积层,使得 GAN 在处理图像生成任务时表现出色。它将生成器和判别器都设计成深度卷积神经网络
- CGAN(Conditional GAN):
- CGAN 允许在训练时向生成器和判别器提供额外的条件信息,从而使生成的样本具有特定的属性或特征
- WGAN(Wasserstein GAN):
- WGAN 引入了 Wasserstein 距离来衡量生成器生成的分布与真实分布之间的距离,解决了训练不稳定性的问题
- WGAN-GP(Wasserstein GAN with Gradient Penalty):
- WGAN-GP 在 WGAN 的基础上添加了一个梯度惩罚项,进一步提高了训练的稳定性
- LSGAN(Least Squares GAN):
- LSGAN 使用了最小二乘损失函数来代替原始 GAN 中的交叉熵损失函数,以解决训练时的一些问题
- CycleGAN:
- CycleGAN 是一种无需成对的数据的条件 GAN 变体,它可以进行图像风格转换等任务
- Pix2Pix:
- Pix2Pix 是一种用于将图像从一种领域转换到另一种领域的条件 GAN 模型,如将草图转化成真实照片
- BigGAN:
- BigGAN 是一种基于 GAN 的大规模模型,可以生成高分辨率、高质量的图像
- StyleGAN 和 StyleGAN2:
- StyleGAN 和 StyleGAN2 通过引入了风格变量的概念,使得生成的图像在视觉上更加真实和多样化
- PGGAN(Progressive GAN):
- PGGAN 采用了渐进训练策略,从低分辨率逐步过渡到高分辨率,使得训练过程更加稳定
八,强化学习:RL
- 机器学习领域中一种重要的学习范式,它关注的是在一个不断交互的环境中,通过试错学习来获得最优行为策略
8.1 基本概念
8.1.1 智能体(Agent)
- 定义:强化学习的学习者
- 作用:它在一个环境中接收观测,选择动作,并根据环境的反馈(奖励信号)获得反馈
1.2 状态(State)
- 环境的状态表示当前情况
- 它包含了智能体所需要的所有信息,以便做出合适的决策。
1.3 动作(Action)
- 智能体可以在特定状态下执行的操作称为动作。
1.4 奖励(Reward)
- 在每个时间步,环境会向智能体提供一个奖励信号
- 作用:用于评估当前动作的好坏
1.5 策略(Policy)
- 策略定义了在给定状态下,智能体如何选择动作
- 策略可以是确定性的(直接映射状态到动作)或随机性的(根据概率分布选择动作)
1.6 奖励信号的延迟性:
- 强化学习中的奖励信号可能是延迟的,即好的决策可能在未来才能获得奖励
8.2 基本原理
8.2.1 状态-动作-奖励-状态(SARSA)
- SARSA 是一种基本的强化学习算法
- 它根据当前状态、动作、奖励、下一个状态来更新策略
8.2.2 Q-Learning
- Q-Learning 是另一种常用的强化学习算法
- 通过维护一个 Q-Value 表格来估计在每个状态下执行每个动作的长期回报
8.2.3 值函数(Value Function)
- 值函数用于评估在某个状态下采取动作的价值,它可以表示为 V(s)(对于状态价值函数)或 Q(s, a)(对于动作价值函数)
8.2.4 策略梯度方法
- 与值函数方法不同,策略梯度方法直接优化策略函数,通过梯度上升或梯度下降来更新策略
8.2.5 探索与利用:
- 强化学习中面临的一个重要挑战是如何在探索新动作和利用已知动作之间取得平衡,以获得更多的奖励
8.3 强化学习训练流程
- 强化学习的基本流程包括智能体与环境的交互、奖励的获得、策略的更新等关键步骤
- 以下是强化学习的一般流程:
- 初始化:
- 设置环境,包括定义状态空间、动作空间、初始状态等
- 智能体与环境交互:
- 智能体根据当前状态选择一个动作,并执行该动作
- 环境接收动作并转换到新的状态,并返回相应的奖励信号
- 状态转移:
- 智能体通过选择动作改变了环境的状态,从而从一个状态转移到了另一个状态
- 策略更新:
- 根据获得的奖励信号,智能体更新自己的策略,以便在类似的情况下做出更好的决策
- 终止条件:
- 如果任务有一个明确的终止条件(如游戏结束或目标达到),则检查是否满足该条件。
- 重复迭代:
- 从新的状态开始,智能体不断与环境交互,进行动作选择、状态转移、奖励获得和策略更新的过程。
- 学习终止:
- 当满足预设的学习终止条件时,结束学习过程
九, 迁移学习
9.1 基本概念
- 迁移学习是机器学习领域中的一个重要分支
- 它致力于将在一个任务上学到的知识和经验应用到解决一个相关但不完全相同的新任务中
- 在实际应用中,迁移学习可以显著提升模型的性能,尤其是在数据稀缺或领域间存在相似性时
9.1.1 领域
- 领域:指的是一个数据分布以及与之相关的任务。例如,一个分类任务可以被视为一个领域,其数据分布是特征空间上的分布,任务是将样本分配到不同的类别中
- 源领域:是我们之前已经有了一些数据和经验的领域
- 目标领域:则是我们希望在其中应用迁移学习的领域
9.1.2 迁移学习难点
- 如何在源领域和目标领域之间找到有效的知识转移方法,以提高在目标领域上的性能
9.2 迁移学习基本方法
9.2.1 特征选择
- 特征选择是一种常用的迁移学习方法
- 它通过选择源领域和目标领域共享的特征来减小领域间的差异
9.2.2 预训练模型
- 预训练模型是在源领域上训练的模型,然后将其参数作为目标领域任务的初始化参数
- 这种方法在自然语言处理和计算机视觉等领域取得了显著的成果
9.2.3 领域自适应
- 领域自适应方法试图通过减小源领域和目标领域之间的分布差异来提高目标领域上的性能
9.2.4 多任务学习
- 多任务学习是一种将源领域和目标领域的任务结合起来训练模型的方法,从而共享知识并提高目标领域上的性能
十,对比学习:CL
10.1 基本概念
- 对比学习是一种自监督学习方法,它在深度学习领域中受到了广泛关注
- 对比学习的基本思想是通过让模型学习将相似样本归为一类,将不相似样本归为不同类别,从而学习到有意义的表示或特征
10.2 基本原理
- 模型被要求将一对样本(通常是一正一负样本)进行区分
- 这意味着模型需要学会使相似样本在表示空间中更加接近,而使不相似样本在表示空间中更加远离
10.3 常见方法
10.3.1 基于正负样本对的对比学习
- 这是对比学习的基本形式
- 通过构建正样本对和负样本对来进行训练。正样本对是指来自于同一类别或相似分布的样本,而负样本对则是来自不同类别或不相似分布的样本。
10.3.2 摘要对比学习
- 摘要对比学习试图通过对数据样本进行聚合来学习表示
- 这种方法通常包括池化、平均或聚类等操作,以便将多个样本的信息合并成一个表示
10.3.3 自监督学习和生成模型结合的对比学习
- 这种方法结合了自监督学习和生成模型的思想,通过生成模型产生负样本,从而扩展了训练数据集
10.4 对比学习的优势
10.4.1 充分利用无标签数据
- 对比学习是一种自监督学习方法,它可以利用大量的无标签数据来训练模型,从而在数据稀缺的情况下取得更好的性能。
10.4.2 学习有意义的表示
- 通过使相似样本更接近,对比学习可以学到具有较高语义含义的特征表示,这使得这些表示在许多任务上都能取得好的效果。
10.4.3 跨领域迁移
- 对比学习的学习到的特征表示通常具有一定的通用性
- 因此它们可以在不同的领域中进行迁移,从而加速新任务的学习
9.2.4 多任务学习
- 多任务学习是一种将源领域和目标领域的任务结合起来训练模型的方法,从而共享知识并提高目标领域上的性能
十,对比学习:CL
10.1 基本概念
- 对比学习是一种自监督学习方法,它在深度学习领域中受到了广泛关注
- 对比学习的基本思想是通过让模型学习将相似样本归为一类,将不相似样本归为不同类别,从而学习到有意义的表示或特征
10.2 基本原理
- 模型被要求将一对样本(通常是一正一负样本)进行区分
- 这意味着模型需要学会使相似样本在表示空间中更加接近,而使不相似样本在表示空间中更加远离
10.3 常见方法
10.3.1 基于正负样本对的对比学习
- 这是对比学习的基本形式
- 通过构建正样本对和负样本对来进行训练。正样本对是指来自于同一类别或相似分布的样本,而负样本对则是来自不同类别或不相似分布的样本。
10.3.2 摘要对比学习
- 摘要对比学习试图通过对数据样本进行聚合来学习表示
- 这种方法通常包括池化、平均或聚类等操作,以便将多个样本的信息合并成一个表示
10.3.3 自监督学习和生成模型结合的对比学习
- 这种方法结合了自监督学习和生成模型的思想,通过生成模型产生负样本,从而扩展了训练数据集
10.4 对比学习的优势
10.4.1 充分利用无标签数据
- 对比学习是一种自监督学习方法,它可以利用大量的无标签数据来训练模型,从而在数据稀缺的情况下取得更好的性能。
10.4.2 学习有意义的表示
- 通过使相似样本更接近,对比学习可以学到具有较高语义含义的特征表示,这使得这些表示在许多任务上都能取得好的效果。
10.4.3 跨领域迁移
- 对比学习的学习到的特征表示通常具有一定的通用性
- 因此它们可以在不同的领域中进行迁移,从而加速新任务的学习