提示:本人还在学习当中,所作笔记仅供大家参考,若有问题欢迎大家指出!

目录

  • 专业词汇
  • 基础神经网络
    • 感知机
    • 多层感知机MLP
  • 卷积神经网络CNN
  • 激活函数
    • 正则化
  • 最优化方法
  • 生成模型GAN
  • 自然语言处理NLP
    • 循环神经网络RNN
  • Transformer
    • Bert和VIT和Swin和GPT和DETR
    • 扩散模型
    • 对比学习
  • video classification

专业词汇

端到端:整个学习的流程并不进行人为的子问题划分,而是完全交给深度学习模型直接学习从原始数据到期望输出的映射。
学习率:一个参数,人为选择,用于控制梯度下降中x的更新
将数据分为测试数据集和验证数据集,验证数据集用于验证,只能使用一次
反向传播算法也叫bp算法,用于优化神经网络
单层感知器(两层神经网络)是最简单的人工神经网络,用于二元线性分类器
损失函数︰衡量模型输出与真实标签的差异,定义在单个样本上
代价函数:定义在整个训练集上,是损失函数的平均
前向传播︰输入层数据开始经隐含层,从前向后,数据逐步传递至输出层。链式求导,从前往后
反向传播︰损失函数开始从后向前,梯度逐步传递至第一层。链式求导,从后往前。传播的是梯度和误差
模型不仅在训练集表现良好,在未知的数据(测试集)也表现良好,即具有良好的泛化能力
预训练:以CNN为例,越浅层,所学到的特征越通用,越深层的特征与目标的关联越高。预训练模型指训练出通用特征的模型,训练出来的通用特征可以直接使用
下游任务:即获得预训练数据后再进行的任务
微调:在一个大数据集预训练得到数据,在目标任务的数据集上再训练一下的过程就是微调(即使用预训练的训练过程称为微调)
zero-shot:在一个大数据集预训练后直接用于目标任务,而不再做微调。few-shot就是少量微调
自监督学习不需要人工标注的类别标签信息,直接利用数据本身作为监督信息,学习样本数据的特征表达,应用于下游的任务。
(使用未标号的数据生成有标号的数据)自监督学习又可以分为对比学习(contrastivelearning) 和 生成学习(generative learning)
有监督学习:全部用有标号的数据训练
半监督学习:半监督学习使用大量的未标记数据,以及同时使用标记数据。使用未标记的数据作预训练,然后在有标记的数据集是作微调
无监督学习:全部用没有标号的数据训练
预训练模型和微调模型有什么不同?微调模型会对预训练模型做一些改动,比如加上分类头做分类

基础神经网络

感知机

最早的人工智能模型y,是一个二分类问题,对于给定训练集,通过给定的输入和输出拟合出一个超平面完成分类。对于测试集,当其值在超平面一侧时,就输出结果(判断其属于哪一类)

y=wx+b是感知机模型的函数,x是一个n维向量,n的维数取决于样本的特征数量,比如这样一个例子,对于输入的图片,图片中红色像素的个数为x1,绿色像素的个数为x2,那么维数为2,假设根据红绿像素所占比例我们可以判断一张图片中是花还是草,这个例子中x是二维的,所以超平面是一维,(超平面用于分割一个空间,所以是比原空间低一个维度)
在这个例子中,我们通过样本数据拟合参数wb,将样本数据分割成两部分,其中一部分是花,另一部分就是草,这样就完成了一个分类问题
如何拟合参数?即如何更新wb 。答:通过梯度下降法
损失函数:感知机的损失判断就是根据误分类点的数目和误分类点到超平面的距离。那么损失函数就是所有误分类点到超平面的距离和
激活函数:sign函数
感知机的步骤:1,初始化wb,一般都取0或一个极小值 。2,选一个误判点使用梯度下降法更新wb。3,继续选误判点更新wb,直至损失最小

多层感知机MLP

也叫bp神经网络,前馈神经网络,bp算法就是反向传播算法
单层感知机的缺点:无法对复杂问题做出分类
多层感知机在单层感知机的线性函数上增加了非线性激活函数(常用relu),增加模型的非线性性,可以对复杂问题分类。
多层感知机是最简单的多层神经网络模型,包括输入层,隐藏层和输出层。隐藏层就是指输入和输出中间的一层
问题:前向传播输出的结果是什么?如何反向传播更新权重?初始化权重参数,通过前向传播计算出预测结果,然后通过反向传播更新权重参数
是解决分类还是回归问题?既可以解决分类问题,也可以解决回归问题,
如何更新权重参数?梯度下降
损失函数是什么?均方误差
多层感知机可以理解为将所给的数据(分布在二维坐标的数据),若里面所包含的种类数为n
则通过输入拟合了m条线性函数,将二维坐标划分为n个区域完成分类。然后增加激活函数增加非线性性。其中n就是感知机的输出out_features,m是隐藏层的大小
下图是前向传播过程
x1和x2和x3指假设输入的一维向量为1*3,则下面这个感知机代码为
nn.Linear(in_features=3, out_features=1),nn.ReLU()#激活函数
下图中就是一个两个隐藏层的mlp,第一个mlp的隐藏层大小为3,第二个隐藏层的大小为1



y=softmax(O),完成分类
可以堆叠这样的隐藏层,即多个Linear加一个激活函数。最后再加一个Linear,最后是不用激活函数的
超参数是隐藏层的数量和隐藏层的大小
梯度爆炸和梯度消失
梯度爆炸就是梯度越算越大,导致超过值域,且会对学习率非常敏感,大的学习率会使梯度更大,小则训无法训练
梯度消失指梯度越算越小,无限接近于零,会导致训练没有进展
解决办法:•目标:让梯度值在合理的范围内
•将乘法变加法
• ResNet, I LSTM
• 归一化
•梯度归一化,梯度裁剪
•合理的权重初始和激活函数 1,目的:让每层的方差是一个常数,将每层的输出和梯度都看做随机变量,让它们的均值和方差都保持一致
权重初始化方法Xavier,激活函数为本身(f(x)近似x)
dropout丢弃法:训练模型时对于每一个隐藏层的单元,有一定概率p使其隐藏起来。测试时不丢弃,输出结果乘以p
作用:从而在训练模型时起到正则化的作用,并可以用来应对过拟合。

