Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
liqiankun1111 committed Sep 1, 2023
1 parent 1ddd21c commit bc216dd
Show file tree
Hide file tree
Showing 14 changed files with 356 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ ML 是一个通过算法和统计模型从数据中学习知识的学科,当

![](/public/upload/machine/machine_learning_xmind.png)

人工神经网络具有自学习和自适应能力,可以通过预先提供的一批相对应的输入输出数据,分析两者的内在关系和规律, 最终通过这些规律形成一个**复杂的非线性系统函数**,这种学习分析过程被称作训练。
人工神经网络具有自学习和自适应能力,可以通过预先提供的一批相对应的输入输出数据,分析两者的内在关系和规律, 最终通过这些规律形成一个**复杂的非线性系统函数**,这种学习分析过程被称作训练。PS:模型可以看作一个函数,它模拟了人类智能的运行方式。在模型训练中,你所做的就是解出这个函数中未知变量的值。

机器学习(Machine Learning),它指的是这样一种计算过程:对于给定的训练数据(Training samples),选择一种先验的数据分布模型(Models),然后借助优化算法(Learning Algorithms)自动地持续调整模型参数(Model Weights / Parameters),从而让模型不断逼近训练数据的原始分布。这个持续调整模型参数的过程称为“模型训练”(Model Training)。模型的训练依赖于优化算法,基于过往的计算误差(Loss),优化算法以不断迭代的方式,自动地对模型参数进行调整。由于模型训练是一个持续不断的过程,那么自然就需要一个收敛条件(Convergence Conditions),来终结模型的训练过程。一旦收敛条件触发,即宣告模型训练完毕。模型训练完成之后,我们往往会用一份新的数据集(Testing samples),去测试模型的预测能力,从而验证模型的训练效果,这个过程,我们把它叫作“模型测试”(Model Testing)。测试数据用于考察模型的泛化能力(Generalization),也就是说,对于一份模型从来没有“看见过”的数据,我们需要知道,模型的预测能力与它在训练数据上的表现是否一致。

Expand Down
2 changes: 1 addition & 1 deletion _posts/MachineLearning/2022-02-09-feature_engineering.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ keywords: feature engineering

特征: 是指数据中抽取出来的对结果预测有用的信息,也就是数据的相关属性。

特征工程:使用专业背景知识和技巧处理数据,使得 特征能在机器学习算法上发挥更好的作用的过程。推荐模型本质上是一个函数,输入输出都是数字或数值型的向量,也就是用向量、矩阵或者张量的形式表示的信息。把物体表示成一个向量或矩阵的过程,就叫做特征工程(Feature Engineering)。从原始数据生成可用于模型训练的训练样本(原始特征 ==> 模型特征)。这个领域有专门的书《Feature Engineering for Machine Learning》/《面向机器学习的特征工程》。
特征工程:使用专业背景知识和技巧处理数据,使得 特征能在机器学习算法上发挥更好的作用的过程。推荐模型本质上是一个函数,输入输出都是数字或数值型的向量,也就是用向量、矩阵或者张量的形式表示的信息。把物体表示成一个向量或矩阵的过程,就叫做特征工程(Feature Engineering)。从原始数据生成可用于模型训练的训练样本(原始特征 ==> 模型特征)。这个领域有专门的书《Feature Engineering for Machine Learning》/《面向机器学习的特征工程》。PS:特征工程让模型更好地理解训练数据。特征工程的核心是对样本数据的改造,可以将数据映射到更细致的维度,或者映射到更高维度的空间。

![](/public/upload/machine/feature_engineer_process2.png)

Expand Down
2 changes: 2 additions & 0 deletions _posts/MachineLearning/2022-02-10-large_model.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ GPU服务器特点
2. Gradient-Checkpointing, 那么如果你的GPU连batch size为1都跑不了怎么办?我们在训练深度学习模型的时候,需要先做前向传播,然后将中间得到的激活值存储在内存中,然后反向传播的时候再根据loss和激活值计算梯度。也就是说内存消耗其实跟模型的层数线性相关。那么怎么减少这个内存消耗呢?最简单的想法就是我不存这些中间信息,计算梯度的时候,到了某一层我重新计算它的激活值,这个方法虽然可以让内存消耗是个常量,但是运行时间会是`O(n^2)`,这是没法接受的。那么就有一个折中的办法,我不存全部的中间数据,只存部分,那么我们在计算梯度的时候不需要从头计算了,只需要从最近的checkpoint点计算就好。
3. 我们训练模型一般都是用单精度(FP32)的参数,但是其实我们还使用半精度(FP16)。半精度可以降低内存消耗,从而训练更大的模型或者使用更大的batch size;同时运算时间受内存和算术带宽的限制,在有些gpu(Tensor cores)上可以为半精度提供更大的算术带宽,从而提高训练效率,减少inference用时。

