调试
参数的调整有优先级, 红色的最重要, 橙色次之, 紫色最后考虑, 其他尽量不改.
参数很难知道这个值的变化对结果有什么影响, 所以尽管随便尝试
如果发现了某个区域的值效果较好, 可以对这个区域进行精细取值
选择合适的范围
虽然随机取值能够提升你的搜索效率, 但是随机取值并不是在有效范围内的随机均匀取值. 而是选择合适的标尺.
你可能会想从0.0001 ~ 1 之间选择一个合适的学习率的选择, 如果你均匀的随机取值, 那么 90% 的数值将会在 0.1 ~ 1 之间. 这看起来不太对.
使用不均匀的标尺, 使得 0.0001 到 0.001 之间获得更多的尝试是更有必要的.
比如 气温例子中的 选择, 当更接近 1 时, 值变化虽然一样, 但是对结果值的影响变大.
正则化网络的激活函数: Batch Normalization
我们知道可以通过对输入特征进行正则化可以加速学习的过程, 对于更深层的网络, 我们要训练权重和偏差等信息, 是否我们可以对计算过程产生的 a 进行正则化, 使参数的训练更加有效.
所以我们的问题是, 对应任意一个隐藏层, 我们能否归一化 (实际上也可以是 , z更加普遍)值. 加速 , 的训练.
有了正则化后,偏置值可以去除
Batch Normalization 为什么有用
假设你已经在所有黑猫的数据集上训练了网络, 你现在想要将网络应用到有色猫的识别上. 想改变应用数据集的想法成为: “covariate shift”
让我们从单独一层的角度来看, 隐藏层3的数据是由2获得的. 所以当网络前面的权重发生变化时, 第三层的计算也会变化. 而 Batch Morm 就是减少这些隐藏值分布变化数量的.
也就是意味着, 虽然前面的值会发生变化, 但是均值和方差保持不变. 可能是 0 和 1, 也可能是由两个参数 进行决定的. 这限制了上一层网络的数值分布程度. batch 归一化减少了输入值改变导致的问题, 使值的变化更加稳定
batch 也有部分 regularization 的功能.
测试时怎么使用
在训练时, 我们能够根据数据的计算情况得出. 但是在测试集时. 我们需要其他方式来获得这些参数值. 而如果你只有一个样本时, 一个样本的均值和方差并没有意义.
所以当网络用于测试时, 就需要单独计算 , 一般是使用加权平均值进行估算. 这个平均数覆盖了训练时候的所有 mini-batch. 接着用这些值用于计算测试集或者单个样本. (训练时还是用mini-batch 计算出来的数值进行计算)
Softmax 回归
Softmax 是用于多元分类的一种方法.
假设我们现在是要对以下的动物进行识别, 猫\狗\鸡\其他. 分别被标记成1\2\3\0. 我们使用 C 来表示需要识别的种类数量.
并且使用 Softmax 使得输出结果归一化.
除此之外, Softmax 分类器还能代表什么呢. 以下是没有隐藏层的 Softmax 示例, 有类似线性的决策边界, 但超过了两个分类.
这些都展示了 Softmax 在没有隐藏层的情况下能够做到的事情. 更深层的网络能够产生更复杂的非线性决策边界. 进行区分种类.D
与 Softmax 对应的还有 Hardmax 因为hardmax 是将最有可能能的置为 1 其他置为 0, 所以比较 hard.
Softmax 在只有两类的分类中变成了二元分类.
现在框架中, 一般你只要定义好正向传播, 反向传播框架将会帮你完成.
怎么深度学习框架
- 是否易于开发
- 运行速度
- 是否真的开源