卷积神经网络CNN

卷积:对全连接层使用平移不变和局部性得到卷积层
感受野:卷积核与输入矩阵运算的子矩阵就是感受野
对比全连接层,大大减少权重参数
卷积通过一个核矩阵学习到一个区域的特征,当时卷积无法学习到全局的一些信息,比如眼镜和鼻子他们在人脸上的位置关系?
提问
1,什么叫卷积,卷积层的作用是什么?答:卷积是一种数学操作,数学模型,在生活中可以找到应用场景,在图像处理中其目的是提取特征,从而降低噪声。图像处理中的卷积运算与数学中的卷积运算有些不同
卷积层的作用是将输入和核矩阵进行交叉相关加上偏移后得到输出。这个输出就是一个特征
核矩阵和偏移是可学习的参数,核矩阵的大小是超参数
2,那如何提取特征呢?答:图像特征是一些矩阵,卷积核是一个小矩阵,一般是3乘3,将这两个矩阵通过一些操作获得新矩阵。
3,新矩阵就是提取到的特征?为什么这样做就能提取特征呢?答:新矩阵是提取的特征,对于输入矩阵来说,新矩阵就是其特征向量。新矩阵是通过编码器而得出的,用于解码器
4,新矩阵只是原矩阵的特征矩阵,如何能代替原矩阵呢?新矩阵后面将作什么运算?答:新矩阵应该就是代替原矩阵,后面就是池化层和全连接层然后输出了。
输入矩阵和核矩阵的运算:选输入矩阵的第一个和核矩阵形状一样的子矩阵和核矩阵作运算,然后在输入矩阵再往右移一列取子矩阵和核矩阵作运算,这样从左到右从上到下取矩阵作运算,右移一列则步幅为1
卷积层将输入和核矩阵进行交叉相关,加上偏移后得到输出。交叉相关即对映元素相乘再取和,公式就是y=wx+b,y是输出值
w是输入矩阵中即将和核矩阵x做交叉相关运算的矩阵,w
x就是交叉相关运算。x和b都是可学习参数
卷积层中有三个参数:通道和填充和步幅
通道:一张图片是多通道的叠加,比如rgb是三通道,对每个通道的结果求和。每个通道表示为一种或是一些特征,在rgb三通道中就表示红黄绿三中颜色。对于每一个通道都有对应一个卷积核,所以增加通道数就增加了卷积核的数量,也就是增加了可学习的参数的数量。也就是使得输出的特征更加多
填充就是对输入矩阵进行填充,在输入矩阵附近添加一些全为零的行和列,使得输出矩阵是预想的形状
步幅是每次移动的步幅,也会影响输出矩阵的形状
总参数量是核size核size通道数
池化层:池化层分为3类,平均池化(取平均值),最大池化(取最大值)和随机池化(取随机值)。
作用:压缩数据和参数的数量并使模型获得一些平移不变性(将图像边缘区域都设为其中的最大值或平均值这样)
池化层的工作原理类似于卷积操作,计算方法不同,池化层的超参数是核的大小nm和步幅d和填充
池化层在输入矩阵中从第一个位置取n
m大小的子矩阵进行操作,这个操作对于最大池化方法来说就是取其中的最大值,然后从左向右,从上到下按步幅d平移
lenet卷积神经网络:LeNet是早期成功的神经网络,先使用卷积层来学习图片空间信息,然后通过池化层,然后使用全连接层获得输出
全接层 将数据输出为一个1*n的数据,里面每一个数据是表示所属这n个类别的概率,取最大值即为分类结果。n是类别总数
Alexnet:更深更大的 LeNet
主要改进:
•丟弃法
• ReLu
• MaxPooling
计算机视觉方法论的改变
卷积神经网络误差反向传播:
全连接层的参数过多,会出现过拟合问题
vgg,vgg块,一个神经网络主要由多个块组成,块内由各种层组成。如何更好的加深加宽神经网络。现在神经网络的训练成本依然很高,如何减少训练成本
nin,nin块,无全连接层,用多个卷积代替,效果比Alex net好一点
google net,inception块,通过1x1的卷积层降低通道数
resnet残差网络:残差块
解决问题:无脑的增加模型的参数,反而会降低模型的精读,loss越算越大,即偏离了梯度下降路线
解决方法:当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差,或者说如果一个VGG-100网络在第98层使用的是和VGG-16第14层一模一样的特征,那么VGG-100的效果应该会和VGG-16的效果相同。所以,我们可以在VGG-100的98层和14层之问添加一条直接映射 (Identity Mapping) 来达到此效果。

残差网络,浅层模型的输出是x,则再加模型,她不是继续从x开始学习,即输入不是x,而是h-x,h是真实值,若最后的输出是y,则整个模型的输出为y+x
梯度消失在更深模型中出现的原理是因为这样计算梯度是一个复合函数求导,是由多个乘法组成,导致梯度计算越来越小
残差网络则优化了梯度下降方法,使得梯度下降慢了一些

激活函数


Sigmoid函数优缺点∶
优点∶输出0~1区间,映射平滑适合预测概率
缺点∶不过零点,没有负值激活(没有负值),影响梯度下降效率;饱和区梯度消失问题!(当x趋向于无穷时梯度为0)
Tanh函数优缺点︰
优点∶映射到(-1,1)之间,过零点,值域比sigmoid更大缺点:饱和区梯度消失!