[OpenAI 是怎么使用 Kubernetes 的?](https://mp.weixin.qq.com/s/ZVUlTQ9H19LQQ_vP0yxDwA)

### 网络架构

[大规模 AI 高性能网络的设计与实践](https://mp.weixin.qq.com/s/o0vAQvAo6GnYxzzAkGtQWQ) 并行训练策略 ==> 我们在训练大模型时,通常混合采用了三种并行策略。
Expand Down
2 changes: 1 addition & 1 deletion _posts/MachineLearning/2023-03-25-llm.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ keywords: llm chatgpt gpt bert
1. 早在上个世纪五十年代,就有学者提出了人工智能(Artificial Intelligence)的概念,其目的是希望让计算机拥有人类智能(或部分人类智能)。这个领域经过很多年的发展,依然没有突破,直到2012年出现了深度学习技术。深度学习主要解决了模型表示能力的瓶颈。我们面对的建模问题,比如图像理解、语言翻译、语音识别、分子-蛋白结合构象预测等技术,都是非常复杂的非线性问题,在深度学习出现之前,模型表示能力很弱,无法对这些复杂问题进行精确表示。而**深度学习技术,可以通过模型的层次堆叠,理论上可以构建任意深度的模型,突破了模型表示能力的瓶颈**,从而在语音识别、计算机视觉、自然语言理解等领域取得了突破性进展。
2. 这个阶段的主要局限,是非常依赖于标注数据的数量。由于模型参数变多,想要求解这么多的模型参数,需要大量的训练数据作为约束。而**想获得大量的标注数据非常贵,到亿级别之后就很难再有提升,数据支撑的有效模型大小也受到限制**
3. 2017年,一个重要的基础工作Transformer出现了。2019年,一个叫作BERT的工作脱颖而出,BERT采用了一个叫作自监督预训练的思路,无需标注数据**仅利用文本语料本身存在的约束就可以训练模型**(比如某句话的某个位置只能用某些限定的词),这样互联网上存在的优质语料不需要进行人工标定就可以用来做训练,从而一下子使得可用训练数据的数量有了巨大的提高,再配合上大模型,使得BERT模型的效果远远超过过去的模型,并且在不同任务间具有很好的通用性,成为NLP领域里程碑工作之一。其实在BERT出现之前的2018年,还有个工作叫作GPT(即GPT1.0),更早利用了自监督预训练的思路来做文本生成,即输入前面的文本,模型预测输出后面的文本,领域里面的优质语料无需标注就可以做训练。**BERT和GPT都是在Transformer基础上发展而来的,而Transformer也逐渐发展成为AI领域的通用模型**。
4. 在自监督预训练技术出现之后,我们可以认为新一代人工智能发展到了第二个阶段,即自监督预训练技术使得可用训练数据有了几个数量级的提升,**在训练数据大幅提升的支撑下,模型大小也有了数个数量级的提升(有效模型达到了千亿规模)**,而在模型效果上,这些模型变得不再依赖于下游任务领域数据的再训练,所以,**领域进入到基于自监督预训练的通用大模型时代**
4. 在自监督预训练技术出现之后,我们可以认为新一代人工智能发展到了第二个阶段,即自监督预训练技术使得可用训练数据有了几个数量级的提升,我们进入了一切皆为训练数据的时代。这使得模型可以获得**几乎无限的训练数据****在训练数据大幅提升的支撑下,模型大小也有了数个数量级的提升(有效模型达到了千亿规模)**(为了对如此规模的数据进行建模,模型参数的规模越大越好,更大规模的训练数据需要模型具备更强的记忆、理解和表达能力。而为了拥有更强的记忆、理解和表达能力,模型则需要更大的参数量,也就是更大的模型。)而在模型效果上,这些模型变得不再依赖于下游任务领域数据的再训练,所以,**领域进入到基于自监督预训练的通用大模型时代**
5. ChatGPT为什么能有这样惊艳的效果?其中一个核心原因是ChatGPT基于生成大模型GPT3.5构建,这应该是当前自然语言理解领域文本生成最好的模型(GPT3.5比GPT3.0使用了更多的数据和更大的模型,具有更好的效果)。第二个核心原因则是基于人类反馈的强化学习技术:第一步,先收集用户对于同一问题不同答案的偏好数据;第二步,利用这个偏好数据重新训练GPT模型,这一步是基于监督信息的精调;第三步,根据用户对于不同答案的偏好,训练一个打分函数,对于ChatGPT的答案会给出分数,这个分数会体现出用户对于不同答案的偏好;第四步,用这个打分函数作为强化学习的反馈(Reward)训练强化学习模型,使得ChatGPT最终输出的答案更偏向于用户喜欢的答案。通过上述过程,ChatGPT在GPT3.5的基础上,针对用户输入,输出对用户更友好的回答。ChatGPT第一阶段训练GPT生成模型使用的训练数据非常多,大约在几十TB,训练一次模型需要花费千万美元,而第二个阶段,基于强化学习的少量优质数据反馈则只需要数万条优质数据。这种新的范式,**有可能成为第三阶段人工智能的核心驱动技术,即首先基于自监督预训练的大模型,再结合基于少量优质数据反馈的强化学习、Prompting等技术,形成模型和数据的闭环反馈,获得进一步的技术突破**。如果这个技术走通,那么无人驾驶、机器人以及生命科学等数据获取昂贵的领域将显著受益。
6. ChatGPT并不能证明人工智能已经有了人类心智,ChatGPT表现出来的一些创造性和心智,是因为自然语言理解语料中包含了语义、逻辑,基于自然语言语料训练出来的生成模型,**统计意义上学习到了这些对应关系**,看起来似乎有了智能,但并不是真的有人类心智。ChatGPT很棒,但说他智力等于几岁小朋友的说法,都不够严谨。因为从根本上讲,人学习新知识、进行逻辑推理、想象、运动反馈这些能力,目前AI还没有具备。
7. ChatGPT并不是一两个研究人员做出的算法突破,而是在先进理念指导下,非常复杂的算法工程体系创造出来的成果,需要在团队和组织上匹配(类比OpenAI和DeepMind)。纯研究型的团队恐怕不能成功,对深度学习理解不够、太工程化的团队也不会成功。这只团队需要:第一要有足够资源支持,可以支撑昂贵的深度学习训练和人才招聘;第二要有真正在工业界领导过工程化大模型团队的专家领导,ChatGPT不仅有算法创新,更是工程体系创新;第三,也可能是最重要的,需要一个团结协作有统一领导且不追求论文发表的组织(松散型的组织利于算法创新,但不利于工程化算法攻坚),且配备足够多优秀的工程和算法人才。
Expand Down
27 changes: 27 additions & 0 deletions _posts/MachineLearning/2023-05-20-llm_try.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,8 @@ LangChain实时推荐天气

### Prompt Engineering

为模型增加外部记忆,在提示词中引入一些领域知识,帮助模型提升回答质量。

[人人都需要掌握的Prompt Engineering技巧](https://mp.weixin.qq.com/s/JvoBOzdHmagLXiT2k1nYPQ)对于一些复杂的问题,Prompt写得好不好,直接影响着大模型给出答案的正确与否。本质上,**LLM是一个概率模型,它只是在给定的信息的前提下,给出概率最大的结果,它并不保证结果的合理性和正确性**。要让LLM给出的结果尽可能地合理、正确,这是我们使用LLM的人的职责。

AI界的大佬 --- Andrew NG推出过一个Prompt Engineering的短课程《ChatGPT Prompt Engineering for Developers》,提到写好Prompt的一些基本理念。
Expand Down Expand Up @@ -333,6 +335,31 @@ AI界的大佬 --- Andrew NG推出过一个Prompt Engineering的短课程《Chat

![](/public/upload/machine/mlops_vs_llmops.jpg)

1. LangChain 的链式调用方法或者说编程语言 Python 不适合生产环境,真正工业级的应用需要有离线、近线几套系统配合供给,才能让在线系统效果出众、性能稳定。
2. 大模型通过提示词中信息的 Embedding 去检索外部记忆片段这种做法并不高明,充其量只是字面匹配的一个变种而已,存在非常明显的缺点。你无法找到主题最相近的文档,因为在一开始,你就把文档的语义切割了,更何况你所能使用的开源向量检索,根本没办法满足工业级的性能和数据量级要求。
3. 各类开源模型,比如 ChatGML 和 Llama 是无法直接拿来满足商业需求的。在大模型商业化的过程中,模型的领域定制是免不了的。

## 这一轮技术革命的真正“终局”是什么样子

[具身智能:OpenAI真正的野心是什么?](https://time.geekbang.org/column/article/686408)

![](/public/upload/machine/llm_capacity.jpg)

1. 任务规划(Planning),CoT让 LLM 将任务分解为可解释的步骤
2. 记忆唤醒(Memory),在神经科学研究中,人类的记忆可分为感觉记忆、短期记忆和长期记忆三种类型。
1. 感觉记忆,是人体接收到外部信号以后,瞬间保留的视觉、听觉、触觉的记忆片段,在 AI 系统中类似于高维嵌入表示,也就是我们常说的 “Embedding”。
2. 短期记忆,是你当前意识中的信息,在 LLM 中类似于提示词(Prompt)中的所有信息。
3. 长期记忆,包含了你能回忆的所有信息,在 LLM 中类似于外部向量存储。
LLM 能“消化”的,只有提示词(Prompt)中的短时记忆,所以你需要在长期记忆中选择最重要的内容放入提示词。
3. 驾驭工具(Tools)

以上能力汇总下来
1. LLM 在得到任务后,会帮助你制定记忆唤醒方案。
2. AI 系统执行该方案,生成相关的查询指令,从外部数据中查询数据。PS:调取外部知识
3. 我们将这些数据交给 LLM 来判断是否已获得足够完成任务的数据。如果没有,LLM 会生成新的唤醒方案,并循环这个过程。
3. LLM 为指定的需求,找到最合适的工具,再下一步OpenAI 推出的 Code Interpreter 可以制作工具
5. 判断任务是否完成,如果没有,则重复上述过程。

## 其它

![](/public/upload/machine/beauty_of_llm.jpg)
Expand Down
Loading

0 comments on commit bc216dd

Please sign in to comment.