神经网络知识点大纲总结,还没有看完,所以持续更新 ~
一、非线性激活函数
1.Sigmoid
2.tanh
3.ReLU
4.Leaky ReLU
5.PReLU
6.EReLU
7.maxout
使用非线性激活函数的原因
激活函数是线性,比如,f(x) = x,那么每一层输出都是上层输入的线性函数,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果一样
使用非线性函数的注意点
ReLU非线性函数。注意设置好学习率,或许可以监控你的网络中死亡的神经元占的比例。如果单元死亡问题困扰,就试试Leaky ReLU或者Maxout,不要再用sigmoid。
二、数据预处理
1.均值减法(Mean subtraction)
每个独立特征减去平均值,从几何上可以理解为在每个维度上都将数据云的中心都迁移到原点。
2.归一化(Normalization)
做零中心化(zero-centered)处理,然后每个维度都除以其标准差。
第一种是对整幅图像做零中心化(zero-centered)处理,然后每个维度都除以其标准差
第二种是对每个维度都做归一化,使得每个维度的最大和最小值是1和-1。
2.PCA和白化(Whitening)
注意:
1.进行预处理很重要的一点是:任何预处理策略(比如数据均值)都只能在训练集数据上进行计算,算法训练完毕后再应用到验证集或者测试集上。
例如,如果先计算整个数据集图像的平均值然后每张图片都减去平均值,最后将整个数据集分成训练/验证/测试集,那么这个做法是错误的。应该先分成训练/验证/测试集,只是从训练集中求图片平均值,然后各个集(训练/验证/测试集)中的图像再减去这个平均值。
2.实际上在卷积神经网络中并不会采用PCA和白化变换。然而对数据进行零中心化操作还是非常重要的,对每个像素进行归一化也很常见。
三、权重初始化
1.错误:全零初始化
具有对称性
2.随机数初始化
初始化为小数:权重太小,随着网络的层次加深,激励函数的结果接近于0,也就是下一层的输入接近于0,那么在反向传播的时候就会计算出非常小的梯度。
初始化为太大的数:会发生饱和使梯度消失
3.Xavier initialization
Var(wi)=1/n[l-1] n输入的神经元个数
为了得到较小的 wi,设置Var(wi)=1/n。就是将wi的方差设为1/n,标准差设为sqrt(1/n)
4.He Initialization
Var(wi)=2/n[l-1] n输入的神经元个数
四、Batch Normalization(BN)
1.对各神经元的输入做类似的标准化处理,提高神经网络训练速度
2.减小不同的样本分布(Covariate Shift )对后面几层网络的影响,使整体网络更加健壮。
五、过拟合Overfitting的解决方式正则化 Regularization
方法一:L2 Regularization 正则化
PS:过拟合时的权重很大,正则化就是让权重不那么大
1.过拟合的时候权重会很大
过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大,从而使得很小的区间里,函数值的变化很剧烈,即导数值的绝对值非常大。由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
2.正则化防止过拟合的原因
正则化项对于原权重是个衰减项,从而使得权重不会变得太大
方法二:droupout
随机失活是为每个神经元结点设置一个随机消除的概率,多地被使用在计算机视觉领域。
注意,在测试阶段不要使用 dropout
方法三:数据扩增(Data Augmentation)
方法四:早停止法(Early Stopping)
方法五:Drop Connect
方法六:Fractional Max Pooling
方法七:Stochastic Depth
六、超参数的选择
1.交叉验证
2.随机搜索优于网格搜索
3.为参数选择合适的范围
有一些超参数做均匀随机取值是不合适的,需要按照一定的比例在不同的小范围内进行均匀随机取值。
4.计算资源来决定训练模型的方式
- Panda(熊猫方式):受计算能力所限,同时试验大量模型比较困难。可以专注于试验一个或一小批模型,初始化,试着让其工作运转,观察它的表现,不断调整参数。
- Caviar(鱼子酱方式):拥有足够的计算能力去平行试验很多模型,尝试很多不同的超参数,选取效果最好的模型。
七、梯度下降的更新方法
加速神经网络的训练