ReLU函数优缺点:
优点∶计算简单,导数恒定;拥有稀疏性,符合人脑的神经元活跃特性
缺点:非零中心化,没有负激活值,影响梯度下降效率;如果一次不恰当的参数更新后,所有数据都不能使某个神经元激活,则其对应的参数梯度为0,以后也无法激活,陷入‘死亡’(Dead ReLU)
改进ReLU
max{(ax,x},解决ReLU函数负区间的零激活问题。αc取固定值则为LReLU,为可以学习的参数则为PreLU,为随机值则为RreLU。
LReLU函数:有ReLU的所有优点,并且不会有Dead ReLU问题PReLU:网络的浅层尤其是第一层卷积中,学习到的α会比较大,而到了深层就比较小。这可以理解为网络的浅层学习到了类似于Gabor的浅层特征,更大的c可以提取到更加稠密的特征,而随着网络深度的增加,特征变得更加的稀疏。
RReLU:当作一个正则项,用于增强网络的泛化能力。

ELU函数优点︰
优点︰被证实有较高的噪声鲁棒性,能够使得神经元的平均激活均值趋近为0。
缺点︰由于需要计算指数,计算量较大。


Maxout函数优缺点:
优点∶整体学习输入到输出的非线性映射关系,拟合能力非常强
缺点∶计算量增加,增加了k-1个神经元
Swish函数,swish(x)=x . sigmoid(Bx)
Swish函数优点∶
线性函数与ReLU函数之间的非线性插值函数,无上界有下界、平滑非单调,从数据中学习参数β,可以获得任务相关的激活机制
参数初始化
什么是好的参数初始化
各层激活值不能为0也不会出现饱和;每层的权重方差、梯度与层数无关,会更加有利于优化;
全零初始化︰在第一次更新的时候,除了输出层之外,所有的中间层的节点的值都为零。一般神经网络拥有对称的结构,导致进行第一次误差反向传播时,更新后的网络参数将会相同,在下一次更新时
相同的网络参数提取不到有用的特征。即使是对于非对称的网络结构,这样的随机参数也不利于接下来的优化。
随机初始化:np.random.randn(n),用随机值进行初始化。参数的初始值不能取得太小,因为较小的参数在反向传播时会导致过小的梯度,会产生梯度弥散问题,降低参数的收敛速度。而过大不仅会造成震荡,对于Sigmoid等激活函数也会进入梯度饱和区。
固定方差方法
Xavier初始化 :方差缩放(Variance Scaling)的初始化方法
应用最广泛的方法。待详细了解
MSRA初始化适合ReLU的初始化
标准化/归一化 :数据预处理操作
BN批量归一化:解决问题:训练集和测试集,或是模型的每一层,数据的分布(均值和方差)不一致(不均衡),所以导致在训练时需要重新适应新的分布的数据,导致训练变慢。(那么数据分布的不均衡是如何影响神经网络的训练呢?)(数据种类不均衡也会对神经网络的训练产生影响)
可学习的参数有两个,用于找到合适的分布。使用BN后可以不用dropout
LayerNorm:每个特征的均值为o,方差为1。这样做的好处是可以减少特征之间的相关性,从而提高模型的泛化能力和鲁榛性。
作用在
•全连接层和卷积层输出 上,激活函数前
•全连接层和卷积层输入上
对全连接层,作用在特征维。对于卷积层,作用在通道维
归一化的作用
去除量纲干扰,保证数据的有效性,稳定数据分布
去除量纲的干扰,防止数值过小的特征被淹没
保证数据的有效性
·稳定前向传播激活值和反向传播过程中的梯度
稳定数据分布
.当深层网络中数据分布如果在某一层开始有明显的偏
移,会使得接下来这一问题加剧,内部协变量偏移( Internal Covariate Shift )
批标准化方法
假设神经网络某层一个batch的输入为X=[xj,×2…× ],其中x代表一个样本,n为batch size。
数据维度为(N,C,H,W),每一层normalization是基于NHW个数值进行求平均以及方差的操作。

优点:减轻了对参数初始化的依赖,前向激活值与反向梯度更加有效。平滑了优化目标函数曲面,梯度更稳定,可以使用更高的学习率,从而跳出局部极值,增强了泛化能力。
缺点:要求固定的Batch长度与均匀采样; batch过小数值计算不稳定
优化:
池化:将一个区域的信息压缩成一个值,完成信息的抽象,获得一定程度上的平移旋转不变性。在初始化的时候使用。现在大多数都是带步长的卷积替代池化的使用
常见方法:选择区域均值或最大值
随机池化:归一化pooling的输入,计算分布概率p ;
从基于p的多项式分布中随机采样位置,按照其概率值大小随机选择,元素被选中的概率与数值大小正相关
混合池化:从最大个平均池化中进行随机选择
模型不仅在训练集表现良好,在未知的数据(测试集)也表现良好,即具有良好的泛化能力

正则化

它的目标就是要同时让经验风险和模型复杂度都较小,是对模型的一种规则约束。增加模型对复杂情况的能力

f即预测结果函数,V即损失函数,R(f)是跟模型复杂度相关的单调递增函数,用于约束模型的表达能力。
方法分类:显式(Explicit)i正则化与隐式(Implicit)i正则化
显式正则化:1.根据损失函数的变化,提前终止模型的训练:
2.训练多个不同的模型进行结果融合。多次使用不同的数据训练模型进行结果融合
3.Dropout技术
对于每一个隐藏层的单元,训练时按照概率p随机的丢弃一部分节点,测试时不丢弃,输出结果乘以p
4.类时Dropout技术
5.参数正则化:损失函数的修改

隐式正则化:没有直接对模型进行正则化约束,但间接获取好的泛化能力
1.数据标准化,平滑了优化目标函数曲面
2.数据增强,扩大数据集规模
3.随机梯度下降算法,不同优化过程获得不同结果
4.标签噪声 。。。。。。

最优化方法

数学上指求最值
机器学习用有限训练集上的期望损失作为优化目标(代理损失函数),已知某个标量y和某个向量X,要确定一个函数f(x)描述y和X之间的对应关系,使得loss(f(X),y)尽量小。这个loss(f(X),y)就是损失函数
鞍点:低维空间中局部极小值很常见,高维空间中,参数维度很高,鞍点(横截面上的局部极小值,某一些方向梯度下降,另一些方向梯度上升)更加常见
学习率:参数更新的步长(乘因子)(一般指梯度下降法中)
随机梯度下降法SGD:沿梯度反方向,减少值最快的反向
-小批量随机梯度下降:使用最多
-动量法:加速SGD,特别是处理高曲率、小但一致的梯度﹔积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。梯度平滑
NAG法:在标准动量方法中添加了一个校正因子
Adagrad法 自适应地为各个维度的参数分配不同的学习率

Rmsprop法
-Adam法 梯度平滑比冲量法好一点。同时包含了动量更新与学习率调整,使用梯度的一阶矩估计和二阶矩估计来动态调整每个参数的学习率,momentum和RMSProp结合。

Adam算法的改进
Adamax ,Nadam,AMSgrad,Adafactor ,Adabound

二阶优化算法优缺点,一阶用得多
优点∶二阶的方法因为使用了导数的二阶信息,因此其优化方向更加准确,速度也更快。
缺点∶二阶方法通常需要直接计算或者近似估计Hessian矩阵,一阶方法一次迭代更新复杂度为O(N),二阶方法就是O(N*N),计算量大。

模型优化目标:机器学习用有限训练集上的期望损失作为优化目标(代理损失函数),损失代表预测值f(x)与真实值Y的不一致程度,损失函数越小,一般模型的性能越好。

分类任务损失-嫡:预测概率,不确定性,嫡函数。用于表示信息多少,不确定性越大,概率越低,则信息越多,嫡越高

分类任务损失-交叉嫡损失与KL散度:衡量两个概率分布p(x)和q()的相似性
分类任务损失-Hinge loss:分段不光滑的曲线,如果分类正确,损失为0,如果错误则为1-yf(x), y表示真值,f(x)为预测值
回归任务损失-L1/L2距离:以数值的绝对差范数作为距离

回归任务损失-L1/L2距离的改进
Huber loss,解决L1 loss梯度不平滑,L2 loss梯度爆炸的问题
评测指标
ROC曲线/AUC面积
Receiver operating characteristic,分类算法在不同的参数下的表现情况
混淆矩阵:矩阵第i行第j列,表示第i类目标被分类为第j类的概率
IoU(Intersection-over-Union):
AP(Average Precision)/mAP:检索与回归任务常用指标
峰值信噪比PSNR:信号处理领域广泛使用的定量指标,计算复杂度小
,实现速度快,在视频编码标准H.264、H.265中
结构一致性相似SSIM:考虑空域像素间的相关性

数据增强:将数据的使用最大化,比如将一张图反转缩放模糊等等的
降低数据采集成本,提高模型泛化能力,只对训练集处理
微调:重要‼️先预训练出来的参数,用于正式训练初始化模型

生成模型GAN

GAN的一个基本思想结构就是生成对抗网络。具体来说就是有两个模型,一个模型是造假,即生成和真实的不一样但是一个类别的东西。另一个模型就是对生成的东西去分类。两个模型不断的重复生成和分类操作(即一个训练过程),直到造假模型生成的东西能够通过分类模型,即造假模型通过给定一个类别A,生成出原数据中不存在的一个东西B,B通过分类模型后能够被分类为类别A
在图片生成中,假设一张图片x是400*400像素,则里面每一个像素是一个变量,整张图片里所有像素值则服从一个分布。
生成模型的原理就是说我不用知道本来的分布是怎样的,但我估计里面的数据数量大概是z这个规模,然后通过训练mlp去拟合这样一个分布,使得模型通过z生成的结果y非常近似x
判别模型:最简单的情况下也是一个mlp,通过训练,使得判别模型对y处理后输出的结果尽量靠近0,0表示说这个y不是原数据中的值,是一个假的值
DCGAN对抗过程:第1代生成器输入随机噪声z,输出一张生成的图片,生成器计算loss,更新参数,和真实图片一起分别第1代鉴别器,鉴别器分别生成两个loss,对两个loss求均值后,反向传播更新参数。然后第2代生成器调节参数,生成一张更为真实的图片,继续喂给第1代鉴别器,第1代鉴别器无法判断这个样本是来自生成器还是真实图片,于是第1代鉴别器调节参数,有了第2代鉴别器,以此类推,直到鉴别器无法判断这个样本是来自生成器还是真实图片
生成器是反卷积
反卷积是在 整个输入矩阵周围添 0,微步幅度卷积把输入矩阵拆开,在每一个像素点的周围添 0。


监督学习:有函数映射关系
无监督学习:无函数映射关系
自编码器的应用:降维/可视化,去噪等
变分自编码器:使用神经网络来估计建模复杂的条件概率密度函数
生成对抗网络(Generative Adversarial Network,GAN):不显式地估计出数据分布的密度函数,但能生成符合数据分布Pdata(x)的样本
生成对抗原理:生成网络和判别网络相互对抗(adversarial),共同学习
GAN的核心优化目标:生成器损失与判别器损失

目标检测:检测图片中的所有对象,并用一个框将其所在的区域大概框起来
锚框:先随机选几个框,然后选取一个最接近最终框的框,然后根据这个框慢慢偏移以达到最终框

目标检测算法:基于锚框的目标检测算法
1,区域卷积神经网络
2,单发多框检测ssd
3,YOLO

语义分割:语义分割将图片中的每个像素分类到对应的类别(是狗还是猫)
应用:背景虚化等
转置卷积:增大输入矩阵的高宽
实现,输入的每个元素和卷积核作乘积,然后将所有结果加起来
全连接卷积神经网络:转置卷积的应用
样式迁移:图像识别的应用,基于cnn的样式迁移

自然语言处理NLP

序列数据:具有时序性的数据,当前数据和之前的数据相关
自回归:用自己以前的数据去预测未来的数据
文本预处理
语言模型:
编码器—解码器结构:在机器翻译中,编码器是将一个长文n的句子转换为也是长为n的序列,但其中每个值是对应每个词的一个向量表示。解码器是将编码器的输出加工成一个长为m的向量,解码器与编码器的不同在于编码器是一个词一个词的运算输出,解码器则不需要,生成的序列长度也是不定的
这里可以简单的理解为:特征提取一过程即为编码器,而分类过程即为解码器。
即:编码器:将输入编程成中间表达式形式(特征)【特征抽取】
解码器:将中问表示解码成输出。【分类器】

循环神经网络RNN

用于序列数据,循环神经网络的来源是为了刻画一个序列当前的输出与之前信息的关系。从网络结构上,循环神经网络会记忆之前的信息,并利用之前的信息影响后面结点的输出。即:循环神经网络的隐藏层之问的结点是有连接的,隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。

循环神经网络只能记住上一时刻的信息吗?,那上上时刻的信息呢?????都记住了?
梯度剪裁:解决梯度爆炸问题,但梯度衰减问题在循环神经网络中没有解决
门控循环单元GRU:在循环神经网络中每一时刻的权重是相同的,所以无法区分数据是否重要。对于时序数据,不是所有数据都是重要的,GRU通过门来有选择的遗忘和保存重要数据
如何遗忘保存????
答:重置门决定了如何将新的输入和前面的记忆相结合(关注前面记忆的数据,也就是上一时刻保留的数据)。更新门决定带多少信息到下一个时刻(说法可能有点问题)
LSTM:长短期记忆网络
双向循环神经网络,不仅关注前面的数据,也关注后面的数据。用于翻译
序列到序列seq2seq:用于机器翻译…….

束搜索:每次在序列中选取最好的几个最为下一次的输入,若只选一个,则是贪心算法,但贪心算法不一定是全局最优解
注意力机制:解决问题:在选词填空中,我们需要根据上下文来确定这个空到底填什么,在机器翻译中,目标词的意思多半需要根据上下文来进行翻译

Transformer

注意力机制:定这样一个场景:把输入信息向量X看做是一个信息存储器,现在给定一个查询向量g(目标字),用来查找井选择x中的某些信息(即根据g有偏重的从x中选取出某些东西),那么就需要知道被选择信息的索引位置。采取"软性”选择机制,不是从存储的多个信息中只挑出一条信息来,而是雨露均沾,从所有的信息中都抽取一些,只不过最相关的信息抽取得就多一些。


注意力分数:描述注意力关注程度,不同注意力机制的打分函数不同
注意力权重是注意力分数soft Max的结果
使用注意力机制的seq2seq:
自注意:将x作为key,value,query来对序列抽取特征,优点•完全并行、最长序列为1、但对长序列
计算复杂度高
Transformer:如下图所示:Transformer的编码器由6个Encoder组成,解码器由6个Decoder组成,输入数据经由6个Encoder编码后,输入到6个Decoder中完成解码,产生最终输出结果。

Transformer中每一个Encoder模块的内部结构如下图所示

Transformer中每一个Decoder模块的内部结构如下图所示
注意力机制概述:
假设输入是n个字,n个字进入embedding后输出为mn,即每个字用一个m长的向量表示
位置编码则是对m
n中的每个数计算得到一个也是长为mn的输出,再于词向量相加即可,所以输出还是mn
在自注意力中,矩阵乘法能够的到相关性的原因在于向量点乘计算在空间上算的是位置,所以自注意力其实是得到了每个词的自注意力系数

总模型,其中一些跳跃的箭头指残差连接,feed forward就是一个mlp

下面解释一下上面的图 左边部分是编码器,右边部分是解码器
transformer和rnn在处理时序信息的不同点在于,transformer是同时拿到所有时刻的信息,然后在输出时用掩码机制使得它看不到当前时刻后面的信息,而rnn是每次的输入是上时刻的输出和这时刻的输入,即每次记录上时刻的信息。
掩码注意力机制就是对于当前时刻后面的信息,将他全部设为一个非常小的负数,这样再SoftMax后,这些值都会变成0
在机器翻译中,编码器是将一个长为n的句子转换为也是长为n的序列,但其中每个值是对应每个词的一个向量表示。解码器是将编码器的输出加工成一个长为m的向量,解码器与编码器的不同在于编码器是一个词一个词的运算输出,解码器则不需要,生成的序列长度也是不定的(翻译的结果长度是不定的 )
问题: 如果不是自主意力机制,那么key,value,query都是什么?
Transformer中的自注意力机制:见下面的左图
输出是value的加权和,每个value权重是这个value对应的每个key和query的相似度来计算的。 即相识度高的,权重会比较大
这个相似度不同的的注意力机制有不同的算法
在transformer中,这个相似度的计算公式是对每一个query和key做内积,值越大则相识度越高,最后对于内积值再除以根号d,d是key的长度,最后在套上个softmax得到权重
之所以除于d是因为softmax函数对于大值会输出更靠近1,而小值会靠近于0,这是因为softmax是分类运算,对于置信度大的我们希望它更靠近于1,这样就完成了分类,梯度就会渐渐收,即梯度比较小了。但在transformer的注意力中这样不利于梯度计算,因为梯度越大就越还没有到收的地步
多头注意力机制的基本思想是类似于多通道的卷积。看下面的右图
其中线性层其中一个作用是投影,先投影到低维并且增加一个可学习的权重参数W,再投影回原来维数
cancat是对h层自注意机制的输出进行合并操作 在transformer中h=8
head即是每一层 自注意力的输出。W是可学习的权重参数,WO是最后一层linear
embedding就是将输入文本转为数字表示,初始时是随机的值,然后训练改变这些值
matmul表示矩阵乘法, scale是除根号d
掩码的多头自注意力:
position encoding则是将这个词的位置加入到下一个计算的输入内,从而获得时序信息
即用长为512的一个向量来表示位置值,这个512是因为前面输入的长度为512,保持一致
这个向量的计算是通过一个cos,sin函数计算出来的,那么他的值会在-1到1间,和前面的输入的数据的大小差不多。 输出则就是把这个记录位置信息的向量和前面输入的向量相加即可

对transformer的评价:
为什么现在基于transformer的模型都特别大特别贵,因为transformer需要更大的模型更多的数据去训练才能达到和cnn.rnn差不多的效果,这是为什么呢?能改进吗?
因为它是多模态的,对不同的任务都能抓取其中的特征信息,抓去的信息太广泛这样
transformer缺点,自注意力是对所有数据作加权和,没必要对所有数据加权和
然后矩阵乘法计算量挺大
为什么能打赢RNN,它不会对数据顺序建模
RNN可以显示的建模序列信息
因为用了一个跟广泛的归纳偏置,使得其能处理更一般化的信息,这就是为什么transformer更贵,模型更大的原因

rnn的缺点是每时刻都需要上一时刻的输出作为输入,无法并行。
因为需要记住前面时刻的时序信息,在句子比较长时,内存开销大
有许多改进方法,但本质问题没有解决

Bert和VIT和Swin和GPT和DETR

mae:是bert和vit的结合版,用于修复还原图片文本这样
将一张图片分块后按随机遮住一部分图像块,将未遮住的部分放入编码器训练,将训练的结果加上一些空(即原来遮住的地方),放入解码器生成一张完整的图片
encoder是较大的vit,decoder是由较小的vit块构成,
videomae灵感来源于imagemae
视频相邻帧的相关性极强,使用遮掩再预测时可能出现信息泄露。(那么我们遮掩相邻帧重复的区域?)
视频时间冗余极强所以采用90%掩码使得性能提升
videomae2将原来的videomae的数据规模扩大,并使用了双掩码机制,不仅在编码器上掩码,而且在解码器上掩码
下采样,即每隔几帧采一帧,时空块嵌入就是将时空块用向量表示,encoder要大一些

从BERT的全称,Bidirectional Encoder Representation from Transformer(来自 Transformer的双向编码器表征),可以看出BERT是基于Transformer模型的,但是只是其中的编码器。相当于只有编码器的transformer
bert的初始任务是用于完型填空,其实也是生成类模型
基于微调的NLP模型,预训练的模型抽取了足够多的信息,新的任务只需要增加一个简单的输出层
预训练 第一种最常见的做法就是将学到的特征和输入一起放入下游任务的模型中。第二种是基于微调的,
问题:第一种就是说预训练和实际训练的模型是不一样的,第二种则预训练和实际训练的模型是一样的吗?
在Bert中用的是基于微调的预训练,第一次在没有标号的数据中进行预训练,然后将得到的参数用于正式训练,即初始化参数为前面得到的参数。两次训练的模型是一样的,第二次用的是有标号的数据
Bert模型就是一个多层的transformer编码器,其中的超参数是transformer块的个数,多头注意力机制的头的个数和隐藏层的大小
Bert中提出了一个特殊的分类字符cls,用于代表整个序列做最后的分类操作。这个cls类似于进入分类层前的池化操作。
因为输出维度是多维的,在进入分类层前要做池化操作降维,降到一维,但如果使用平均池化,则对所有权重取平均,不利于自注意力的表达,因为自注意力是根据相似度取不同权重的,所以用一个可学习的cls token来达到一个对所有降维的操作,并且可以获得不同的权重
VIT visual transformer 将transformer应用到visual领域的一个最大的问题就是,transformer的输入是一维向量,而图片是二维向量,如果直接把图片按行拉成一维,则序列长度太大,计算复杂的大大增加,像Bert的输入也就512这样,而一张800x800的图片则就长度就是64万。
VIT的解决办法就是将图片按批量输入,取其中大小为1616为一个批量,这样输入就是196,是可以接受的
VIT这篇论文的主要贡献就是多模态的未来,可以将transformer应用到几乎任何领域
自模型:你的标号和你的样本来自于同一个东西,比如说来自于同一个序列,或是说同一个句子。在visual领域,一遍标号是文本,样本是图片这样
Swin transformer的一个思想也是解决transformer中输入的问题,在vit中的输入是将图片分为一小个patch,将每个patch放入模型中,而swin transformer则模仿卷积的窗口平移操作来输入数据,用一个滑动窗口来输入?
其实就是像下图,将四块分为9块,九块中的的一些块包括四块中多个块的信息,九块是怎么得到的呢?其实就是四块往右下角移动一下,将原来四块就切成了九块,然后先对四块计算,再对九块计算,所以一个block是有两个小块,即下面第二图最右边的图

patch merging操作就是从二维序列中按位置去多个点组成多个小块,即把一个二维序列重组,如下图


因为将四块分成了九块,计算复杂度增加了2.25倍,我们可以用循环移位方法使得对九块的计算还是计算四块的复杂度。但这样的问题是移位后移过来的部分是不应该做自注意力计算的,因为位置关系发生了变化,解决方法就是用掩码方式解决

GPT 用的是transformer的解码器
DETR
force work:前面的目标检测或多或少都用了许多锚框,在最后加一个nms操作,用锚框计算复杂度大,用nms则不好调参,detr则解决上面问题,即不用锚框,也不用nms,而是使用transformer
对于视频中每一帧,在这张图片上使用卷积及在这帧前后
使用transformer生成许多框,再在这些框中挑一个最合适的框给每个图片中的物体(新的目标函数二分图匹配)
二分图匹配算法解决的问题:就是n个工人去完成m个任务,怎么分配工人使得花费最少
在这里我们假设decoder生成的框就是n个工人,要从中挑选的框就是m个任务。里面的花费就是loss,这样就是一个n
m的矩阵找最优解。这个找最优解的算法是匈牙利算法,有对应的函数


object queries是一个可学习的二维向量,使得最后的输出是n维,FFN其实是mlp
VLIT 就是对比学习和VIT的结合,将文本和图片分别输入模型中。提出了文本图片对的数据增强方法
pooler就是一个权重矩阵
小技巧1:对文本做一个mask,即对整个单词盖住,因为对于一些单词,如果只遮住一部分,很容易就能猜到完整的单词

group VIT:64*38是一个group token ,类似于一个cls

grouping block 其实是一个聚类中心的分配,将image token分配到group token中

Vild
左边是模型ViLD-image



GLIP:将上面的整个过程融合成一个模型

扩散模型

给一张图片,加一个正态分布的噪声变成一张有噪声的图片,若加无穷多的这样的噪声,就变成一张正态分布的噪声图片。这个过程就是前向的扩散
图像生成则是反向扩散过程,将全是噪声的图片,把他还原成原来的那个图片。这个还原过程的超参数就是这个加的噪声的数量,若是1000,则假设我们先把它还原成只有900噪声的图片,再还原成800噪声图片直到没有噪声。这样一个过程
这个模型就是使用U-NET,卷积,将一张图片压小再还原,
另外一种就是每一步还原图片时不再预测图片,而是预测这个噪声
分类器指导分散模型:就是额外训练一个分类器,这个分类器大多都是在imagenet上训练的,对于输入的图片,我们放入分类器中获得一个梯度,然后利用这个梯度去帮助模型进行采样和生成,这个梯度其实暗含这个带噪声图片的信息,就是它是否包含一个物体,包含一个什么物体这些。然后引导模型去生成这样一个物体
无条件指导模型GLIDE:就是不需要分类器这些,而是让模型生成两个输出,一个是有条件的,一个是无条件的,从无条件生成的到有条件生成,即用有条件生成的去指导无条件生成
自编码器

对比学习

对比学习就是说,假设已知图片分为n类别,对于每个类别的图片,我们希望他们的特征向量在特征空间中尽量靠近在一起,这样我们只需要构造一个损失函数去达到这个效果即可,
这是无监督的,因为我们对于每一张图片,我们可以通过数据增强创造类似的图片,所以每一张图片都可以当作一个类别
只要能将一些东西按类区分开来都能用对比学习,甚至比如说一张图片的正反面,等等
MoCo:y2=my1+(1-m)x2 使得当前时刻的输出y2不完全依赖于当前时刻的输入x2,y1是上一时刻的输出,m是参数。这个公式就使得同类特征尽量靠近
目标函数就是去衡量模型输出和实际的差异
将一张图片a当成一个类别,那么我们对这张图片做数据增强获得另外一张图片b,a,b都属于一个类别,取名为正样本,将a丢入模型中获得特征q,b放入其他不同类别样本中组成key,并进入动量编码器输出为k
则相当于key是一个字典,q是我们要查找的,我们通过去比较q和key中b对应的bkey的相识程度(用一个目标函数)
我们希望这个目标函数满足这些:当q和bkey非常相似时,loss是较低的,当q和其他key不相似时,loss也是较低的。反之则loss尽可能的大,让模型通过迭代更新参数使得loss下降
交叉熵损失函数是由SoftMax加一个-log而来,里面的k是指类别数,当类别数特别大时,SoftMax是工作不了的。NCEloss则将类别简化成一系列二分类问题,一个是数据样本,一个是噪声样本,每次将这两个样本作对比即可
但这样计算复杂度高,解决的办法就是从负样本中去一些样本作计算就行,这样得到一个近似的结果
infoNCE则将觉得二分类也不好,还是多分类好。在NCEloss中增加了一个控制分布的 超参数。这里的k指的是负样本的数量,也就是字典的大小
对于每一个批量,用一个队列存储表示一个字典,一个批量进去,就会有一个批量出来。使用队列是为了保证一致性。出去的批量是最老的批量。最高计算的key是过时的,是和新的key是最不一致的,这是为什么?
下面这个公式是encoder的编码器的损失函数,而动量encoder的损失函数是y2=my1+(1-m)x2



CLIP:一张图片和对一张图片的文字描述组成一个正样本,其他数据为负样本,作对比学习
给你一张图片作为query,所有类别词对应生成一个句子,例狗,猫…分别生成句子这是一个狗,这是一个猫…
将这些句子作为key,去作对比学习
不同的prompt对性能的提升区别是非常大的。coop论文里则试图去学习一个最优的prompt,
clip模型最后会生成一个图像特征和一个文本特征


DALL-E2/UNCLIP:基于扩散模型的clip模型。细节演变过程看DALL-E2就可以
上面是clip模型,下面是GLIDE模型,clip模型训练好后,任意给一个文本用clip生成文本特征,再利用文本特征输入到glide模型(用扩散模型生成图片的模型)生成图片,prior就是给定一个文本特征能够生成一个类似clip的一个图像特征,则拿clip生成的文本特征和图像特征训练,使得prior生成的图像特征越来越近似clip生成的图像特征,解码器则根据这个特征生成图像。prior模型存在的意义在于在整个模型训练好后就可以根据用户的输入文本获得一个图像特征,decoder是一个扩散模型


自编码器AE:一张图片x,经过encoder后获得特征z,再经过decoder获得一个输出y,我们希望这个y重建x
VAE:对于前面自编码器经过encoder的输出,我们不再直接使用z,而是去预测它的一个分布,对于分布再采样一些数据z输入decoder获得y
VQVAE:对于VAE,我们不是通过分布去采样一些数据,而是通过增加一个聚类中心,对于z,我们看它和聚类中心的哪一部分最近,我们使用最近的那部分作为decoder的输入
ALBEF:下面部分就是一个moco

MoMe:transformer模型做一个改变,对不同的输入用不一样的全连接层得到输出


训练时冻住部分层,即参数不用更新,在图像输入训练后就冻住自注意力层,即自注意力层不用更新,可以直接用于文本训练
coca blip多模态下

video classification

双流卷积网络:用一个卷积神经网络处理图片,再用一个卷积神经网络处理动作。最后的结果做一个加权平均或是其他操作
处理动作这里我们从一个动作视频中抽取光影信息,光影即表示物体运动的信息的图片,(其中每一个像素指向下一个光流图片该像素运动的地方),在光影图片中,运动的物体的运动幅度大的部位更亮,其他信息则全部忽略
一帧一帧光流计算太慢,多个光流帧叠加计算更好,有两种叠加方法,左边是直接叠加,右边是按光流流向叠加,实验证明左边效果更好,但作者认为理论上右边效果更好,应该是未来的一个研究方向

I3D:3D卷积就是只要在原有的卷积神经网络上,只要是2维的,我们都变成3维即可


TSN:将一个视频分为很多小片段,对于每一个片段抽取一个帧做下面运算,然后再从每个小片段抽取一个帧做下面操作
处理时序的卷积是用一维卷积进过一些操作实现的


通过堆叠一维卷积扩大卷积的感受野处理时序信息,但这样所需的卷积层过多,参数过多,并且对输入有重复的计算
上图中2个卷积,感受野只有5,下图3个卷积,感受野为11
下图的方法使用空洞卷积的方法扩大感受野,降低了卷积的层数

slow fast 对于人类视觉来说,大多数细胞都是用于处理动态,少数用于处理静态
所以隔16帧抽图片+大网络训练,再结合4帧抽图片+小网络这样的模型



CLIP4Clip:视频检索。主要还是使用CLIP
如何将多帧图片合成一个video。将多个特征合成一个特征兼顾空间和时序信息


r(2+1)D:将3D卷积拆分为先做2D空间上卷积,再做1D时间上卷积。因为3D卷积计算量大,而2D卷积效果又只比3D差一点点

进阶:竞赛
工业界:将应用表达成机器学习问题、收集数据
经典论文需要读懂每一句话
可以看openreview上的评(吐)论槽)

