![12.png](http://static.itsharecircle.com/231115/6f7a504ebf566e5d84d8e74bb4eb51fa.png)
《从0到1训练私有大模型 ,企业急迫需求,抢占市场先机》完结11章,深入企业需求,从Chat背后原理、技术、不同大模型知识开始,带你从0到1训练出一个大模型,运用PEFT技巧微调大模型解决场景需求,最后用LangChain+训练的大模型搭建知识库问答。让你掌握大模型LLM构建的原理、技术、流程与实战,超越大多数竞争者,抢占先机,脱颖而出。
第1章 课程介绍
第2章训练模型与开发平台环境
第3章 chatGPT初始技术词向量原理剖析与实战
第4章 chatGPT基石模型基于Transformer架构的语言模型
第5章基于Transformer另一分支Bert系列分析与实战
第6章 chatGPT的核心技术强化学习
第7章 chatGPT技术演变从GPT 1 开始的大模型发展与演化
第8章 RLHF训练类ChatGPT模型代码实战
第9章低成本微调大模型方法PEFT(LORA等)训练”ChatGLM2“项目
第10章 langchain+训练大模型ChatGLM2 构建”知识库问答
第11章 课程总结
字面量
一个值的字面形式称为一个字面量,它表示此值在代码中文字体现形式(和内存中的表现形式相对应)。一个值可能会有很多种字面量形式。
比如数字1可以作为整型的字面量形式;1.11可以作为浮点类型的字面量形式。
整数类型值有四种字面量形式:十进制形式(decimal)、八进制形式(octal)、十六进制形式(hex)和二进制形式(binary)。
浮点数的完整十进制字面量形式可能包含一个十进制整数部分、一个小数点、一个十进制小数部分和一个以10为底数的整数指数部分。 整数指数部分由字母e或者E带一个十进制的整数字。
比如:1.11 , 1.11e2 , 100.e+2
虚部字面量形式。由一个浮点数字面量或者一个整数字面量和其后跟随的一个小写的字母i组成。 在Go 1.13之前,如果虚部中i前的部分为一个整数字面量,则其必须为并且总是被视为十进制形式。比如:
1.12i,1.12E2i,0x16i(0+22i)等等
rune的字面量形式,使用单引号或者八进制,十六进制表示:
比如: ‘a’ , '\141` , ‘\x61’ , ‘\u0061’ , ‘\U00000061’ 上面这些字符都表示字符a。
字符串的字面量形式。字符串的值都是UTF-8编码的。可以使用双引号和反引号声明。比如:`hello`
函数字面量。函数类型的字面表示形式由一个func关键字和一个函数签名字面表示表示形式组成。 一个函数签名由一个输入参数类型列表和一个返回值结果类型列表组成。
比如:
type person struct {
name string
age int
}
//结构体组合字面量的第一种形式
person{
name: "",
age: 0,
}
//结构体组合字面量的第二种形式
person{"", 0}
package main
import (
"fmt"
"sync"
)
func main() {
wg := sync.WaitGroup{}
for i := 0; i < 10; i++ {
//增加异步任务
wg.Add(1)
go func() {
task(i, wg)
}()
}
//等待全部goroutine完成
wg.Wait()
}
func task(i int, wg sync.WaitGroup) {
fmt.Println(i)
//标记异步任务完成
wg.Done()
}
什么是同步?
同步是指多个线程之间按照一定的顺序协调执行的机制。比如在某些场景下,多个 goroutine 可能会访问同一块内存区域,需要确保正确的共享内存,避免出现数据竞争等问题。Go 提供了一些机制来保证内存同步,比如锁、通道、原子操作等。
比如下面的代码,就会出现并发安全问题:
package main
import (
"fmt"
"sync"
)
func main() {
counter1()
}
func counter1() {
cnt := 0
wg := sync.WaitGroup{}
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
cnt++
wg.Done()
}()
}
wg.Wait()
fmt.Println(cnt)
}
因为聊天这个功能似乎“无所不能”。比方说:
问问题:某个主题的基本知识、某个问题的答案
提供建议:根据您的需求给出相关的建议和指导,如健康、财务、职业等
语言翻译:将语言翻译成另一种语言
生成文章:生成符合您需求的文本
解题:理解题目,并给出解题过程和结果
写代码: 理解需求,产生一段计算机代码
...
所以说唯一限制我们使用场景的就是我们的想象力。
对于Decoder的隐藏层,就变成了st=f(st-1,yt-1,ct),其中ct指的是在t时刻encoder模块的隐藏层ht加权平均的结果。
带有Attention的Encoder-Decoder网络的迭代过程就是如下几步:
Encoder网络按照原来的方法计算出h1,h2,...ht
计算Decoder网络,对于第k个输出词语,计算出得到ck所需要的h1,h2,...ht的权重αk,由此得到ck
将sk-1,yk-1,ck带入g(sk-1,yk-1,ck)得到sk,并带入网络得到输出yk
重复直到网络输出<end>。
(如何计算权重:设计一个以si,hj为输入的网络用softmax算概率作为权重)
2.21 self-attention
Query、Value 、Key
attention函数可以理解为利用向量key和value将一次查询进行映射的过程
输入层
encoder的输入层和decoder的输入层是一样的结构,都是token embedding(词向量)+ positional embedding(位置向量),得到最终的输入向量。(为什么要用位置向量:因为 Transformer 不采用 RNN 的结构,而是使用全局信息,不能利用单词的顺序信息,而这部分信息对于 NLP 来说非常重要。所以 Transformer 中使用位置 Embedding 保存单词在序列中的相对或绝对位置。)
LLM涌现出的3大能力
In-context learning:在GPT-3中正式被提出。在不需要重新训练的情况下,通过自然语言指令,并带几个期望输出的样例,LLM就能够学习到这种输入输出关系,新的指令输入后,就能输出期望的输出。
Instruction following:通过在多种任务数据集上进行指令微调(instruction tuning),LLM可以在没有见过的任务上,通过指令的形式表现良好,因此具有较好的泛化能力。
Step-by-step reasoning:通过思维链(chain-of-thought)提示策略,即把大任务分解成一步一步小任务,让模型think step by step得到最终答案。
LLM的关键技术
Scaling:更多的模型参数、数据量和训练计算,可以有效提升模型效果。
Training:分布式训练策略及一些提升训练稳定性和效果的优化trick。另外还有GPT-4也提出去建立一些特殊的工程设施通过小模型的表现去预测大模型的表现(predictable scaling)。
Ability eliciting:能力引导。设计合适的任务指令或具体的上下文学习策略可以激发LLM在庞大预料上学习到的能力。
Alignment tuning:对齐微调。为了避免模型输出一些不安全或者不符合人类正向价值观的回复,InstructGPT利用RLHF(reinforcement learning with human feedback)技术实现这一目的。
Tools manipulation:工具操作。为了弥补模型不擅长非文本输出任务和实时信息缺失的问题,让模型可以使用计算器、搜索引擎或者给模型安装插件等工具
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传