AI_NLP以及SAM的理解-分割模型

发布时间 2024-01-08 17:34:29作者: 辰令

机器学习

 一般机器学习分为有监督学习,无监督学习和强化学习
     无监督学习 Unsupervised Learning
		 Self-Supervised Learning,又称为自监督学习 -Self-Supervised Learning 的核心思想
           Masked Autoencoders Are Scalable Vision Learners
		     in a task-agnostic way: 一堆无标签的数据去预训练,没有特定的任务 
			 in a task-specific way: 一堆带标签的数据去在下游任务上 Fine-tune 
		 常见的自监督学习算法包括自动编码器(Autoencoder)和对比性预训练(Contrastive Pretraining)等
		 常见的半监督学习算法包括半监督支持向量机(Semi-Supervised Support Vector Machines)和贝叶斯半监督学习(Bayesian Semi-Supervised Learning)
		 常见的无监督学习可以分为聚类、异常检测、数据降维、深度学习中的自编码器等
		 自监督学习和无监督学习都是没有给定标签的情况下进行学习,但它们主要的区别在于目标函数的选择
	 自监督学习 
	    分成3类:Data Centric, Prediction (也叫 Generative) 和 Contrastive
		  1.生成式预训练 Generative Pre-training,目标是:学到高维数据的在低维空间的一个有效表示(representation)核心想法是学习如何产生数据
		      自回归模型     根据过去时刻的数据生成未来时刻的数据,这在自然语言处理中也被称为语言模型(Language Modeling,LM)任
			  去噪自编码模型 根据增加扰动后的数据生成原始数据
		  2.自监督对比学习(Contrastive Learning)
		  
		  3.数据中心--
		   deep cluster 做伪标签
		   数据增强(Data Augmentation)--有限的数据产生等价于更多数据的价值 条件对抗生成网络 Conditional GANs 		   
	零样本学习(zero-shot learning)
	   masked language modeling(MLM)在NLP领域的成功应用和VIT视觉任务的推动,
	   masked image modeling(MIM)成为一种有前途的CV自监督训练范

NLP语言模型

    三类代表性的语言模型,分别为
	    BERT所使用的掩码语言模型、     -- BERT通过变换器网络的 编码器 实现掩码语言模型 Masked language model,MLM
	    GPT系列所使用的自回归语言模型  -- GPT 通过变换器网络的 解码器 实现了自回归语言模型(Autoregressive language model)
		     LLAMA2 采用了自回归 Transformer 预训练方法
	    ERNIE系列所使用的引入了知识图谱等专家知识的语言模型-用了 BERT 类似的模型架构之上,加入了知识图谱
		
	 	
 语音合成方面,VALL-E模型支持通过语音提示,合成符合输入语音音色和情绪的逼真声音	
 
  Meta         的 Llama 2   LLAMA提出于2023-02-24,东家Met
  Hugging Face 的 BLOOMZ
  OpenAI       的 GPT-4 
  Stability AI 的 Stable Diffusion 2
  ALPACA 提出于2023-03-13,也就是LLAMA后提出的二十天内就提出来了,东家Stanford
  
  
1.tokenization: 将文本划分为若干个 token 是文本处理的第一步,这个过程被称为 “tokenization”
2.将 token 并进行数字表示

token
    1.自然语言处理领域中,机器学习模型通常以 Token 作为其输入单位
      将文本分割成一个个最小单位,这些最小单位就是token,BPE分词:通过统计学将高频词组合并为一个token
        主流的预训练语言模型如 BERT使用 WordPiece/BPE分词, GPT使用BPE分词	
    2.分词+ 扩展词汇表 +识别并处理特殊token
	  01.分词粒度
	        BERT族:Word-Piece
			GPT族:Byte-Pair Encoding (BPE)
			多语言支持:Sentence-Piece
	  02.token 类型	
       BERT中的"[MASK]"表示遮蔽语言模型中的被遮蔽词  
	过程   
       语言模型的工作原理实际上是将输入的文字转换成token,然后通过模型预测token,再将token转换成文字,最后再输出。
       :tokenizer将输入encode成数字输入给模型,模型generate出输出数字输入给tokenizer,tokenizer将输出数字decode成token并返回
	
embedding:一个用来表示token的稠密的向量 Embedding Layer
     embedding”(词嵌入)是一种将文本中的单词或其他文本单位映射到连续向量空间中的表示方法
	 常见的词嵌入方法是
 	   Word2Vec,它通过基于上下文的方法来学习单词的向量表示
	   GloVe(Global Vectors for Word Representation),它通过基于全局共现信息的方法来学习单词的向量表示。
