常见优化算法 (tensorflow对应参数)
来源:互联网 发布:在淘宝上搜春药怎么搜 编辑:程序博客网 时间:2024/06/08 02:38
转载出处:http://www.2cto.com/kf/201612/572613.html
常见算法
SGD
?
x+= -learning_rate*dx
Momentum
Momentum可以使SGD不至于陷入局部鞍点震荡,同时起到一定加速作用。
Momentum最开始有可能会偏离较远(overshooting the target),但是通常会慢慢矫正回来。
?
v = mu*v - learning_rate*dx
x+= v
Nesterov momentum
基本思路是每次不在x位置求dx,而是在x+mu*v处更新dx,然后在用动量公式进行计算
相当于每次先到动量的位置,然后求梯度更新
vt=μvt?1?ε▽f(θt?1+μvt?1)
θt=θt?1+vt
计算▽f(θt?1+μvt?1)不太方便,做如下变量替换:?t?1=θt?1+μvt?1 ,并带回上述公式可以得到
vt=μvt?1+ε▽f(?t?1)
?t?1=?t?1?μvt?1+(1+μ)vt
?
v_prev = v
v = mu*v-learning_rate*dx
x += -mu*v_prev+(
1
+mu)*v
AdaGrad
使用每个变量的历史梯度值累加作为更新的分母,起到平衡不同变量梯度数值差异过大的问题
?
cache += dx**
2
x += -learning_rate*dx/(np.sqrt(cache)+1e-
7
)
RMSProp
在AdaGrad基础上加入了decay factor,防止历史梯度求和过大
?
cache = decay_rate*cache + (
1
-decay_rate)*dx**
2
x += -learning_rate*dx/(np.sqrt(cache)+1e-
7
)
ADAM
初始版本:类似于加入动量的RMSProp
?
m = beta1*m + (
1
-beta1)*dx
v = beta2*v + (
1
-beta2)*(dx**
2
)
x += -learning_rate*m / (np.sqrt(v)+1e-
7
)
真实的更新算法如下:
?
m = beta1*m + (
1
-beta1)*dx
v = beta2*v + (
1
-beta2)*(dx**
2
)
mb = m/(
1
-beta1**t) # t is step number
vb = v/(
1
-beta2**t)
x += -learning_rate*mb / (np.sqrt(vb)+1e-
7
)
mb和vb起到最开始的时候warm up作用,t很大之后(1-beta1**t) =1
Second Order optimization methods
second-order taylor expansion:
J(θ)≈J(θ0)+(θ?theta0)T+12(θ?θ0)TH(θ?θ0)
θ?=θ0?H?1▽θJ(θ0)
Quasi_newton methods (BFGS) with approximate inverse Hessian matrix L-BFGS (limited memory BFGS)
Does not form/store the full inverse Hessian.
Usually works very well in full batch, deterministic mode
实际经验
ADAM通常会取得比较好的结果,同时收敛非常快相比SGD L-BFGS适用于全batch做优化的情况 有时候可以多种优化方法同时使用,比如使用SGD进行warm up,然后ADAM 对于比较奇怪的需求,deepbit两个loss的收敛需要进行控制的情况,比较慢的SGD比较适用
tensorflow 不同优化算法对应的参数
SGD
optimizer = tf.train.GradientDescentOptimizer(learning_rate=self.learning_rate)
Momentum
optimizer = tf.train.MomentumOptimizer(lr, 0.9)
AdaGrad
optimizer = tf.train.AdagradientOptimizer(learning_rate=self.learning_rate)
RMSProp
optimizer = tf.train.RMSPropOptimizer(0.001, 0.9)
ADAM
optimizer = tf.train.AdamOptimizer(learning_rate=self.learning_rate, epsilon=1e-08)
部分局部参数需要查找tensorflow官方文档
直接进行优化
train_op = optimizer.minimize(loss)
获得提取进行截断等处理
gradients, v = zip(*optimizer.compute_gradients(loss))
gradients, _ = tf.clip_by_global_norm(gradients, self.max_gradient_norm)
train_op = optimizer.apply_gradients(zip(gradients, v), global_step=self.global_step)
转载出处:http://www.2cto.com/kf/201612/572613.html
- 常见优化算法 (tensorflow对应参数)
- 常见优化算法 (caffe和tensorflow对应参数)
- Tensorflow 常见参数
- Tensorflow基础:神经网络优化算法
- TensorFlow笔记之常见七个参数
- 常见的优化算法
- 常见优化算法
- 最优化理论与算法部分整理-常见的参数搜索算法
- 11、TensorFLow 中的参数学习算法
- 【深度学习】常见优化算法
- 【深度学习】常见优化算法
- 神经网络优化算法详解(TensorFlow)
- Java内存泄露常见类型及对应相关JVM参数
- java 内存泄露常见类型及对应相关JVM参数
- ajax常见参数特殊字符及16进制转码对应
- caffe常见优化器使用参数
- tensorflow学习之损失函数设置和参数优化
- 常见ML算法及其对应的使用对象
- YYCache学习
- 第14周项目1(6)- 验证算法 堆排序
- Git分支管理规范
- 打开层级比较深的Activity并返回到App的主页面
- 实现图片上传至OSS(阿里云)
- 常见优化算法 (tensorflow对应参数)
- EventBus粘性的简单使用
- 【python】打印带中文的list
- 删除war包
- BI到AI,大数据商业智能分析工具将更智能
- IDEA同时查看多个文件
- 用java制作吃金币游戏
- 默认使用浏览器最高版本和默认使用的内核,强制竖屏
- 知识学习——jQuery CSS操作