• 口述技术z



    此文档在之前学和做的基础上再看一遍,再以自己的话讲述出来
    致力于口语话,不借助图片,用最少的话解释原理


    项目

    。。。略
    数据处理有调度监控、多线程多进程(一图多产品用多线程、多图用多进程)、定时删除、数据插值 等

    CAE+LSTM神经网络-基于卷积自编码器CAE 的雷达回波序列图像空间特征提取和图像重构,基于LSTM的雷达回波图像时序特征提取和预测

    特征工程:数据统计、要素选择。通过计算各特征的相关性来筛选特征,特征融合,特征的时间、空间变化率(统计分析 最后确定)等
    构建多重LSTM做训练,Adam优化算法,指数衰减学习率、z-score归一化(减均值除方差)、重采样

    。。。略

    NLP,中英文分开,文本预处理,用jieba、NLTK分词,词性标注,基于规则的实体识别等

    路径规划,实验几个方法(比如Dijkstra、DFS、几何、A*、DWA)后最后选择hybirdA*(很多方法没有转弯,并且不适用大范围规划),并改为贪心,并加入人工势场法(周边障碍的排斥力)和转弯损失(精度和效率上做优化,还可以起终+终起反推选最优),然后部署在spark上分发不同点做模拟规划,用flask接口和后端进行数据通信和监控
    算法流程:以当前节点向所有下一步的可能计算行动后到终点的损失+其他损失,选取最优行为

    基础

    函数用生成器yield代替return,返回迭代器,调用一次运行一次
    自定义排序(sort方法里放个key=lambda xxx)、二分查找、动态规划(从最后一步往前推,递归)、快排(递归取第一个值,比较小于他的放左边 大于他的放右边,然后都继续递归这个方法直到只剩最后一个数)、二叉树(先序中序后序)等不必说
    Docker、Spark、linux、数据库、爬虫、flask接口等,其实没啥说的

    图像算法

    我觉得图像算法本质其实就是数学 数值计算,对矩阵做算法处理,很多操作背后都是对矩阵值的判断计算改变,无非就是看谁的效率和准确率更高了

    二值化
    是把灰度拉到0和100,一般用自适应阈值,因为图片有些地方可能有不同的亮度,他根据图像的每一个小区域计算阈值,不同区域采用不同阈值,从而能在亮度不同的情况下得到更好的结果

    滤波
    用来去噪、模糊,有高斯模糊、中值滤波、双边滤波等
    也就是用相应形状的卷积核对矩阵做点乘,卷积核一般是中间大值 四周小值

    边缘检测
    有Sobel、Laplacian、Canny等算子可以做边缘检测
    还是是通过一个对应的卷积核做乘,比如左亮边缘卷积核就是左小值右大值 竖值相同或中间大两头小
    优化就是先把原始图片做模糊,或最后对边缘做连接、只保留最锐利的等

    HE,直方图均衡化
    他把直方图做一个横向拉伸,平均像素落点,防止太尖锐
    clahe,限制对比度自适应直方图均衡化,数据增广方式,kaggle解决方案,albumentations库函数实现CLAHE
    他把整幅图像分成很多小块,然后再对每一个小块分别进行直方图均衡化
    CLAHE起到的作用简单来说就是增强图像的对比度的同时可以抑制噪声

    模板匹配
    他是用模板图像在输入图像上滑动,并在每一个位置对模板图像和与其对应的输入图像的子区域进行比较,计算匹配度,人工的目标检测

    角点检测
    一个点往四周滑动窗口计算自身和四周像素灰度的变化,给个阈值,变化很大的就判断为角点,这是简单的想法,实际上的算法更复杂一些

    目标跟踪
    简单的想法就是视频的一帧选定一个框,然后下一帧滑动窗口用这个框的矩阵和图像子框相减看相似度,取最匹配的,再以此为基础看下一帧
    优化就是框可变大小-适应运动目标的大小形状的改变等

    光流
    视频或者连续图片的运动轨迹,前提假设是连续图片之间目标对象的像素灰度值不改变 & 相邻的像素具有相同的运动
    光流的计算核心:光流约束方程 I(x,y,t)=I(x+ derta x,y+derta y,t+derta t),然后泰勒展开求解
    光流方法处理相邻两个时间的图片得到光流的UV阵列,分别是u方向的分量和v方向的分量,合成后可以得到光流的速度和方向

    机器学习

    评分

    对于分类问题常用的评价指标是精准度、召回率、F1值,他们的定义
    TP——对的预测为对
    FN——对的预测为错
    FP——错的预测为对
    TN——错的预测为错
    精准率定义为:P = TP / (TP + FP) ,预测对的里面正确的比例
    召回率定义为:R = TP / (TP + FN) ,正确的里面预测对的比例
    F1值定义为: F1 = 2PR / (P + R) ,化简下就是各分之一 分之2

    线性回归、逻辑回归

    线性回归
    关系建模.回归分析,最小二乘法,连续值预测,y=ax+b两个系数,多个未知数y=a1x1+a2x2+b
    损失函数L=sum((y^ -y)2)/2
    求最优解的方法有最小二乘法和梯度下降法
    线性回归主要用来解决连续值预测的问题,逻辑回归用来解决分类的问题

    逻辑回归
    线性回归套上一个δ,变成非线性,梯度下降求最优,解决分类问题
    损失函数L=-(ylogy^ +(1-y)log(1-y^))

    朴素贝叶斯

    P(A|B)=P(B|A)P(A)/P(B),AB事件独立
    朴素的意思就是AB事件独立,他的典型应用就是垃圾邮件过滤的问题
    出待分类项,求解此项各个类别的概率,哪个最大就预测是哪个,但必须属于同一分布

    聚类(knn、kmeans、DBSCAN)

    Knn是用距离最近的k个点投票表决class

    kmeans聚类是自己指定聚类数k个,分配完更新位置重新分配
    随机选定k个中心位置,然后将各个数据点分配给最临近的中心点,分配完成后,聚类中心就移到所有节点的平均位置,然后重新分配直到不再产生变化

    DBSCAN基于密度的聚类,eps领域包括minpts个点,随机选点出来分类簇

    决策树

    决策树是ifthen结构,一层层递归构建 树形结构,先计算信息熵和信息增益,然后通过信息增益来选择拆分

    集成算法

    包括两种,组合bagging(并行化)、提升boosting(序列化)
    组合就比如随机森林RF,很多个决策树并行分类并投票
    提升就比如AdaBoost(多个弱分类器串行,错误加权,可以达到整体分类最佳)、梯度提升决策树GBDT(通过负梯度来识别问题,通过计算负梯度来改进模型)、xgboost(采用了二阶泰勒展开使算法可以更快的收敛到全局最优)

    相同之处都是用多个基分类器
    不同之处是,bagging是没啥关联.并行出各自的结果.然后投票,boosting是串行.通过提升错误的权重来加强训练.达到整体最优
    并且bagging是随机抽取训练集中样本进行训练,而boosting每次都是训练全部数据
    bagging泛化能力强,可以平衡误差,但容易过拟合
    boosting泛化能力强,错误率低,无参数调节(自行训练错误加权),但对离群点(错误)敏感

    SVM

    线性可分时,直接求最大间隔平面,线性不可分,通过核函数映射到高维可分,再求解,通过拉格朗日函数不断构建二次规划问题求最优
    这个我了解不深

    降维算法(SVD、PCA、EOF)

    主成分分析PCA
    通过计算特征值和特征向量,构建特征矩阵,求协方差,取占比大的重新构建矩阵

    奇异值分解SVD
    mn=mk* kk* kn,可以降维.减少参数

    正交分析EOF
    地学中也将EOF分析称为时空分解,它把随时间变化的变量场分解为不随时间变化的空间函数部分以及只依赖时间变化的时间函数部分
    计算方差贡献,选出主要分量

    协同过滤

    人以类聚,物以群分,分类算法
    有两种推荐方式:基于用户、基于商品
    协同过滤推荐,距离使用欧氏距离(直接距离)、杰卡德距离(交并比 相似度)、皮尔逊相关度(比直接距离平滑点的相关度)、余弦相似度(两个向量夹角余弦,只关注喜好方向.轻程度)

    深度学习

    我觉得神经网络就类似于n元n次方程,数据进去慢慢更新系数,逼近最优解,就像一个概率拟合算法一样
    如果不能突破神经网络的结构,很多模型其实都是各个层各个基础单元的堆彻罢了,RNN单元、卷积层、全连接层等

    基础

    过拟合overfitting,就是对训练集的分布训练过度了,需要数据扩充-更泛化性的数据(NLP-EDA:增删改 替换、CV-切割 裁剪 旋转、数据融合Mixup)、降低模型复杂度或训练次数降低、正则化约束(添加正则化项是为了限制模型的学习能力)、dropout、集成学习等
    一般使用L2或dropout
    欠拟合underfitting,就是训练的不够,需要加新特征、加模型复杂度和训练次数、减小去掉正则化(可以使模型可以得到更大的权重 更好的拟合数据)

    正则化
    L1(绝对值的和,稀疏权值,防止过拟合)
    L2(元素平方的和再求平方根,权重衰减,限制模型的学习能力)
    正则项加在loss后面lambd*l2_penalty(w)

    dropout随机失活(随机舍弃神经元,防止过拟合)
    像随机剪枝一样,避免系统对模型的某一个地方过分依赖,而导致模型其他部分渐渐无用

    norm归一化:将数据按比例缩放,使之落入一个小的特定区间,更易优化,梯度下降更易找到最低点。图片的归一化就是/255

    ZScore标准化,标准差标准化,使他均值为0 标准差为1,计算公式(x-mean)/std,可以使不同量纲的输入特征能到一个数据分布上

    BN批量归一化(随着网络的训练有时候会偏离太远,BN是一个新的计算层,对数据分布进行额外的约束,均值0,方差1,破坏了之前的特征分布,防止过拟合。也有说法是每次随机的小批量的均值和方差起了更大的作用,防止了过拟合 更有泛化性)

    指数衰减学习率
    由于训练前期梯度下降快、后期下降慢的特点,所以使用指数衰减学习率
    这样避免了使用高学习率后梯度下降后期震荡一直到不了最优、使用低学习率前期下降缓慢、找不到最优解的问题

    激活函数

    sigmoid(1/1+e-z,一般用在二分类输出层,他在x过大过小容易发生梯度消失,所以基本不在训练层用)

    tanh(ez-e-z/ez+e-z,一般用在隐藏单元,tanh的输出为(-1,1),因此它将数据集中在一起,使得下一层的学习变得更加简单,一般用在RNN)

    relu(x>0:x x<0:0,常用在模型训练层)
    leaky ReLU(x<0:0.01x)

    softmax(z/sum(z),一般用于CNN输出层)

    如果用sigmoid就是二分分类问题,如果用softmax就是多分类,如果用tanh的话常常是RNN,CNN常用relu(非负时梯度恒为1,收敛维持稳定,如果用leaky带泄露的,就是负数时梯度不为0,可以防止梯度消失)

    ReLU是最常用的激活函数,求导不涉及浮点运算,所以模型计算速度更快,避免了梯度爆炸和梯度消失问题

    优化算法

    就是在更新梯度的这个公式做文章,w-=lr*dw
    指数衰减学习率是改变学习率,优化算法的优化一般是改变dw项或整个式子

    避免后期训练还在大幅震荡,可以直接在反向传播更新权重 w+=-lr * dw 时再除上一个随训练epoch不断提高的偏置,越到后期越稳定 最后模型不学习停止更新,这也是AdaGrad优化算法的思想(还能继续更新的是RMSProp,现在的主流是Adam,Adam=RMSProp+动量)
    这和衰减学习率效果是一样的,这样操作可以使我们可以使用较大的学习率,前期训练的也更快

    BGD梯度下降(feed所有样本,计算整个训练集的梯度,一次成形,无法优化,无法保证全局最优)
    SGD随机梯度下降(feed一个随机样本,更新频率快,可以跳出局部最优,但很动荡)
    MSGD小批量梯度下降(分为小批量,每次feed一组,epoch批次for循环训练,比较稳定,常用,还可以进行矩阵化运算和并行计算)

    指数加权平均(乘上个权重,做偏差修正,变得稳定,防止急转弯)
    momentum(乘一个动量v,还乘一个一般是0.5到0.9的β,β随更新次数幂增加,使梯度下降就像碗中球一样滚的快,加快收敛并减小震荡)
    RMSprop(比动量法加了个偏置ε,防止最后因子太小不更新了,在消除梯度下降中的摆动,与Momentum的效果一样不过是二阶)
    Adam(momentum+RMSprop,更加稳定,但可能错过全局最优解。Adam对梯度做平滑,对学习率不太敏感(调参有效学习率区间比SGD更大))

    牛顿法
    他是二阶优化算法,考虑曲率,二阶导数可以明显加快收敛的速度
    知道了损失函数,牛顿法通过Hessian矩阵近似描述了平面的弯曲程度,可以直接到这个近似的最低点,收敛速度比梯度下降更快。但Hessian矩阵太大,大模型、大数据 计算不了,所以这个优化算法用不了(拟牛顿法BGFS、L-BGFS对此有优化,但还是不够 没用)

    常用Adam,它是最有效的算法之一,能快速收敛到最优解
    SGD优化算法调参影响大,有可能很好也会很差,Adam就比较稳定 也不需要怎么调参,适合不需要特别精确也不想更多调参的人用,SGD可能20分可能90分,Adam稳定70分

    模型

    MLP

    感知机本质上是一个二分类的问题:输入大于0就输出1,否则输出0
    多层感知机MLP(multi-layer pecerptron)其实就像多层softmax回归,多了隐藏层,多了非线性激活函数
    多层感知机的结构和BP差不多,BP神经网络是用BP算法进行训练的多层感知器模型

    CNN

    卷积和全连接不同处就在于,它通过相对小的卷积核检测特征,用卷积核来代替BP全连接,然后滑动窗口做计算,整个层的计算共享一个卷积核的权重,可以减少参数数量、加速计算
    特点是参数共享和稀疏连接,好处就是参数少.适用于整个样本输入的计算,稀疏连接.各个像素间不影响

    池化层在卷积层之后,取选定大小框内的最大值输出,作用是使得卷积不要太对位置信息敏感、减少参数计算量

    CNN各经典模型

    LeNet、ALexNet、VggNet、GoogleNet、ResNet等(CNN的发展史)

    Lenet是lecun最早提出来的模型,基操 卷积-池化-全连接,不过现在看来有很多需要优化的地方
    Alexnet就是基于lenet的优化,架构没咋改变,就是更大更深了,还用了imagenet大数据、relu代替sigmoid、dropout、数据增强等
    Vggnet是把(卷积卷积最大池化)打包起来了 作为vgg块,可以更好的搭积木和拓展
    Googlenet是把vgg块优化变成了inception块,把大卷积核拆成几个小的,然后多通路并行,使参数变少了可以做的更深,并且大小不同的卷积核可以得到不同尺度的特征所以效果也更好

    Resnet解决的问题就是太深的网络会梯度消失,所以他就每隔一些卷积块就在下次输出的时候加上了这些块之前输入x,公式即是f(x)=x+g(x),这样就使更深的网络可以被训练(远程跳接,防止梯度消失)
    还一个好处就是如果g(x)的模型没啥用,那它就没梯度,网络就直接f(x)=x过去了,容易训练和优化,加入它也不会使你的模型在目前的基础上变坏
    这个网络还使用了Batch Normalization 加速训练(丢弃dropout)

    迁移学习、微调

    迁移学习(在做同一种类的网络时,可以进行预训练,然后在目标上微调)
    比如做目标检测,就可以把用来提取图像特征的 已经训练好的resnet预训练模型的那些卷积层拿来用(结构和参数),然后在前面和后面再接上自己搭的积木,可以选择这些拿来的层是继续训练还是不改变
    这样就可以直接从一个提取特征挺厉害的模型开始训练,比模型随机初始化强的不要太多

    AutoEncoder

    无监督,数据无标记,压缩和解压,一般用于去噪、降维、图像生成
    编码器把图像编译成一个向量,解码器用向量生成图片,损失函数就是原图片和生成图片的区别

    卷积自编码CAE

    卷积自编码器和自编码一样,不同的是采用卷积层代替全连接层,先卷积再反卷积,对输入的象征进行降采样以提供较小维度潜在表示,并强制自编码器学习象征的压缩版本
    先卷积再反卷积,目的在于学习图像中的局部结构信息
    为了增加其抗干扰的能力,有时在训练时加入随机噪声进而增加其鲁棒性
    基于 卷积自编码器CAE 可以提取图像的空间特征和图像重构
    风格迁移也是这个结构,图像压缩 学习图像特征参数,然后重构

    风格迁移和GAN

    风格迁移(C+S=G)
    style+content=Generated-img,流程和一般卷积网络是一样的,不同就是构建了三个损失函数
    代价函数J(G)=aJ(C,G)+bJ(S,G)(内容和风格代价函数),使用梯度下降求最优
    输入两个图,一图提取内容特征的卷积路线、一图提取风格特征的卷积路线、提取一层内容的卷积和几层风格的卷积构建生成模型的卷积、以某个图片为初始化开始训练、通过最小化损失函数来不断更新合成图像,最后生成的图像就会有两个图片的特征

    Gan生成对抗式网络(通过G和D不断博弈,不断优化生成)
    通过生成网络Generator和判别网络Discriminator不断博弈,道高一尺魔高一丈,使生成越来越逼真,一般用于文学艺术领域:图片.音乐生成等
    用随机噪声经过生成器生成fake image,然后把这图片和真实图片进过判别器(分类)判断真假(生成数据应该为假),然后不断训练提升生成能力和判断能力
    生成器就像自编码里的解码器

    目标检测

    目标检测算法主要分为两个类型
    (1)two-stage方法,如R-CNN系算法(region-based CNN),其主要思路是先通过启发式方法(selective search)或者CNN网络(RPN)产生一系列稀疏的候选框,然后对这些候选框进行分类与回归,two-stage方法的优势是准确度高
    (2)one-stage方法,如Yolo和SSD,其主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归,整个过程只需要一步,所以其优势是速度快,但是均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡,导致模型准确度稍低

    RCNN系列

    Rcnn的流程是先用候选区域(Region Proposal)算法获得许多候选区域、然后用卷积来对每个框抽取特征、用SVM对类别分类、线性回归来预测边缘框偏移
    问题就在于这些算法模块都是各自为政,效率有点低,并且提取特征有冗余、框有重叠,故提出了fast rcnn

    Fast rcnn吧特征抽取、框提取、框预测和分类都整合在一个网络中,效率得以提升
    它先对整个图片做特征提取,再看锚框

    Faster rcnn的改进就是把框搜索替换成参与训练的区域提议网络,这样可以在减少提议区域数量的情况下仍保证目标检测的精度
    精度提升了(基本比其他的模型都高),但好像更慢了

    Mask R-CNN在Faster R-CNN的基础上引入了一个全卷积网络FCN,从而借助目标的像素级位置进一步提升目标检测的精度。
    Mask的预测是在ROI之后通过FCN来训练
    它精度高,并且对数据的精度要求也高,也可以用于语义分割

    SSD

    单发多框检测(SSD)是一个多尺度目标检测模型,通过多尺度特征块(比如vgg快),单发多框检测生成不同大小的锚框,并通过预测边界框的类别和偏移量来检测大小不同的目标(特征金字塔结构)
    它先用卷积来抽取图像特征,然后多个卷积层来减小图片大小,在每段都生成锚框 并预测类别和边缘框,顶部段来拟合大物体,底部段拟合小物体
    这个网络的卷积一直往下走,但最后只每次取出检测锚框的输出,卷积出来的结果不需要
    它训练很快,但精度不行

    YOLO

    YOLO目标检测,它不需要像RCNN这种两阶段目标检测方法一样,需要生成先验框。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测
    将全图划分为S×S的格子(不再搜索锚框,极大提升效率), 每个格子负责对落入其中的目标进行检测,一次性预测所有格子所含目标的边界框、置信度、以及每一类预测分类的评分
    缺点就是输出数量有限制 很小的识别不到,但综合精度和效率来看,它还是特别好的方法,常用
    V2V3V5X等都在对它做不断的优化,比如BN、聚类、残差、多尺度卷积快、数据增强、参数衰减、换激活函数等

    语义分割

    语义分割可以识别并理解图像中每一个像素的内容,语义区域的标注和预测是像素级的
    与目标检测相比,语义分割标注的像素级的边框显然更加精细。它广泛应用于医学图像识别、自动驾驶、地质勘探、拍照处理等领域

    FCN

    全卷积神经网络和卷积自编码的结构差不多,先用一些卷积层提取特征、图像压缩,然后反卷积图像重构,输出是分割图像(比如背景的值都是1 物体值是2 人物是3)

    UNet

    Unet是最常用的一种分割模型,它简单高效、容易构建、可以从小数据集中训练,它提出的初衷是为了解决医学图像分割的问题
    UNet采用全卷积神经网络,它的优点是U型结构,这个结构可以使它使用更少的训练图片的同时准确度也不会差
    先对图片进行n次卷积和池化,在Unet论文中是池化4次,比方说一开始的图片是224x224的,那么就会变成112x112,56x56,28x28,14x14四个不同尺寸的特征。然后对14x14的特征图做反卷积,得到28x28的特征图,这个28x28的特征图与之前的28x28的特征图进行通道上的拼接concat,然后再对拼接之后的特征图做上采样,得到56x56的特征图,再与之前的56x56的特征拼接,卷积,再上采样,经过四次上采样可以得到一个与输入图像尺寸相同的224x224的预测结果。
    其实整体来看,这是一个Encoder-Decoder结构,特征提取,然后上采样
    通过反卷积得到的更大的尺寸的特征图的边缘,是缺少信息的,毕竟每一次下采样提炼特征的同时,也必然会损失一些边缘特征,而失去的特征并不能从上采样中找回,因此UNet通过特征的拼接,来实现边缘特征的一个找回

    RNN

    RNN循环神经网络,分为一对一(图像分类)一对多(音符-音乐、图片描述)多对一(情感分析.电影评价)多对多(机器翻译MT、视频分类)四种,RNN需要显式for循环(遍历时间步T_x)
    RNN本质上是一个递推函数,适合处理序列数据,特别是带有时序关系的序列
    它在y=w1x+b基础上又加了一项w2H,H是前一个时刻的状态,如果w2为0,RNN就变成了MLP
    把每一个时间步中的信息编码到状态变量中传送,使网络具有一定的记忆能力,从而更好的理解序列信息

    BRNN双向神经网络(当前的输出与前后都有关,考虑周全)

    GRU、LSTM

    GRU门控单元(有重置门和更新门,用来决定留下多少以前的记忆)
    公式就是
    重置门=sgm(w1x+w2 * 上个输入+b)
    更新门=sgm(w1x+w2 * 上个输入+b)
    当前隐状态=tanh(w1x+w2 * 上个输入 * 重置门+b)
    输出=更新门*当前隐状态+(1-更新门)*上个输入
    有9个参数

    Lstm就是用四个变量=不同权重乘上上个传过来的h +wx+b,有12个参数
    四个变量是,忘记门F(保留多少过去的记忆元Ct-1)、输入门I(用多少当前隐状态)、输出门O(传递出多少当前记忆)、g当前隐状态
    g的激活函数是tanh,其他都是sigmoid,它的值域为[0,1],符合门控的定义
    比如上个传来的输入是h0,要传出去的输出是h1
    得到,h1= o * (f * h0+i * g)

    这种设计,使要学习的参数更多了,灵活性也更大了,因为可以在完全不用过去的输入记忆、或完全不用当前的记忆、或全都用、或之间进行选择
    过去重要的记忆将会被保存,不重要的会被遗忘

    多层lstm
    要想给模型更强的表达能力,可以添加多层 LSTM 来处理,可以给模型更强的表达能力,第一层的输出作为第二层的输入,以此类推。两层确实比一层效果好
    不少论文里都有提到,底层lstm一般表征字面信息,深层lstm一般表征语义信息。所以一般都会叠加多层
    不过不需要那么深,一般2-4层

    Seq2seq

    编码解码模型,应用于机器翻译MT
    前面层都是输入,后面都是输出,它在训练阶段可能对输出不处理,直接用target的序列作为下时刻的输入
    seq2seq的核心思想是把一个输出序列,通过编码(Encode)和解码(Decode)两个过程映射到一个新的输出序列,一般都使用 RNN 进行建模,编码器可以是双向RNN-因为不是用来做预测的

    Seq2Seq 之所以流行,是因为它为不同的问题提供了一套端到端(End to End)的解决方案,免去了繁琐的中间步骤,从输入直接得到结果
    比如机器翻译、机器问答、文本摘要、语音识别、图像描述等

    attention

    加性注意力等同于把k、v合并放入一个单隐藏层的MLP,然后求和就得到注意力分数
    当查询和键是不同长度的矢量时,使用加性注意力作为评分函数(广播机制)。它比乘性好一点因为可以学参数

    乘性注意力就是把它乘起来
    a=qkTv/sqrt(d) , (q:nxd k:mxd v:mxv)
    使用点积可以得到计算效率更高的评分函数,没有参数学习,但是点积操作要求查询和键具有相同的长度

    自注意力,就是吧x当作key、value、query,优势在于能更好的综合各个输入的特性
    其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性

    多头注意力,与其只使用单独一个注意力,可以用独立学习得到的h组不同的线性投影来变换查询、键和值。然后,这组变换后的查询、键和值将并行地送到注意力汇聚中,最后将输出拼接在一起,并且通过另一个可以学习的线性投影进行变换,以产生最终输出

    Transformer、ViT、DETR

    Transformer模型分为Encoder(编码器)和Decoder(解码器)两个部分,并且都有n个transformer块(多头注意力、层归一化、全连接卷积-残差)堆叠
    流程是:输入先embedding向量化、经过多个编码里的tf块得到的输出传递到解码里对应tf块的多头注意力的key和value(query来自目标序列)、然后解码器里就像RNN一样不断生成预测结果

    2020年ViT(Vision Transformer)模型的出现,ViT将Transformer结构完全替代卷积结构完成分类任务, 并在超大规模数据集上取得了超越CNN的效果,它尽可能遵循原始transformer的设计所以结构基本一样

    DETR(End-to-End Object Detection with Transformers),使用Transformers进行物体检测和分割
    它和tf不同就在于最开始用CNN来学习图像特征再进入tf块(代替embedding),然后在解码器最后通过输出嵌入到前馈网络(FNN,就是两个全连接层)来预测类别和包围框(一个分类和一个BBox的回归)
    效率和精度应该和faster rcnn差不多

    视觉Transformer的缺点也很明显,模型参数太大(比如ViT Large Patch16模型光权重就有1个多G),算力要求太高,这基本就给移动端部署Transformer模型判了死刑。
    这是transformer最大的问题,所以一般的企业还是用别的模型(这个问题就比如一般用老的word2vec代替新的BERT一样)


    参考来自过去的技术总结、工作总结、博客
    有些没系统学过还不会的,还有不想深究的,选择比较基础常用的,并不是最全面的
    自己口述一下雀食感觉更理解了,更简单了 清晰了起来,复杂的问题简单化,才说明真正理解了

  • 相关阅读:
    《论文阅读》CARE:通过条件图生成的共情回复因果关系推理 EMNLP 2022
    嵌入式学习笔记(47)Nand的常见操作及流程分析
    并发编程中的锁、条件变量和信号量
    【CSDN创作话题 】丨 竞赛那些事
    Windows入口点函数
    低代码-业务流程引擎
    深入理解MySQL存储引擎、InnoDB与MyISAM的比较以及事务处理机制
    【场景化解决方案】OA审批与用友U9数据集成
    SonarQube的BUG定义
    三维重建系列 COLMAP: Structure-from-Motion
  • 原文地址:https://blog.csdn.net/weixin_42394432/article/details/128120344