【深度学习】知识汇总
+【深度学习】DeepL知识汇总
@@ -288,6 +290,10 @@
深度学习知识汇总
href="https://link.zhihu.com/?target=https%3A//blog.csdn.net/xys430381_1/article/details/80680167">https://link.zhihu.com/?target=https%3A//blog.csdn.net/xys430381_1/article/details/80680167优化器 https://zhuanlan.zhihu.com/p/78622301
+BN https://zhuanlan.zhihu.com/p/93643523
+神经网络权重初始化 https://blog.csdn.net/kebu12345678/article/details/103084851
https://zhuanlan.zhihu.com/p/667048896
逻辑回归和线性回归
@@ -326,6 +332,67 @@实现参数稀疏
残差网络的出现解决了构建深层神经网络时网络退化即梯度消失/爆炸的问题。残差结构主要设计有两个,快捷连接(shortcut connection)和恒等映射(identity mapping),快捷连接使得残差变得可能,而恒等映射使得网络变深,恒等映射主要有两个:跳跃连接和激活函数 +Adam与SGD的区别
+SGD缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定。
+Adam的优点主要在于:
+-
+
- 考虑历史步中的梯度更新信息,能够降低梯度更新噪声。 +
- 此外经过偏差校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。 +
但是Adam也有其自身问题:可能会对前期出现的特征过拟合,后期才出现的特征很难纠正前期的拟合效果。二者似乎都没法很好避免局部最优问题。
+softmax如何防止指数上溢
+在计算softmax函数时,指数上溢是一个常见的问题,特别是当输入的数值非常大时,指数函数的计算结果可能会溢出。为了解决这个问题,可以采取以下几种方法:
+-
+
数值稳定性技巧:为了避免指数函数的溢出,可以将输入的数值减去一个常数,使得输入相对较小,从而减少指数函数的值。通常,可以通过找到输入向量中的最大值,并将所有元素减去这个最大值来实现数值稳定性。
+ +这样做可以保持相对稳定,防止指数函数的溢出。
+利用性质:softmax函数的分子和分母同时除以一个相同的常数并不会改变函数的值。因此,我们可以在计算softmax时,将所有输入向量的值都减去向量中的最大值,然后进行softmax计算。
+
以上两种方法都可以有效地避免指数上溢的问题,并保持softmax函数的数值稳定性。在实际应用中,通常会使用这些技巧来计算softmax函数,以确保模型的稳定性和数值精度。
+训练过程中发现loss快速增大应该从哪些方面考虑?
+-
+
-
+
- 学习率过大 +
- 训练样本中有坏数据 +
+
+model.eval vs和torch.no_grad区别
+-
+
- model.eval(): +依然计算梯度,但是不反传;dropout层保留概率为1;batchnorm层使用全局的mean和var +
- with torch.no_grad: 不计算梯度 +
+
+
+Dropout和Batch norm能否一起使用?
+可以,但是只能将Dropout放在Batch +norm之后使用。因为Dropout训练时会改变输入X的方差,从而影响Batch +norm训练过程中统计的滑动方差值;而测试时没有Dropout,输入X的方差和训练时不一致,这就导致Batch +norm测试时期望的方差和训练时统计的有偏差。
+
+梯度消失和梯度爆炸
+梯度消失的原因和解决办法
+(1)隐藏层的层数过多
+反向传播求梯度时的链式求导法则,某部分梯度小于1,则多层连乘后出现梯度消失
+(2)采用了不合适的激活函数
+如sigmoid函数的最大梯度为1/4,这意味着隐藏层每一层的梯度均小于1(权值小于1时),出现梯度消失。
+解决方法:1、relu激活函数,使导数衡为1 2、batch norm +3、残差结构
+梯度爆炸的原因和解决办法
+(1)隐藏层的层数过多,某部分梯度大于1,则多层连乘后,梯度呈指数增长,产生梯度爆炸。
+(2)权重初始值太大,求导时会乘上权重
+解决方法:1、梯度裁剪 2、权重L1/L2正则化 3、残差结构 4、batch +norm
+
+
pytorch实现自注意力和多头注意力
+自注意力
+1 |
|
多头注意力机制
+1 |
|
Batch Normalization
+1 |
|