深度学习笔记

2023-11-26  本文已影响0人  DaiMorph

1. softmax的问题和解决方式

https://zh.d2l.ai/chapter_linear-networks/softmax-regression-concise.html

image.png

2. leave one out

在神经网络比较复杂的时候(包括更复杂的模型), 人们把模型视为一个黑盒而去考虑具体特征对输出有什么贡献, 这一问题对应于深度学习的可解释性这一领域, 具体比较简单的方法有’leave one out’, ‘shap’ 等, 具体可以查看相关资料, 这里简单介绍leave one out的想法
把每个特征一个一个地mask掉, 看输出的改变, 对于mask后导致输出改变更大的特征, 认为它的贡献比较大

3.影响模型泛化能力的因素

4.weight decay

weight decay最初是从l2 regularization出来的

image.png
image.png

5.dropout

dropout实际上就是加入噪声,增加模型的稳定性,抗扰动性

6.froward propagation and back propagation

推导过程

7.Gradient vanishing/exploding

原因是多个矩阵相乘,可能导致非常小或者非常大

8.参数共享??

共享参数通常可以节省内存,并在以下方面具有特定的好处:

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卷积层会影响模型的精度,因为它会减少模型的非
线性能力和特征提取能力。

12. batch norm and layer norm

image.png
上一篇下一篇

猜你喜欢

热点阅读