transformer 分享会
ChatGPT
从数学模型开始
我们知道当有以下问题时
如何求解w,b?
我们只需要有一组参数即可求出a、b。例如 x = 1 y =2
但是实际中我们通常会需要一个更复杂的函数,来给出我们想要的答案。
输入 -> 函数 = 结果
实际上的深度学习模型
基础的深度学习知识
前向传播
激活函数
这里会涉及到一些线性代数的知识
例如我们已经收集到很多句子和判断句子是否是积极/消极,将句子向量化后得到【a,b,c,d】句子是消极记作0积极记作1,利用激活函数sigmod可以将向量映射到0-1之中,偏向0为消极1为积极:
反向传播
反向传播算法的目标是更新神经网络中的每一个权重,以便得到实际输出和目标输出更接近,因此要最小化输出节点和整个网络的误差。
代价函数(损失函数loss)
为了获得各层权重和偏置是否是恰当,我们首先需要一个量化的指标来衡量预测值与实际值有多接近,这个指标就是损失函数。损失函数将指明我们神经网络各层参数的调整方向。
NLP自然语言处理
是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言处理包括多方面和步骤,基本有认知、理解、生成等部分。
自然语言认知和理解是让电脑把输入的语言变成有意思的符号和关系,然后根据目的再处理。自然语言生成系统则是把计算机数据转化为自然语言。
Word Embedding
如何让计算机认识单词呢?
Seq2seq
典型模型rnn、lstm
Seq2seq 的应用场景
通常用于机器翻译、语音识别、自动对话等任务
GPT模型
首先我们对文本X进行positional encoding。得到一个矩阵A,假设每一个a都有 q(query) k(key) v(value)三个数值我们定义 q = wq *a,k = wk *a,v = wv*a)即可得到qkv的值。w是由训练而得到的。
同样的,我们知道输入的句子I和输出的句子O由图上的公式可以从O和i逆向得到W的值。经过输入不同得值和多层的结构。多次训练后我们就能够得到一系列的值W
预训练模型简要介绍
从字面上看,预训练模型(pre-training model)是先通过一批语料进行训练模型,然后在这个初步训练好的模型基础上,再继续训练或者另作他用。这样的理解基本上是对的,预训练模型的训练和使用分别对应两个阶段:预训练阶段(pre-training)和 微调(fune-tuning)阶段。
预训练阶段一般会在超大规模的语料上,采用无监督(unsupervised)或者弱监督(weak-supervised)的方式训练模型,期望模型能够获得语言相关的知识,比如句法,语法知识等等。经过超大规模语料的”洗礼”,预训练模型往往会是一个Super模型,一方面体现在它具备足够多的语言知识,一方面是因为它的参数规模很大。
微调阶段是利用预训练好的模型,去定制化地训练某些任务,使得预训练模型”更懂”这个任务。例如,利用预训练好的模型继续训练文本分类任务,将会获得比较好的一个分类结果,直观地想,预训练模型已经懂得了语言的知识,在这些知识基础上去学习文本分类任务将会事半功倍。利用预训练模型去微调的一些任务(例如前述文本分类)被称为下游任务(down-stream)。
以BERT为例,BERT是在海量数据中进行训练的,预训练阶段包含两个任务:MLM(Masked Language Model)和NSP (Next Sentence Prediction)。前者类似”完形填空”,在一句中扣出一个单词,然后利用这句话的其他单词去预测被扣出的这个单词;后者是给定两句话,判断这两句话在原文中是否是相邻的关系。
BERT预训练完成之后,后边可以接入多种类型的下游任务,例如文本分类,序列标注,阅读理解等等,通过在这些任务上进行微调,可以获得比较好的实验结果。
fune-tuning
Fine-tuning的原理就是利用已知的网络结构和已知的网络参数,修改output层为我们自己的层,微调最后一层前的若干层的参数,这样就有效利用了深度神经网络强大的泛化能力,又免去了设计复杂的模型以及耗时良久的训练,所以fine tuning是当数据量不足时的一个比较合适的选择。
站在巨人的肩膀上:前人花很大精力训练出来的模型在大概率上会比你自己从零开始搭的模型要强悍,没有必要重复造轮子。
训练成本可以很低:如果采用导出特征向量的方法进行迁移学习,后期的训练成本非常低,用CPU都完全无压力,没有深度学习机器也可以做。
适用于小数据集:对于数据集本身很小(几千张图片)的情况,从头开始训练具有几千万参数的大型神经网络是不现实的,因为越大的模型对数据量的要求越大,过拟合无法避免。这时候如果还想用上大型神经网络的超强特征提取能力,只能靠迁移学习。
openAI接入
C
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.Completion.create(
model="text-davinci-003",
prompt="The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.\n\nHuman: Hello, who are you?\nAI: I am an AI created by OpenAI. How can I help you today?\nHuman: I'd like to cancel my subscription.\nAI:",
temperature=0.9,
max_tokens=150,
top_p=1,
frequency_penalty=0.0,
presence_penalty=0.6,
stop=[" Human:", " AI:"]
)
他是怎么记住之前回答的问题的
很简单,把之前的问题带入。
怎么让chatGPT不遵守openai的规范
prompt提示很有用!
openAI自然语言处理支持的功能
Referance
[该类型的内容暂不支持下载]
