博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
梯度下降~ML
阅读量:6694 次
发布时间:2019-06-25

本文共 946 字,大约阅读时间需要 3 分钟。

  先得学会文章的代价函数,再来理解梯度下降。

  我们要求出代价函数中 J(θ0,θ1) 为最小值时的θ0和θ1,梯度下降就是一种常见的求解方式。

  操作:

  • 初始化θ0,θ1
  • 改变θ0,θ1使得J(θ0,θ1)取最小值或是局部最小值

  用两个图解释一下为什么还有局部最小值的情况

 

  两块红色的区域可以理解成山,梯度下降可以理解成就是为了下山。但是可能有两个地方能到达山底。

  而梯度下降的流程

  • 站在一个点
  • 环绕四周,找到坡度最大方向
  • 向那个方向走一段距离
  • 到达下一个点
  • 重复第一步

  而第二个图可以看出我们选取的起始点相差很少,但是却可能得到不同的结果。

  下面我们给出梯度下降算法:

  反复执行  (for j = 1 and j = 0) 

  • α :学习速率(可以理解为下山的速度)
  •  : 导数项

  值得注意的一点是这个梯度下降算法必须保证Simultaneous update(同步更新) 意思为:

  

  而这种是错误的方式:

  梯度下降函数解析

  我们把函数改写:(我们用一个θ来表示)

  

  这种写法和我们前面的写法是一样的,不过后面的式子表达的是导数,所以我们在数学中用d来表示。

  

  这个图就是上面的函数的一个状态,斜率是为正的,所以我们θ1减去一个正数应该左移。就会越来越接近底部。反之同理。

  现在我们来讨论一下α的过大或过小

  α过小

  我们之前说过α是梯度下降的速率,如果过小的话,会下降的非常慢。

  α过大

  可能会越过最低点,无法收敛,甚至发散。

  为什么会导致发散呢?

  原因:有可能α过大到跑到比低点到原点的距离还远的距离,就会发现斜率变大了,整个速率又变大了,就会离最低点越来越远。

  现在我们讨论一个特殊情况,如果刚开始的时候θ就在局部最低点它会怎么移动呢?

  答案是不动,因为在局部最低点的时候斜率为0,不管你下降速率多大他们的乘积还是0,所以是不会变的。

  现在我们讨论一下斜率

    用上面图的例子,我从一个位置梯度下降到另一个位置,他的斜率是不是稍微缓和了一下。因为下降速率是固定值,所以下降的就会越来越慢。

转载于:https://www.cnblogs.com/SHOR/p/6902692.html

你可能感兴趣的文章
Linux中apt与apt-get命令的区别与解释(转)
查看>>
iOS 中多音频处理
查看>>
PHP常用180函数总结
查看>>
React 中的事件处理
查看>>
.NET环境大规模使用OpenTracing
查看>>
Sentry的使用
查看>>
如何在微服务架构中对资源(前端页面+后端接口)进行权限控制
查看>>
前端下载 图片 总结
查看>>
Vue表单输入绑定
查看>>
LINUX下进程打开的文件怎么和底层磁盘关联的?
查看>>
Java 设计模式之命令模式
查看>>
可能是把Java内存区域讲的最清楚的一篇文章
查看>>
PHP中的几个随机数生成函数
查看>>
Anaconda不同envs的pip和python的版本
查看>>
SQLServer之创建全文索引
查看>>
如何以并发方式在同一个流上执行多种操作?--复制流
查看>>
Spring Boot 参考指南(开发Web应用程序)
查看>>
javascript块级作用域处理闭包和释放内存的垃圾回收
查看>>
快速入门React
查看>>
正则表达式语法入门
查看>>