神经网络(二)

特征标准化 (Feature Normalization)

特征数据的标准化, 也可以说正常化, 归一化, 正规化等等.
通常用于 特征标准化的途径有两种,
一种叫做 min max normalization, 他会将所有特征数据按比例缩放到0-1的这个取值区间. 有时也可以是-1到1的区间.
还有一种叫做 standard deviation normalization, 他会将所有特征数据缩放成 平均值为0, 方差为1.
在这里插入图片描述

选择好特征 (Good Features)

  1. 避免无意义的信息
    好的特征能够让我们更轻松辨别出相应特征所代表的类别.(例如:柴犬和柯基的身高)
    而不好的特征, 会混乱我们的感官, 带来些没有用的信息, 浪费了我们的分析,计算资源.(例如:柴犬和柯基的颜色)
  2. 避免重复性的信息
  3. 避免复杂的信息
    因为在特征与结果之间的关系越简单, 机器学习就能越快的学到东西.

激励函数 (Activation Function)

激励函数就是为了解决我们日常生活中 不能线性方程所概括的问题.
就是一个非线性函数. 比如 relu, sigmoid, tanh.
少量层结构中, 我们可以尝试很多种不同的激励函数.
卷积神经网络 Convolutional neural networks 的卷积层中, 推荐的激励函数是 relu.
循环神经网络中 recurrent neural networks, 推荐的是 tanh 或者是 relu

过拟合 (Overfitting)

解决方法

  1. 增加数据量, 大部分过拟合产生的原因是因为数据量太少了.
    如果我们有成千上万的数据, 红线也会慢慢被拉直, 变得没那么扭曲
    在这里插入图片描述
  2. 运用正规化. L1, l2 regularization等等, 我们简化机器学习的关键公式为 y=Wx .
    W为机器需要学习到的各种参数. 在过拟合中, W 的值往往变化得特别大或特别小. 为了不让W变化太大, 我们在计算误差上做些手脚. 原始的 cost 误差是这样计算, cost = 预测值-真实值的平方. 如果 W 变得太大, 我们就让 cost 也跟着变大, 变成一种惩罚机制. 所以我们把 W 自己考虑进来. 这里 abs 是绝对值. 这一种形式的 正规化, 叫做 l1 正规化.
    L2 正规化和 l1 类似, 只是绝对值换成了平方. 其他的l3, l4 也都是换成了立方和4次方等等. 形式类似. 用这些方法,我们就能保证让学出来的线条不会过于扭曲.
    在这里插入图片描述
  3. dropout 在训练的时候, 我们随机忽略掉一些神经元和神经联结 , 使这个神经网络变得”不完整”.
    用一个不完整的神经网络训练一次.到第二次再随机忽略另一些, 变成另一个不完整的神经网络. 有了这些随机 drop 掉的规则, 我们可以想象其实每次训练的时候, 我们都让每一次预测结果都不会依赖于其中某部分特定的神经元.
    在这里插入图片描述
    像l1, l2正规化一样, 过度依赖的 W , 也就是训练参数的数值会很大, l1, l2会惩罚这些大的 参数.
    Dropout 的做法是从根本上让神经网络没机会过度依赖.

加速神经网络训练 (Speed Up Training)

  1. Stochastic Gradient Descent (SGD)
  2. Momentum 更新方法
  3. AdaGrad 更新方法
  4. RMSProp 更新方法
  5. Adam 更新方法
    合并 momentum 的惯性原则adagrad 的对错误方向的阻力.

处理不均衡数据 (Imbalanced data)

不均衡的数据预测起来很简单. 永远都猜多的那一方面准没错.
特别是红色多的那一方占了90%. 只需要每一次预测的时候都猜红色, 预测准确率就已经达到了相当高的90%了.
在这里插入图片描述
解决方法

  1. 获取更多数据
  2. 更换评判方式
    我们会用到 准确率 accuracy, 或者误差 cost来判断机器学习的成果. 可是这些评判方法在不均衡数据面前,
    高的准确率低的误差变得没那么重要.
    所以我们得换一种方式评判. 通过 confusion matrix 来计算 precision 和 recall,
    然后通过 precision 和 recall 再计算f1 分数.这种方式能成功地区分不均衡数据, 给出更好的评判分数.
    在这里插入图片描述
  3. 重组数据
    方式一: 复制或者合成少数部分的样本, 使之和多数部分差不多数量.
    方式二: 砍掉一些多数部分, 使两者数量差不多.
  4. 使用其他机器学习方法
    像神经网络等, 在面对不均衡数据时, 通常是束手无策. 不过有些机器学习方法, 像决策树, decision trees 就不会受到不均很数据的影响.
  5. 修改算法
    在这里插入图片描述假设用的是 Sigmoid 的激励函数, activation function, 他会有一个预测门槛, 一般如果输出结果落在门槛的这一段,预测结果为梨, 如果落在这一段, 预测结果为苹果, 不过因为现在的梨是多数派, 我们得调整一下门槛的位置, 使得门槛偏向苹果这边, 只有很自信的时候, 模型才会预测这是苹果. 让机器学习,学习到更好的效果.

批标准化 (Batch Normalization)

在神经网络中, 数据分布对训练会产生影响. 比如某个神经元 x 的值为1, 某个 Weights 的初始值为 0.1, 这样后一层神经元计算结果就是 Wx = 0.1; 又或者 x = 20, 这样 Wx 的结果就为 2. 现在还不能看出什么问题。
但是, 当我们加上一层激励函数, 激活这个 Wx 值的时候, 问题就来了. 如果使用 像 tanh 的激励函数, Wx 的激活值就变成了 ~0.1 和 ~1, 接近于 1 的部已经处在了 激励函数的饱和阶段, 也就是如果 x 无论再怎么扩大, tanh 激励函数输出值也还是 接近1. 换句话说, 神经网络在初始阶段已经不对那些比较大的 x 特征范围 敏感了. 这样很糟糕, 想象我轻轻拍自己的感觉和重重打自己的感觉居然没什么差别, 这就证明我的感官系统失效了.
当然我们是可以用之前提到的对数据做 normalization 预处理, 使得输入的 x 变化范围不会太大, 让输入值经过激励函数的敏感部分. 但刚刚这个不敏感问题不仅仅发生在神经网络的输入层, 而且在隐藏层中也经常会发生.
在这里插入图片描述
这时候 x 换到了隐藏层当中, 我们能不能对隐藏层的输入结果进行像之前那样的normalization 处理呢? 答案是可以的, 因为大牛们发明了一种技术, 叫做 batch normalization, 正是处理这种情况.

Batch normalization 也可以被看做一个层面.
在一层层的添加神经网络的时候, 我们先有数据 X, 再添加全连接层, 全连接层的计算结果会经过 激励函数 成为下一层的输入, 接着重复之前的操作. Batch Normalization (BN) 就被添加在每一个全连接和激励函数之间.
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值