跳至主要內容
动手学深度学习

跟沐神学 吼吼吼,上学不跟沐神好好学,上班之后来换债了

原文里的conda,这里会换成uv,如果遇到问题再说吧,uv实在是太快了

1. 深度学习基础

1.1 环境安装

这里推荐是用GPU,我用的MAC,所以先用CPU顶一下,后面遇到需要GPU的地方再去租云GPU吧

# 新建项目
mkdir ml_learn
cd ml_learn

# uv初始化
uv init

# 添加环境
uv add jupyter
uv add torch
uv add pandas
uv add matplotlib
uv add d2l
uv add torchvision


# 下载D2L
curl https://zh-v2.d2l.ai/d2l-zh-2.0.0.zip -o d2l-zh.zip
unzip d2l-zh.zip && rm d2l-zh.zip

pptg大约 3 分钟
注意力机制 和 Transformer

1. 注意力机制

非参注意力池化层

Nadaraya-Watson核回归

https://www.bilibili.com/video/BV1xoW4zaEke/?spm_id_from=333.1387.favlist.content.click&vd_source=981e3c11cfc628a411ae06b92a0546e9

Q: 查询向量,当前Token关注什么 K: 键向量,当前Token能给其它Token提供什么信息 V: 值向量,这个词实际包含的信息内容


pptg小于 1 分钟
进程管理

1. 进程和线程

1.1 进程

代码经过编译后,会生成可执行文件。当执行这个可执行文件时,它会被加载到内存中,接着CPU会执行程序中的指令。这个运行中的程序,就称之为进程(Process)

在一个进程运行过程中,难免会去读磁盘、网络的IO,这个时间相对是比较长的。此时,CPU 不需要阻塞等待数据的返回,而是去执行另外的进程。当硬盘数据返回时,CPU 会收到个中断,于是 CPU 再继续运行这个进程。

1.1.1 进程的状态

进程不是一直运行的,一个进程至少具备五种基本状态,即创建状态、运行状态、就绪状态、阻塞状态、结束状态


pptg大约 6 分钟
大模型幻觉

1. 什么是大模型幻觉

大模型幻觉是指大型语言模型(LLMs)生成的内容与现实世界事实或用户输入不一致的现象。这种现象可以分为两大类:

  • 事实性幻觉:模型生成的内容与可验证的现实世界事实不一致。
  • 忠实性幻觉:模型生成的内容与用户的指令或上下文不一致。

2. 产生幻觉的原因

  • 训练数据问题
    • 数据质量低:数据中可能包含错误、噪声或矛盾信息,导致模型学习到不准确的模式
    • 数据覆盖不足:模型可能缺乏足够的上下文或领域知识, 导致在生成内容时出现不准确或不一致的情况
    • 数据时效性:模型无法回答最新事件的问题,因为训练数据可能已经过时
  • 模型架构问题
    • 架构缺陷:比如可能无法处理长距离的依赖关系
    • 训练目标不对齐:LLM的训练过程大多数是基于Next Token Prediction的方式进行预训练, 因此,它只能保证文本生成的流畅性,而无法辨别所遇到的信息是否真实或准确。
  • 推理问题:上下文质量差、不充分

pptg大约 1 分钟
python异步编程

1. 关键字 async、await

python中,asyncawait两个关键字用于定义异步操作。

  • async: 定义异步函数,表明该函数是协程,可以在其中使用await来等待其他异步操作完成。异步函数的执行不会阻塞事件循环,而是会立即返回一个协程对昂。
  • await: 用于在异步函数内等待其他协程执行完成/。遇到await时,事件循环会挂起当前的协程,并执行其它任务,直到协程完成后再恢复。

pptg大约 7 分钟
python 字典原理

1. Python字典

Python字典(dict)是一种可变容器模型,用于存储键值对(key-value)映射关系。它是Python中最重要、最常用的数据结构之一。

主要特性:

  • 无序性(Python 3.7+开始保持插入顺序)
  • 键必须是可哈希的不可变类型
  • 值可以是任意Python对象
  • 动态扩容,自动调整大小
  • 提供快速的查找、插入和删除操作

2. 实现原理

  • 计算哈希值:对键调用hash()函数得到哈希值
  • 计算索引:index = hash(key) & (mask),其中mask = table_size - 1
  • 处理冲突:使用开放定址法中的伪随机探测
  • 插入/查找:在计算的位置开始探测,直到找到空槽或匹配的键

pptg大约 3 分钟
如何写好提示词

1. Prompt 到底用 # 还是 <></>

目前的开源项目,存在两种主流的prompt标记符号。下面以两个自动优化提示词的项目为例子:

  • \#: prompt_optimizer
  • <>: coze_loop

个人感觉还是<>效果更好一点,可以明确的划定一个指令块的区间,只是可读性不太友好

2. 为什么LLM的对话模型分为system、user、assistant?


pptg大约 7 分钟
python GC

1. 垃圾回收机制

python的垃圾回收机制主要分为三大块:

  • 引用计数法: 最基本的回收方法
  • 标记清除法: 用于回收循环引用的部分
  • 分代回收法: 用于解决频繁扫描“标记清除列表”的性能问题

1.1 引用计数法

python通过引用计数器来进行垃圾回收。每个对象的基础结构里都维护了引用计数字段,如果他的引用数量是0,则会触发回收机制。

// 这是Python对象在C层面的基础结构
typedef struct _object {
    Py_ssize_t ob_refcnt;  // 引用计数
    PyTypeObject *ob_type; // 类型指针
    // ... 其他字段根据类型不同而变化
} PyObject;

pptg大约 4 分钟
python元类

1. 什么是元类

在python中,一切皆对象,包括类本身。元类是创建类对象的类。就像类是用来创建实例的模板一样,元类是创建类的模板。

class MyClass:
    pass

obj = MyClass()

print(f"实例的类型: {type(obj)}")        # <class '__main__.MyClass'>
print(f"类的类型: {type(MyClass)}")      # <class 'type'>
print(f"type的类型: {type(type)}")       # <class 'type'>

# 所以:
# 实例 obj 是 MyClass 类的对象
# 类 MyClass 是 type 类的对象
# 元类 type 是 type 类的对象(type是自身的实例)

pptg大约 4 分钟
python上下文管理器和with

1. 什么是上下文管理器

上下文管理器(Context Manager)是Python中用于管理资源(如文件、数据库连接、锁等)的对象,它定义了在进入和退出代码块时要执行的操作。上下文管理器通过实现 __enter__()__exit__() 方法来工作

2. with的作用

with语句提供了一种优雅的方式来管理资源,确保资源被正确初始化和清理,即使在发生异常的情况下也是如此。它的主要优势包括:

  • 自动资源管理:自动获取和释放资源
  • 异常安全:即使在with块内发生异常,清理代码也会被执行
  • 代码简洁:避免了冗长的try...finally
  • 可读性强:清晰地标出了资源的作用范围

pptg大约 3 分钟