encoding- 重构输入数据
   如编码器-解码器(Encoder-Decoder) 
    自编码器(Autoencoder)、 --- Bert系列
    自回归预测法(Autoregression,AR) -- GPT、LLaMA
	Seq2Seq --T5、BART

提示词-Prompt Engineering

1.预训练-提示学习
 提示词(Prompt) 自然语言指令(task description) + 任务demo(example) + 带"__"的任务。
  提示工程(Prompt Engineering)就是探讨如何设计出最佳提示词,用于指导语言模型帮助我们高效完成某项任务
    零样本提示(zero-shot prompting)
    小样本提示(Few-shot Prompting)
    链式提示(prompt chaining),一个任务被分解为多个子任务,根据子任务创建一系列提示操作
 Prompt根本不对预训练模型进行任何改动,是直接拿过来用的。
    也就是说,只改变输入到预训练模型里面的Prompt,通过改变这个Prompt来把域从原域(广域)切换到任务域上
2.预训练-微调
 Fine-tuning
  Fine-tuning的本质是改变预训练模型的weights		

注意力机制

三个矩阵 Q K V 来作为模型参数--输入矩阵的某种线性变换 。Q是Query(查询),K是Key(键/钥匙),V是Value(值)
                    QKV思想,本质是一个具有全局语义整合功能的数据库
 self-attention是矩阵运算
self-attention还是cross-attention
	Self-Attention  用于计算输入序列中每个元素之间的关系,Self-Attention中,输入序列被分成三个向量(即查询向量,键向量和值向量)
	Cross Attention 则是计算两个不同序列中的元素之间的关系
	   有两个不同的输入序列,其中一个序列被用作查询向量,另一个序列被用作键和值向量
位置编码方法:余弦位置编码 Positional Encoding:位置信息的整合

注意力头 multi-head attention

SAM 介绍

SAM 的结构设计、prompt 设计 以及训练方式以及 data engine 的 pipeline.
 结构构成
    image encoder 
    prompt encoder
    mask decoder
 具体说明
    1.image encoder:用来生成 image embedding -- 旨在映射待分割的图像到图像特征空间--使用的是微调的 detectron的ViT 
	   masked autoencoders (MAE) 是用于CV的自监督学习方法,优点是扩展性强的(scalable)-掩码预训练的想法
	    包含一个encoder模块和一个decoder模块-MAE的策略是随机掩盖了75%的图像,迫使模型学习捕捉高层的语义-从而基于极少部分的图像重建整个图像
		 掩蔽图像建模(masked image modeling )
		 掩蔽重建增强(Mask-Reconstruct Augmentation,MRA)
	  非对称编码器 - 解码器架构,MAE采用非对称编码器和解码器架构,其中编码器的掩码token由解码器重建
	    其中一个编码器只对可见的 patch 子集进行操作 (即没有被 mask 掉的 token),
	    另一个简单解码器可以从潜在表征和被 masked 掉的 token 重建原始图像	
    2.prompt encoder针对不同类型的输入是不一样的。包括 point, bbox, masks, text 
	  prompt分为dense prompt(mask图)和sparse prompt(点和框和文字)
	    1.点 框 统一用位置坐标表示,映射到256维。prompt tokens	
		       point prompt:positional embedding + learned embedding  
			       =描述当前点是前景还是背景+空间坐标乘以高斯分布的向量来描述位置比直接的线性向量描述效果更好
			   box prompt:将其表示为左上角点的 positional embedding + learned embedding 以及右下角点的 positional embedding + learned embedding
		  	           两个点的位置编码
					   一组一维向量用来描述这个点是“左上”还是“右下
		2.文本使用CLIP的文本编码器。
		     使用对应mask区域输入CLIP的image encoder后得到的embedding作为mask decoder的输入;prompt tokens	
		3.mask使用多层卷积进行编码--conv
		             dense prompt(mask),使用卷积提取特征并与 image embedding 相加。
	3.mask decoder-prompt embedding和image embedding在这个结构中反复融合并且反复更新
       mask decoder,输入为: image embedding、output tokens、prompt tokens
	    在prompt embedding进入decoder之前,先在它上面concat了一组可学习的output tokens 即定义一个 learnable token 记作 output tokens		   
      output tokens== iou token mask token
	  prompt embedding(这一步改名叫prompt token)和刚才提到这两个token concat到一起统称为tokens进入decoder

 训练过程: 3 个 mask 分别对应(whole, part, and subpart)
      如果用户输入了一个点,那么模型会返回3个最可能的mask,粒度从大到小,论文中会分别计算这3个mask和label的loss,然后取其中最小的一个loss去更新模型。	   
	  训练时不是直接拿文本作为prompt输入
      loss 为focal和dice loss
	   对分割目标的大小是有最少100x100像素要求
	据输入的 point, box, text prompt 对第一阶段得到的所有 mask 进行筛选  
      point prompt 定义为 foreground/background,其中 background 用于过滤掉非前景区域
	  box prompt 与所有的 instance mask 外接矩形框计算 IoU,最终选择 IoU 最大的那个 mask;
      text prompt,利用 CLIP 计算文本特征,然后与预测的 mask 的特征计算相似度,保留最大相似度的 mask		  
