Skip to content

Commit 9c90d31

Browse files
committed
update
1 parent 8dbfe0f commit 9c90d31

File tree

4 files changed

+243
-130
lines changed

4 files changed

+243
-130
lines changed

深度学习系列/LLM.md

Lines changed: 115 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# 前置知识
2+
3+
- Linux
4+
- git
5+
- Python
6+
- PyTorch
7+
18
# LLM博文
29

310
[万字长文——这次彻底了解LLM大语言模型-腾讯云开发者社区-腾讯云 (tencent.com)](https://cloud.tencent.com/developer/article/2368425)
@@ -277,7 +284,43 @@ Chroma向量数据库-->匹配相似文本段
277284

278285

279286

280-
# LLM介绍
287+
# Hugging Face
288+
Hugging Face 是一家专注于自然语言处理和机器学习的公司,以其开源的Transformers库而闻名。该平台提供了丰富的预训练模型,支持多种语言任务,如文本生成、
289+
翻译和情感分析。Hugging Face 还致力于推动A!的民主化,鼓励开发者和研究人员共享和合作。
290+
291+
作为 Hugging Face 最核心的项目,Transformers 无疑是这个社区的灵魂。
292+
293+
Transformers 提供 API 和工具,可轻松下载和训练最先进的预训练模型。使用预训练模型可以降低计算成本
294+
并节省从头开始训练模型所需的时间和资源。这些模型支持不同模式的常见任务:
295+
296+
- 自然语言处理:文本分类、命名实体识别、问答、语言建模、摘要、翻译、多项选择和文本生成。
297+
- 计算机视觉:图像分类、对象检测和分割。
298+
- 音频:自动语音识别和音频分类。
299+
- 多模态:表格问答、光学字符识别、扫描文档信息提取、视频分类和视觉问答。
300+
301+
此外,Hugging Face官方还提供免费的课程,如何利用社区生态(Transformers等项目)来进行NLP的学习
302+
303+
Hugging Face 中检索模型。
304+
305+
- Files and Versions 里包含了模型文件和模型的版本管理。我们如果想要使用模型,需要把里面所有的文件都下载过来。
306+
307+
## GitHub CodeSpace 的使用
308+
GitHub Codespace 通过 GitHub 原生的完全配置、安全的云开发环境,可以更快地启动和写代码
309+
它提供了一系列模板,我们在跑机器学习深度学习相关的实验的时候,可以选择它的 Jupyter NoteBook 模板
310+
311+
## 模型上传
312+
313+
Hugging Face 同样是跟 Git 相关联,对于大文件,我们需要安装 git-lfs,对大文件系统支持。
314+
使用 huggingface-cli login 命令进行登录,登录过程中需要输入用户的 Access Tokens
315+
316+
## Spaces 的使用
317+
318+
Hugging Face Spaces 是一个允许我们轻松地托管、分享和发现基于机器学习模型的应用的平台。
319+
Spaces 使得开发者可以快速将我们的模型部署为可交互的 web 应用,且无需担心后端基础设施或部署的复杂性。
320+
321+
# LLM
322+
323+
## LLM介绍
281324

282325
专用模型==>通用模型。通用大模型,一个模型应对多种任务,多种模态。
283326

@@ -336,13 +379,82 @@ graph TB
336379

337380
<b>OpenCompass 评测体系</b>
338381

339-
![image-20240815151147641](D:\CodeNotes\深度学习系列\image-20240815151147641.png)
382+
<div align="center"><img src="./image-20240815151147641.png"></div>
340383

341384
<b>LLM==>智能体</b>
342385

343386
Lagent 是一个轻量级、开源的基于大语言模型的智能体(agent) 框架,用户可以快速地将一个大语言模型转变为多种类型的智能体。通过 Lagent 框架可以更好的发挥 InternLM 模型的全部性能。
344387

345-
# 检索增强生成
388+
## LLM 部署
389+
390+
常规部署
391+
392+
量化部署
393+
394+
## LLM 微调
395+
396+
不同的微调范式
397+
398+
微调后模型的量化、融合
399+
400+
## LLM RAG
401+
402+
RAG 检索增强生成。
403+
404+
# 工程化
405+
406+
## 向量数据库
407+
408+
[LangChain教程 - 支持的向量数据库列举_langchain支持的向量数据库-CSDN博客](https://blog.csdn.net/fenglingguitar/article/details/142436241)
409+
410+
市面上的向量数据库有很多,这里我们主要学习 LlamaIndex 和 Chroma。
411+
412+
### LlamaIndex
413+
414+
[LlamaIndex - LlamaIndex](https://docs.llamaindex.ai/en/stable/#introduction)
415+
416+
LlamaIndex 是一个上下文增强的 LLM 框架,旨在通过将其与特定上下文数据集集成,增强大型语言模型(LLMs)的能力。它允许您构建应用程序,既利用 LLMs 的优势,又融入您的私有或领域特定信息。LlamaIndex 支持文本、图片等多种数据的向量化存储和检索。
417+
418+
<b>什么是向量化存储?</b>
419+
420+
向量化存储就是指把文本、图像这种数据转换成为<b>向量/特征</b>,存储到特定的向量数据库中,便于快速检索。
421+
422+
<b>如何利用 LlamaIndex 构建向量数据库,并从向量数据库中检索相关信息,一并送入 LLM 中,增强 LLM 的能力</b>
423+
424+
### Chroma
425+
426+
Chroma 是一个开源且轻量级,易于本地部署,专门为检索增强生成 (RAG) 应用设计的向量数据库。不过目前 Chroma 的功能较为基础,缺乏大规模分布式支持;比较适合用于开发和测试阶段的小型项目或个人应用。
427+
428+
快速入门
429+
430+
```python
431+
from langchain.vectorstores import Chroma
432+
from langchain.embeddings.openai import OpenAIEmbeddings
433+
434+
embedding_model = OpenAIEmbeddings()
435+
texts = ["这是一个例子", "另一个例子"]
436+
vectorstore = Chroma.from_texts(texts, embedding_model)
437+
docs = vectorstore.similarity_search("这是查询")
438+
print(docs)
439+
```
440+
441+
## LangChain
442+
443+
[构建检索增强生成(RAG)应用:第一部分 | 🦜️🔗 LangChain 框架](https://python.langchain.ac.cn/docs/tutorials/rag/)
444+
445+
LangChain 提供了一个模块化和适应性强的框架,用于构建各种 NLP 应用程序,包括聊天机器人、内容生成工具和复杂的流程自动化系统。
446+
447+
通过 LangChain,我们可以方便快捷的调用 LLM 的 API 接口,并集成 RAG 增强 LLM。LangChain 内部也集成了一个非常简易的向量数据库 `InMemoryVectorStore`
448+
449+
`InMemoryVectorStore` 将向量数据存储在内存中,提供了快速的访问速度,但不具备数据持久化的能力。这种实现方式适合于数据量较小且需要快速访问的场景,例如原型开发、测试或小型应用。由于数据存储在内存中,一旦程序终止,内存中的数据将会丢失。因此,`InMemoryVectorStore` 不适合需要长期存储和大规模数据处理的生产环境。
450+
451+
## 工程化实现
452+
453+
茴香豆[InternLM/HuixiangDou: HuixiangDou: Overcoming Group Chat Scenarios with LLM-based Technical Assistance](https://github.com/InternLM/HuixiangDou/tree/main)
454+
455+
456+
457+
346458

347459

348460

深度学习系列/机器学习.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1900,6 +1900,125 @@ cr = sm.classification_report(test_y, pred_test_y)
19001900
print(cr)
19011901
```
19021902

1903+
# K近邻算法
1904+
1905+
## 思想介绍
1906+
1907+
- 思想及其简单。比之前学过的朴素贝叶斯还简单。
1908+
- 应用的数学知识非常少(近乎为零)
1909+
- 效果不错
1910+
- 可以解释机器学习算法使用过程中的很多细节问题
1911+
- 现有的很多算法都采用了类似的思想(度量学习)
1912+
1913+
我们拿到的数据是分布在一个空间上的。有两个特征的数据是分布在二维平面空间,三个特征的数据是分布在三维空间,依次类推。我们一般将这个空间称为特征空间。
1914+
1915+
我们来看一下下面这个例子。这是一个肿瘤病人的数据。x轴表示肿瘤大小,y轴表示病人的体质。绿色表示良性肿瘤。红色表示恶性肿瘤。
1916+
1917+
现在,又多了一位病人的数据,我们怎么判断这位病人的肿瘤是良性肿瘤还是恶性肿瘤呢?
1918+
1919+
人工智能的目的是模拟人的思维,期望将其训练成一个某个领域的专家。机器学习作为人工智能的子集,它的目的也是也类似的。如果是交给我们人来判断,我们会怎么做?我们会看它和那一类最相似。
1920+
1921+
这就是 K 近邻算法。看它和哪一类最相似。看几个样本合适呢?看一个样本吗?不靠谱。一般会多看几个样本。这个 K 就表示观察的样本数。
1922+
1923+
准备数据点、label、画图(画散点图)。
1924+
1925+
```python
1926+
# 前面我们一直调用的 api,今天,我们自己手写一个 KNN 算法。
1927+
"""
1928+
我们先梳理下思路
1929+
1.准备好数据
1930+
2.准备模型
1931+
2.1 初始化模型
1932+
2.2 读取数据
1933+
2.3 训练模型
1934+
2.3.1 看样本和那些类别的距离最近。
1935+
2.3.1 怎么判断样本之间的距离呢?
1936+
2.4 预测模型
1937+
"""
1938+
```
1939+
1940+
在二维平面空间,我们怎么计算两个点的距离?欧式距离公式~
1941+
$$
1942+
\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}
1943+
$$
1944+
三维空间呢?
1945+
$$
1946+
\sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2}
1947+
$$
1948+
更高维度呢?
1949+
1950+
就是计算不同样本特征之间的欧拉距离。
1951+
1952+
假设有 $x^{a}$ 和 $x^{b}$ 两个样本,每个样本有 4 个特征。$x^{a}$ 的四个特征分别记为 $x^a_1, x^a_1, x^a_3, x^a_4$,$x^{b}$ 的四个特征分别记为 $x^b_1, x^b_1, x^b_3, x^b_4$
1953+
$$
1954+
\sqrt{(x^a_1-x^b_1)^2+(x^a_2-x^b_2)^2+(x^a_3-x^b_3)^2+(x^a_4-x^b_4)^2}
1955+
$$
1956+
1957+
## 手写 KNN 算法
1958+
1959+
下面,我们来手写下 KNN 算法。
1960+
1961+
```python
1962+
import numpy as np
1963+
nearest = np.argsort(distance) # 拿到distance排序后,原位置对应的排序后的索引。
1964+
k = 6
1965+
topK_y = [ y_train[item] for item in nearest ]
1966+
1967+
from collections import Counter
1968+
votes = Counter(topK_y)
1969+
votes.most_common(1) # (找到票数最多的元素)
1970+
```
1971+
1972+
回顾下 scikit-learn 风格的 API。
1973+
1974+
总结 scikit 风格的 API
1975+
1976+
将上面的代码改造成 scikit-learn 风格的 API。
1977+
1978+
## 使用 KNN 完成手写数字识别分类任务
1979+
1980+
寻找最佳的 k 和 weights
1981+
1982+
## KNN 的超参数
1983+
1984+
KNN 的超参数 k 和 weights、p。有些超参数直接存在依赖关系。只有weights为distance 的时候,p才有用。
1985+
1986+
## 网格搜索
1987+
1988+
超参数一多的话,我们自己编写代码找最佳参数很麻烦。scikit-learn 则提供了一种方便的超参数检索方式 -- 网格搜索。
1989+
1990+
```shell
1991+
param_grid = [
1992+
{'n_neighbors':[1,2,3,4,5], weights='distance', p=[1,2,3]},
1993+
{'n_neighbors':[1,2,3,4,5], weights='nor', p=[1,2,3]},
1994+
]
1995+
```
1996+
1997+
网格搜索是用来找最佳模型的,因此他位于
1998+
1999+
```python
2000+
from sklearn.model_selection import GridSearchCV
2001+
gcv = GridSearchCV(model,)
2002+
# 最佳参数
2003+
gcv.best_estimator_
2004+
# 最佳得分
2005+
gcv.best_score_
2006+
# 最佳参数
2007+
gcv.best_params_ # 代码原则, 不是用户自己传入的 名字_
2008+
2009+
# 拿到最佳的模型
2010+
knn_clf = gcv.best_estimator_
2011+
2012+
# n_jobs ==> 指定多少个核同时处理
2013+
```
2014+
2015+
## 更多的距离定义
2016+
2017+
- 明可夫四距离
2018+
- 向量空间余弦相似度
2019+
- 皮尔森相关系数
2020+
- Jaccard相似系数
2021+
19032022
# 机构笔记
19042023

19052024
## 机器学习

深度学习系列/机器学习实践.md

Lines changed: 0 additions & 118 deletions
This file was deleted.

0 commit comments

Comments
 (0)