【deeplearning.ai笔记第二课】1.4 正则化,权重初始化和输入归一化
正则化能减少过拟合,那么有哪些方法呢?我们来看一下:
1.1 cost function加上正则项
-
L2 regularization
即在 cost function 加上 L2 norm:
∑θ2 -
L1 regularization
即在 cost function 加上 L1 norm:
∑∥θ∥
1.2 weight decay
L2 norm regularization 也叫 权重衰减(weight decay)。因为加上正则项后,在梯度下降中,权重会变小。
如下图,原本的
1.3 为什么正则化能减少过拟合?
因为cost function中加入了
另外一个理解方式,可以看**函数,比如tanh,
1.4 dropout 正则化
Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作(权重设为0),不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的之前权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了。
如上图,节点有0.5的概率不工作,那些不工作的节点可以当作不存在,网络结构变得简单,能减少过拟合。
1.4.1 dropout 的实现(inverted dropout)
dropout有一个参数,keep_prob, 一般设为0.8。具体实现如下:
假设在第三次层的输出a3后加上dropout:
- 首先生成一个和a3 形状相同的随机数矩阵d3,和keep_prob进行比较后, d3成为布尔矩阵,其中20%的数是0。
- d3和a3对应的数值相乘,得到新的a3
- a3除以keep_prob。 这一步是为了让期望值和原本的a3相同。
1.4.2 测试时不用dropout
dropout只在训练时使用,因为我们不希望测试的结果是随机的,如果使用的话,预测会受到干扰。
1.4.3 理解Dropout
Dropout使得每个单元都有可能被丢弃,因此网络不会依赖某一个单元,权重会分散给个个单元。
实际上,dropout的效果和L2 正则化差不多,基本能替代L2正则化,并且在深度学习的实践中常用得多。
1.4.4 优缺点
-
Dropout优点
- 计算方便。训练过程中使用Dropout产生 n 个随机二进制数与状态相乘即可。每个样本每次更新的时间复杂度: O(n),空间复杂度: O(n)。
- 适用广。Dropout不怎么限制适用的模型或训练过程,几乎在所有使用分布式表示且可以用随机梯度下降训练的模型上都表现很好。包括:前馈神经网络、概率模型、受限波尔兹曼机、循环神经网络等。
- 相比其他正则化方法(如权重衰减、过滤器约束和稀疏**)更有效。也可与其他形式的正则化合并,得到进一步提升。
-
Dropout缺点
- 不适合宽度太窄的网络。否则大部分网络没有输入到输出的路径。
- 不适合训练数据太小(如小于5000)的网络。训练数据太小时,Dropout没有其他方法表现好。
- 不适合非常大的数据集。数据集大的时候正则化效果有限(大数据集本身的泛化误差就很小),使用Dropout的代价可能超过正则化的好处。
1.5 其他减少过拟合方法
-
data augmentation
- 图片水平翻转
- 加入扭曲变形
数字字符等数据
-
early stopping
对比valid loss 和train loss
在valid loss 开始增大时停止训练
1.6 归一化输入
一般用z-score 归一化
其中
注意:
- 归一化的单位是每个feature,不同feature的均值和反差不同
- 测试集归一化所用的均值和方差一定要和训练集相同
归一化的原因:
使得不同维度的数量级相似,如果原本2个feature的值分别为[0,1],[0,1000]的话,网络会认为数值大的特征更重要。
另外一个理解的方式:
不同维度的数量级相差很大的话,梯度下降会很慢。
1.7 权重的初始化
- ReLU
He正态分布初始化方法,参数由0均值,标准差为
- tanh
标准的均匀分布的Xaiver初始化器,其中fan_in是输入节点的数量,fan_out是输出节点的数量。参数由区间中均匀采样获得。