本文最后更新于 2024-05-09,文章内容可能已经过时。

1.介绍:

对我的一个朋友小Y而言,他就不是那么守时,最常见的表现是他经常迟到。当有一次我跟他约好3点钟在某个麦当劳见面时,在我出门的那一刻我突然想到一个问题:我现在出发合适么?我会不会又到了地点后,花上30分钟去等他?我决定采取一个策略解决这个问题。

要想解决这个问题,有好几种方法。第一种方法是采用知识:我搜寻能够解决这个问题的知识。但很遗憾,没有人会把如何等人这个问题作为知识传授,因此我不可能找到已有的知识能够解决这个问题。第二种方法是问他人:我去询问他人获得解决这个问题的能力。但是同样的,这个问题没有人能够解答,因为可能没人碰上跟我一样的情况。第三种方法是准则法:我问自己的内心,我有否设立过什么准则去面对这个问题?例如,无论别人如何,我都会守时到达。但我不是个死板的人,我没有设立过这样的规则。

事实上,我相信有种方法比以上三种都合适。我把过往跟小Y相约的经历在脑海中重现一下,看看跟他相约的次数中,迟到占了多大的比例。而我利用这来预测他这次迟到的可能性。如果这个值超出了我心里的某个界限,那我选择等一会再出发。假设我跟小Y约过5次,他迟到的次数是1次,那么他按时到的比例为80%,我心中的阈值为70%,我认为这次小Y应该不会迟到,因此我按时出门。如果小Y在5次迟到的次数中占了4次,也就是他按时到达的比例为20%,由于这个值低于我的阈值,因此我选择推迟出门的时间。这个方法从它的利用层面来看,又称为经验法。在经验法的思考过程中,我事实上利用了以往所有相约的数据。因此也可以称之为依据数据做的判断。

机器学习:通过算法使得机器能从大量数据中学习规律从而对新的样本做决策。

机器学习方法是计算机利用已有的数据(经验),得出了某种模型(迟到的规律),并利用此模型预测未来(是否迟到)的一种方法。

image-20240508164937995

2.线性模型:

在机器学习的术语中,当预测值为连续值时,称为“回归问题”,离散值时为“分类问题”。

2.1 二分类线性模型:

二分类线性模型是一种常见的机器学习模型,用于解决二分类问题,即将输入数据分为两个类别。它基于线性函数对输入特征进行加权组合,然后通过一个阈值函数将结果映射到类别标签。

具体来说,假设我们有一个包含 n 个特征的输入向量 𝑥=[𝑥1,𝑥2,...,𝑥𝑛]x=[x1,x2,...,x**n],对应的权重向量为 𝑤=[𝑤1,𝑤2,...,𝑤𝑛]w=[w1,w2,...,w**n],还有一个偏置项 𝑏b,那么线性模型可以表示为:

𝑧=𝑤⋅𝑥+𝑏z=wx+b

其中 ⋅⋅ 表示向量的点积。𝑧z 是一个实数,表示线性组合的结果。

然后,通过一个激活函数(也称为阈值函数),将 𝑧z 映射到类别标签。在二分类问题中,常用的激活函数是 sigmoid 函数或者阶跃函数。sigmoid 函数的表达式为:

𝜎(𝑧)=11+𝑒−𝑧σ(z)=1+ez1

阶跃函数将 𝑧z 大于某个阈值 𝜃θ 的值映射为 1,小于等于阈值的值映射为 0。

通过训练数据,我们可以通过调整权重 𝑤w 和偏置项 𝑏b 来找到最佳的分割超平面,从而实现对输入数据的分类。通常使用的方法是最小化损失函数,比如对数损失函数(对于 sigmoid 激活函数)或者交叉熵损失函数,通过梯度下降等优化算法来更新权重和偏置项。

2.2 权重:

在二分类线性模型中,一个好的权重是能够有效地将输入特征与类别标签相关联的权重。具体来说,一个好的权重应该具有以下特点:

  1. 区分能力: 权重应该能够有效地区分不同类别之间的特征。这意味着对于重要的特征,权重的值应该足够大,以便在计算线性组合时能够对应相应的类别。

  2. 泛化能力: 权重应该能够泛化到未见过的数据,而不仅仅是在训练数据上表现良好。这意味着权重应该不会过度拟合训练数据,而是能够捕捉到数据中的一般模式。

  3. 稳定性: 权重应该对输入数据的小变化具有一定的稳定性。这意味着对于输入数据的微小变化,权重的变化应该是相对较小的,而不是剧烈波动。

  4. 可解释性: 在某些情况下,权重应该是可解释的,能够说明输入特征对于分类决策的贡献程度。例如,在某些应用中,解释模型为什么做出特定的预测是非常重要的。

2.3 决策边界:

二分类线性模型的决策边界是指模型所学习到的用于将两个类别分开的超平面或者决策边界。在二维特征空间中,这个决策边界通常是一条直线;在更高维的特征空间中,它可以是一个超平面。

具体地说,假设我们有一个二分类线性模型,其表达式为:

𝑧=𝑤⋅𝑥+𝑏z=wx+b

