糁毡子i 蒋若涵 发布的文章

Transformer模型
f0d5bff539ac444bbe3ef05a77202fec~noop.png
来自Yang, JF et al., Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond。

今天多模态AI的技术进展状态,像极了2017年前后的NLP领域。

2017年是Google提出Transformer技术的时间,也是NLP科研领域百花齐放,多路径同时迭代,上下游任务各自突破的时代。在自然语言处理顶级学术会议ACL 2017年的论文列表(https://aclanthology.org/events/acl-2017/)中,我们可以找到那个时代科研人员最关心的技术话题。

2017年,文本分类、语义解析(Semantic Parsing)、向量编码、机器翻译、文本生成、阅读理解、知识问答、主题模型、方面提取(Aspect Extraction)等等上下游任务与Attention、RNN、CNN、Sequence-to-sequence、Sequence-to-Dependency等不同技术路线之间以各种方式排列组合,让人目不暇给。即便是进入了2018年的BERT时代,科研圈的很多人还是在反复争论到底哪一种路线才是通往“人工智能圣杯”的最优路径。

概念上,多模态AI指的是能够执行一种或多种跨模态/多模态任务的AI算法。典型的跨模态/多模态任务(科研上,“跨模态”与“多模态”有不同的内涵,本文不做详细说明)包括:

跨模态的生成任务,如文生图;
输出多模态信息的生成任务,如根据文字描述,自动输出混合了图、文、视频内容的展示文稿;
跨模态的理解任务,如自动为视频编配语义字幕;
跨模态的逻辑推理任务,如根据输入的几何图形,给出有关定理的文字证明;
多模态的逻辑推理任务,如请AI玩密室逃脱——这需要AI根据密室空间结构,文字信息,图片信息等推理出最优解决方案;
……

Transformer 是Google Brain 2017的提出的一篇工作,它针对RNN的弱点进行重新设计,解决了RNN效率问题和传递中的缺陷等,在很多问题上都超过了RNN的表现。
RNN:Recurrent Neural Network, 循环神经模型。

单向二阶段训练模型——OpenAI GPT

GPT(Generative Pre-Training),是OpenAI在2018年提出的模型,利用Transformer模型来解决各种自然语言问题,例如分类、推理、问答、相似度等应用的模型。GPT采用了Pre-training + Fine-tuning的训练模式,使得大量无标记的数据得以利用,大大提高了这些问题的效果。

GPT就是利用Transformer进行自然语言各种任务的尝试之一,主要有以下三个要点

Pre-Training的方式
单向Transformer模型
Fine-Tuning与不同输入数据结构的变化
GPT的全称是“Generative Pre-trained Transformer”,即预训练生成式转换器。

双向二阶段训练模型——BERT

BERT(Bidirectional Encoder Representation from Transformer),是Google Brain在2018年提出的基于Transformer的自然语言表示框架。是一提出就大火的明星模型。BERT与GPT一样,采取了Pre-training + Fine-tuning的训练方式,在分类、标注等任务下都获得了更好的效果。

BERT与GPT非常的相似,都是基于Transformer的二阶段训练模型,都分为Pre-Training与Fine-Tuning两个阶段,都在Pre-Training阶段无监督地训练出一个可通用的Transformer模型,然后在Fine-Tuning阶段对这个模型中的参数进行微调,使之能够适应不同的下游任务。

虽然BERT与GPT看上去非常的相似,但是它们的训练目标和模型结构和使用上还是有着些许的不同:

GPT采用的是单向的Transformer,而BERT采用的是双向的Transformer,也就是不用进行Mask操作;
使用的结构的不同,直接导致了它们在Pre-Training阶段训练目标的不同;

多任务模型——MT-DNN

MT-DNN (Multi-Task Deep Neural Networks) 依然采用了BERT的二阶段训练方法以及双向Transformer。在Pre-Training阶段,MT-DNN与BERT几乎完全一样,但是在Fine-Tuning阶段,MT-DNN采用了多任务的微调方式。同时采用Transformer输出的上下文Embedding进行单句分类、文本对相似度、文本对分类以及问答等任务的训练。

https://zhuanlan.zhihu.com/p/69290203

数据分析相关python库的介绍

  1. Numpy
    Numpy是python科学计算的基础包,多维数组对象ndarray计算,数据集处理,线性代数运算、傅里叶变换,以及随机数生成。
  2. pandas
    pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。pandas兼具Numpy高性能的数组计算功能以及电子表格和关系型数据(如SQL)灵活的数据处理能力。它提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。
    DataFrame是pandas的一个对象,它是一个面向列的二维表结构,且含有行标和列标。可直接处理csv和mysql数据。
  3. matplotlib
    matplotlib是最流行的用于绘制数据图表的python库。
  4. Scipy

Scikit-learn: 定位通用机器学习,传统机器学习,利用特征工程(feature engineering),人为对数据进行提炼清洗。
TensorFlow:定位深度学习库,深度学习利用表示学习(reprentation learning),机器学习模型自身对数据进行提炼。因此TF并没有提供sklearn那种强大的特征工程,比如维度压缩,特征选择等。

sklearn更倾向于使用者可以自行对数据进行处理,比如选择特征,压缩维度,转换格式,是传统机器学习库。而以tf为代表的深度学习库会自动从数据中抽取有效特征,而不需要人为的做这件事情,所以并未提供类似的功能。

sklearn中的模块都是高度抽象化的,所有分类器基本可在3-5行内完成;tf有很高的自由度,可以做传统机器学习的事,但需要自己实现算法。封装在tf等工具库上的keras才更像深度学习届的sklearn。从自由角度看tf更高,从抽象化,封装程度来看,sklearn更高;从易用性角度看,sklearn更高。

sklearn主要适合中小型的,使用机器学习项目,尤其是数量不大且需要使用者手工对数据进行处理,并选择合适模型的项目。这类项目在CPU上就可以完成,对硬件要求低。
tf主要适合已经明确了解需要深度学习,且数据处理需求不高的项目。数据量较大并最终需要的精度更高,一般需要GPU加速运算。对于深度学习做“小样”可以在采样的小数据集上使用keras做快速的实验

keras堪称深度学习上的sklearn了。

可以结合起来用,sklearn负责基本的数据清理任务,keras对于问题进行小规模试验验证想法,tf用于在完整的数据上进行严肃的调参任务。

实践上来说,深度学习方法一般需要大量的GPU机器,一般只有深度学习方法效果远好于传统方法而且对业务提升很大的情况下,才会考虑使用深度学习方法,比如语音识别,图像识别任务。而NLP领域除了机器翻译意外,其他大部分任务仍然更常使用传统方法。传统方法一般有者更好的可解释性,这对检查调试模型也是非常有帮助的。

一、webui上的操作
image2023-3-30_12-3-49.png
image2023-3-30_12-4-40.png
image2023-3-30_12-5-8.png
如果使用Interrogate CLIP, 注意审查提取的关键词是否正确。
二、参数设置 (建议必读)

CFG Scale:用于控制模型应在多大程度上尊重您的提示。

1 – 大多忽略你的提示。

3 – 更有创意。

7 – 遵循提示和自由之间的良好平衡。

15 – 坚持更多提示。

30 – 严格按照提示操作。

Denoising strength:去降噪度。值越小,人物越像,风格丢失越多。

image2023-3-30_12-6-9.png
我这边调的过程,常用的一些参数设置(供参考),不局限于这些这些参数的调整。

inpaintingmaskweight 0.35

Sampling steps 30

CFG Scale 15

Denoising strength 0.65
三、ControlNet的简单设置
image2023-3-30_12-6-32.png
ControlNet可以用于控制图像的大致轮廓。