赞
踩
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
- 1.梯度下降
- 1.随机梯度下降算法:
- 计算一个随机样本的损失函数关于参数θ的梯度来更新权重。
- 每迭代更新一次权重都需要计算所有样本误差,效率偏低。
- 容易陷入局部最优解。
- 2.全梯度下降算法:
- 计算所有样本的损失函数关于参数θ的梯度来更新权重
- 容易陷入局部最优解。
- 1.什么是梯度消失或爆炸:
- 根据反向传播算法和链式法则, 得到梯度的计算的简化公式。
- 其中sigmoid的导数值域是固定的, 在[0, 0.25]之间,而一旦公式中的w也小于1,那么通过这样的公式连乘后,最终的梯度就会变得非常非常小,
- 这种现象称作梯度消失。反之,如果我们人为的增大w的值,使其大于1,那么连乘够就可能造成梯度过大,称作梯度爆炸。
-
- 2.梯度消失或爆炸的危害:
- 如果在训练过程中发生了梯度消失,权重无法被更新,最终导致训练失败。
- 梯度爆炸所带来的梯度过大,大幅度更新网络参数,在极端情况下,结果会溢出(NaN值)。
-
- 3.使用sigmoid函数的导数,导数最大值为1/4,而我们一般会使用标准方法来初始化网络权重,即使用一个均值为0标准差为1的高斯分布。
- 因此,初始化的网络权值通常都小于1。但是由于上面的图中或者更深的网络导致层数越多,求导结果越小,最终导致梯度消失的情况出现。
- 但是当sigma(z)*w>1的时候,也就是w比较大的情况。前面的网络层比后面的网络层梯度变化更快,引起了梯度爆炸的问题。
- 但是梯度爆炸问题在使用sigmoid激活函数时,出现的情况较少,不容易发生。因为需要|w|>4才会造成这样的效果。(sigmoid导数的最大值0.25)
-
- 4.梯度消失问题解决:
- 1.用ReLU、Leaky ReLU、(PRelu、RRelu)等替代sigmoid函数。
- 2.使用BN层,减少网络的训练难度,同时减少输入数据大小
- 3.输入数据x的标准化策略,参数初始化策略使用一个均值为0标准差为1的高斯分布
- 4.使用现有预训练模型进行微调,减缓网络训练难度
-
- 5.梯度爆炸问题:梯度剪切(超过指定的范围,梯度值进行剪切)、权重正则化手段
- 分散的程度可以根据方差来衡量
- Bagging主要用于提高泛化性能(解决过拟合,也可以说降低方差)
- Boosting主要用于提高训练精度(解决欠拟合,也可以说降低偏差)
- 1、过拟合是一个严重的问题。大型网络的使用速度也较慢,这使得在测试时结合许多不同的大型神经网络的预测来处理过拟合问题变得非常棘手。
- Dropout是解决这个问题的一种技巧。关键的想法是在训练过程中,从神经网络中随机丢弃神经元(以及它们的连接)
- 2、在训练过程中,dropout技巧会从指数级的的不同的“稀疏”网络中抽取样本。在测试时,就可以很容易地估计出所有这些稀疏网络的预测结果的平均。
- 这显著地减少了过拟合,并且比其他正则化方法有了很大的改进
- 3、drop改进了神经网络在视觉、语音识别、文档分类和计算生物学等监督学习任务上的性能,获得了许多基准数据集state-of-the-art结果。
- 训练深层神经网络是一个复杂的过程,因为在训练过程中,每一层输入的分布都会发生变化,因为前一层的参数会发生变化,
- 这就要求较低的学习率和仔细的参数初始化,从而减缓了训练的速度,并且使得训练具有饱和非线性的模型并不困难。
- 我们将这种现象称为内部协变量漂移,并通过规范化层来解决问题,提出了将规范化作为模型结构的一部分并对每一个训练小批量进行规范化的方法。
- 批处理或恶意化允许我们使用更高的学习率,并且在初始化时不那么小心。它还起到正则化的作用,
- 在某些情况下,消除了应用于最新图像分类模型的辍学的需要批处理规范化以14倍的较少训练步骤达到相同的精度,
- 并且使用批处理规范化网络的集合大大超过了原始模型,我们改进了Imagenet分类的最佳发布结果:
- 达到4。9%top-5验证错误(和4。8%的测试误差),超过了人工评分的准确性
- 1.根据x/y/z三个变量对应的一阶导数为0时,分别得到x=-1,y=-2,z=3时三个变量的方向上此时的梯度均为0,
- 只是不知道在这个点上的三元函数结果值是局部最小值还是局部最大值还是鞍点。
- 2.求x/y/z三个变量对应的二阶导数,得出分别均为正整数2,分别组成海森矩阵,斜对角上的值填充为2。
- 3.根据函数的海森矩阵在梯度为0的位置上的特征值全为正时,该函数得到局部最小值。
- 那么现在便可以根据x=-1,y=-2,z=3输入到x^2+y^2+z^2+2x+4y-6z可得知局部最小值为-14。
- 1.什么是梯度消失或爆炸:
- 根据反向传播算法和链式法则, 得到梯度的计算的简化公式。
- 其中sigmoid的导数值域是固定的, 在[0, 0.25]之间,而一旦公式中的w也小于1,那么通过这样的公式连乘后,最终的梯度就会变得非常非常小,
- 这种现象称作梯度消失。反之,如果我们人为的增大w的值,使其大于1,那么连乘够就可能造成梯度过大,称作梯度爆炸。
-
- 2.梯度消失或爆炸的危害:
- 如果在训练过程中发生了梯度消失,权重无法被更新,最终导致训练失败。
- 梯度爆炸所带来的梯度过大,大幅度更新网络参数,在极端情况下,结果会溢出(NaN值)。
-
- 3.使用sigmoid函数的导数,导数最大值为1/4,而我们一般会使用标准方法来初始化网络权重,即使用一个均值为0标准差为1的高斯分布。
- 因此,初始化的网络权值通常都小于1。但是由于上面的图中或者更深的网络导致层数越多,求导结果越小,最终导致梯度消失的情况出现。
- 但是当sigma(z)*w>1的时候,也就是w比较大的情况。前面的网络层比后面的网络层梯度变化更快,引起了梯度爆炸的问题。
- 但是梯度爆炸问题在使用sigmoid激活函数时,出现的情况较少,不容易发生。因为需要|w|>4才会造成这样的效果。(sigmoid导数的最大值0.25)
-
- 4.梯度消失问题解决:
- 1.用ReLU、Leaky ReLU、(PRelu、RRelu)等替代sigmoid函数。
- 2.使用BN层,减少网络的训练难度,同时减少输入数据大小
- 3.输入数据x的标准化策略,参数初始化策略使用一个均值为0标准差为1的高斯分布
- 4.使用现有预训练模型进行微调,减缓网络训练难度
-
- 5.梯度爆炸问题:梯度剪切(超过指定的范围,梯度值进行剪切)、权重正则化手段
- 1.momentum动量下降:计算梯度的指数加权平均数,更新的梯度便有了历史的动量梯度信息。
- 2.Adagrad:
- 只影响学习率,对每个参数的学习率进行自适应学习。
- 不影响梯度,仍然是使用当前计算出来的梯度来更新。
- 3.RMSProp:
- 只影响学习率,引入了momentum动量的指数加权平均数,对每个参数的学习率进行自适应学习。
- 不影响梯度,仍然是使用当前计算出来的梯度来更新。
- 4.Adam:
- 结合了momentum动量和RMSProp。
- 不仅影响了学习率,使用了momentum动量的指数加权平均数,对每个参数的学习率进行自适应学习。
- 还影响了梯度,更新的梯度便有了历史的动量梯度信息。
- 1.momentum动量下降:计算梯度的指数加权平均数,更新的梯度便有了历史的动量梯度信息。
- 2.Adagrad:
- 只影响学习率,对每个参数的学习率进行自适应学习。
- 不影响梯度,仍然是使用当前计算出来的梯度来更新。
- 3.RMSProp:
- 只影响学习率,引入了momentum动量的指数加权平均数,对每个参数的学习率进行自适应学习。
- 不影响梯度,仍然是使用当前计算出来的梯度来更新。
- 4.Adam:
- 结合了momentum动量和RMSProp。
- 不仅影响了学习率,使用了momentum动量的指数加权平均数,对每个参数的学习率进行自适应学习。
- 还影响了梯度,更新的梯度便有了历史的动量梯度信息。
- syj - sj > 1:如果 正确目标类别的预测分数syj 要比 其他错误类别的预测分数sj 高于1以上的话,那么合页损失就是有效的。
- 多分类支持向量机损失希望正确分类的分数syj 至少要高于其他错误预测分类的分数sj,
- 如果错误分类的分数sj 减 正确分类的分数syj 的差值 超过上述的红色区域的话,
- 则不会加入损失,如果两者的差值在红色区域内部,那么会累积损失。
- 多类别Softmax分类器对应交叉熵损失cross-entropy:
- 交叉熵损失cross-entropy是应用softmax分类之后如何计算损失大小的一种方式。
- 多类别Softmax分类器:输出的每个类别的概率值为0到1之间,所有类别的概率值总和为1。
- 交叉熵损失cross-entropy:
- softmax分类器输出值:
- 为防止在计算e的X次方这种指数运算时可能出现的指数爆炸问题,
- 所以需要在使用到了指数运算的分子和分母中都要执行每个类别的预测评分值均减去同一某个类别的最大预测评分值。
- 最终每个类别的预测概率值都归一化到0到1之间,所有每个类别的预测概率值的总和仍为1。
-
- 分子:某一个类别的预测评分执行e的(X-最大预测评分值)次方,X为这个类别的预测评分,分子即为某一个该类别的e的(X-最大预测评分值)次方的结果值。
- 分母:所有每个类别的预测评分都执行e的(X-最大预测评分值)次方,X为某个类别的预测评分,分母即为所有每个类别的e的(X-最大预测评分值)次方的结果值的总和。
- 之所以要进行(L1/L2)正则化来解决过拟合的问题,正是因为(L1/L2)正则化可以降低权重值,而如果在使用sigmoid/tanh等激活函数时,
- 拥有较小的权重则z=wx+b所得的值趋于0,那么趋于0的值输入到上述的激活函数中时便拥有较大的梯度值,能够提高更新模型速度,
- 反之,如果此时的权重太大的话则z=wx+b所得的值也会非常大,那么非常大的值输入到上述的激活函数中时便会可能出现梯度消失问题导致梯度值非常小,
- 导致模型无法很好快速地训练到最佳值。
- BATCH_SIZE大小设置对训练耗时的影响:
- 1.如果当设置BATCH_SIZE等于训练样本时,比如训练样本有512个,设置BATCH_SIZE=512,那么一次BATCH_SIZE=512的批量数据进行训练时,
- 会计算BATCH_SIZE=512个样本的反向传播,求出512个样本的梯度累计和,然后使用该梯度累计和进行一次权重参数更新。
- 2.如果当设置BATCH_SIZE等于1时,,比如训练样本有512个,设置BATCH_SIZE=1,那么一次BATCH_SIZE=1的批量数据进行训练时,
- 会计算BATCH_SIZE=1个样本的反向传播,求出1个样本的梯度,然后使用该梯度进行一次权重参数更新,
- 那么当所有512个样本都完成训练时,一共进行了512次反向传播(梯度计算),512次参数更新。
- 3.结论:
- 1.显然BATCH_SIZE设置越大,那么所有训练样本数据完成一次训练(完成一个epoch)要进行的参数更新次数会更少,
- 那么训练耗时更短,BATCH_SIZE设置越小,一个epoch训练完所有样本数据要进行的参数更新次数会更多,
- 因此训练耗时更长。
- 2.当然训练耗时也和你所选取的优化算法是全批量梯度下降BGD、随机梯度下降SGD、小批量梯度下降Mini-batch GD(MBGD)有关。
- 4.每个批量数据训练都要执行的代码流程
- # 设置优化器初始梯度为0
- optimizer.zero_grad()
- # 模型输入一个批次数据, 获得输出
- output = model(text)
- # 根据真实标签与模型输出计算损失
- loss = criterion(output, label)
- # 将该批次的损失加到总损失中
- train_loss += loss.item()
- # 误差反向传播
- loss.backward()
- # 参数进行更新
- optimizer.step()
- 假如Label Smoothing设置错误率ε为0.1,某个样本的二分类标签的ont-hot表示[0,1],K表示分类类别数:
- [0,1] * (1-ε) + ε/K
- = [0,1] * (1-0.1) + 0.1/2
- = [0 * 0.9 + 0.05, 1 * 0.9 + 0.05]
- = [0.05,0.95]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。