机器学习之路: 深度学习 tensorflow 神经网络优化算法 学习率的设置
在神经网络中,广泛的使用反向传播和梯度下降算法调整神经网络中参数的取值。

梯度下降和学习率:
假设用 θ 来表示神经网络中的参数, J(θ) 表示在给定参数下训练数据集上损失函数的大小。
那么整个优化过程就是寻找一个参数θ, 使得J(θ) 的值最小, 也就是求J(θ) 的最小值
损失函数J(θ)的梯度 = ∂ J(θ) / ∂ θ
此时定义一个学习率 η
梯度下降法更新参数的公式为: θn+1 = θn - η ( ∂ J(θn) / ∂ θn )
将这个公式循环的重复下去,θ的值就从高处逐渐向最低处一小步一小步的移动
举个例子:
使用梯度下降 使得损失函数函数 J(x) = x2 的值尽量小, 由二次函数图像开口向上可以知道,二次函数最小值为0,
梯度 ▽ = ∂ J(x) / ∂ x = 2x
假设初始值为 x= 5, 设置学习率为0.3
使用梯度下降更新x的值 步骤如下:
轮数 当前参数x 梯度 * 学习率 更新后参数
1 5 2*5*0.3 = 3 5-3=2
2 2 2*2*0.3 = 1.2 2-1.2 = 0.8
3 0.8 2*0.8*0.3 = 0.48 0.8-0.48 = 0.32
4 0.32 2*0.32*0.3 = 0.192 0.32-0.192=0.128
5 0.128 2*0.128*0.3=0.0768 0.128-0.0768=0.0512
经过五次迭代x从5变成了0.0512, 已经和0非常接近了。
但是梯度下降并不能每次都能获得全局最优解。
如果学习率过小,可能会导致陷入局部最优解的情况。如图:

如果学习率过大,很可能在最优解两侧来回回荡,永远也到不了最低点。
举个例子:
使用梯度下降 使得损失函数函数 J(x) = x2 的值尽量小, 由二次函数图像开口向上可以知道,二次函数最小值为0,
梯度 ▽ = ∂ J(x) / ∂ x = 2x
假设初始值为 x= 5, 设置学习率为 1
使用梯度下降更新x的值 步骤如下:
轮数 当前参数x 梯度 * 学习率 更新后参数
1 5 2*5*1= 10 5-10 = -5
2 -5 2*-5*1 =-10 -5+10 = 5
继续下去他仍会来回摆荡,永远无法收敛
可见, 学习率过大或者过小都不好。
tensorflow为我们提供了一种灵活的学习率设置方式----指数衰减: tf.train.exponential_decy函数
每一轮的学习率 = 学习率 * 衰减系数^(global_steps/decay_steps)
随着步数的增加,学习率在变小,并且步数越多,变小的速度越慢
learning_rate = tf.train.exponential_decay(学习率, global_step, decay_step, 衰减系数,staircase=True)
global_step 是当前已经执行多少步了
decay_step 是下降速度,指的是 每隔多少步,学习率指数增长一个
例如:
tf.train.exponential_decay(0.1, global_step, 100, 0.96,staircase=True)
初始学习率0.1 每隔100步 学习率乘以0.96
stairecase 为true的时候,以阶梯方式下降, 为False时候 以平滑曲线下降
机器学习之路: 深度学习 tensorflow 神经网络优化算法 学习率的设置的更多相关文章
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)
##机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)---#####注:机器学习资料[篇目一](https://github.co ...
- 深度学习---tensorflow简介
个core可以有不同的代码路径.对于反向传播算法来说,基本计算就是矩阵向量乘法,对一个向量应用激活函数这样的向量化指令,而不像在传统的代码里会有很多if-else这样的逻辑判断,所以使用GPU加速非常 ...
- 吴裕雄--天生自然 神经网络人工智能项目:基于深度学习TENSORFLOW框架的图像分类与目标跟踪报告(续四)
2. 神经网络的搭建以及迁移学习的测试 7.项目总结 通过本次水果图片卷积池化全连接试验分类项目的实践,我对卷积.池化.全连接等相关的理论的理解更加全面和清晰了.试验主要采用python高级编程语言的 ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】
转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...
- AI学习---深度学习&TensorFlow安装
深度学习 深度学习学习目标: 1. TensorFlow框架的使用 2. 数据读取(解决大数据下的IO操作) + 神经网络基础 3. 卷积神经网络的学习 + 验证码识别的案例 机器学习与深度学 ...
- 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识
深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...
- 深度学习Tensorflow相关书籍推荐和PDF下载
深度学习Tensorflow相关书籍推荐和PDF下载 baihualinxin关注 32018.03.28 10:46:16字数 481阅读 22,673 1.机器学习入门经典<统计学习方法&g ...
- 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别
深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...
- 神经网络优化算法:梯度下降法、Momentum、RMSprop和Adam
最近回顾神经网络的知识,简单做一些整理,归档一下神经网络优化算法的知识.关于神经网络的优化,吴恩达的深度学习课程讲解得非常通俗易懂,有需要的可以去学习一下,本人只是对课程知识点做一个总结.吴恩达的深度 ...
随机推荐
- $("节点名").html("字符串")和$("节点名").text("字符串")区别
1. 经过html方法: $(".js_info").html("~!`@#$%^& ";'<>\=/-!·#¥%…&*()—+|` ...
- [转]QList内存释放
QList<T> 的释放分两种情况: 1.T的类型为非指针,这时候直接调用clear()方法就可以释放了,看如下测试代码 #include <QtCore/QCoreApplicat ...
- Treats for the Cows 区间DP POJ 3186
题目来源:http://poj.org/problem?id=3186 (http://www.fjutacm.com/Problem.jsp?pid=1389) /** 题目意思: 约翰经常给产奶量 ...
- mysql处理旧数据-使用模板以及临时表,不建议直接使用本表!!
一 业务背景新版本中新建了一个项目的角色表,即每个项目都拥有几个角色,原来历史项目是没有角色的,这就要求使用脚本对表中的历史项目进行处理, 业务需求:每个项目都要有三个角色: 表 : pm_proje ...
- [MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
首先,介绍下关于InnoDB引擎存储格式的几个要点:1.InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理.维护.启用 innodb_file_per_table 选 ...
- 关于Unity启动时间过长(启动黑屏时间长)的问题!!! 牛逼... 思路不错...
http://blog.csdn.net/u012169685/article/details/52068809
- NVME SSD vs SATA SSD(转)
NVMe是个啥?未来SSD主流标准早知 关注固态硬盘的朋友应该对于这个词汇并不陌生,特别是今年NVMe也频繁出现在各大媒体文章中,随着高端SSD市场逐渐从SATA专项PCI-E时,以前的AHCI标准已 ...
- 左列動態添加菜單Repeater
前台代碼: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="left.aspx. ...
- CentOS 6.5通过yum安装和配置MySQL
0x00 说明 Linux安装MySQL一共有两种方式,一种是下载安装包离线安装,另一种就是通过yum在线安装,这里先介绍在线安装的方式,此方法简单方便,出错最少,但是无法控制安装的MySQL版本,如 ...
- Ansible之tags介绍
本节内容: tags介绍 一.tags介绍 我们每次改完配置文件,比如上一篇博客中的的apache.yml,没必要把整个playbook都运行一遍,只需要运行改变了的task.我们可以给task一个标 ...