神经网络算法改进
* 提高泛化能力
- 代价函数的选择:交叉熵代价函数
- 四种规范化:L1;L2;弃权;训练数据集合的人为扩大
1. 交叉熵代价函数
* 二次代价函数的缺点
- 明显错误的情况,学习速率反而慢
为什么?学习速率,由偏导数$$\frac{\partial C}{\partial w}$$和$$\frac{\partial C}{\partial b}$$决定
二次函数 $$C=\frac{(y-a)^2}{2}$$,其中 a是神经元的输出:$$a=\sigma(z), \ \ z=wx+b$$
- 当神经元的输出接近 1的时候,曲线变平坦,$$\sigma^{'}(z)$$很小,学习速率慢
* 交叉熵函数
- 说明,交叉熵函数的权重学习速度,由$$\sigma(z)-y$$决定,避免了$$\sigma^{'}(z)项$$导致的学习缓慢
* 多神经元的交叉熵
* 交叉熵的意义
交叉熵是不确定性的量度
假设,a是神经元估算y=1的概率,1-a是y=0的概率,
- 交叉熵:学习到y的正确值的平均起来的不确定性
2. softmax
3. 过度拟合和规范化
3.1 过拟合
- 模型拥有足够的精确度来描述,几乎所有给定大小的数据集,但对新的数据集合难以泛华
* 超参数
- 使用validation——data数据集
- hold_out的方法:就是从training_test中留出或者拿出一部分
* 解决过拟合的最好的方式之一:增加训练的样本数目
3.2 规范化
* 权重衰减或者L2
* 为什么规范化可以减少过拟合
- 小的权重在某种程度上意味着更低的复杂性,也就是对数据具有更简单却强大的解释,因此应该优先选择
3.3 其他正则化技术
- L1
- 人为扩大数据集合
* 算法A和算法B的比较,第一反应,你使用什么样的数据集合
4. 权重的初始化
- 简单方式:归一化的高斯分布,均值是0,方差是1
- 改进:假设有$$n{in}$$个输入权重的神经元,则我们用均值为0,标准差为$$\sqrt{1}{n{in}}$$,的高斯分布初始化这些权重
5. 神经网络超参数
- 主要的超参数:学习速率,正则化参数,批数据大小
* 学习速率
- 不适用验证集,经验设置,数量级的方法(0.0001,0.001,0.01,0.1,1.0,10.0)
- 过大会震荡
- 过小会在开始的时候速度很慢
- 选择立即开始,而不是震荡或者增加的值
* 迭代次数
* 正则化参数
建议:首先确定步长,此时不包括规范化参数$$\lambda=0.0$$
使用验证数据集合,选择$$\lambda$$
$$\lambda确定后,再验证步长$$
* 小批量数据集的选择
- 数据集太小,速度慢
- 太大,不能够,足够频繁的更新权重
- 10左右
6. 其他技术
6.1 随机梯度下降的变化
* hessian技术
- 二次导数
* momentum的梯度下降
* Nesterov的技术
7. 人工神经网络的其他模型
- tanh
- ReLU