Softmax&Overfitting&Regulization&Dropout

来源:互联网 发布:block matching算法 编辑:程序博客网 时间:2024/04/30 12:53

Softmax&Overfitting&Regulization&Dropout

Softmax

另外一种类型的输出层方程:
第一步 (和之前sigmoid一样):
这里写图片描述
第二步: (和之前sigmoid不同): softmax函数
第二步: (和之前sigmoid不同): softmax函数:
Softmax的输出每个值都是大于等于0, 而且总和等于1,所以, 可以认为是概率分布
可以认为输出的是分类等于每个可能分类标签的概率(如 P(a(x)) = 0.8 for MNIST)
如果输出层是sigmod层, 不能默认输出总和为1, 所以不能轻易描述为概率分布
不存在学习慢的问题

overfitting

在训练集上表现良好,但是在测试集上表现不好
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
validation_data, 这里可以用来检测overfitting,对于每一个epoch, 在validation_data上面计算分类准确率,一旦accuracy在validation_data上面充分了, 就停止训练。

L2 Regulization

最常见的一种regularization: (weight decay)L2 regularization
Regularized cross-entropy:
这里写图片描述
增加了一项: 权重之和 (对于神经网络里面的所有权重w相加)
regularization 参数λ>0
n为训练集包含实例个数

对于二次cost,
Regularized quadratic cost:
这里写图片描述
对于以上两种情况, 可以概括表示为:
这里写图片描述
Regularization的Cost偏向于让神经网络学习比较小的权重w, 除非第一项的Co明显减少.
在神经网络中:Regularized网络更鼓励小的权重, 小的权重的情况下, x一些随机的变化不会对神经网络的模型造成太大影响, 所以更小可能受到数据局部噪音的影响.
Un-regularized神经网路, 权重更大, 容易通过神经网络模型比较大的改变来适应数据,更容易学习到局部数据的噪音
λ: 调整两项的相对重要程度, 较小的λ倾向于让第一项Co最小化. 较大的λ倾向于最小化权重之和.
关于λ的设置:
对以上公式求偏导数:
这里写图片描述
以上两个偏导数可以用之前介绍的backpropagation算法求得:
添加了一个项:
这里写图片描述
根据梯度下降算法, 更新法则变为:
这里写图片描述
对于随机梯度下降(stochastic gradient descent):
这里写图片描述
求和是对于一个mini-batch里面所有的x
同样的参数: 30 epochs, 学习率 0.5, mini-batch size: 10,需要改变λ, 因为n从1,000变到50,000了

L1 Regulization

这里写图片描述
求偏导:
这里写图片描述
sgn(w) 指的是w的符号,如果w是正数为+1, 如果w是负数为-1
权重更新法则:
这里写图片描述
对比之前的L2更新法则,都是减小权重, 方法不同:
L1减少一个常量, L2减少权重的一个固定比例
如果权重本身很大, L1减少的比L2少很多
如果权重本身很小, L1减少的更多,L1倾向于集中在少部分重要的连接上
当w=0, 偏导数∂C/∂w无意义, 因为|w|的形状在w=0时是一个V字形尖锐的拐点.
所以, 当w=0时,我们就使用un-regulazied表达式, sgn(0) = 0. 本来regularization的目的就是减小权重, 当权重=0时,无需减少

Dropout

和L1, L2 regularization非常不同, 不是针对cost函数增加一项,而是对神经网络本身的结构做改变
假设我们有一个神经网络
这里写图片描述
通常, 我们根据输入的x,正向更新神经网络,算出输出值,然后反向根据backpropagation来更新权重和偏向
这里写图片描述
但是, dropout不同:开始, 删除掉隐藏层随机选取的一半神经元。然后, 在这个更改过的神经网络上正向和反向更新, 利用一个mini-batch.然后, 恢复之前删除过的神经元, 重新随机选择一半神经元删除, 正向, 反向, 更新w,b
重复此过程
最后,学习出来的神经网络中的每个神经元都是在只有一半神经元的基础上学习的, 当所有神经元被恢复后, 为了补偿, 我们把隐藏层的所有权重减半
为什么dropout可以减少overfitting?
假设我们对于同一组训练数据, 利用不同的神经网络来训练, 训练完成之后, 求输出的平均值, 这样可以减少overfitting
Dropout和这个是同样的道理, 每次扔到一半隐藏层的神经元, 相当于我们在不同的神经网络上训练了
减少了神经元的依赖性, 也就是每个神经元不能依赖于某个或者某几个其他神经元, 迫使神经网聚学习更加和其他神经元联合起来的更加健硕的特征
介绍dropout的文章, 对于以前MNIST最高的accuracy是98.4%, 利用dropout, 提高到98.7%

0 0
原创粉丝点击