我的深度学习笔记

news2024/11/17 21:44:41

传统观念认为:在不考虑算力的情况下,网络越深,其准确率就越高,最直接的方法就是把网络设计的越深越好。

事实上:随着网络的层数不断加深,当达到一定的书目之后,训练精度和测试精度都有下降,说明网络深度很深之后,训练难度更大。

原因在于:当网络层数很深的时候,梯度在传播的过程中会逐渐消失,(每往后传递一层,梯度就会衰减。)

一个明显的优势就是:在已知不同深度提取的特征之后,为了使特征更加明显,比如说是第n层网络得到的是图像的轮廓信息,将n层得到的输出,跨链接到后面的层,有突出轮廓信息的作用。

在残差网络图中,虚线表示非同一shape。

Inception模块(GoogeNet)思想就是并行的使用不同大小的卷积核。

1*1卷积核的优势是减小模型参数数量。

为了应对梯度消失问题,在网络框架中有额外的两个softmax预测层,用于反向传播更新梯度,在测试集中不使用。

Fast RCNN没有真正实现端到端,其对候选区的选择仍然效率低下,Faster RCNN使用RPN来实现候选区域的选择。

YOLO的思想是将图片分成S*S的区域,对于每个区域预测两个框,整体应该预测2*S*S个框,相比与Faster-RCNN,其在选择候选区域方面较为出色。

SSD算法的思想是生成不同深度的特征图,在不同深度的特征图上进行分别进行分别对每个像素点进行选择defaultbox,(每个像素点对应的default box数量不相同)最后选择大量的defaultbox,然而真实情况是正样本很少,负样本很多,如果针对每个样本都进行训练的话,会造成政府样本不平衡的现象,对于每一个负样本,计算其cofidenceloss,这个值越大,表示更容易被误认为是目标,造成的损失越大,从大到小选择一定数量的负样本进行训练即可。

在transformer中,将原输入通过embedding和位置编码相加作为encoding的结果,将encoding的结果输入到decoding中进行解码,解码结果作为模型输出。

注意力机制:公式中的Q,K,V分别表示查询,键,值,用Q分别和K点积(或者三角函数等等)进行运算,得到结果,乘V权重,值的大小表示关注的力度。

在NLP中,获得Q,K,V的过程如上。

使用的是不止一套参数,而是多套,这样效果会更好。

总结如下:将输入通过与初始的Q权重矩阵相乘得到Q矩阵,同理得到K和V矩阵,利用的公式得到注意力强度,需要注意的是,在计算过程中Q和K相乘之后要进行归一化处理,保证方差为1,目的是防止softmax在梯度传播的过程中引起梯度消失,事实证明,这样做效果还不错。当然,只用一套QKV的权重矩阵得到的效果一般,这里采用多套(也叫做多头)权重矩阵,能得到较优的效果,猜测原因可能是将原输入映射到了不同的空间,提取到不同抽象级别的特征,当然,这在理论上也说得过去,(由于不同人群对同一件事物的关注点不同)。

encoding过程中,需要用到两个同位相加,首先是将输入经过embedding后和位置位置编码同位相加得到X,其次是X经过注意力机制得到的Z矩阵和初始的X同位相加,(盲猜目的是为了减少encoding之后输入的编码结果的失真程度)。

BN效果不如LN,原因如下:BN在batch_size很小的时候,受训练数据限制,拟合整体特征的效果不佳(训练过程只是针对小部分调整参数,而对整体的效果适应能力不强),相比而言,LN是在做纵向的处理,对同一样本不同特征之间做均值和方差,能有效的学习对于样本之间的整体联系。

可以认为BN更加注重提取不同样本之间相同的特征信息来进行训练,而LN侧重于提取同一样本之间的内在联系来进行训练。

在目标检测中的应用如下:

首先数据成批输入到CNN中经过特征提取同时与位置编码对位相加作为输入,进入到多头注意力机制层,得到的是K和V,送入到解码的每一层中,解码器首先初始化一百个想来向量,用来指向目标框和类别,经过解码层计算得到目标框的位置和分类,梯度下降更新参数,得到较好的模型。

同时,图像检测和NLP不同点在于,object queries之间是并行的。图像检测也不含mask。

decoding比较简单,值得注意的是,对于每一个encoding的输出,都要和decoding进行交互。

mask模型的缺点:在进行优化的时候,模型会认为多个mask是相互独立的,事实上,mask之间很有可能存在联系。mask模型中,并不是所有的呗选中作为掩码的单词(像素)都被掩盖为MASK,其中一部分被设置为原单词,一部分被设置为其他已有的单词(故意产生一些噪声),防止模型过拟合。

注意力机制有助于解决重叠问题。

