CONTENTS
目 录
前言
第1章 AIGC概述1
1.1 AIGC的主要技术1
1.1.1 语言生成方面的技术2
1.1.2 视觉生成方面的技术3
1.1.3 多模态方面的技术3
1.2 生成模型与判别模型4
1.2.1 生成模型4
1.2.2 判别模型5
1.3 生成模型的原理5
1.3.1 生成模型的框架6
1.3.2 生成模型的概率表示6
1.3.3 生成模型的目标函数7
1.3.4 生成模型的挑战及解决方法8
1.4 表示学习9
1.4.1 表示学习的直观理解10
1.4.2 表示学习的常用方式12
1.4.3 表示学习与特征工程的区别13
1.4.4 图像的表示学习13
1.4.5 文本的表示学习14
1.4.6 多模态的表示学习15
1.4.7 表示学习的融合技术16
1.4.8 如何衡量表示学习的优劣17
1.5 表示学习的逆过程18
第2章 深度神经网络21
2.1 用PyTorch构建深度神经网络21
2.1.1 神经网络的核心组件21
2.1.2 构建神经网络的主要工具22
2.1.3 构建模型24
2.1.4 训练模型24
2.2 用PyTorch实现神经网络实例25
2.2.1 准备数据26
2.2.2 可视化源数据27
2.2.3 构建模型28
2.2.4 训练模型29
2.3 用PyTorch Lightning实现神经网络实例31
2.4 构建卷积神经网络35
2.4.1 全连接层36
2.4.2 卷积层36
2.4.3 卷积核39
2.4.4 步幅42
2.4.5 填充43
2.4.6 多通道上的卷积43
2.4.7 激活函数48
2.4.8 卷积函数48
2.4.9 转置卷积50
2.4.10 特征图与感受野53
2.4.11 卷积层如何保留图像的空间信息53
2.4.12 现代经典网络54
2.4.13 可变形卷积59
2.5 构建循环神经网络60
2.5.1 从神经网络到有隐含状态的循环神经网络60
2.5.2 使用循环神经网络构建语言模型62
2.5.3 多层循环神经网络63
2.5.4 现代经典循环神经网络63
2.6 迁移学习64
2.6.1 迁移学习简介65
2.6.2 微调预训练模型65
2.7 深度学习常用的归一化方法68
2.7.1 归一化方法简介68
2.7.2 归一化的原理70
2.7.3 归一化的代码实现72
2.8 权重初始化77
2.8.1 为何要进行权重初始化77
2.8.2 权重初始化方法78
2.9 PyTorch常用的损失函数79
2.10 深度学习常用的优化算法80
2.10.1 传统梯度更新算法80
2.10.2 批量随机梯度下降法82
2.10.3 动量算法83
2.10.4 Nesterov动量算法85
2.10.5 AdaGrad算法87
2.10.6 RMSProp算法89
2.10.7 Adam算法90
2.10.8 各种优化算法比较92
第3章 变分自编码器94
3.1 自编码器简介94
3.1.1 构建自编码器95
3.1.2 构建编码器96
3.1.3 构建解码器97
3.1.4 定义损失函数及优化器98
3.1.5 分析自编码器98
3.2 变分自编码器简介100
3.2.1 变分自编码器的直观理解100
3.2.2 变分自编码器的原理102
3.3 构建变分自编码器105
3.3.1 构建编码器106
3.3.2 构建解码器107
3.3.3 损失函数 108
3.3.4 分析变分自编码器109
3.4 使用变分自编码器生成面部图像110
3.4.1 编码器111
3.4.2 解码器111
3.4.3 进一步分析变分自编码器112
3.4.4 生成新头像113
第4章 生成对抗网络114
4.1 GAN模型简介114
4.1.1 GAN的直观理解114
4.1.2 GAN的原理115
4.1.3 GAN的训练过程116
4.2 用GAN从零开始生成图像117
4.2.1 判别器117
4.2.2 生成器117
4.2.3 损失函数118
4.2.4 训练模型118
4.2.5 可视化结果120
4.3 GAN面临的问题121
4.3.1 损失振荡121
4.3.2 模型坍塌的简单实例122
4.3.3 GAN模型坍塌的原因123
4.3.4 避免GAN模型坍塌的方法124
4.4 WGAN125
4.4.1 改进方向和效果125
4.4.2 Wasserstein距离的优越性127
4.4.3 WGAN的损失函数代码127
4.4.4 WGAN的其他核心代码128
4.5 WGAN-GP129
4.5.1 权重裁剪的隐患129
4.5.2 梯度惩罚损失130
4.5.3 WGAN-GP的训练过程131
4.5.4 WGAN-GP的损失函数代码132
第5章 StyleGAN模型134
5.1 ProGAN简介135
5.2 StyleGAN架构137
5.3 StyleGAN的其他算法140
5.4 用PyTorch从零开始实现StyleGAN141
5.4.1 构建生成网络141
5.4.2 构建判别器网络147
5.4.3 损失函数150
5.5 StyleGAN的最新进展151
5.5.1 StyleGAN2简介151
5.5.2 StyleGAN3简介152
5.5.3 StyleGAN与DeepDream模型的异同153
5.6 DragGAN简介153
第6章 风格迁移154
6.1 DeepDream模型154
6.1.1 DeepDream的原理154
6.1.2 DeepDream算法的流程155
6.1.3 使用PyTorch实现DeepDream156
6.2 普通风格迁移159
6.2.1 内容损失160
6.2.2 风格损失161
6.2.3 使用PyTorch实现神经网络风格迁移163
6.3 使用PyTorch实现图像修复167
6.3.1 网络结构167
6.3.2 损失函数168
6.3.3 图像修复实例169
6.4 风格迁移与StyleGAN模型171
第7章 注意力机制173
7.1 注意力机制简介173
7.1.1 两种常见的注意力机制174
7.1.2 来自生活的注意力174
7.1.3 注意力机制的本质175
7.2 带注意力机制的编码器-解码器架构177
7.2.1 引入注意力机制178
7.2.2 计算注意力分配概率分布值180
7.3 自注意力182
7.3.1 单层自注意力182
7.3.2 多层自注意力185
7.3.3 多头自注意力186
7.3.4 自注意力与卷积网络、循环网络的比较189
7.4 如何训练含自注意力的模型190
7.4.1 将标记向量化191
7.4.2 添加位置编码191
7.4.3 逆嵌入过程192
7.5 交叉注意力192
7.5.1 Transformer解码器中的交叉注意力193
7.5.2 Stable Diffusion解码器中的交叉注意力193
7.5.3 交叉注意力与自注意力的异同194
第8章 Transformer模型196
8.1 Transformer模型的直观理解196
8.1.1 顶层设计197
8.1.2 嵌入和向量化199
8.1.3 位置编码200
8.1.4 自注意力201
8.1.5 掩码205
8.1.6 多头注意力205
8.1.7 残差连接207
8.1.8 层归一化209
8.1.9 解码器的输出210
8.1.10 多层叠加211
8.2 用PyTorch从零开始实现Transformer212
8.2.1 构建编码器-解码器架构212
8.2.2 构建编码器213
8.2.3 构建解码器215
8.2.4 构建多头注意力217
8.2.5 构建前馈神经网络层220
8.2.6 预处理输入数据220
8.2.7 构建完整网络223
8.2.8 训练模型224
8.2.9 一个简单实例228
第9章 大语言模型231
9.1 大语言模型简介231
9.2 可视化GPT原理233
9.2.1 GPT简介233
9.2.2 GPT的整体架构233
9.2.3 GPT模型架构234
9.2.4 GPT-2与BERT的多头注意力的区别235
9.2.5 GPT-2的输入235
9.2.6 GPT-2 计算遮掩自注意力的详细过程236
9.2.7 GPT-2的输出238
9.2.8 GPT-1与GPT-2的异同238
9.3 GPT-3简介239
9.4 可视化BERT原理241
9.4.1 BERT的整体架构241
9.4.2 BERT的输入243
9.4.3 遮掩语言模型244
9.4.4 预测下一个句子245
9.4.5 微调245
9.4.6 使用特征提取方法247
9.5 用PyTorch实现BERT248
9.5.1 BERTEmbedding类的代码248
9.5.2 TransformerBlock类的代码249
9.5.3 构建BERT的代码250
9.6 用GPT-2生成文本251
9.6.1 下载GPT-2预训练模型251
9.6.2 用贪心搜索进行解码253
9.6.3 用束搜索进行解码254
9.6.4 用采样进行解码256
9.6.5 用Top-K采样进行解码258
9.6.6 用Top-p采样进行解码260
9.6.7 用综合方法进行解码261
第10章 ChatGPT模型263
10.1 ChatGPT简介263
10.1.1 ChatGPT核心技术264
10.1.2 InstructGPT和ChatGPT的训练过程265
10.1.3 指令微调267
10.1.4 ChatGPT的不足268
10.2 人类反馈强化学习268
10.2.1 工作原理268
10.2.2 工作流程269
10.2.3 PPO算法270
10.2.4 评估框架273
10.2.5 创新与不足273
10.3 Codex274
10.3.1 对源代码进行预处理274
10.3.2 处理代码块277
10.3.3 将源代码数字化277
10.3.4 衡量指标278
10.3.5 Codex的逻辑推理能力是如何形成的280
10.3.6 CodeGeeX的主要功能281
10.3.7 CodeGeeX模型架构282
10.4 如何将LaTeX数学公式语言转化为自然语言283
10.5 使用PPO算法优化车杆游戏283
10.5.1 构建策略网络284
10.5.2 构建价值网络285
10.5.3 构建PPO模型285
10.5.4 定义超参数287
10.5.5 实例化模型287
10.5.6 训练模型288
10.5.7 可视化迭代289
10.6 使用RLHF算法提升GPT-2性能289
10.6.1 基于中文情绪识别模型的正向评论生成机器人290
10.6.2 对评论进行人工打分294
10.6.3 标注排序序列替代直接打分294
10.7 ChatGPT如何提升思维链推断能力300
10.8 ChatGPT如何提升模型的数学逻辑推理能力301
第11章 扩散模型303
11.1 扩散模型简介303
11.1.1 DDPM 304
11.1.2 扩散概率模型304
11.1.3 正向扩散过程305
11.1.4 反向扩散过程306
11.1.5 正向扩散过程的数学细节306
11.1.6 反向扩散过程的数学细节308
11.1.7 训练目标和损失函数309
11.2 使用PyTorch从零开始编写 DDPM312
11.2.1 定义超参数312
11.2.2 创建数据集312
11.2.3 创建数据加载器314
11.2.4 可视化数据集314
11.2.5 DDPM架构315
11.2.6 用残差块取代双卷积模块的优势316
11.2.7 创建扩散类317
11.2.8 正向扩散过程318
11.2.9 可视化正向扩散过程318
11.2.10 基于训练算法和采样算法的训练319
11.2.11 从零开始训练DDPM321
11.2.12 使用DDPM生成图像323
第12章 多模态模型325
12.1 CLIP简介325
12.1.1 CLIP如何将图像与图像描述进行对齐326
12.1.2 CLIP如何实现零样本 分类328
12.1.3 CLIP原理328
12.1.4 从零开始运行CLIP330
12.1.5 CLIP应用335
12.2 Stable Diffusion模型335
12.2.1 Stable Diffusion模型的直观理解335
12.2.2 Stable Diffusion模型的原理336
12.3 从零开始实现Stable Diffusion337
12.3.1 文生图337
12.3.2 根据提示词修改图341
12.4 Stable Diffusion 升级版简介343
12.4.1 Stable Diffusion 2.0344
12.4.2 Stable Diffusion XL345
12.5 DALL·E模型346
12.5.1 DALL·E简介346
12.5.2 DALL·E 2简介346
12.5.3 DALL·E 2与GAN的异同348
12.5.4 DALL·E 3简介348
第13章 AIGC的数学基础350
13.1 矩阵的基本运算350
13.1.1 矩阵加法351
13.1.2 矩阵点积351
13.1.3 转置351
13.1.4 矩阵的阿达马积352
13.1.5 行列式352
13.2 随机变量及其分布353
13.2.1 从随机事件到随机变量354
13.2.2 离散型随机变量及其分布355
13.2.3 连续型随机变量及其分布357
13.2.4 随机变量的分布函数359
13.2.5 多维随机变量及其分布361
13.2.6 随机变量的数字特征369
13.2.7 随机变量函数的分布371
13.3 信息论377
13.3.1 信息量377
13.3.2 信息熵377
13.3.3 条件熵378
13.3.4 互信息378
13.3.5 KL散度379
13.3.6 交叉熵379
13.3.7 JS散度383
13.3.8 Wasserstein距离383
13.3.9 困惑度384
13.4 推断384
13.4.1 极大似然估计385
13.4.2 极大后验概率估计390
13.4.3 EM算法393
13.4.4 变分推断404
13.4.5 马尔可夫链蒙特卡罗随机采样405
13.5 强化学习418
13.5.1 强化学习基本概念418
13.5.2 强化学习基础算法425
13.5.3 策略梯度427