1前面的一些QA
1.1 reshape和view的差别
reshape的地址没有变(所以b要是改了的话,a也改了),view拷贝了一份。
1.2 detach
还是不太理解
2. 前置知识
2.1 矩阵计算
亚导数,将导数扩展到不可微的地方
矢量求导
(大概知道它们后面长什么样)
内积比较奇怪orz
分子布局
一般用分子布局方法
向量关于向量的求导
上图的解释:
自己对自己求导得到一个I矩阵,有些公式挺重要的。
2.2 自动求导
还不太懂orz
2.3 基础优化算法
梯度下降
小批量随机梯度下降(SGD)
·计算整个训练数据的梯度太昂贵了
DNN模型需要几分钟到几小时
批量值太大,(内存消耗太大了)浪费计算资源
批量值太小,难以充分利用计算资源
总结
- 梯度下降通过不断沿着反梯度方向更新参数求解
- SGD是深度学习的默认求解算法
- 两个重要的超参数是批量大小和学习率
2.4 环境配置
!pip install d2l==0.14.
2.5 模型选择+过拟合和欠拟合
2.5.1 训练误差和泛化误差
训练误差:模型在训练数据上的误差
泛化误差:模型在新数据上的误差
2.5.2 验证数据集、测试数据集的分配
验证数据集:可用来调参
测试数据集: 只是能用1次,最终的,不允许再学了,相当于高考了(笑)
一般数据集不够用的话,把70%作为训练数据集,把30%作为测试数据集。对70%的训练数据集可以采取k折交叉验证的方法。
2.5.3 k-则交叉验证
在没有足够多数据时使用(这是常态)
算法:
- 将训练数据分割成k块
- for i=1,…,K
- 使用第i块作为验证数据集,其余的作为训练数据集
- 报告k个验证集误差的平均
- 常用:k=5或10
2.5.4 过拟合和欠拟合
模型容量
- 拟合各种函数的能力
- 低容量的模型难以拟合训练数据
- 高容量的模型可以记住所有的训练数据
VC维
- 统计学习理论的一个核心思想
- 对于一个分类模型,VC等于一个最大的数据集的大小,不管如何给定标号,都存在一个模型来对它进行完美分类
VC维度的效用
·提供理论解释模型的工作原理
·限制了训练误差和泛化误差之间的差距
在深度学习的实践中很少使用
·边界过于宽松
·难以计算深度神经网络的VC维数
·其他统计学习理论工具也是如此
2.6 权重衰退
2.6.1 使用均方范数作为硬性限制
限不限制b都差不多
2.6.2 使用均方范数作为柔性限制
这个\lambda使得w往下拉,使得模型的复杂性变低。
参数更新法则
解释:每次把W_t的值变小一点点,因为(1-n\lambda,在减一下原本的梯度方向。
2.6.3 代码
2.6.4 QA
3. 方法
3.1 丢弃法
3.1.1 使用动机
一个好的模型需要对输入数据的扰动鲁棒。
- 使用有噪音的数据=Tikhonov正则,避免模型过拟合化
- 丢弃法:在层之间加噪音
3.1.2 使用方法![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5d33d26f7127e4b9083c4a002403b97d.png)
推理中的丢弃法
- 正则项只在训练中使用;他们影响模型参数的更新
- 在推理过程中,丢弃法直接返回输入
h=dropout(h)
- 这样也能保证确定性的输出,现在主流的话,把dropout当做一个正则项来看。