Deformable dert:
可变形dert,对小目标检测效果比较好。 不要老是YOLO,这个太广泛了。 YOLO严格来说,不算一个end to end结构,是因为,在选取候选框的时候有一个前处理,在得到目标候选框之后有一个NMX处理,并不能做到端到端。DETR是真正意义的end to end。

tips:所有论文都是首先对与基于改进的模型进行一些小的吹嘘,然后一个however进行转折。

detr训练速度慢,而且对于分辨率比较敏感。transformer中注意力机制的限制:将输入展开为序列。对分辨率是平方级关系。计算量是分辨率的三次方关系。可变形的detr在注意力机制计算过程中只考虑周围点的采样。另一个比较大的优势是:能用较少的轮数来达到相同的结果。

传统为了检测小目标有意将输入图像的尺寸放大,但是这种方法在transformer中效果不佳。

dert的注意力机制模块,初始化过程中相对比较平均,所以需要大量的epoch来迭代以唤醒注意力。

在进行注意力计算的时候,每个点只与其周围的边缘点进行计算,(采样不同,认为周围点有更好的效果)。

公式中的\Delta p_{mgk},表示的是偏移量,由于注意力机制关注的点,不一定就是临近的四个点。 但是这个偏移量不一定是一个整数,也就是不一定能落到固定的点,找不到对应的索引值,实际任务之中,采用插值的方法让理想偏移点(可能不存在)周围的点都贡献一部分特征。

公式中偏移量和A是要做训练的参数,偏移量是输入的Zq通过全连接层得到的。更新全连接层的W和b就可以了。 

相对于传统的transformer,优势在于,通过对于任意一个特征块儿,通过一个全连接层,生成多个偏移量(也就是offset,用于训练,寻找更好的目标),同时将原始特征层加入多个全连接层,生成多个Values层(多头),针对每个特征块儿在values层对应的位置与对应的偏移量相加得到新的卷积块儿,同时,原始特征块儿还经过另外一个全连接层生成注意力权重,用于不同的卷积块儿。对得到的结果汇聚放入到一个全连接层作为一个输出。

注意,上图只是其中一个层级。

pq要做归一化。 

层级位置编码是可以学习的。

decoder用位置编码来初始化变量。

对于不同层级是放到一个序列中去做的。

重新梳理一下:dert和deformable dert的最大不同在于注意力机制的采样不同,dert在得到特征图之后,用特征图加上位置编码经过初始化的Q,V,K层(可训练)训练得到初始的Q,K,V,通过对得到的QKV进行运算之后,得到输出,输出加上之前进入注意力层之前的特征图,作为下一个注意力层的输入,经过多个注意力层之后得到输出结果,在decoder层中初始化100个向量(用来预测注意力的位置),进行自注意力机制提取之后,进行解码,解码层引入了编码层的输出结果。经过多个解码层之后得到预测的框和内容的输出。

而deformable中,注意力机制基本上全盘改变,编码部分是一样的,但是这里提到对于不同层级,添加的位置编码是可训练的,(不小心忘记了再传统的dert中是否是可以训练的,不过当然游有训练当然会显得效果更好嘛),对于每一个pq,将其延伸为多维,经过两个不同的全连接层分别得到偏移和权重,在原始的特征图上经过不同的全连接层生成不同的V层,找到pq在得到的V层中对应的点,进行偏移融合目标便宜位置周围的融合特征,融合特征乘对应的权重汇聚在一起然后通过全连接层得到输出,拼接进入下一个注意力层,值得注意的是:其实在输入时以序列的形式进行的。不同层级之间拼接成序列,输出也是拼接成序列。解码过程大同小异(都是在初始化的Q上进行KV的运算,其中K和V是编码器的输出结果)。不再赘述。

不同层级的形状不同,位置要归一化方便找到相对位置,绝对位置有点错位的风险。

问一下GPT,看我的理解是否有很多的纰漏:

一些想法,在权重选择方面,用一个全连接层是否会显得太单一了,使用多个卷积层是否会更好点,卷积层的参数比较少,能有效的抑制过拟合的情况。(待会儿问一下GPT卷积层在这是否有明显的优势)。 

对于数据集的没有必要选择公开的数据集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2176331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十三届蓝桥杯真题Java c组C.纸张尺寸(持续更新)

博客主页:音符犹如代码系列专栏:蓝桥杯关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 【问题描述】 在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm 841mm&#…

AI运用在营销领域的经典案例及解析

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 在前面一篇文章当中,我给大家介…

[Redis][典型运用][缓存]详细讲解

