实用机器学习笔记二十七:深度神经网络架构
前言:
本文是个人在 B 站自学李沐老师的实用机器学习课程【斯坦福 2021 秋季中文同步】的学习笔记,感觉沐神讲解的非常棒 yyds。
过去的一些年里,经过总结,深度神经网络出现了很多设计模式,这些设计模式帮助我们制定神经网络的模板。
批量和层的归一化:
批量归一化:
对于线性模型,会对数据进行标准化(均值为 0,方差为 1)来使损失函数更加平滑。
平滑:给定输入和,,损失对 x 的倒数与损失对 y 的倒数的差的平方小于等于 常数× x 与 y 的差的平方。意味着:当做优化时,对 x 求梯度,然后沿着梯度的方向向前走,当走到 y 时,如果 y 的梯度发生了很大的变化,就会使优化方向走歪;如果 y 的梯度没有发生很大的变化,优化方向就可以继续沿着这个方向走,走的更远,可以有很大的学习率。这个方程的意思:如果 x 和 y 的之间的距离不是很远的话,他们之间的梯度差的平方(梯度改变的方向)可以被上限 bound 住。
小,就可以使用更大一点的学习率,意味着在 x 点可以走更长的步长
不会作用于深度神经网络,只会帮助直接线性作用于 x 上的函数,如果隐藏层中进行了非线性化,是不起作用的
批量归一化(batch normalization)对中间层的输入也做了标准化
提升函数的平滑度,使训练神经网络时更加容易
步骤:
reshape:输入转换为 2D,如果输入数据本身就是 2D 就不用转换
------> (batch n, channel c, width w, height h)
标准化:对每一列数据进行标准化
Recovery(恢复): ,j 表示第 j 列数据,如果需要的话,可以使用这个等式对数据进行恢复到。是可以学习的参数。
通过把转换成以前的维度,就得到输出。
代码实现:
http://d2l.ai/chapter_convolutional-modern/batch-norm.html
层归一化:
主要用于 RNN 中,在序列预测中,每一个时间步,都要维护一个均值和方差,在做预测的时候,碰到句子超过训练时的句子长度时,超过的部分就没有可用的均值和方差了。
层归一化:输入, ,是按照每一个样本来做归一化,归一化的具体计算和 BN 一样
归一化每一个样本,到当前的时间步
在 transformers 上比较好
其他归一化:
修改“reshape”:
InstanceNorm: n × c × w × h ---> wh × cn
GroupNorm: n × c × w × h ---> swg × gn, c = sg
CrossNorm: 交换均值和方差
修改“normalize”: 比如:白化(不仅使均值为 0 方差为 1,并且使得每一个特征之间没有关系,做 PCA)
修改“recovery”:比如:使用神经网络来拟合
把神经网络的权重或者梯度进行归一化。
版权声明: 本文为 InfoQ 作者【打工人!】的原创文章。
原文链接:【http://xie.infoq.cn/article/d2badd7ba1965732a09eec646】。文章转载请联系作者。
评论