深度学习基础笔记(MLP+CNN+RNN+Transformer等等)相关推荐

  1. 从参数数量视角理解深度学习神经网络算法 DNN, CNN, RNN, LSTM 以python为工具

    从参数数量视角理解深度学习神经网络算法 DNN, CNN, RNN, LSTM 以python为工具 文章目录 1. 神经网络数据预处理 1.1 常规预测情景 1.2 文本预测场景 2.全连接神经网络 ...

  2. 深度学习基础 | 超详细逐步图解 Transformer

    作者 | Chilia 整理 | NewBeeNLP 首先,请阅读先修知识: 深度学习基础 | 从Language Model到RNN 深度学习基础 | RNN家族全面解析 深度学习基础 | Seq2 ...

  3. 深度学习基础笔记——激活函数

    相关申明及相关参考: 体系学习地址 主要学习笔记地址 激活函数,你真的懂了吗? - 知乎 (zhihu.com) 聊一聊深度学习的activation function - 知乎 (zhihu.com ...

  4. 深度学习基础笔记——前向传播与反向传播

    相关申明及相关参考: 体系学习地址 主要学习笔记地址 由于是文章阅读整合,依据个人情况标注排版, 不确定算不算转载,主要学习围绕AI浩的五万字总结,深度学习基础 如有侵权,请联系删除. 1前向传播与反 ...

  5. [深度学习论文笔记]Multimodal CNN Networks for Brain Tumor Segmentation in MRI

    Multimodal CNN Networks for Brain Tumor Segmentation in MRI: A BraTS 2022 Challenge Solution MRI中用于脑 ...

  6. matlab中的pred,Matlab深度学习基础笔记-2

    笔记来源于matlab官网,不足之处还请提出.. 1.4检查预测 Prediction scores 使用classify可以获得所有类别的预测值,存储在数组scrs中: [pred scrs] = ...

  7. 《自然语言处理实战入门》深度学习基础 ---- Attention 注意力机制 ,Transformer 深度解析与学习材料汇总

    文章大纲 1. 注意力机制 Attention 注意力是一种稀缺的资源 自注意力 多头注意力 2. Transformer 模型的主要结构 transform 内部张量数据流转 注意力 计算自注意力的 ...

  8. 深度学习基础 | NLP大魔王 · BERT

    ‍作者 | Chilia 整理 | NewBeeNLP‍ 首先,请阅读先修知识: 深度学习基础 | 从Language Model到RNN 深度学习基础 | RNN家族全面解析 深度学习基础 | Se ...

  9. pytorch深度学习简介(包括cnn,rnn等我只挑我感觉有必要记录)

    一,深度学习基础 1. 了解常见的四个机器学习方法 监督学习.无监督学习.半监督学习.强化学习是我们日常接触到的常见的四个机器学习方法: 监督学习:通过已有的训练样本(即已知数据以及其对应的输出)去训 ...

最新文章

  1. 蒟蒻浅谈树链剖分之一——两个dfs操作
  2. SAP 电商云 Spartacus 5_0.md 迁移文档的编写格式
  3. linux对目录进行操作,Linux 基础:对文件和目录进行操作的 Linux 和 Unix 命令 笔记...
  4. angular语言前端开发_详解使用angular-cli发布i18n多国语言Angular应用_唇印_前端开发者...
  5. html改变鼠标指针形状代码,鼠标指针形状效果大全 cursor
  6. 《苏菲的世界》——读书笔记
  7. 【入门6】函数与结构体【完结】
  8. vue-chartjs画渐变色
  9. java分数的加法_分数加法
  10. 常用的正则表达式(用户名、密码、邮箱)
  11. 《德川家康》完整版的下载
  12. 不执著才叫看破,不完美才叫人生。
  13. 宇视摄像机接入TSINGSEE青犀视频平台,如何基于SDK获取设备的组织和摄像机?
  14. “福娃”:可口可乐的新挑战
  15. %3c?php+eval,callback噩梦:解析著名CMS框架Drupal SQL注入漏洞
  16. 陈皓GDB调试教程链接汇总
  17. SAP 教程之 01 如何为 Inbound IDOC 配置 SAP
  18. Centos7 Mysql5.6.40 高可用架构--MHA
  19. Thinkpad T60
  20. 前端学习网站汇总收藏篇

热门文章

  1. GIS系列(四)GeoServer的介绍和用法
  2. mac os x 下五款播放器评测
  3. MPB:青岛大学苏晓泉组-全球微生物组整体结构和功能的搜索
  4. eclipse中java项目出现红色感叹号解决方法
  5. 【NPDP】大师级管理人物盘点:现代营销学之父-菲利普·科特勒
  6. 打开计算机服务的五种方法
  7. matlab生成一个均为1的列向量,matlab产生列向量
  8. Mysql 数据库中怎么实现分页?
  9. python数据分析实战项目—运用matplotlib可视化分析10000条北京各大区二手房区域信息(附源码)
  10. information security