目录 0.什么是缓存?1.使用Redis作为缓存1.为什么用?2.如何用? 2.缓存的更新策略0.前言1.定期生成2.实时生成 3.缓存相关问题1.缓存预热(Cache Preheating)2.缓存穿透(Cache Penetration)3.缓存雪崩(Cache Avalanche)4.缓存击穿(Cache Breakdo…

一种多版本、多人并行开发GIT分支管理规范

首发公众号: 赵侠客 引言 作为开发者每天在写代码的同时也在写BUG,所以一方面需要开发新的需求,另一方面还要填自己以前挖的坑。目前主流程序员都在使用GIT来管理自己的代码,当GIT仓库有多人维护或者项目有多个版本同时迭代开发时…

c++进阶学习--------多态

前言 需要声明的,本节课件中的代码及解释都是在vs2022下的x86程序中,涉及的指针都是4bytes。 如果要其他平台下,部分代码需要改动。 比如:如果是x64程序,则需要考虑指针是8bytes问题等等 1. 多态的概念 1.1 概念 …

.NET内网实战:白名单文件反序列化执行命令

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。 02基本介绍 本文内容部分节选自小报童…

【易社保-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

Java泛型方法的定义和使用、泛型类、泛型接口、泛型方法、通配符、泛型的上界与下界

文章目录 一、包装类1.1、基本数据类型和对应的包装类1.2、自动装箱和自动拆箱 二、基本介绍2.1、泛型引入背景2.1、什么是泛型2.2、为什么使用泛型 三、常见泛型字母含义四、泛型的使用4.1、泛型类4.2、泛型接口4.3、泛型方法 五、泛型的继承5.1、泛型不具备继承性5.2、何为数…

【Python】递归

专栏文章索引:Python 有问题可私聊:QQ:3375119339 文章内容改自:bilibili博主(又懂啦) 目录 一、递归函数 二、理解递归函数 一、递归函数 一个函数在其函数体内调用函数自身,这样的函数就称为递归函数。递归函数的…

每日一练 2024.9.29(2)

目录 解题思路与代码实现 题目分析 一、解题策略 关键步骤: 二、代码实现 三、代码解析 四、复杂度分析 五、运行示例 示例1: 示例2: 六、总结 解题思路与代码实现 题目分析 这道题目要求我们找到字符串列表 strs 中的相似字符组…

Arch - 架构安全性_验证(Verification)

文章目录 OverView导图1. 引言:数据验证的重要性概述2. 数据验证的基本概念3. 数据验证的层次前端验证后端验证 4. 数据验证的标准做法5. 自定义校验注解6. 校验结果的处理7. 性能考虑与副作用8. 小结 OverView 即使只限定在“软件架构设计”这个语境下&#xff0c…

物理学基础精解【40】

文章目录 矢量积矢量积(又称叉积、外积)的几何意义一、面积表示二、垂直性三、方向性四、应用实例五、数学表达 矢量积(叉积)的坐标表示法矢量积的坐标表示法的几何意义矢量积的性质矢量积的应用 矢量积(又称叉积、外积…

Linux——k8s组件

kubernetes 使用1.31.1 版本搭建集群核心组件,选择flannel 网络插件为整体集群的运行提供网络通信功能。 flannel 网络插件 kube-flannel kube-flannel-ds-9fgml 1/1 Running 1 (18m ago) 2d21h kube-flannel kube-flannel-ds-ghwbq …

<<迷雾>> 第 3 章 怎样才能让机器做加法 示例电路

全加器示意图 info::操作说明 鼠标单击开关切换开合状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch03-01-full-adder.txt 原图 由3个全加器组成的3比特加法机 info::操作说明…

Linux——pod的调度

pod的调度 控制器: rc/rs 副本数量控制器 主要保证pod的数量符合管理员要求,并不会对pod进行额外的管理 以下三种控制器,本质上是服务控制器。具备以下特性: 副本数量的控制服务的滚动更新(更新pod)支持更新失…

基于springboot vue 投票系统设计与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

基于51单片机的2路电压采集proteus仿真

地址:https://pan.baidu.com/s/1oNOJJv78ecfWZkdlMyhNVQ 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…

Linux:LCD驱动开发

目录 1.不同接口的LCD硬件操作原理 应用工程师眼中看到的LCD 1.1像素的颜色怎么表示 ​编辑 1.2怎么把颜色发给LCD 驱动工程师眼中看到的LCD 统一的LCD硬件模型 8080接口 TFTRGB接口 什么是MIPI Framebuffer驱动程序框架 怎么编写Framebuffer驱动框架 硬件LCD时序分析…

OpenAI全新多模态内容审核模型上线:基于 GPT-4o,可检测文本和图像

在数字时代,内容安全问题愈发受到重视。9月26日,OpenAI 正式推出了一款全新的多模态内容审核模型,名为 “omni-moderation-latest”。 该模型基于最新的 GPT-4o 技术,能够准确地识别检测有害文本图像。这一更新将为开发者提供强大…

Java | Leetcode Java题解之第445题两数相加II

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {Deque<Integer> stack1 new ArrayDeque<Integer>();Deque<Integer> stack2 new ArrayDeque<Integer>();while (l1 ! null) {stack1.…