Configuring a Deep net

20180829
参考:https://www.nowcoder.com/courses/190

深度学习网络的每一个超参数都是架构和训练方法的一个重要的设计选择。

  • 选择每一层的类型
    输入层受限于应用和输入数据集;隐含层有卷积、池化、激活、loss等(卷积和池化有它们各自的子参数,分别有过滤器的数量和池化的类型。有些网络还内置矩阵操作,用于在各层之间改变数据的形状);输出层,需指定网络的cost函数(平方差的和 \ 多分类中的交叉熵)。
  • 指定每一层神经元的数量
    • 生长 growing
      从比预期少的神经元数量开始,在训练过程中增加神经元的数量,直到整个网络的cost不再变化为止。
    • 剪枝 pruning
      先从超额的神经元数量开始,在训练过程中去除多余的神经元,直到网络的cost不再变化。
      如果计算资源有限,那么更合适的方法是使用多一点的神经元,然后加入正则化来防止过拟合

激活函数activations
logistic单元(Sigmoid)\ 双曲正切函数(Tanh) \ 矫正线性单元(ReLU:使用back-prop训练时解决梯度消失问题)

过度配置的网络可能会出现过拟合问题,则加上正则化Regularization,可以得到一个对于新数据泛化不错的新模型。原因是,一个有更多的神经元的网络有更多的方法去结合它的权重和偏差(weight & bias),造成的结果是,这个网络可以学习到更多可能的模式,最终很可能找到了最低cost网络的权重和偏差组合

如果你想自己建立递归网络,那么需要考虑这个网络输入的内存大小。决定网络需要记住多少过去的输入值。Gating单元(GRU \ LSTM)就是设计来帮助网络记住输入串中的不同部分的。

训练模型的成功依赖于参数的选择。反向传播back-prop还对学习率(learning rate)很敏感。

学习率

学习率太大 => 算法可能容易忽略最小化整体cost的点;学习率太小=>训练过程需要消耗大量时间。
Solution:随着训练的进行改变学习率的大小,通常,学习率最开始的值较大,来加速训练过程,随着训练进行,学习率的值逐渐变小。
网络一开始学习宽广的主要模式,然后慢慢的开始学习细化的模式。

改变学习率的策略

Adagrad
RMSprop
Adadelta

  • 随机值
  • DBN:使用RMB的权重和偏差来作为初始化的值,之后再进行监督学习,精调参数。
  • 如果你在使用RNN,可以使用gradient clipping 和 steeper gates技巧来加速训练。
  • 提高训练的轮数epoch

猜你喜欢

转载自blog.csdn.net/qq_21980099/article/details/82183488
今日推荐