槽点太多了…
图片显示又卡bug了(笑)
2.1 Tensor操作
理解的核心:张量其实就是矩阵
又叫张量操作
多维数组或者矩阵
性质:
1.张量属性
#形状、数据类型
# 查看张量的形状
print(x.size()) # 输出: torch.Size([2, 3])
# 查看张量的数据类型
print(x.dtype) # 输出: torch.int64
2.索引和切片
# 获取张量的某个元素
print(x[0, 1]) # 输出: tensor(2)
# 切片操作
print(x[:, 1]) # 获取第二列的所有元素
切片其实就是选取部分数据
切片操作举例:
import torch
# 创建一个 3x3 的张量
x = torch.tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 选择第一行的所有元素
slice1 = x[0, :]
print("选择第一行的所有元素:")
print(slice1) # 输出: tensor([1, 2, 3])
# 选择第一列的所有元素
slice2 = x[:, 0]
print("\n选择第一列的所有元素:")
print(slice2) # 输出: tensor([1, 4, 7])
# 选择第一行到第二行(不包括第二行)的所有元素,以及第一列到第二列(不包括第二列)的所有元素
slice3 = x[0:2, 0:2]
print("\n选择第一行到第二行、第一列到第二列的所有元素:")
print(slice3)
# 输出:
# tensor([[1, 2],
# [4, 5]])
# 修改切片后的值会影响原始张量
slice3[0, 0] = 10
print("\n修改切片后的值会影响原始张量:")
print(x)
# 输出:
# tensor([[10, 2, 3],
# [ 4, 5, 6],
# [ 7, 8, 9]])
3.数学操作
# 加法
result = torch.add(x, 2)
# 逐元素乘法
result = torch.mul(x, 2)
# 求和
result = torch.sum(x)
# 矩阵乘法
matrix1 = torch.tensor([[1, 2], [3, 4]])
matrix2 = torch.tensor([[5, 6], [7, 8]])
result = torch.matmul(matrix1, matrix2)
4.形状操作
相当于矩阵的操作
例如:
import torch
# 创建一个张量
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
# 改变张量形状为 (3, 2)
reshaped_tensor = x.view(3, 2)
# 打印改变形状后的张量
print("改变形状后的张量:")
print(reshaped_tensor)
#改变形状后的张量:
tensor([[1, 2],
[3, 4],
[5, 6]])
函数:
1.# 改变张量形状
reshaped_tensor = x.view(3, 2)
2.# 转置
transposed_tensor = x.t()
3.# 拼接张量
concatenated_tensor = torch.cat((x, x), dim=0) # 沿着行拼接
5.广播
广播就是改变维度不同的张量使得之间可以进行数学操作,比如:
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
y = torch.tensor([10, 20, 30])
#广播后:
y_broadcasted = torch.tensor([[10, 20, 30],
[10, 20, 30]])
#结果:
result = x + y_broadcasted
# 结果为
# [[ 11, 22, 33],
# [ 14, 25, 36]]
2.3 自动求导
理解的核心:梯度其实就是导数
requires_grad=True
是一种标记,pytorch会跟踪x上的所有操作,在需要时自动计算x的相关操作
分为三个步骤:
1.初始化tensor
初始化矩阵,并标记可以自动求导
import torch
# 创建一个张量并设置 requires_grad=True
x = torch.tensor([2.0], requires_grad=True)
2.定义函数表达式
正规的表达是:定义计算操作
# 定义计算图
y = x ** 2 + 3 * x + 1
3.计算梯度
涉及到两个函数:
backward()
计算梯度
grad()
访问梯度
# 自动计算梯度
y.backward()
# 访问梯度
print(x.grad) # 输出: tensor([7.])
3. PyTorch 神经网络
理解神经网络:
1.机器学习基础
机器学习的基本概念和算法
如:
1.监督学习
核心思想:从带有标签的数据中学习出一个模型
监督学习的目标是从已标记的数据中学习到一个从输入到输出的映射关系。
标记的数据(有标签的数据)指的是在机器学习或数据分析任务中,每个数据样本都附带了与之相关联的标签或输出信息。
2.无监督学习
没有明确目的的机器学习,常用于发现异常数据
常见的两类无监督学习算法:聚类、降维
K均值聚类:就是制定分组的数量为K,自动进行分组。
层次聚类:不知道应该分为几类,那么层次聚类就比较适合了。层次聚类会构建一个多层嵌套的分类,类似一个树状结构。
降维算法:
主成分分析:是把多指标转化为少数几个综合指标。
主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。
从未标记的数据中学习,没有对应的输出标签。与监督学习不同,无监督学习的目标是在数据中发现隐藏的结构或模式,而不是进行特定的预测或分类。
在无监督学习中,模型试图从数据中学习出一些有用的特征、关系或表示,以便对数据进行更好地理解、组织或压缩。无监督学习的主要任务通常包括聚类(Clustering)、降维(Dimensionality Reduction)、密度估计(Density Estimation)等。
未标记的数据(无标签的数据)则是指在数据集中缺少与之关联的标签或输出信息的数据样本。
3.回归
4.分类
5.聚类
聚类是将数据集中的样本分组到多个不同的类别中,使得同一类别内的样本更加相似,而不同类别之间的样本差异更大。常见的聚类算法包括K均值聚类、层次聚类等。
常见的机器学习算法
1.线性回归
- 线性回归是一种用于建立输入变量(特征)和连续输出变量之间关系的回归模型。
- 基本假设是输入变量和输出变量之间存在线性关系。线性回归模型通过拟合一条直线(在一维情况下)或超平面(在高维情况下),使得输入变量和输出变量之间的残差平方和最小化。
- 线性回归的输出是连续的实数值,用于对实数域的目标变量进行预测。例如,房价预测、销售量预测等。
2.逻辑回归
- 逻辑回归是一种用于解决二分类问题的回归模型,虽然其名称中包含“回归”,但实际上是一种分类算法。
- 逻辑回归模型利用逻辑函数(也称为Sigmoid函数)将输入特征的线性组合映射到[0, 1]区间内的概率值,表示样本属于某个类别的概率。
- 在训练阶段,逻辑回归模型通过最大化似然函数或最小化交叉熵损失函数来优化模型参数。通常使用梯度下降等优化算法来实现。
- 逻辑回归的输出是一个概率值,通常根据设定的阈值(通常为0.5)进行分类,小于阈值的样本被划分为一类,大于等于阈值的样本被划分为另一类。
逻辑回归和线性回归的区别
输出类型:
- 线性回归的输出是连续的实数值,可以是任意的实数。
- 逻辑回归的输出是一个介于0和1之间的概率值,通常表示某个事件发生的概率。
模型形式:
线性回归模型使用线性函数来建模输入特征和输出之间的关系。其形式为:
$$
y = w_0 + w_1x_1 + w_2x_2 + … + w_nx_n
$$
其中 (y) 是输出变量,(w) 是权重参数,(x) 是输入特征。逻辑回归模型使用逻辑函数(也称为Sigmoid函数)来建模输入特征和输出之间的关系。其形式为:
$$
p(y=1|x) = \frac{1}{1 + e^{-(w_0 + w_1x_1 + w_2x_2 + … + w_nx_n)}}
$$
其中 (p(y=1|x)) 表示给定输入特征 (x) 条件下输出 (y) 为1的概率。
损失函数:
线性回归通常使用平方损失函数(Mean Squared Error,均方差)来衡量预测值与真实值之间的差异。
逻辑回归通常使用对数损失函数(Log Loss)或交叉熵损失函数(因为p ( x ) p(x)p(x)是目标分布,所以用p pp来表示该事件是最好的。但是现在用了q ( x ) q(x)q(x),多了一些不确定性因素,这个增加的信息量就是相对熵。
(Cross-entropy Loss)来衡量预测概率与真实标签之间的差异。
$$
DKL(p∥q)=i=1∑Np(xi)log(q(xi)p(xi))
$$
模型输出:
- 线性回归模型的输出是一个实数值,可以是任意的实数。
- 逻辑回归模型的输出是一个概率值,通常大于0且小于1,表示某个事件发生的概率。
3.决策树
用于解决分类和回归问题
每个内部节点表示一个特征/属性,
每个叶子节点表示一个类别标签或连续值输出。
是一种:非参数化模型:
非参数模型并不是说模型中没有参数!而是参数很多或者说参数不确定。
例如:
假设你正在研究一种新药对患者疾病症状的影响。你收集了一些关于患者的基本信息(如年龄、性别、体重等)以及他们接受治疗前后的症状严重程度。你想要建立一个模型来预测药物治疗对症状改善的影响。
如果你选择使用K近邻算法(K-Nearest Neighbors,KNN)来建立预测模型,那么你不需要做出特定的函数形式的假设。KNN算法会根据患者的特征与其他患者的特征之间的相似度,来预测该患者的症状改善程度。在这种情况下,模型不对函数形式做出假设,而是通过学习数据中的模式和结构来进行预测。
它不需要假设特定的函数形式,而是根据数据的特征来进行预测。相比之下,线性回归模型是一种参数化模型,因为它假设了特定的线性函数形式。
对比:
在使用非参数化模型(如决策树、K近邻算法等)时,通常不需要像参数化模型那样手动初始化模型的参数。相反,非参数化模型会根据训练数据自动构建模型,学习数据中的模式和结构。在决策树的情况下,算法会自动选择特征进行节点分割,并根据数据集的特征和标签来构建树状结构。
而在使用参数化模型时,通常需要手动初始化模型的参数,并选择合适的模型结构。例如,在线性回归模型中,需要手动选择模型的权重参数,并且假设特定的线性函数形式。这些参数通常是在训练过程中通过优化算法进行调整和学习的。
因此,非参数化模型通常具有更强的灵活性和自动化,因为它们不需要假设特定的函数形式或参数数量。相比之下,参数化模型通常需要更多的人为干预和手动设置。
但是:非参数模型仍然需要自己去手动设置和探索一些特征
特征的提取:
- 基本特征提取: 这涉及从原始数据中提取最基本的特征,例如数值型特征(如年龄、收入)、类别型特征(如性别、城市)等。这些特征通常是直接从数据中提取的,不需要额外的处理。
- 特征变换: 特征变换可以将原始特征进行数学变换,以获得更具代表性或更有意义的特征。例如,对数变换、平方变换、指数变换等可以用于改变特征的分布或增强某些特征之间的相关性。
- 特征组合: 特征组合可以将多个原始特征进行组合,以创建新的特征。这可以通过加法、乘法、除法等运算来实现。例如,将身高和体重结合起来创建BMI(身体质量指数)特征。
- 离散化: 将连续型特征转换为离散型特征的过程称为离散化。这可以通过分箱(binning)或分段(segmentation)来实现。例如,将年龄划分为不同的年龄组。
- 文本特征提取: 对于文本数据,特征提取通常涉及将文本转换为数值特征的过程。常见的文本特征提取方法包括词袋模型(Bag-of-Words)、TF-IDF(Term Frequency-Inverse Document Frequency)等。
- 时间序列特征提取: 对于时间序列数据,特征提取可以涉及计算统计特征(如均值、方差)、滑动窗口统计特征、时序特征(如时间差、周期性特征)等。
- 高级特征工程: 针对具体问题,可能需要进行更高级的特征工程,例如基于领域知识的特征构建、特征选择、特征降维等。(也即提取主成分)
4.支持向量机
是一种监督学习算法
找到一个最优平面(最优超品面),将不同类别的数据点有效地分隔开来
支持向量:在SVM中,支持向量是离超平面最近的一些数据点。这些支持向量对于定义超平面的位置和方向至关重要。换句话说,支持向量决定了最大间隔超平面的形状和位置。
核函数:
将低维的原始特征空间映射到一个更高维的特征空间,原始空间中线性不可分的数据在新的高维空间可能会变得线性可分,使得支持向量机(SVM)等线性分类器能够更好地完成分类任务。
假设我们有一组数据,这些数据在二维空间中是线性不可分的,也就是说,无法通过一条直线将两个类别的数据完全分开。但是,我们希望使用SVM来解决这个分类问题。
核函数的作用就是将原始的特征空间映射到一个更高维的空间,使得在这个高维空间中数据变得线性可分。换句话说,核函数可以将非线性问题转换为线性问题来处理。
例如,考虑一个二维的数据集,包含了横坐标和纵坐标两个特征。如果我们使用线性核函数,那么SVM将在二维空间中寻找一条直线来分隔两个类别。但是,如果数据在二维空间中不是线性可分的,那么使用线性核函数可能无法得到一个很好的分类结果。
这时候,我们可以使用一个非线性的核函数,比如高斯核函数(也称为径向基函数核,RBF核)。高斯核函数的作用是将原始的二维空间映射到一个无限维的高维空间,使得数据在高维空间中变得线性可分。在高维空间中,SVM就可以找到一个超平面来完美地分隔两个类别的数据点。
因此,核函数允许我们在低维空间中处理复杂的非线性问题,并且在高维空间中寻找一个线性的超平面来完成分类任务。常用的核函数包括高斯核函数、多项式核函数、Sigmoid核函数等,具体的选择取决于数据的性质和分类问题的需求。
核函数的作用是隐式地定义了一个高维空间中的特征映射,而无需显式地计算出这个映射。常用的核函数有:
- 线性核(Linear Kernel): 直接进行线性分隔,适用于数据线性可分的情况。
- 多项式核(Polynomial Kernel): 将数据映射到多项式特征空间,通过多项式函数进行分隔,适用于数据的非线性分隔情况。
- 径向基函数核(Radial Basis Function,RBF Kernel): 将数据映射到无穷维的特征空间,通过高斯函数进行分隔,适用于复杂的非线性分隔情况。
2.深度学习基础
基本术语
1.损失函数
模型预测值与真实标签之间的差异程度,是训练过程中的优化目标。
理解:是一个函数,函数的值是用于描述预测值和真实值之间的误差的
作用:用损失函数来计算在测试数据(不仅仅是测试集,在训练过程中也很重要)上的表现,通过最小化损失函数,可以使得模型的预测值接近真实值,提高模型的准确性和性能
最小化损失函数的方法:
梯度下降法(Gradient Descent):
沿着损失函数的负梯度方向调整参数来最小化损失函数。
在每一次迭代中,根据损失函数关于模型参数的梯度方向和大小来更新参数,使得损失函数的值逐渐减小。
随机梯度下降法(Stochastic Gradient Descent,SGD):
梯度下降法的一种变体,每次迭代使用一个随机小批量的样本来计算损失函数的梯度,并更新参数。SGD通常比批量梯度下降法更快地收敛,并且在大规模数据集上更有效。
自适应学习率优化器(Adaptive Learning Rate Optimizers):
学习率调度(Learning Rate Scheduling):
是一种超参数
学习率决定了模型在参数空间中沿着梯度方向更新的幅度,即每一步参数更新的大小
正则化(Regularization):
过大的参数会导致过拟合
本质是:限制模型的能力
向损失函数添加额外的惩罚项来防止模型过拟合训练数据。正则化的惩罚函数通常包括 L1 正则化和 L2 正则化两种常见形式。
L2 正则化通过迫使模型的参数趋向于较小的值,从而降低了模型的复杂度
有以下的损失函数:
均方误差损失(Mean Squared Error,MSE):
表达式:
$$
\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
$$适用于回归问题,用于衡量模型预测值与真实值之间的平均平方差。
交叉熵损失(Cross-Entropy Loss):
二分类交叉熵损失:
$$
\text{CE} = -\frac{1}{n} \sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)]
$$多分类交叉熵损失:
$$
\text{CE} = -\frac{1}{n} \sum_{i=1}^{n} \sum_{j=1}^{C} y_{ij} \log(\hat{y}_{ij})
$$适用于分类问题,用于衡量模型预测的概率分布与真实标签的差异。
对数损失(Log Loss):
表达式:
$$
\text{Log Loss} = -\frac{1}{n} \sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)]
$$适用于二分类或多分类问题,与交叉熵损失类似,用于衡量模型预测的概率分布与真实标签的差异。
Hinge Loss:
表达式:
$$
\text{Hinge Loss} = \max(0, 1 - y \cdot \hat{y})
$$适用于支持向量机(SVM)等分类模型,用于衡量模型输出与真实标签之间的间隔。
Huber Loss:
表达式:
$$
\text{Huber Loss} = \begin{cases} \frac{1}{2}(y - \hat{y})^2, & \text{if } |y - \hat{y}| \leq \delta \ \delta(|y - \hat{y}| - \frac{1}{2}\delta), & \text{otherwise} \end{cases}
$$适用于回归问题,比均方误差损失对异常值更加鲁棒。
2.优化器
用于调整模型参数以最小化损失函数的算法,如随机梯度下降(SGD)、Adam、RMSProp 等。
这些算法涉及到手动调参数:
有网格搜索:网格对每个超参数组合进行模型训练和评估,从而找到性能最佳的超参数组合。
关键步骤:交叉验证:
对于每个参数组合,使用交叉验证方法来评估模型在验证集上的性能。通常使用 K 折交叉验证,将训练数据分成 K 个子集,在每次迭代中使用 K-1 个子集进行训练,剩余的一个子集用于验证。重复 K 次后取平均得到模型的性能评估指标,如准确率、F1 值等。(K通常是5或10)
F1 值是精确率和召回率的调和平均数
3.批量处理
在训练过程中,将训练数据分成多个批次进行训练,以加快训练速度和减少内存占用。
4.神经元
神经网络的基本组成单元
人工神经元接收来自其他神经元或外部源的输入,每个输入都有一个相关的权值(w),它是根据该输入对当前神经元的重要性来确定的,对该输入加权并与其他输入求和后,经过一个激活函数 f,计算得到该神经元的输出。
5.激活函数
引入了非线性、解决了线性不可分问题、稀疏性和正则化
用来求得神经元的输出的
有一些常用的激活函数
分层表示:神经网络通常是分层的结构,由多个层次组成,每一层都负责不同层次的特征提取和抽象表示。底层包含原始数据的基本特征,而高层则包含更加抽象和复杂的特征。
6.前向传播、反向传播
神经网络是通过反向传播算法实现学习的。下面是实现学习的基本步骤:
前向传播:首先,将输入数据通过神经网络进行前向传播,从输入层开始逐层向前传递,直到输出层得到网络的预测结果。在每一层中,神经元根据输入数据和连接权重计算出激活值,并通过激活函数得到输出。
计算损失:将网络的输出与真实标签进行比较,计算预测值与真实值之间的差异,这个差异通常用损失函数来表示。损失函数可以是各种形式,比如均方误差(MSE)、交叉熵等。
反向传播:接下来,利用反向传播算法计算损失函数对网络参数的梯度。反向传播从损失函数开始,沿着网络的反方向逐层传播梯度,根据链式法则计算每一层参数的梯度。这个过程使得我们能够知道如何调整参数才能降低损失函数的值。
参数更新:最后,根据梯度下降(或其他优化算法)的原理,利用计算得到的梯度来更新网络中的参数。更新参数后,重复前面的步骤,继续进行前向传播、计算损失和反向传播,直到达到停止条件(如达到最大迭代次数或损失函数收敛)。
通过这个过程,神经网络能够根据输入数据逐渐调整网络参数,使得网络的预测结果逐渐接近真实值,从而实现学习的目的。这就是神经网络是如何通过反向传播算法实现学习的基本过程。
前向传播:(求误差)
反向传播:(误差回传,即修改误差)
常见的深度学习模型
1.如多层感知机(MLP)
是传统的多层感知机
多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构,如下图:
多层感知机层与层之间是全连接的
最底层是输入层,中间是隐藏层,最后是输出层。
Sigmoid型激活函数
这个函数通常用做二分类
MLP(多层感知机)中通常会使用随机梯度下降(Stochastic Gradient Descent, SGD)或其变体来训练模型。SGD是一种优化算法,用于更新神经网络中的权重以最小化损失函数。
随机梯度下降和和梯度提升树都是最小化损失函数的算法,但是两者在实现方式上有所不同
- 随机梯度下降 是一种迭代优化算法,用于更新模型的参数以最小化损失函数。在每次迭代中,它使用单个训练样本的梯度来更新参数。由于每次更新只考虑单个样本,因此更新是随机的。SGD通常用于训练神经网络等大规模数据集和高维特征空间的模型。
- 梯度提升树 是一种集成学习技术,它通过迭代地训练弱模型(通常是决策树),并通过优化损失函数的梯度来改进每个模型的性能。在每次迭代中,新模型被构建以减少前一个模型残差的损失。最终,所有模型的预测结果被加权结合以得到最终的预测结果。梯度提升树通常用于回归和分类问题,是一种非常强大且灵活的模型。
梯度下降的基本思想是沿着损失函数的负梯度方向更新参数的值,以使得损失函数逐渐减小。这里的下降表示损失函数的下降
“提升”一词在梯度提升中表示通过迭代地构建和组合模型来提高整体模型的性能。这里的提升代表模型的功能提升
2.卷积神经网络(CNN)
区别于BP神经网络:多层感知机
BP神经网络是指“反向传播神经网络”
BP神经网络通常是指多层感知机(Multi-Layer Perceptron,MLP)。
- BP神经网络:BP神经网络通常是全连接的,每个神经元与上一层的所有神经元相连,各个层之间的连接权重是可学习的。BP神经网络的隐藏层和输出层可以包含任意数量的神经元。
- CNN:CNN包含了卷积层、池化层和全连接层等不同类型的层。在卷积层中,神经元只与输入数据的局部区域相连,并且通过共享权重来提取局部特征。通过卷积和池化操作,CNN能够有效地提取图像等数据中的空间特征,并减少模型参数数量。
卷积层:一系列滤波器(卷积核)来扫描输入数据
池化层:
池化窗口?
减少数据空间维度
池化又叫下采样(Dwon sampling), 与之相对的是上采样(Up sampling). 卷积得到的特征图一般需要一个池化层以降低数据量.
和卷积一样, 池化也有一个滑动的核, 可以称之为滑动窗口, 上图中滑动窗口的大小为 2 × 2 2\times 22×2, 步幅为 2 22, 每滑动到一个区域, 则取最大值作为输出, 这样的操作称为 Max Pooling. 还可以采用输出均值的方式, 称为 Mean Pooling.
全连接层:是传统的神经网络结构,每个神经元都和前一层所有神经元相连,将卷积层和池化层提取到的特征进行组合和整合,以便最终的分类或回归任务。
卷积操作:
对卷积的理解
卷积:
旋转,相乘、积分
卷积的物理意义!火车进山洞的理解:【卷积】直观形象的实例,10分钟彻底搞懂_哔哩哔哩_bilibili
卷积:解决在信号邻域内时域与频域的问题
卷积就是对信号进行滤波,系统就是滤波器
卷积神经网络:
在把图片交给神经网络之前,先进行卷积的操作
1.图片转化为数字的矩阵
2.然后创建一个3*3的矩阵,叫做卷积核
3.然后开始卷积
意义何在:
被卷积后的图像:经过卷积核(过滤器),提取特征
卷积
对卷积这个名词的理解:所谓两个函数的卷积,本质上就是先将一个函数翻转,然后进行滑动叠加。
卷积操作是将一个小的窗口(通常称为卷积核或过滤器)在输入图像上滑动,并将卷积核中的权重与输入图像中对应位置的像素值相乘,然后将所有乘积的结果相加,最后得到一个输出值。这个输出值通常对应于输入图像的某种特征,例如边缘、纹理等。
卷:指的是函数的翻转,还有窗口滑动的意思
积:指的是积分、加权求和
关于为什么要积?:
需要把每个像素周边的信息,甚至整个图像都要考虑进来,对当前像素进行某种加权处理。所以说“积”是一种全局的概念,或者是一种混合,两个函数在空间上的一种混合
关于为什么要卷?:
为什么不直接相乘,卷是在空间上添加一种约束,指定了积的时候以什么作为参照。
理解“约束”:
卷积核:
卷积核一般有多个,不同的卷积核处理不同的信息
滤波器:多个卷积核堆叠而成的三维矩阵。在只有一个通道,也就是二维的情况下,卷积核就相当于滤波器。
卷积仍然是线性变换
激活层:引入非线性
全连接层:传统上的神经网络
BP神经网络的实现过程:
反向传播就是一个负反馈的过程,使得误差变小
池化:
池化操作:为了简化,抓住主要矛盾,忽视次要矛盾,比如每个区域内只选择最大的数字。
池“就是汇集、聚集
权值共享:是在网络的不同位置或不同层之间共享相同的参数(权重)。这意味着在网络的不同部分使用相同的权重来计算特征,而不是为每个部分单独学习不同的权重。常用于具有某种结构或模式的数据。减少了参数数量、提高了网络的泛化能力、降低了过拟合的风险,并且能够更好地利用数据的结构和模式。
局部连接:指的是在神经网络的不同层之间建立连接时,只连接部分神经元,而不是全连接所有神经元。每个神经元仅与输入数据的局部区域进行连接,而不是与整个输入层的所有神经元连接。允许网络更加高效地处理大规模输入数据,
3.循环神经网络(RNN)
区别:神经网络多感知模型。MLP:神经元数量是预先固定的。每一个神经元都代表一个字或者词
RNN适合于序列分析;
对动态影像添加描述
LSTM是RNN的一种
简单RNN模型:
4.长短期记忆网络(LSTM)
一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。
解决循环神经网络RNN结构中存在的“梯度消失”问题而提出的,是一种特殊的循环神经网络。
在深度学习中,梯度通常指的是损失函数相对于模型参数的梯度。
5.变换器(Transformer)
通过自注意力机制来捕捉序列中的关系
有效地捕捉长距离依赖关系,这使得它在处理自然语言处理任务时非常有效。
自注意力机制:自注意力机制(Self-Attention Mechanism)是一种用于处理序列数据的机制,主要用于捕捉序列中不同位置之间的依赖关系。它在给定序列中的每个元素上计算权重,以表示与该元素相关的其他元素的重要性。
编码器:将输入序列中的每个元素编码成一个向量,并将其添加到全局编码器的状态中。
解码器:从全局编码器的状态中读取编码器的输出,然后将其解码为输出序列中的每个元素。
注意力机制:计算解码器当前正在处理的元素与全局编码器状态中所有元素之间的注意力关系,然后根据注意力关系对解码器的输出进行加权平均。
位置编码:对于每个输入元素,使用预先定义的位置编码来计算其在全局编码器状态中的位置。
训练:使用数据集训练模型,并优化模型的参数以最小化损失函数。