深度学习笔记

编辑 / deep learning / 发布于2022-09-08 / 更新于2023-03-16 / 阅读 366

Desktop Screenshot 2022.09.08 - 00.08.18.51

  • model bias : 模型太过简单,不存在合适的参数来应该拟合所有数据
  • 判断是不是 model bias : 先使用一个比较小的网络,甚至是线性模型或者svm,来看看会得到什么样的loss。如果model的loss大于这些简单model的loss,这就是优化问题,不是model的问题。

局部极小值和鞍部

梯度为0 可以称为 critical point, 可能是局部极小值(local minma),也可能是鞍部(saddle point)

跳出鞍部:

  • 利用Hessian矩阵,判断是否为鞍点,因为,Hessian在鞍点具有正负特征值,而在局部最小值点正定。
  • 随机梯度,相当于给正确的梯度加了一点noise
  • 增加偶尔的随机扰动

优化方法

Momentum

Desktop Screenshot 2022.09.09 - 00.21.52.29

gg是梯度,mm是参数优化变化的值,λ\lambdaη\eta 是超参数。

进行参数优化时,不止使用梯度下降的值,一次迭代采用的值为当前点梯度下降的值加上参数优化变化的值。

另外有资料也下面式子表示,本质上是一样的
mt+1=βmt(1β)gtm^{t+1} = \beta m^t - (1-\beta)g^t

Adaptive Learning Rete

优化函数:θit+1=θitηgit\theta_i^{t+1} =\theta_i^{t} - \eta g_i^t
θit\theta_i^{t} 是模型中第 i 个参数在 t 时刻的值
η\eta 是学习率
gitg_i^t 是第 i 个参数在 t 时刻梯度的值

image

训练时,不同参数的梯度值是不一样的,如果给定同样的学习率可能会发生震荡,会在梯度小的地方变化慢,梯度大的地方变化快,这样就会在梯度变化快的方向上来回震荡,但在梯度下降慢的方向上变化很慢,如同上图中国你的蓝色线条

Root mean square

优化函数:θit+1=θitησitgit\theta_i^{t+1} =\theta_i^{t} -\frac{\eta }{\sigma_i^t }g_i^t
σit=1t+1k=0t(gik)2\sigma_i^t = \sqrt{\frac{1}{t+1} \sum_{k=0}^{t}{(g_i^k)}^2 }
这样每个参数的学习率就跟每个参数的梯度相关了,其中梯度越小学习率就越大,就会变成绿色线条了

RMS Prop

RMS Prop 是上面方法的优化,
σi0=(gi0)2\sigma_i^0 = \sqrt{{(g_i^0)}^2 }
σit+1=α(σit)2+(1α)(git)2\sigma_i^{t+1} = \sqrt{ \alpha({\sigma_i^t})^2 + (1-\alpha) {(g_i^t)}^2 }
α\alpha 也是个超参数,像学习率一样,表示当前计算出来的 gitg_i^t 的重要程度 ,也是说是当前计算出来的梯度更重要,还是之前计算出来的梯度更重要。

Adam

Adam 就是 RMS Prop 加上 Momentum

learning rate scheduling

就是不要把学习率当作一个常数,让它随着时间(训练次数)的改变而改变

Learning Rate Decay

让学习率随着训练的前进而变小

Warm Up

让学习率先变大,然后再变小

Batch Normalization

简单来说就是对不同维度的参数进行标准化操作,使之变成均值为 0 方差为 1 的参数。Normalization是以一个batch为单位进行的所以叫Batch Normalization

Classification

Mean square error 在Loss很大的地方,它是非常平坦的,它的gradient是非常小,有非常大的可能性会t训练不出来。

所以经常选用 Cross-Entropy 作为损失函数。

multi-label classification & multi-class classification

multi-label classification :对于某一个输入,可能会被打上多个标签
multi-class classification:一个输入对应一个class,但总的class有多个。是相对于 binary-class 总的class 只有两个

卷积

conv2d RGB图片虽然是3维(w,h,c)的,卷积仍是按照2d卷积来算的,只在w,h 方向上卷积前进,只是将多个 channels 的2d卷积结果加起来,和3d的卷积还是有区别的。filter的参数矩阵大小为kkck *k*c