coursera《机器学习》吴恩达-week1-03 梯度下降算法
梯度下降算法
- 最小化代价函数J
- 梯度下降
- 使用全机学习最小化
- 首先查看一般的J()函数
- 问题
- 我们有J(θ0, θ1)
- 我们想获得 min J(θ0, θ1)
- 梯度下降适用于更一般的功能
- J(θ0, θ1, θ2 …. θn)
- min J(θ0, θ1, θ2 …. θn)
这一算法如何工作?:
- 从初始假定开始
- 从0,0开始(或任何其他值)
- 保持一点点的改变θ0和θ1,来试图减少
- 每次更改参数时,可以选择这降低了梯度J(θ0, θ1)的最可能的
- 重复
- 这样做直到你收敛到局部的最低点
- 有一个有趣的性质
- 你开始的位置可以确定你最终的最低点
- 这里我们可以看到一个初始化点产生一个局部最小值
- 另一个初始化点产生了另一个局部最小值
- 你开始的位置可以确定你最终的最低点
更正式的定义
- 重复以下步骤直到收敛
- 这是什么意思?
- 通过将θj设置为θj减去α倍的局部成本函数对于θj的导数
- 符号
- :=
- 表示赋值
- NB a = b是 真实断言
- :=
- α (alpha)
- 是一个叫做学习速率的数字
- 控制你采取的更新速度有多大
- 如果α大,则具有较大的下降幅度
- 如果α小,则幅度较小
- 导数
- 之后详细解释 - 一个巧妙的实现梯度下降算法的实现
- 如下处理θ0和θ1
- For j = 0 and j = 1 意味着同时更新θ0和θ1的值
- 如何实现?
- 为θ0和θ1计算等式右手侧
- 所以我们需要一个临时值
- 然后,更新θ0和θ1的同时
- 我们以图形方式显示
- 我们以图形方式显示
- 为θ0和θ1计算等式右手侧
- 如果您实现非同步更新,则不是梯度下降,并且会出现异常
- 但它可能看起来是对的 - 所以重要的是要记住这一点!
- 了解算法
- 要了解梯度下降,我们将返回一个更简单的函数,我们最小化一个参数来帮助更详细地解释算法
- 当θ1是一个实数时 ,min θ1 J(θ1)
- 算法中的两个关键术语
- α(alpha)
- 细微差别
- 偏导与导数
- 当我们有多个变量但是只相对于一个变量导出时,使用偏导数
- 当我们相对于所有变量导出时,使用导数 - 微分项
- 导数说明
- 在这一点做切线并观察切线斜率
- 所以向下移动会生成一个负导数,α总是正的。因此更新j(θ1) 到一个更小的值。
- 类似的,向上移动会使得j(θ1) 更大
- alpha(α)
- 如果alpha太小或太大,会发生什么
- 太小
- 步进太小
- 太耗时了
- 太大了
- 可能错过最小值,最终不能收敛
- 太小
- 如果alpha太小或太大,会发生什么
- 当你获得一个局部最小值
- 此处切线斜率\导数为0
- 因此微分项也为0
- alpha*0=0
- 则θ1=θ1-0
- θ1将保持不变
- 当您接近全局最小值时,导数项变小,所以即使alpha固定,您的更新也会变小
- 随着算法的运行,当您接近最小值时,您将采取较小的步骤
- 所以不需要随着时间的推移来改变alpha
梯度下降的线性回归
- 应用梯度下降来最小化平方差代价函数J(θ0, θ1)
- 现在我们有一个偏导数
- 现在我们展开第一对表达式、
- J(θ0, θ1) = 1/2m….
- hθ(x) = θ0 + θ1*x
- 当我们需要决定每个参数的导数时:
- When j = 0
- When j = 1
- 标识出针对于θ0和θ1的偏导数
- 当我们根据j = 0和j = 1对这个表达式求导时,我们得到以下结果
- 当我们根据j = 0和j = 1对这个表达式求导时,我们得到以下结果
- 要检查这个,你需要知道多元微积分
- 所以我们可以将这些值重新插入梯度下降算法
- 它是如何工作的
- 遇到不同的局部最优的风险
- 线性回归代价函数总是一个凸函数 - 总是有一个最小值
- 碗型曲面
- 一个全局最优
- 因此梯度下降总会收敛到全局最优
- 实践中
- 因此梯度下降总会收敛到全局最优
- 初始化:
- θ0 = 900
- θ1 = -0.1
- 最终达到全局最低点
- 这实际上是批量梯度下降
- 指的是在每个步骤中,您可以查看所有的培训数据
- 每个步骤计算m个训练样例
- 有时,非批次版本存在,它们查看小数据子集
- 我们将在课程的后面研究其他形式的梯度下降(当m太大时使用)
- 存在用于找到最小函数的解的数值解
- 正则方程 法
- 渐变下降可以更好地扩展到大型数据集
- 用于大量的语境和机器学习
下一步 - 重要的扩展
两个算法的扩展
- 数值解的正则方程
- 为了解决[min J(θ0,θ1)]这个最小化问题,我们使用精确地数值方法而不是不断迭代梯度下降的方法
- 正则方程法
- 有优缺点
- 优点
- 不再是Alpha术语
- 对于一些问题可以快一些
- 坏处
- 更复杂
- 优点
- 我们可以学习更多的功能
我们可以学习更多的函数
- 所以可能有其他参数有助于价格
- 例如与房屋
- 尺寸
- 年龄
- 卧室数字
- 楼层数
- x1,x2,x3,x4
- 例如与房屋
- 有多个功能变得很难绘制
- 不能真正绘制在三维以上
- 符号也变得更加复杂
- 绕过这个最好的方法是线性代数的符号
- 提供符号和一系列可以使用矩阵和向量的事物
- 例如矩阵
- 我们在这里看到这个矩阵显示了我们
- 尺寸
- 卧室数量
- 楼层数
- 家庭年龄
- 所有数据都在一个变量中
- 数字块,将所有数据组织成一个大块
- 向量
- 显示为y
- 向我们显示价格
- 需要线性代数来获得更复杂的线性回归模型
- 线性代数对于制作计算效率高的模型是有好处的(如后所述)
- 提供使用大量数据集的好方法
- 通常,问题的向量化是常见的优化技术