神经网络——优化器算法


前言

本篇文章记录机器学习的优化器相关的比较:有一篇paper 做了相关的工作 https://arxiv.org/pdf/1609.04747.pdf

一、机器学习的优化器是什么?

在机器学习中,通常情况下。我们建立了一个模型,这个模型是一些参数 Θ ( Θ 1 , Θ 2 , . . . . . . ) \Theta(\Theta_1,\Theta_2,......) Θ(Θ1,Θ2,......)的函数。对于每一个training 的data, 都会产生一个损失。我们会定义一个损失函数 L = 1 / N ∗ ∑ l i L=1/N*\sum l_i L=1/Nli (就是每个样本的损失的叠加求均值)。对于不同的training data来说,最后产生的L是不同的,想要找到最小的L,就要求 ∂ L ∂ Θ = 0 \frac{\partial L}{\partial \Theta}= 0 ΘL=0

二、有哪些类型

1.随机梯度下降

https://blog.csdn.net/u012328159/article/details/80252012

梯度下降最常见的三种变形 BGD,SGD,MBGD,对于SGD/MBGD而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性,在鞍点或者局部最小值点的时候,震荡跳动,因为在此点处,如果是训练集全集带入即BGD,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动。

1.1 Batch Gradient Decent (BGD)

用整个数据集来计算cost function 对参数的梯度:
请添加图片描述
缺点: 梯度更新计算的很慢, GPU的缓存不够, 没有办法一次把所有的数据都加载进去。
对于凸函数可以找到全局最小值,对于非凸函数,很容易落到局部最小值中

for i in range(nb_epochs):
  params_grad = evaluate_gradient(loss_function, data, params)
  params = params - learning_rate * params_grad

1.2 Stochastic Gradient Decent(SGD) 随机

和 BGD 的一次用所有数据计算梯度相比,SGD 每次更新时对每个样本进行梯度更新,对于很大的数据集来说,可能会有相似的样本,这样 BGD 在计算梯度时会出现冗余.
缺点: 每次更新是震荡下降的,因为每次只用一个样本
SGD 一次只用一个样本进行更新,就没有冗余,而且比较快,并且可以新增样本。

请添加图片描述

for i in range(nb_epochs):
  np.random.shuffle(data)
  for example in data:
    params_grad = evaluate_gradient(loss_function, example, params)
    params = params - learning_rate * params_grad

1.3 Mini-Bach Gradient Decent (MBGD)

mini-batch gradient descent 是batch gradient descent和stochastic gradient descent的折中方案,就是mini-batch gradient descent每次用一部分样本来更新参数,即 batch_sizebatch_size。因此,若batch_size=1batch_size=1 则变成了SGD,若batch_size=mbatch_size=m 则变成了batch gradient descent。batch_sizebatch_size通常设置为2的幂次方,通常设置2,4,8,16,32,64,128,256,5122,4,8,16,32,64,128,256,512(很少设置大于512)。

请添加图片描述

for i in range(nb_epochs):
  np.random.shuffle(data)
  for batch in get_batches(data, batch_size=50):
    params_grad = evaluate_gradient(loss_function, batch, params)
    params = params - learning_rate * params_grad

缺点 1: 收敛性不能得到保障,learning rate 如果太小,收敛速度会比较慢。反之如果太大,loss function 会在极小值附近震荡。
缺点2: lr对于所有参数的都是相同的,如果我们的数据比较稀疏,我们希望对出现频率低的特征进行大一点的更新。lr会随着更新次数逐渐变小

MBGD 每一次利用一小批样本,即 n 个样本进行计算,这样它可以降低参数更新时的方差,收敛更稳定,另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。

2.自适应算法

首先清楚指数加权平均和偏差修正的含义:
指数加权:
v t = β v t − 1 + ( 1 − t ) Θ t v_t=βv_{t-1}+(1-t)\Theta_t vt=βvt1+(1t)Θt
v t v_t vt实际上是 1 / ( 1 − β ) 1/(1-β) 1/(1β) Θ \Theta Θ的平均值

偏差修正
v t / ( 1 − β t ) v_t/(1-β^t) vt/(1βt)
v 0 v_0 v0是0的时候,求得的初期几个计算值会与真实的计算结果有较大的差距

如何选择优化算法

1.Momentum

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
思维进化算法(Thought Evolution Algorithm,TEA)是一种启发式优化算法,可以用来优化神经网络的训练结果。对于非线性函数拟合问题,BP神经网络是一种经典的方法,但是它的收敛速度较慢且易于陷入局部最优解。因此,采用TEA算法来优化BP神经网络可以提高其性能。 在使用TEA算法优化BP神经网络时,首先需要初始化神经网络的权重和偏置参数。然后,通过TEA算法对这些参数进行优化。TEA算法的核心思想是通过选择和改进个体来搜索最佳解,以便在解空间中进行进化。 TEA算法主要包含选择、交叉和突变三个基本操作。其中,选择阶段通过适应度函数选出优秀的个体作为父代,并且为个体分配相应的概率。交叉阶段将父代个体进行基因交换操作,生成新的子代个体。突变阶段通过微小的改变来引入新的个体。 在每一代中,通过选择、交叉和突变操作,更好的个体会逐渐被筛选出来,并逐渐趋近于最佳解。通过不断地迭代,TEA算法可以优化BP神经网络,提高其在非线性函数拟合问题上的性能。 总结起来,通过思维进化算法优化BP神经网络可以提高其在非线性函数拟合问题上的效果。TEA算法通过选择、交叉和突变等操作来搜索最佳解,通过不断迭代逐渐优化神经网络的参数,从而提高其训练性能和预测能力。这种综合运用两种算法的方法可以得到更好的非线性函数拟合结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值