深度学习笔记——理论与推导之DNN(三)
2017-08-10 11:43
375 查看
DNN
目录激励函数(ReLU以及ReLU的变形,梯度消失问题)
成本函数
数据处理
优化
一般化
激励函数:
Rectified Linear Unit(ReLU)
选择Relu的原因:
计算速度快
生物原因
类似于具有不同偏差的无限个sigmoid
可以解决梯度消失问题
sigmoid的问题(梯度消失问题):
sigmoid function的微分函数是蓝色的线,我们可以发现,蓝线上的所有值都处于(0,1)之间,而最大值出现在x = 0的位置,值为1/4。这会导致在backward pass中,因为每通过一个layer,Error signal就要乘以一个scalar(这个scalar就是sigmoid function的导数),导致Error signal会不断被减弱,最终会导致Gradient越来越小。这会导致在neural network中越靠近input的gradient都比较小,这时,如果你选用的是一个constant learning rate,你就会发现靠近input的weight就会都比较小,也就会导致靠近input的weight值的变化会很小,也就是它learn的速度会比较慢。
那么ReLU是如何解决梯度消失的问题呢?
这是由于ReLU的导数非0即1,因此不会削弱Error signal的值。
这里需要考虑一个问题:
所有连接到偏导为0的weight都不会更新:
可能的解决方法:
softplus function
initialize with large bias
然而这个问题不会照常太大影响,因为要对多个x进行训练,所以基本上他的weight都会被训练到。
ReLU的变形:
Parametric ReLU:
Maxout ReLU:
所有的ReLU变形都是特殊的Maxout案例
左边是一般的ReLU,绿色的线是蓝线通过ReLU以后的变化;右边是Maxout ReLU,只要找到适当的参数,Maxout也可以做出和一般ReLU一样的事情。
由于w和b的值是根据data所learn出来的,所以Maxout可以也是一个可以被learn出来的activation function
如何去training maxout呢?
没用到的z可以直接去掉,所以train的其实就是一个thin和linear的network
成本函数:
直接输出cost function可能存在一个问题:虽然上面的y的cost function的值可能更小,但就我们对nerual network的理解,应该是下面的y更准确,因为值越大代表越重要。
解决方法:softmax,将softmax layer作为output layer。
softmax就是将所有的输出值的和变为1。
如果我们用softmax layer作为output,那我们应该使用怎么样的cost function呢?
什么样的cost function是算是好的呢?output和pred相差很大时,我们的cost function需要得到较大的Error Signal,这样在fixed learning rate时我们就能快速的学习。
什么样的cost function可以搭配softmax function呢?
这里不要考虑除了r的其他维,因为我们这时候使用的是softmax,如果r维为1,或者r维尽量大,那么其他维度就会变小。
接下来我们来看一下cost entropy的error signal(因为我们需要cost function越大时,error signal也要越大)
如果yr和1的差距越大,那么error signal就会越大,反之越小,这样的话就满足了我们的要求。
i=r的时候:
下面计算i≠r的时候
数据处理:
优化
Vanilla Graident Descent(就是之前的Gradient Descent)如何判断learning rate是否过大(过小):
当cost不减小,并且上下波动时,表示learning rate过大。
当cost递减速度比较慢时,表示learning rate过小
当cost第一次下降就很多时,可能表示learning rate适当。
如何确定learning rate:
一个比较简单的方法:在每次输出中,减少learning rate的值
在开始的时候我们需要比较大的learning rtae
在靠近结尾的时候,我们会减小learning rate的值。
例如:
Adagrad:将每个参数的学习率除以为它前一个偏导数的平均平方根。
下面是Adagrad的步骤:
什么是最好的步伐呢(即learning rate)?
难道Larger gradient,larger steps一定是对的吗?
如上图所示,如果从x0要到达最低点-b/2a,那么他的最好的步伐应该是|x0+b/2a|也就是|2ax0+b|/2a,2ax0+b其实就是曲线在x0的一阶导数,表面上看larger gradient确实和larger steps成正比,然而我们忽略了2a,这个2a其实就是曲线在x0的二阶导数,因此最好的步伐应该是|一阶导数|/|二阶导数|。
如果是多个参数呢?如下:
然而你如果算二次微分的速度很慢的话,这样计算learning rate就没有意义。因为如果你的learning rate设置很小,那么理论上说是可以达到一个比较好的结果的。这时候Adagrad就起到作用了,因为虽然这里Adagrad只做了一次微分,但是它的分母对二次微分做了估算。
遇到local minima 和saddle point 怎么办?
Momentum(动量):
动量其实就是模拟物理中小球下滑的过程,即Momentum不仅仅基于gradient,还基于上一次的movement(即上次下滑的gradient),如下:
Momentum的流程:
一般化
万灵丹:增加更多的training data
产生更多的training data,如旋转等
Early Stop(早点停下不迭代到指定的次数,不容易做到)
Weight Decay:
我们在选参数的时候,我们都是根据training-set和cost function来决定,但其实我们更喜欢的是接近0的参数,因为如下情况:
因此,我们在做learning的时候,我们想要找的不仅仅是一组可以minimizing original cost的parameter,跟是希望parameter趋近于0,如下,定义一个cost function
接下来我们对新的cost function做偏微分
这也就是wt+1会小于wt
Dropout:
在神经网络中,大规模的神经网络有两个缺点:费时和容易过拟合。而dropout的程序可以很好的解决过拟合问题,每次做完dropout,相当于从原始的网络中找到一个更瘦的网络。
dropout就是在每次迭代中,丢弃p%的神经元。
要注意的是如果在training中dropout=0.5,wij = 1,那么在Test中wij应该等于wij = 1*(1-0.5) = 0.5
因为这个时候的testing中的z这个时候就是training中z的两倍,因此weights就需要乘以(1-dropout)%
为什么dropout的效果更好呢?
可以将其理解为训练不同的网络后,对不同网络进行集成,虽然从直观上看dropout是集成(ensemble)在分类性能上的一个近似,然而实际中,dropout毕竟还是在一个神经网络上进行的,只训练出了一套模型参数,那么为什么dropout有效呢?因为dropout强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,达到好的效果。消减了神经元节点之间的联合适应性,增强了泛化能力。如下:
使用一个data训练一个网络,在这个网络中还有参数共享的部分,如果有一共有M个神经元,那么就能构建出2^M个可能的网络。
对于dropout的一些可行性建议:
更大的网络:如果你需要n个神经元,那么对于dropout = p%的网络来说,你的网络就需要n/(1-p)个神经元。
更长的训练时间:
更高得到learning rate:
更大的momentum:
总结
相关文章推荐
- 深度学习笔记——理论与推导之概念,成本函数与梯度下降算法初识(一)
- 深度学习笔记——理论与推导之Backpropagation(二)
- 深度学习笔记——理论与推导之Structured Learning【Markov Logic Network】(十一)
- 深度学习笔记——理论与推导之Reinforcement Learning(十三)
- 深度学习笔记——理论与推导之RNN的训练过程BPTT(五)
- 深度学习笔记——理论与推导之Structured Learning【Structured Linear Model】(六)
- 深度学习笔记——理论与推导之Structured Learning【Structured SVM】(七)
- 深度学习笔记——理论与推导之Structured Learning【Markov Random Field】(十)
- 深度学习笔记——理论与推导之Structured Learning【NLP】(十二)
- 吴恩达老师深度学习视频课笔记:多隐含层神经网络公式推导(二分类)
- Coursera deeplearning.ai 深度学习笔记1-3-Shallow Neural Networks-浅层神经网络原理推导与代码实现
- 七月算法深度学习 第三期 学习笔记-第二节 DNN与混合网络
- 深度学习笔记五:卷积神经网络CNN(基本理论)
- UFLDL深度学习笔记 (二)SoftMax 回归(矩阵化推导)
- 深度学习 — 反向传播(BP)理论推导
- 深度学习笔记七:循环神经网络RNN(基本理论)
- Coursera deeplearning.ai 深度学习笔记1-2-Neural Network Basics-逻辑回归原理推导与代码实现
- Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现
- 深度学习笔记八:长短时记忆网络LSTM(基本理论)
- 机器学习入门学习笔记:(2.1)线性回归理论推导