网站首页 > 技术文章 正文
内容导读
1. 各种优化器对比 标准梯度下降法:(速度慢) 标准梯度下降先计算所有样本汇总误差,然后根据总误差来更新权值 随机梯度下降法: (引入比较多的噪声,权值方向不一定正确) 随机梯度下降随机抽取一个样本来计算误差,然后更新权值 批量梯度下降法: 批量梯度下降算是一种折中的方案,从总样本中选取一个批次(比如一共有10000个样本,随 机选取100个样本作为一个batch),然后计算这个batch的总误差,根据总误差来更新权值。3. Momentum(训练速度非常快) γ:动力,通常设置为0.9 vt = γvt-1 + η?WJ(W)W = W?vt 当前权值的改变会受到上一次权值改变的影响,类似于小球向下滚动的时候带上了惯性。6.RMSprop RMS(Root Mean Square)是均方根的缩写。RMSprop借鉴了一些Adagrad的思想,不过这里RMSprop只用到了前t-1次梯度平方的平均值加上当前梯度的平方的和的开平方作为学习率的分母。使用Adadelta我们甚至不需要设置一个默认学习率,在Adadelta不需要使用学习率也可以达 到一个非常好的效果。经过一些处理之后再使用类似Adadelta和RMSprop的方式更新参数。
优化器
tf.train.GradientDescentOptimizer
tf.train.AdadeltaOptimizer
tf.train.AdagradOptimizer
tf.train.AdagradDAOptimizer
tf.train.MomentumOptimizer
tf.train.AdamOptimizer
tf.train.FtrlOptimizer
tf.train.ProximalGradientDescentOptimizer
tf.train.ProximalAdagradOptimizer
tf.train.RMSPropOptimizer
1. 各种优化器对比
标准梯度下降法:(速度慢)
标准梯度下降先计算所有样本汇总误差,然后根据总误差来更新权值随机梯度下降法: (引入比较多的噪声,权值方向不一定正确)
随机梯度下降随机抽取一个样本来计算误差,然后更新权值批量梯度下降法:
批量梯度下降算是一种折中的方案,从总样本中选取一个批次(比如一共有10000个样本,随 机选取100个样本作为一个batch),然后计算这个batch的总误差,根据总误差来更新权值。
2. 随机梯度下降法
image.png
SGD: W = W?η??WJ(W;x(i);y(i))
W:要训练的参数
J(W):代价函数
?WJ(W):代价函数的梯度
η:学习率
3. Momentum(训练速度非常快)
γ:动力,通常设置为0.9vt = γvt-1 + η?WJ(W)
W = W?vt
当前权值的改变会受到上一次权值改变的影响,类似于小球向下滚动的时候带上了惯性。这样可以加快小球的向下的速度。
4. NAG(Nesterov accelerated gradient):
vt = γvt-1 + η?WJ(W?γvt 1)
W = W?vt
NAG在TF中跟Momentum合并在同一个函数tf.train.MomentumOptimizer中,可以通过参数配置启用。
在Momentun中小球会盲目地跟从下坡的梯度,容易发生错误,所以我们需要一个更聪明的小球,这个小球提前知道它要去哪里,它还要知道走到坡底的时候速度慢下来而不是又冲上另 一个坡。γvt?1会用来修改W的值,计算W?γvt?1可以表示小球下一个位置大概在哪里。从 而我们可以提前计算下一个位置的梯度,然后使用到当前位置。
5 Adagrad:
i:代表第i个分类
t:代表出现次数
ε:的作用是避免分母为0,取值一般为1e-8
η:取值一般为0.01
image.png
它是基于SGD的一种算法,它的核心思想是对比较常见的数据给予它比较小的学习率去调整参数,对于比较罕见的数据给予它比较大的学习率去调整参数。它很适合应用于数据稀疏的数据集(比如一个图片数据集,有10000张狗的照片,10000张猫的照片,只有100张大象的照片)。 Adagrad主要的优势在于不需要人为的调节学习率,它可以自动调节。它的缺点在于,随着迭代次数的增多,学习率也会越来越低,最终会趋向于0。
6.RMSprop
RMS(Root Mean Square)是均方根的缩写。
γ:动力,通常设置为0.9
η:取值一般为0.001
image.png
RMSprop借鉴了一些Adagrad的思想,不过这里RMSprop只用到了前t-1次梯度平方的平均值加上当前梯度的平方的和的开平方作为学习率的分母。这样RMSprop不会出现学习率越来越低的问题,而且也能自己调节学习率,并且可以有一个比较好的效果。
7. Adadelta
image.png
使用Adadelta我们甚至不需要设置一个默认学习率,在Adadelta不需要使用学习率也可以达 到一个非常好的效果。
8. Adam
image.png
就像Adadelta和RMSprop一样Adam会存储之前衰减的平方梯度,同时它也会保存之前衰减 的梯度。经过一些处理之后再使用类似Adadelta和RMSprop的方式更新参数。
9. 优化器代码
# coding: utf-8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #载入数据集 mnist = input_data.read_data_sets("MNIST_data",one_hot=True) #每个批次的大小 batch_size = 100 #计算一共有多少个批次 n_batch = mnist.train.num_examples // batch_size #定义两个placeholder x = tf.placeholder(tf.float32,[None,784]) y = tf.placeholder(tf.float32,[None,10]) #创建一个简单的神经网络 W = tf.Variable(tf.zeros([784,10])) b = tf.Variable(tf.zeros([10])) prediction = tf.nn.softmax(tf.matmul(x,W)+b) #二次代价函数 # loss = tf.reduce_mean(tf.square(y-prediction)) # 交叉熵代价函数 loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction)) #使用梯度下降法 # train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss) train_step = tf.train.AdamOptimizer(1e-2).minimize(loss) #初始化变量 init = tf.global_variables_initializer() #结果存放在一个布尔型列表中 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#argmax返回一维张量中最大的值所在的位置 #求准确率 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) with tf.Session() as sess: sess.run(init) for epoch in range(11): for batch in range(n_batch): batch_xs,batch_ys = mnist.train.next_batch(batch_size) sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys}) acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels}) print("Iter " + str(epoch) + ",Testing Accuracy " + str(acc)) Iter 0,Testing Accuracy 0.9201 Iter 1,Testing Accuracy 0.9273 Iter 2,Testing Accuracy 0.9228 Iter 3,Testing Accuracy 0.9271 Iter 4,Testing Accuracy 0.9291 Iter 5,Testing Accuracy 0.9318 Iter 6,Testing Accuracy 0.9297 Iter 7,Testing Accuracy 0.931 Iter 8,Testing Accuracy 0.9312 Iter 9,Testing Accuracy 0.9305 Iter 10,Testing Accuracy 0.9306
猜你喜欢
- 2024-10-03 个性化推荐系统源代码之基于 Wide&Deep模型的在线排序
- 2024-10-03 TensorFlow做Sparse Machine Learning
- 2024-10-03 在线学习(Online Learning)导读 在线学习网
- 2024-10-03 原来深度学习模型搭建可以像累砖一样简单
- 2024-10-03 Kernel分类器 分类器性能
- 2024-10-03 孙玄:转转如何打造AI工程架构体系
- 2024-10-03 推荐系统工程难题:如何做好深度学习CTR模型线上Serving
- 2024-10-03 推荐系统工程难题:如何做好深度学习 CTR 模型线上 Serving
- 2024-10-03 在线学习在爱奇艺信息流推荐业务中的探索与实践
- 2024-10-03 推荐精排模型之经典排序模型 推荐精排模型之经典排序模型的理由
你 发表评论:
欢迎- 02-26Docker目录说明之 /var/lib/docker
- 02-26家用nas最常用的docker容器及部署方法
- 02-26Docker快速上手笔记
- 02-26怎样在Python中操作Docker容器?
- 02-26手把手教你搭建LLM模型知识库,开启AI智慧大门
- 02-26Docker容器是个啥?和VM有什么区别?
- 02-26Docker入门指南:从新手到容器大师
- 02-26带你一文搞懂 Docker
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)