深度学习笔记
1. softmax的问题和解决方式
https://zh.d2l.ai/chapter_linear-networks/softmax-regression-concise.html
2. leave one out
在神经网络比较复杂的时候(包括更复杂的模型), 人们把模型视为一个黑盒而去考虑具体特征对输出有什么贡献, 这一问题对应于深度学习的可解释性这一领域, 具体比较简单的方法有’leave one out’, ‘shap’ 等, 具体可以查看相关资料, 这里简单介绍leave one out的想法
把每个特征一个一个地mask掉, 看输出的改变, 对于mask后导致输出改变更大的特征, 认为它的贡献比较大
3.影响模型泛化能力的因素
- 可调整参数的数量。当可调整参数的数量(有时称为自由度)很大时,模型往往更容易过拟合。
- 参数采用的值。当权重的取值范围较大时,模型可能更容易过拟合。(从这里就能看出为啥加l1和l2正则,想让权重变小,所以是限制过拟合)
- 训练样本的数量。即使模型很简单,也很容易过拟合只包含一两个样本的数据集。而过拟合一个有数百万个样本的数据集则需要一个极其灵活的模型。
4.weight decay
weight decay最初是从l2 regularization出来的
image.png
5.dropout
dropout实际上就是加入噪声,增加模型的稳定性,抗扰动性
6.froward propagation and back propagation
7.Gradient vanishing/exploding
- sigmoid可能导致gradient vanishing,这也是为什么大家喜欢relu的原因,缓解gradient vanishing
- 随机初始化是保证在进行优化前打破对称性的关键。
- Xavier初始化的主要思想是要确保神经网络中的权重初始化为一个适当的范围,以防止梯度消失或梯度爆炸问题。Xavier初始化表明,对于每一层,输出的方差不受输入数量的影响,任何梯度的方差不受输出数量的影响。 image.png
8.参数共享??
共享参数通常可以节省内存,并在以下方面具有特定的好处:
- 对于图像识别中的CNN,共享参数使网络能够在图像中的任何地方而不是仅在某个区域中查找给定的功能。
- 对于RNN,它在序列的各个时间步之间共享参数,因此可以很好地推广到不同序列长度的示例。
- 对于自动编码器,编码器和解码器共享参数。 在具有线性激活的单层自动编码器中,共享权重会在权重矩阵的不同隐藏层之间强制正交。
9.Global Interpreter Lock
全局解释器锁(Global Interpreter Lock,简称GIL)是Python解释器中的一个特性,它对多线程程序的执行产生了一些限制。GIL是一种互斥锁,用于确保在任何给定时间点,Python解释器只能执行一个线程的代码。
以下是关于全局解释器锁的一些重要信息:
存在的原因: GIL的存在是为了简化Python解释器的实现,并提高多线程编程的安全性。它确保了同一时刻只有一个线程能够执行Python字节码。
影响多线程并发性能: 由于GIL的存在,多线程Python程序在多核CPU上不能充分利用多核的性能。这是因为无论有多少个线程,只有一个线程能够真正运行Python字节码,其他线程会被阻塞。因此,Python中的多线程通常不适用于CPU密集型任务。
适用场景: GIL对I/O密集型任务的影响较小,因为在I/O操作期间,解释器可以释放GIL,允许其他线程执行。因此,多线程在处理并发的I/O操作时仍然有用。
多进程替代方案: 对于需要充分利用多核CPU的任务,通常更推荐使用多进程而不是多线程。每个进程都有自己的Python解释器,不受GIL的限制,因此可以并行运行在不同核上。
影响解释器扩展: GIL也会影响解释器扩展模块的设计。如果一个C语言编写的扩展模块在某个函数中持有GIL,那么其他Python线程在调用这个扩展模块的函数时会被阻塞。
总之,GIL是Python解释器的一种设计选择,它在某些情况下可能限制了多线程性能,尤其是对于CPU密集型任务。因此,在编写Python程序时,需要根据任务的特性来选择合适的并发模型,有时候多进程可以是更好的选择。
10.卷积计算
https://zhuanlan.zhihu.com/p/29119239
11. batch_size
泛化能力:小批量训练(较小的 batch_size)可以帮助模型更好地泛化到新的数据。这是因为小批量训练通常引入了更多的随机性和噪声,有助于模型避免过拟合。但小批量训练可能需要更多的训练迭代才能收敛。
11.NiN 模型优化点
LeNet、AlexNet和VGG都有一个共同的设计模式:通过一系列的卷积层与汇聚层来提取空间结构特征;然后通过全连接层对特征的表征进行处理。 AlexNet和VGG对LeNet的改进主要在于如何扩大和加深这两个模块。 或者,可以想象在这个过程的早期使用全连接层。然而,如果使用了全连接层,可能会完全放弃表征的空间结构。 网络中的网络 (NiN )提供了一个非常简单的解决方案:在每个像素的通道上分别使用多层感知机,即1*1卷积,channel数目不变。
所谓1×1卷积不改变表征的空间结构,单纯对同一像素不同通道上的表征进行线性组合。这里提醒我们,之前的3×3卷积也实现了同一区域不同通道上的表征进行线性组合。
1 ×1卷积层在NiN模型中起到了重要作用。它们可以增加网络的非线性能力,同时保持感受野的大小不变。还可以用于减少特征图的数量,从而减少计算量。删除一个1 × 1卷积层会影响模型的精度,因为它会减少模型的非
线性能力和特征提取能力。