机器学习 学习记录(四)
本篇博客将介绍深度学习时所用到的一些Tips。
我们知道,机器学习的三大步骤(Function Set, Goodness of Function, Pick up The Best Function),那如果我们最终得到的结果坏掉了怎么办。如果坏掉了,到底是这三步的哪一个步骤出现了问题呢?
结果的坏掉有两种情况,一种是训练数据的符合率很低,还有一种是测试数据的命中率比较低。在第一种情况下,很可能是在Gradient Descent的时候,由于某种原因而致使所得到的权重并不是
下面介绍几种比较常用的方法
I.对于训练数据的时候出现问题的解决办法:
1.New Activation Function:
对于某些机器学习问题,有时候会随着网络深度的递增而递减。那为什么会出现这种现象呢?解释是:Vanishing Gradient. 在以sigmoid函数为**函数的神经网络中,由于sigmoid函数的影响导致网络中靠近input layer的参数偏导数很小,而靠近output layer的参数偏导数较大,这样就导致靠近output layer的参数收敛得很快,而靠近input layer的参数直到学习结束都几乎都没有被更新。
那怎么去解决这个问题呢?你当然可以采用一个动态的learning rate去使不同参数尽量收敛,但是这种解决方案显然只是治标不治本,因为导致这个问题的元凶在Sigmoid函数。那我们能不能通过更换**函数来解决这个问题呢?答案是完全可行!事实上我们也是这么做的。
下面介绍两种比较常用的来更换sigmoid函数的**函数:
(1)ReLU(Rectified Linear Unit)
这个函数有以下几个优点:
<1>.容易运算(相比较sigmoid函数来说,运算量要小得多)
<2>.有生物学上的证据证明这个函数可用于神经网络(具体我也不是很理解)
<3>.解决了Vanishing Gradient问题
那问题来了,如何求导数啊???
正常求呗……如果
(2)Maxout
那这个函数怎么求导呢?
根据上一次的weight与输入我们是能够求出每个神经元的具体输出的,那么就将输出
2.Adaptive Learning Rate
这种方法有很多具体的实现方式,比较著名的有Adagrad、RMSProp、Momentum.
<1>Adagrad:
Adagrad的具体表达如下:
其中
<2>RMSProp
其中
<3>Momentum
不做过多解释,请读者参考下图
II.对于测试数据时出现问题的解决方法
解决方法主要有:Early Stopping,Regularization,Dropout
下面简短地介绍一下Regularization与Dropout,Early Stopping比较简单,请读者查阅相关资料,不在这里赘述
1.Regularization
Regularization其实就是要调整我们做梯度递减的函数,在该函数后面加上
用这个新的函数来做Gradient Descent:
2.Dropout
这种处理方式的做法是,每次参数更新,每个神经元有
最终得到的结果要用每个参数乘上