其中 𝑥x 是输入特征向量,𝑤w 是权重向量,𝑏b 是偏置项。模型的决策边界就是满足 𝑧=0z=0 的所有点构成的集合。

在二维空间中,决策边界可以表示为一条直线:

𝑤1𝑥1+𝑤2𝑥2+𝑏=0w1x1+w2x2+b=0

或者写成斜截式:

𝑥2=−𝑤1𝑤2𝑥1−𝑏𝑤2x2=−w2w1x1−w2b

吗这就是二分类线性模型的决策边界方程。决策边界将特征空间分成两个部分,分别对应于模型预测为正类别和负类别的区域。

在训练过程中,模型的目标是找到一个能够最好地将不同类别分开的决策边界,使得模型在训练数据上的分类性能最佳。这通常通过优化算法来学习权重和偏置项来实现。

image-20240508165802984

决策平面与权重向量 𝒘 正交.

特征空间中每个样本点到决策平面的有向距离为 :𝛾 = 𝑓(𝒙; 𝒘) / ‖𝒘‖

3.Logistic Regression:

将二分类问题看作条件概率估计问题。

逻辑回归是一种统计方法,通常用于二分类问题,即结果变量是分类的,只有两个可能的值(例如,是或否,0或1)。它是一种回归分析方法,用于建立一个模型来预测某个输入数据属于两个类别中的哪一个的概率。

在逻辑回归中,输出通过逻辑函数(也称为Sigmoid函数)进行转换,以将输出限制在0到1之间。这个输出表示给定输入属于某个类别的概率。

3.1 Logistic函数:Sigmoid函数

image-20240509112414577

具有对称性:1− σ(x)=σ(−x)

标准逻辑斯谛函数可视为双曲正切函数的偏移和缩放:

image-20240509112502294

3.2 KL散度(Kullback-Leibler Divergence):

KL(Kullback-Leibler)散度,也称为相对熵,是用来衡量两个概率分布之间的差异的一种方法。假设有两个概率分布P和Q,KL散度用来衡量当用Q来近似真实分布P时产生的信息损失。具体来说,KL散度被定义为P和Q之间的交叉熵与P的熵之间的差异。

数学上,如果P和Q是两个概率分布,其概率密度函数分别为p(x)和q(x),则P相对于Q的KL散度定义为:

𝐷𝐾𝐿(𝑃∣∣𝑄)=∑𝑥𝑝(𝑥)log⁡(𝑝(𝑥)𝑞(𝑥))DKL(P∣∣Q)=∑x**p(x)log(q(x)p(x))

或者对于连续分布:

𝐷𝐾𝐿(𝑃∣∣𝑄)=∫−∞∞𝑝(𝑥)log⁡(𝑝(𝑥)𝑞(𝑥))𝑑𝑥DKL(P∣∣Q)=∫−∞∞p(x)log(q(x)p(x))d**x

KL散度是非负的,当且仅当P和Q完全相同时,KL散度才为0。在机器学习中,KL散度经常用于优化目标函数或者衡量两个概率分布之间的相似性。

3.3 交叉熵损失:

交叉熵损失函数(Cross-Entropy Loss Function)是在机器学习中用于衡量两个概率分布之间差异的一种常用损失函数。在分类任务中,特别是在深度学习中,交叉熵损失经常作为优化目标函数,用于衡量模型预测的概率分布与真实标签的概率分布之间的差异。

对于二分类问题,假设模型的输出为𝑦y,真实标签为𝑡t,则交叉熵损失函数可以定义为:

𝐿(𝑦,𝑡)=−(𝑡⋅log⁡(𝑦)+(1−𝑡)⋅log⁡(1−𝑦))L(y,t)=−(t⋅log(y)+(1−t)⋅log(1−y))

其中𝑡t是一个二元变量,表示真实标签的类别,𝑦y是模型输出的预测概率。

对于多分类问题,交叉熵损失函数可以表示为:

𝐿(𝑦,𝑡)=−∑𝑖𝑡𝑖⋅log⁡(𝑦𝑖)L(y,t)=−∑iti⋅log(y**i)

其中𝑦y是模型输出的预测概率向量,𝑡t是真实标签的独热编码向量,𝑡𝑖t**i表示真实标签属于第𝑖i类的概率,𝑦𝑖y**i表示模型预测属于第𝑖i类的概率。

在训练过程中,目标是最小化交叉熵损失,以使模型的预测尽可能接近真实标签的分布。

4.感知器:

感知器是一种简单的人工神经元模型,常用于二分类问题。它是由美国科学家Frank Rosenblatt在1957年提出的,被认为是最早的神经网络模型之一。

感知器接收多个输入𝑥1,𝑥2,...,𝑥𝑛x1,x2,...,x**n,每个输入都有对应的权重𝑤1,𝑤2,...,𝑤𝑛w1,w2,...,w**n,然后将这些加权输入与偏置𝑏b相加,经过一个阈值函数(例如阶跃函数)进行激活,输出一个二进制值,代表模型对输入进行了分类。

数学上,感知器的输出𝑦y可以表示为:

