【d2l.ai】经典深度学习网络
多层感知机
多层感知机的简洁实现
1 | import torch |
模型选择、欠拟合和过拟合
训练误差:训练数据集上计算得到的误差
泛化误差:(对于其他数据集)在无限多数据样本中模型误差的期望
模型选择
训练集:训练模型,获取参数
验证集:调整模型超参数,并选取最佳参数
测试集:验证模型,训练和验证的过程不能使用测试集
当训练数据稀缺,采用 K 折交叉验证,分出 K 个子集,进行 K 次训练,每次使用不同的子集作为验证集,其余 K -1 个子集作为训练集
总结
模型容量需要匹配数据复杂度
统计机器学习提供数学工具来衡量模型复杂度
实际中一般靠观察训练误差和验证误差
神经网络计算
层和块
- 一个块可以由许多层组成;一个块可以由许多块组成。
- 块可以包含代码。
- 块负责大量的内部处理,包括参数初始化和反向传播。
- 层和块的顺序连接由
Sequential
块处理。
参数管理
- 访问参数,用于调试、诊断和可视化;
- 参数初始化;
- 在不同模型组件间共享参数。
参数是复合的对象,包含属性、值等等
1 | nn.init.normal_(m.weight, mean=0, std=0.01) # 替换函数 |
CNN 卷积神经网络
卷积神经网络(convolutional neural networks,CNN)是机器学习利用自然图像中一些已知结构的创造性方法。
6.1 从全连接层到卷积
两个原则:平移不变性、局部性
重新考量全连接层:权重变为四维,输入输出变为矩阵
6.2 图像卷积
6.3 填充和步幅
假设输入形状为
填充
填充多少行,输出多多少行
通常情况,需要填充
步幅
通常为了高效计算或者缩减采样次数
6.4 多输入多输出通道
6.5 汇聚层
也叫池化层
6.6 卷积神经网络(LeNet)
1 | import torch |
Modern CNN
深度卷积神经网络 AlexNet
- 本质上是更深更大的 LeNet
VGG 使用块的网络
网络中的网络 NiN
- 对每个像素的位置独立使用全连接层
1 | import torch |
残差网络 ResNet
确保新的映射包含原有的映射,防止网络是退化的
RNN 循环神经网络
循环神经网络可以很好的处理序列信息
序列模型
- 研究的是序列预测问题:
- 两个策略:自回归模型和因变量自回归模型
- 马尔可夫模型
- 假设当前只跟少数数据相关,简化模型
- 潜变量模型
- 潜变量概括历史信息
文本预处理
- 主要预处理步骤:拆分为次元,建立词表,映射到数字索引
- tokenize nlp 中最常见的操作
- 中文的分词使用 jieba
语言模型和数据集
- 目标:估计联合概率
- 面对问题:对文档或者词元序列进行建模
- 通过计数
- 常用统计方法:n 元语法,基于马尔可夫的统计模型
- 随机采样
- 基于随机的偏移量,不重叠、不相邻地划分序列
- corpus, batch_size, num_steps:整个序列、小批量的大小,每一个子序列的长度
- 顺序分区
- 保证两个相邻的小批量中的子序列在原始序列上也是相邻的
循环神经网络
对于序列模型的神经网络,RNN
- 输出、隐变量、观察
- 隐变量和观察一起作为自变量,控制输出的隐变量
- o_t ~ h_t
- H_t ~ h_t-1, x_t-1
- 拿掉 h_t-1 退化为 MLP
- 输出以及隐变量(的计算)在观察之前
- 观察是用于更新下一个单元,相当于观察既是输入也是标签
- 有点像因果系统(?),包含了时间信息
- 困惑度
- 衡量一个语言模型的好坏可以用平均交叉熵
- 困惑度取指数,来衡量,是平均每次可能选项
- 困惑度最好值是 1
- 梯度剪裁
- RNN 的应用
- 文本生成:一个生多个
- 文本分类:多个生一个
- 问答、翻译:同时多个生成同时多个,有时间先后
- Tag 生成:对每个词进行生成
评论
评论插件加载失败
正在加载评论插件