分割
    实例分割的本质就是语义分割加上目标检测	

迭代和提升

 Segment Anything in High Quality(HQ-SAM):HQ-SAM在原来SAM的基础上,针对decoder部分添加了参数	   
 图像嵌入(Image Embedding)是一种将图像数据转化为连续的、低维度的向量表示的方法	   
训练: 
  模型结构
     --Tensor --反向传播
     常用模块
        SwiGLU 激活函数代替 ReLU 非线性激活函数
	  backward、grad、autograd
  模型损失函数-损失函数、评估标准、优化器
      损失函数
	  优化器--决定如何基于损失函数对网络进行更新
  数据以及超参数
  
推理:
     模型参数-权重文件

修改
   pytorch 保存模型+加载模型+修改部分层+冻结部分层+删除部分层-替换
       1. require_grad=False 使用方法为令要冻结的层的网络参数的require_grad=False
	   2.with torch.no_grad() 该方法也是利用了require_grad=False
	   3.不把该网络层的参数放到优化器里面

数据现状

 AI基础数据服务 
      更复杂更专业的数据标注服务--标注规则+标注工具+标注团队 (标注效率-标注质量-标注成本)
	                     数据( Data) 本身带有的信息是否比标记 (Label) 更加丰富?
	  更智能的自动化标注服务--标注大模型
	  更加规范的数据采标服务--数据采集+数据合规+数据处理工具链+测绘资质
 AI+云资源+工具链
    算法工具链--算法训练-算法部署以及OTA
	云资源--(数据存储-数据训练计算资源)
	数据工具链--数据管理平台-数据仿真平台
模型 
   构建基础模型所涉及的成分和流程:构建基础模型的计算资源、数据和劳动力
   模型属性和功能,例如模型的架构、功能和风险
   模型的分发和使用方式

模型部署和应用

  模型压缩就是把模型做小,一般在移动端应用居多。神经网络的轻量化版本,可以使用后缀-efficient或-lite
     基本上可以分为:蒸馏、剪枝、量化、模型高效化
	    1.知识蒸馏(Knowledge Distilling,KD)-模型蒸馏-可以直接改变模型架构,有很好的压缩效果-学生网络和一个教师网络
		2.模型剪枝,相当于把模型做窄,永久失活一部分神经元,而不改变模型架构
		            剪枝是一个迭代的过程。先训练,再剪掉一部分。再训练,再裁剪掉一部分……如此循环往复,直到稀疏度达到目标值
		3.模型量化-是进行知识的凝缩表达来减少需要记忆的知识量-
		     最常见的模型量化目标就是把32位浮点数降到16或8位

数学-数据

 数学-香农的信息论牛在可以和深度神经网络的每一层一一对应,从而无缝连接到神经网络中。
   香农熵:度量概率分布系统的混乱度-- Shannon Entropy
   相对熵(KL散度):从混乱度角度,度量两个概率分布系统的相似度--Killback-Leibler Divergence
   交叉熵 The Cross-Entropy 系统P和系统Q的交叉熵必定大于系统P的熵
 
 流言止于智者 -- 信息重要性与模糊性以及处理信息的方式  信息不对称以及多元主体处理信息的方式 信息的传播途径
           优质信息生产能力 信息传播途径-信息流转,信息处理方式-信息消费
 标题党--人类就是有趋向高信息量的本能
 
 工程能力
     代码能力是硬通货
	    01.大公司一般难度力扣中等题,差不多三步走:选方法(formulation)、过算法、写代码
		02.三个阶段: 第一个阶段刷medium-大致了解题目套路
		              第二个阶段看算法书做总结归
					  第三个阶段结合书本刷题来巩固体系
				体系造的全,但是不适合刷题 代码题,肯定是先去想什么算法可以解决这个问题,再看看这个算法用了啥数据结构

参考

 https://www.promptingguide.ai/zh 
【SAM】SAM & Fast SAM & Mobile SAM https://zhuanlan.zhihu.com/p/641169810
 Self-Attention & Transformer完全指南:像Transformer的创作者一样思考 https://zhuanlan.zhihu.com/p/630356292
 https://zhuanlan.zhihu.com/p/523897633
 https://zhuanlan.zhihu.com/p/525164253
 数据库系统从入门到精通九:关系型数据库的约束和触发器