𝑦={1,if ∑𝑖𝑤𝑖𝑥𝑖+𝑏>00,otherwisey={1,0,if ∑iwixi+b>0otherwise

其中𝑤𝑖w**i是输入𝑥𝑖x**i对应的权重,𝑏b是偏置。

感知器的训练过程就是通过不断调整权重和偏置,使得感知器能够正确地分类训练数据集中的样本。通常使用感知器算法(Perceptron Algorithm)来更新权重和偏置,该算法会在每一轮迭代中遍历训练数据集,对错误分类的样本进行修正。

尽管感知器非常简单,但它是神经网络的基础,后续的深度学习模型在某种程度上都可以视作感知器的扩展和变体。

image-20240509112814210

4.1 学习算法:错误驱动:

感知器学习算法是一种简单而有效的算法,用于训练感知器模型以正确分类给定的数据集。以下是感知器学习算法的基本步骤:

  1. 初始化权重和偏置: 首先,将感知器模型的权重𝑤𝑖w**i和偏置𝑏b初始化为零或者一个小的随机值。

  2. 遍历训练数据集: 对于训练数据集中的每个样本(𝑥,𝑡)(x,t),执行以下步骤:

    a. 计算感知器的输出: 使用当前权重和偏置,计算感知器的输出𝑦y。这可以通过将输入𝑥x与权重𝑤w相乘,加上偏置𝑏b,然后应用激活函数(如阶跃函数)来实现。

    b. 更新权重和偏置: 如果感知器的输出𝑦y与真实标签𝑡t不匹配,则更新权重和偏置以减小错误。权重𝑤w和偏置𝑏b的更新规则如下:

    𝑤𝑖←𝑤𝑖+𝛼⋅(𝑡−𝑦)⋅𝑥𝑖w**iw**i+α⋅(ty)⋅x**i

    𝑏←𝑏+𝛼⋅(𝑡−𝑦)bb+α⋅(ty)

    其中,𝛼α 是学习率,控制每次权重更新的步长。

  3. 重复迭代: 重复步骤2直到满足停止条件。停止条件可以是达到最大迭代次数、误差小于某个阈值或者达到了预先设定的性能指标。

  4. 评估模型性能: 在训练结束后,使用验证集或者测试集来评估模型的性能。这可以通过计算模型的准确率、精确率、召回率等指标来实现。

5.前馈神经网络:

前馈神经网络(Feedforward Neural Network)是一种基本的神经网络架构,其中信息只在网络的输入层到输出层之间单向传播,不涉及循环或反馈。它也被称为多层感知器(Multilayer Perceptron,MLP)。

在前馈神经网络中,神经元被组织成层级结构,通常分为三种类型的层:

  1. 输入层(Input Layer): 接收原始输入数据的层,每个神经元对应输入的一个特征。

  2. 隐藏层(Hidden Layer): 在输入层和输出层之间的一层或多层神经元组成的层。每个隐藏层的神经元接收上一层的输出,并生成给下一层的输入。

  3. 输出层(Output Layer): 输出网络预测结果的层,通常包含一个或多个神经元,每个神经元对应一个类别或一个预测值。

前馈神经网络通过在各层之间传递信号(输入数据和权重的线性组合,加上偏置并经过激活函数的非线性变换),从而将输入数据映射到输出数据。这个过程称为前向传播(Forward Propagation)。

训练前馈神经网络通常使用反向传播算法(Backpropagation),该算法根据网络输出与真实标签之间的误差,沿着网络的反向方向更新权重和偏置,以最小化损失函数。

前馈神经网络在各种机器学习任务中广泛应用,包括分类、回归和密度估计等。随着深度学习的发展,基于前馈神经网络的深度神经网络模型在图像识别、自然语言处理和推荐系统等领域取得了显著的成功。

前馈神经网络(Feedforward Neural Network)是最早发明的简单人工神经网络,也经常被称为多层感知器(Multi-Layer Perceptron, MLP)。第0层为输入层,最后一层为输出层,其他中间层称为隐藏层。信号从输入层向输出层单向传播,整个网络中无反馈,可用一个有向无环图表示。

image-20240509113051312

6.卷积神经网络:

6.1 卷积:

卷积并不是对数据的压缩,而是一种在信号处理和图像处理中常用的数学运算。卷积的作用是将两个函数(或信号)进行叠加和加权平均,以生成一个新的函数(或信号)。

在信号处理中,卷积可以理解为将一个信号与另一个信号进行重叠和乘积,然后对乘积结果进行积分求和。这个过程可以用来实现信号的平滑、滤波、特征提取等操作。在图像处理中,卷积通常用于图像滤波、特征提取和边缘检测等任务。

具体来说,卷积的数学定义是:

(𝑓∗𝑔)(𝑡)=∫−∞∞𝑓(𝜏)⋅𝑔(𝑡−𝜏) 𝑑𝜏(fg)(t)=∫−∞∞f(τ)⋅g(tτ)d**τ

或者在离散情况下:

(𝑓∗𝑔)[𝑛]=∑𝑚=−∞∞𝑓[𝑚]⋅𝑔𝑛−𝑚[n]=∑m=−∞∞f[m]⋅g[nm]

其中𝑓f和𝑔g是两个函数(或信号),∗∗表示卷积操作,𝑡t是连续时间上的变量,𝑛n是离散时间上的变量。

卷积操作可以帮助我们理解信号之间的相互影响和信息传递,是信号处理和图像处理中的重要工具之一。在卷积神经网络中,卷积层通过卷积操作来提取输入数据的特征,从而实现对图像、文本或其他类型数据的高效处理和分析。

6.2 一维离散卷积:

一维离散卷积是一种在信号处理和卷积神经网络等领域中常用的运算。它用于将两个一维离散信号进行卷积,从而产生一个新的一维信号。

假设有两个长度分别为𝑁N和𝑀M的一维离散信号𝑥[𝑛]x[n]和ℎ[𝑛]h[n],它们的卷积𝑦[𝑛]y[n]可以表示为:

𝑦[𝑛]=∑𝑚=−∞∞𝑥[𝑚]⋅ℎ[𝑛−𝑚]y[n]=∑m=−∞∞x[m]⋅h[nm]

其中𝑦[𝑛]y[n]是卷积的结果,𝑛n是卷积的索引位置,𝑥[𝑛]x[n]和ℎ[𝑛]h[n]分别是输入信号和卷积核的值。

然而,在实际应用中,离散信号的长度是有限的,因此我们需要对卷积进行适当的限制。对于一维离散卷积,通常使用以下形式的有限长度卷积:

𝑦[𝑛]=∑𝑚=0𝑀−1𝑥[𝑚]⋅ℎ[𝑛−𝑚]y[n]=∑m=0M−1x[m]⋅h[nm]

其中𝑀M是卷积核的长度,即滤波器的大小。

一维离散卷积在信号处理中常用于滤波、特征提取和信号变换等任务。在深度学习中,一维离散卷积也常用于处理序列数据,如文本和时间序列数据。

image-20240509113522516

如图所示,第一个函数是输入信号序列,第二个函数是滤波器的输入。同样是对应位置相乘相加,然后得出结果。

6.3 二维离散卷积:

二维离散卷积是一种在图像处理和信号处理中常用的运算,用于将两个二维离散信号进行卷积操作,从而生成一个新的二维信号。

假设有两个二维离散信号𝑓(𝑥,𝑦)f(x,y)和𝑔(𝑥,𝑦)g(x,y),它们的二维离散卷积ℎ(𝑥,𝑦)h(x,y)可以表示为:

ℎ(𝑥,𝑦)=∑𝑚=−∞∞∑𝑛=−∞∞𝑓(𝑚,𝑛)⋅𝑔(𝑥−𝑚,𝑦−𝑛)h(x,y)=∑m=−∞∞∑n=−∞∞f(m,n)⋅g(xm,yn)

其中ℎ(𝑥,𝑦)h(x,y)是卷积的结果,𝑓(𝑥,𝑦)f(x,y)和𝑔(𝑥,𝑦)g(x,y)分别是输入信号和卷积核的值,𝑚m和𝑛n是卷积核的坐标,(𝑥,𝑦)(x,y)是卷积的索引位置。

然而,对于实际应用,离散信号的范围是有限的,所以二维离散卷积通常使用以下形式的有限长度卷积:

ℎ(𝑥,𝑦)=∑𝑚=0𝑀−1∑𝑛=0𝑁−1𝑓(𝑚,𝑛)⋅𝑔(𝑥−𝑚,𝑦−𝑛)h(x,y)=∑m=0M−1∑n=0N−1f(m,n)⋅g(xm,yn)

其中𝑀×𝑁M×N是卷积核的大小,即滤波器的尺寸。

二维离散卷积在图像处理中经常被用于图像滤波、特征提取、图像增强、边缘检测等任务中。它通过对图像中每个像素点及其周围像素点进行权重加权,从而实现图像的处理和分析。

image-20240509114007516

如图所示,计算方法是对应位置的九宫格内部对应位置相乘再相加,然后整个九宫格相加。

6.4 滑动步长和零填充:

滑动步长是指在进行卷积操作时,卷积核在输入数据上滑动的步长。通常,卷积核在水平和垂直方向上以相同的步长滑动。如果步长为𝑆S,则每次滑动的距离为𝑆S个像素。通过调整滑动步长,可以控制卷积操作的输出大小。较大的步长会导致输出尺寸减小,而较小的步长会导致输出尺寸增大。

image-20240509114445123

零填充是指在输入数据的边缘周围填充一定数量的零值像素。这种技术可以在进行卷积操作时,保持输入和输出的大小不变。零填充通常用于解决两个问题:一是保持卷积操作后输出大小与输入大小相同,使得网络层级结构更加灵活;二是防止在边缘像素上进行卷积操作时,由于数据边缘的特殊性而导致信息丢失。

image-20240509114520681

6.5 卷积神经网络:

卷积神经网络(Convolutional Neural Network,CNN)是一种主要用于处理具有网格结构数据的人工神经网络。最初用于图像处理任务,但现在已被广泛应用于其他领域,如自然语言处理和视频分析。

CNN 的主要特点是通过卷积操作来提取输入数据的特征。它包含了多个层级,包括卷积层、池化层和全连接层。

  1. 卷积层(Convolutional Layer): 卷积层是 CNN 的核心部分。它包括多个滤波器(也称为卷积核),每个滤波器通过对输入数据的局部区域进行卷积操作,生成一个特征图(也称为卷积特征)。这样可以有效地提取出输入数据的空间结构信息。同时,通过共享权重和局部连接的方式,卷积层可以大大减少参数数量,提高模型的效率和泛化能力。

  2. 池化层(Pooling Layer): 池化层用于减少特征图的尺寸,并保留最重要的特征信息。常用的池化操作包括最大池化和平均池化。通过降低特征图的空间维度,池化层可以提高模型的计算效率,并减少过拟合的风险。

  3. 全连接层(Fully Connected Layer): 全连接层通常位于卷积层和输出层之间,用于将卷积层输出的特征图转换为一个向量,并通过多个全连接层进行非线性变换和特征提取。最后一个全连接层通常用于输出模型的预测结果。

CNN 通过多个卷积层和池化层的堆叠,逐渐提取输入数据的高级特征,并通过全连接层将这些特征映射到输出类别。通过反向传播算法(Backpropagation)和梯度下降优化方法,CNN 可以自动学习特征的表示,并在训练过程中不断优化模型参数,以最小化损失函数。这使得 CNN 在图像识别、目标检测、语义分割等任务中取得了令人瞩目的成果。

6.6 卷积运算的参数量:

image-20240509130710081

公式:

image-20240509130758717

6.7 Inception网络:

Inception网络是由Google于2014年提出的一个深度学习模型架构,旨在解决传统卷积神经网络中的瓶颈问题,同时提高模型的表达能力和效率。Inception网络以GoogleNet为代表,是深度学习中的重要里程碑之一。

Inception网络的核心思想是使用不同大小的卷积核和池化操作并行地提取特征,并将这些特征组合起来,以获得更丰富和多样的特征表示。具体来说,Inception网络采用了一系列的Inception模块,每个模块由多个分支组成,每个分支使用不同大小的卷积核和池化操作来提取特征。这些特征然后被级联或拼接在一起,形成下一层的输入。

Inception网络的优点包括:

  1. 多尺度特征提取: 使用不同大小的卷积核和池化操作,能够在不同尺度上提取特征,使得网络对于不同大小的物体能够有更好的响应。

  2. 参数效率: 通过使用并行的结构,Inception网络能够充分利用参数,从而提高了网络的效率。

  3. 表达能力: Inception网络的复杂结构使得网络能够更好地学习输入数据的复杂特征表示,从而提高了模型的表达能力。

Inception网络在ImageNet图像分类挑战赛中取得了巨大成功,同时也被广泛应用于各种计算机视觉任务中,如图像分类、目标检测、图像分割等。

6.7.1 1x1卷积核:

1x1卷积核是指卷积核的尺寸为1x1的一种特殊类型的卷积核。通常,在深度学习中,卷积核的尺寸指的是其在空间维度上的大小,例如3x3、5x5等。而1x1卷积核则是在空间维度上只有1个像素大小的卷积核。

尽管1x1卷积核在空间上没有实际的尺寸,但它在深度方向上仍然可以对输入数据的通道进行卷积操作。因此,1x1卷积核常用于在不同通道之间进行特征的线性组合和变换。

1x1卷积核具有以下几个重要的作用和特点:

  1. 降维和升维: 通过使用适当数量的1x1卷积核,可以实现对输入数据通道数的降维或升维,从而在保持特征信息的同时减少或增加计算负担。

  2. 非线性映射: 即使在空间上只有一个像素大小,1x1卷积核仍然可以引入非线性映射,通过激活函数对每个通道的输出进行非线性变换。

  3. 通道间交互: 1x1卷积核可以用于实现不同通道之间的特征交互和融合,从而增强模型的表达能力和灵活性。

1x1卷积核常常被用于深度学习模型中的瓶颈结构、特征压缩和特征图的通道数调整等任务中,尤其是在Inception网络等复杂结构中经常被使用。

image-20240509115214137

7.序列建模:

序列建模是指利用机器学习或深度学习技术对序列数据进行建模和分析的过程。序列数据是按照一定顺序排列的数据,例如时间序列、文本数据、音频数据等。

序列建模的目标通常包括以下几个方面:

  1. 序列预测: 根据已有的序列数据,预测未来的数据。例如,根据过去的股票价格数据,预测未来的股价走势。

  2. 序列分类: 对序列数据进行分类或标记。例如,根据文本序列判断文本所属的类别或情感。

  3. 序列生成: 生成新的序列数据,使其与原始数据具有相似的特征。例如,利用循环神经网络生成文本或音乐。

  4. 序列转换: 将序列数据转换为不同的形式或表示。例如,将文本序列转换为词嵌入表示,或将时间序列数据转换为频域表示。

常用于序列建模的技术包括:

  • 循环神经网络(RNN): RNN是一种专门用于处理序列数据的神经网络结构,具有记忆能力,能够有效地捕捉序列数据中的长期依赖关系。

  • 长短期记忆网络(LSTM): LSTM是一种改进的RNN结构,通过门控单元来控制信息的流动,能够更好地解决RNN中的梯度消失和梯度爆炸问题。

  • Transformer: Transformer是一种基于自注意力机制的神经网络结构,适用于处理序列数据,特别是在自然语言处理领域取得了巨大成功。

  • 卷积神经网络(CNN): CNN通常用于处理具有网格结构的序列数据,例如文本分类和语音识别。

序列建模在许多领域都有广泛的应用,包括自然语言处理、时间序列分析、音频处理、生物信息学等。它为我们理解和利用序列数据提供了重要的工具和方法。

7.1 语言模型:

对于语言序列 s=w1,w2,...,wn,语言模型就是计算该序列的概率,即 P(w1,w2,...,wn) 。

image-20240509115549310

在序列建模中,语言模型是一种常见的模型,用于对文本序列进行建模和预测。语言模型的目标是学习文本序列中单词或字符的概率分布,以便生成新的文本、评估句子的流畅度或进行语言相关的任务。

语言模型通常基于以下两种类型进行建模:

  1. 基于单词的语言模型: 这种语言模型将文本序列看作由单词组成的序列,目标是学习给定历史单词序列𝑤1,𝑤2,...,𝑤𝑡−1w1,w2,...,w**t−1的条件概率分布𝑃(𝑤𝑡∣𝑤1,𝑤2,...,𝑤𝑡−1)P(w**tw1,w2,...,w**t−1),即在给定历史单词的情况下,预测下一个单词的概率。这种模型常用于自然语言处理任务,如语言生成、机器翻译和语音识别等。

  2. 基于字符的语言模型: 这种语言模型将文本序列看作由字符组成的序列,目标是学习给定历史字符序列𝑐1,𝑐2,...,𝑐𝑡−1c1,c2,...,c**t−1的条件概率分布𝑃(𝑐𝑡∣𝑐1,𝑐2,...,𝑐𝑡−1)P(c**tc1,c2,...,c**t−1),即在给定历史字符的情况下,预测下一个字符的概率。这种模型通常用于处理语音识别、拼写校正等任务。

7.2 n元文法(n-gram)模型:

减少历史基元的个数。

n元文法(n-gram)模型是一种基于统计的语言模型,用于建模文本序列中的单词或字符的概率分布。它通过观察文本中相邻的n个项(单词或字符),来估计下一个项出现的概率。

具体来说,n元文法模型假设文本中的每个项(单词或字符)出现的概率仅依赖于前面的n-1个项,而与其他项无关。这种假设称为n元性(n-gram),其中n表示用于建模的项的数量。例如,当n=1时,模型称为一元文法(unigram)模型;当n=2时,模型称为二元文法(bigram)模型;当n=3时,模型称为三元文法(trigram)模型,以此类推。

n元文法模型的基本思想是利用训练文本中的频率统计信息来估计n个项同时出现的概率,然后根据这些概率来预测下一个项。具体来说,给定前面的n-1个项𝑤1,𝑤2,...,𝑤𝑛−1w1,w2,...,w**n−1,我们可以使用以下条件概率来预测下一个项𝑤𝑛w**n

𝑃(𝑤𝑛∣𝑤1,𝑤2,...,𝑤𝑛−1)P(w**nw1,w2,...,w**n−1)

这个条件概率可以通过简单地统计训练文本中𝑤1,𝑤2,...,𝑤𝑛−1,𝑤𝑛w1,w2,...,w**n−1,w**n同时出现的频次,并除以𝑤1,𝑤2,...,𝑤𝑛−1w1,w2,...,w**n−1出现的频次来估计。

n元文法模型的优点是简单且易于实现,特别是在处理大规模文本数据时具有较高的效率。然而,由于其基于n元性假设,n元文法模型可能会忽略长距离的依赖关系,导致在某些情况下预测不准确。

  1. 当 n=1 时,即出现在第 i 位上的基元 wi 独立于历史。 一元文法也被写为 uni-gram 或 monogram;

  2. 当 n=2 时,即出现在第 i 位上的基元 wi 仅依赖于wi -1,2-gram (bi-gram) 被称为1阶马尔可夫链;

  3. 当 n=3 时,即出现在第 i 位上的基元 wi 依赖于{wi -1、 wi -2},3-gram(tri-gram)被称为2阶马尔可夫链,依次类推。

举个例子:

image-20240509115853968

image-20240509115918032

image-20240509115943515

在句子前加bof,eof,然后根据要求的句子,求出一堆条件概率,然后乘起来。

8.注意力机制:

注意力机制是一种模仿人类注意力机制的方法,用于在神经网络中增强模型对输入的关注能力,并且能够动态地调整对输入的关注程度。注意力机制已经在各种深度学习模型中得到广泛应用,特别是在自然语言处理和计算机视觉领域。

在自然语言处理中,注意力机制最早被应用于机器翻译任务。传统的机器翻译模型(如编码-解码模型)将输入序列转换成一个固定长度的上下文向量,然后用于生成输出序列。然而,这种固定长度的表示可能会丢失输入序列中的重要信息。因此,注意力机制被引入,允许模型在生成每个输出时动态地关注输入序列的不同部分,从而提高了翻译质量。

在计算机视觉领域,注意力机制通常用于处理图像分类、目标检测和图像生成等任务。通过引入注意力机制,模型可以自动学习对图像中不同区域的关注程度,从而提高了对图像中重要区域的识别和理解能力。

总的来说,注意力机制可以帮助神经网络模型集中注意力于输入的特定部分,从而提高模型的性能和表现。它已经成为深度学习中的重要组成部分,并在各种任务中取得了显著的成果。

8.1 软性注意力机制(soft attention mechanism):

软性注意力机制是一种在深度学习中常用的注意力机制,它允许模型对输入的不同部分分配不同的注意力权重,而这些权重是通过学习得到的,而不是事先设定的。

软性注意力机制的核心思想是利用学习得到的注意力权重对输入的信息进行加权,然后将加权后的信息用于后续的计算。这种机制允许模型在不同时间步或不同空间位置上动态地调整对输入的关注程度,从而提高模型的灵活性和表现能力。

在软性注意力机制中,通常会使用一个可学习的注意力权重向量𝛼α来表示对每个输入项的注意力权重。然后,通过将注意力权重与输入的特征进行加权求和,得到加权后的表示。具体地,对于输入序列𝑥=(𝑥1,𝑥2,...,𝑥𝑇)x=(x1,x2,...,x**T),软性注意力机制可以计算加权后的表示𝑐c如下:

𝑐=∑𝑡=1𝑇𝛼𝑡⋅𝑥𝑡c=∑t=1Tαtx**t

其中𝛼𝑡α**t是对应于输入项𝑥𝑡x**t的注意力权重,𝑇T是输入序列的长度。通常,𝛼α是通过一个归一化的 softmax 函数来计算得到的,以保证注意力权重的总和为1,且每个权重在0,10,1的范围内。softmax 函数的定义如下:

𝛼𝑡=exp⁡(𝑒𝑡)∑𝑖=1𝑇exp⁡(𝑒𝑖)α**t=∑i=1Texp(e**i)exp(e**t)

其中𝑒𝑡e**t是关于输入项𝑥𝑡x**t的能量(或分数),通常是通过模型学习得到的。

软性注意力机制在自然语言处理、计算机视觉和强化学习等领域都有广泛的应用,它提供了一种有效的方法来动态地调整模型对输入的关注程度,并在各种任务中取得了显著的性能提升。

注意力机制可以分为两步:

  1. 计算注意力分布α。

  2. 根据α来计算输入信息的加权平均。

9.模型的优化和正则化:

模型的优化和正则化是深度学习中非常重要的两个方面,它们都旨在提高模型的泛化能力和性能,避免过拟合等问题。

  1. 模型的优化: 模型的优化是指通过调整模型的参数,使得模型在训练数据上能够达到最佳的性能。常见的优化算法包括梯度下降法及其变种,如随机梯度下降(SGD)、批量梯度下降(BGD)、小批量梯度下降(mini-batch SGD)以及带动量的梯度下降等。这些优化算法通过计算损失函数关于模型参数的梯度,并沿着梯度的反方向更新参数,从而逐步减小损失函数,使得模型能够收敛到局部或全局最优解。

  2. 模型的正则化: 模型的正则化是通过在损失函数中加入额外的正则化项,来限制模型的复杂度,防止过拟合。常见的正则化方法包括L1正则化和L2正则化。L1正则化通过在损失函数中添加参数的绝对值之和,使得模型的参数更稀疏,有助于特征选择和模型简化;L2正则化通过在损失函数中添加参数的平方和,使得模型的参数更平滑,有助于减小参数之间的差异,降低模型复杂度。

9.1 训练过程中的批量归一化:BN:

在深度学习中,批量归一化(Batch Normalization,简称BN)是一种用于加速神经网络训练和提高模型性能的技术。它在每个训练迭代的过程中对每个特征进行归一化处理,使得网络在学习过程中更加稳定和快速收敛。

批量归一化的主要思想是在每个批次的数据上对每个特征进行标准化,即将每个特征的均值调整为0,标准差调整为1,然后再通过可学习的缩放和平移参数进行线性变换。这样可以使得网络的输入分布更稳定,减少了网络中间层的内部协变量转移(Internal Covariate Shift),有助于网络更加稳定地训练。

批量归一化的计算过程如下:

  1. 对每个批次的数据𝑋={𝑥1,𝑥2,...,𝑥𝑚}X={x1,x2,...,x**m},计算每个特征的均值𝜇𝐵μ**B和方差𝜎𝐵2σ**B2。

  2. 对每个特征进行标准化处理,即𝑥^𝑖=𝑥𝑖−𝜇𝐵𝜎𝐵2+𝜖x^i=σ**B2+ϵxiμ**B,其中𝜖ϵ是一个很小的常数,用于防止除0错误。

  3. 将标准化后的特征通过缩放参数𝛾γ和平移参数𝛽β进行线性变换,即𝑦𝑖=𝛾𝑥^𝑖+𝛽y**i=γ**x^i+β

  4. 将得到的𝑦𝑖y**i作为输入传递给下一层网络。

批量归一化通常被应用于卷积神经网络(CNN)和全连接神经网络(DNN)中的隐藏层,可以加速网络的训练收敛,提高模型的泛化能力,并且有助于使用更高的学习率。它已经成为了训练深度神经网络时的一种标配技术。

好处:

  • 减轻了对参数初始化的依赖,有利于调参。

  • 训练更快,可以使用更大的学习率。

  • 一定程度上增加了泛化能力。

存在的问题:

BN依赖于批的大小,当批量很小时,估计的均值和方差不稳定。

因此BN不适合如下场景:批量非常小,比如训练资源有限无法设置较大的批量,也比如在线学习等使用单例进行模型参数更新的场景。循环神经网络,因为它是一个动态的网络结构,同一个批中训练实例有长有短,导致每一个时间步长必须维持各自的统计量,这使得BN并不能正确的使用。

9.2 Dropout:

当训练一个深度神经网络时, 我们可以随机丢弃一部分神经元(同时丢弃其对应的连接边)来避免过拟合,这种方法称为丢弃法(Dropout)。

在训练时,激活神经元的平均数量为原来的𝑝倍。而在测试时,所有的神经元都是可以激活的,这会造成训练和测试时网络的输出不一致。为了缓解这个问题,在测试时需要将神经层的输入𝒙 乘以𝑝,保证输出期望一致。保留率𝑝可以通过验证集来选取一个最优的值。

Dropout简化了网络,防止过拟合。

Dropout可看作是一种集成学习。

经过dropout之后,输出的均值没有发生变化,但是方差发生了变化。由于Dropout的输出还要经过非线性层(比如Linear层+ReLU),方差的变化就会导致经过后面非线性层输出的均值发生偏移,最终导致整个网络的输出值发生偏移。由于回归问题输出是一个绝对值,对这种变化就很敏感,但是分类问题输出只是一个相对的logit,对这种变化就没那么敏感。

image-20240509135853138

10.经典论文:

10.1 Distributed Representations of Words and Phrases and their Compositionality:

Google 的 NLP 经典论文,解决了Skip-gram 的多个问题。

Skip-gram通过给定一个input word 来预测上下文的word。

10.1.1 存在的问题:

  1. 如果词表很大, 𝑉 也会很大,极大的拖慢了训练速度。

  2. 整个输入只有一个正样本(也就是上下文word),但是却有大量负样本( 𝑉−1 ),其实大部分的负样本是无效的。

  3. 训练集不平衡,比如出现了大量的"the", "a"。但是这些词并不会有很多信息。

  4. 没有办法给短语embedding。

10.1.2 解决方案:

  1. 以每个单词为叶子节点,构造一个二叉树。

  2. 针对负样本过多问题,采用采样选择 𝑘 个负样本而并非整个词表来解决。

  3. 为了解决训练集不平衡问题,基于频率随机删除词。

  4. 为了解决短语问题,文章采用了把短语先标出来再训练的思路。为了能得到短语,作者提出当两个word连续出现比较多,单独出现比较少时,很可能就是短语。

10.2 Deep Residual Learning for Image Recognition:

提出Residual Networks(ResNet),一个残差学习的框架,以减轻网络的训练负担,比以往的网络要深的多。其具有以下优点:

  1. 残差网络很容易习得映射关系,因而比普通深层网络更容易训练。

  2. 随着深度的增加,精度也会增加,效果良好。对于CIFAR-10数据集,超过100层的网络表现很成功,还可以扩展到1000层。

  3. ImageNet对象分类数据集比赛,152层的残差网络参赛网络中最深的,然而却拥有比VGG更低的复杂度。2015 ImageNet比赛中以3.57%的误差率,获得第一名。

  4. 在其他识别任务中也有良好的泛化能力,多个比赛的第一名(有ImageNet detection, Imagenet localization,COCOdetection COCOsegmentation),证明残差学习的原则是可泛化的。

提出残差学习的动机:源于退化问题。如果添加的层可以构造为恒等映射(identity mapping),那么较深的模型的训练误差应该不大于较浅的模型。

通过残差学习来重构模型,进行预处理,如果恒等映射是最优的,求解器可以简单地将多个非线性层的权值趋近于零来逼近恒等映射。

在深度增加的时候,普通网络会出现退化的问题,但是残差网络不会,通过增加恒等层实现的。

10.3 Bidirectional Encoder Representations from Transformers:

介绍了一个叫做BERT(Bidirectional Encoder Representations from Transformers)的新的语言表达模型,通过联合作用于所有层的左右上下文,BERT被设计用来预训练未标记文本的深度双向表示,这与先前的其他的语言表达模型不一样,因此,只需一个额外的输出层就可以对预先训练的BERT模型进行微调,从而为广泛的任务创建最先进的模型,例如question answering与language inference问题,而无需对特定任务的体系结构进行实质性的修改。

从左右两个方向考虑上下文信息