深度学习理论向

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tonydandelion2014/article/details/79736384

记录深度学习的一些理论

为啥要用ReLU函数

ReLU函数如下图所示:

ReLU函数能够解决梯度爆炸和梯度消失的问题,因为ReLU函数在x>0的时候,导数为1,在梯度传导过程中是不会对梯度大小造成任何数值上的影响的。

啥是SoftMax?

softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类!假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的softmax值就是

softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标。

在神经网络的计算当中,我们经常需要计算按照神经网络的正向传播计算的分数S1,和按照正确标注计算的分数S2,之间的差距,计算Loss,才能应用反向传播。Loss定义为交叉熵。

取log里面的值就是这组数据正确分类的Softmax值,它占的比重越大,这个样本的Loss也就越小,这种定义符合我们的要求。

我们求Loss对每个权重矩阵的偏导,应用链式法则

最后结果的形式非常的简单,只要将算出来的概率的向量对应的真正结果的那一维减1,就可以了。举个例子,通过若干层的计算,最后得到的某个训练样本的向量的分数是[ 1, 5, 3 ], 那么概率分别就是[0.015,0.866,0.117],如果这个样本正确的分类是第二个的话,那么计算出来的偏导就是[0.015,0.866−1,0.117]=[0.015,−0.134,0.117],是不是很简单!!然后再根据这个进行back propagation就可以了。

Softmax 函数的特点和作用是什么? - 杨思达zzzz的回答 - 知乎
Softmax 函数的特点和作用是什么? - 忆臻的回答 - 知乎

神经网络的学习率有啥用?

神经网络学习率定律一:一般来说,某一层的真实学习率越大,训练的过程对该层参数的更新影响也就越大。

某一层的真实学习率由网络结构文件中的层学习率lr_mul和超参数文件中整体学习率base_lr共同决定,公式如下:

神经网络学习率定律二:某一层的真实学习率 = 层学习率lr_mul × 整体学习率base_lr

  • 如果我们的目的是从无到有训练一个网络,那我们就需要设置一个较大的base_lr,比如说是0.01。各层的学习率lr_mul则设置较小,比如(1或者2),这样在训练过程中,各层的真实学习率就很大(0.01*1),各层参数会在训练过程中受到的影响也很大(见神经网络学习率定律一)。

  • 如果我们只是finetune,就不需要设置这么大的base_lr,通常是设置一个较小的的base_lr(0.001),然后在我们在需要彻底重新训练的层设置一个较大的lr_mult(10),其他不需要重新训练的层设置一个较小的lr_mult(1或者2),这样一来,在finetune的过程中,训练就不会影响那些不需要重新训练的层(对于这些层真实学习率其实很小,为0.001*1),而那些需要被重新训练的层就会受到很大的影响(对于这些层真实学习率很大,为0.001*10)

base_lr的配置环境上下文:

net: "/home/weijian/caffe/models/finetune_test/train_val.prototxt"
test_iter: 60
test_interval: 500
# lr for fine-tuning should be lower than when starting from scratch
base_lr: 0.001  # 这里就是整体学习率
lr_policy: "step"

lr_mul的配置环境上下文:

  param {
    lr_mult: 10  # 这里就是层学习率 整体学习率(0.001) 乘以 层学习率(10) 即真实学习率(0.01)
    decay_mult: 1
  }
展开阅读全文

没有更多推荐了,返回首页