『科学计算_理论』优化算法:梯度下降法&牛顿法

梯度下降法

梯度下降法用来求解目标函数的极值。这个极值是给定模型给定数据之后在参数空间中搜索找到的。迭代过程为:

可以看出,梯度下降法更新参数的方式为目标函数在当前参数取值下的梯度值,前面再加上一个步长控制参数alpha。梯度下降法通常用一个三维图来展示,迭代过程就好像在不断地下坡,最终到达坡底。为了更形象地理解,也为了和牛顿法比较,这里我用一个二维图来表示:

懒得画图了直接用这个展示一下。在二维图中,梯度就相当于凸函数切线的斜率,横坐标就是每次迭代的参数,纵坐标是目标函数的取值。每次迭代的过程是这样:

  1. 首先计算目标函数在当前参数值的斜率(梯度),然后乘以步长因子后带入更新公式,如图点所在位置(极值点右边),此时斜率为正,那么更新参数后参数减小,更接近极小值对应的参数。
  2. 如果更新参数后,当前参数值仍然在极值点右边,那么继续上面更新,效果一样。
  3. 如果更新参数后,当前参数值到了极值点的左边,然后计算斜率会发现是负的,这样经过再一次更新后就会又向着极值点的方向更新。

根据这个过程我们发现,每一步走的距离在极值点附近非常重要,如果走的步子过大,容易在极值点附近震荡而无法收敛。解决办法:将alpha设定为随着迭代次数而不断减小的变量,但是也不能完全减为零。

牛顿法

首先得明确,牛顿法是为了求解函数值为零的时候变量的取值问题的,具体地,当要求解 f(θ)=0时,如果 f可导,那么可以通过迭代公式

来迭代求得最小值。通过一组图来说明这个过程。

当应用于求解最大似然估计的值时,变成?′(θ)=0的问题。这个与梯度下降不同,梯度下降的目的是直接求解目标函数极小值,而牛顿法则变相地通过求解目标函数一阶导为零的参数值,进而求得目标函数最小值。那么迭代公式写作:

当θ是向量时,牛顿法可以使用下面式子表示:

其中H叫做海森矩阵,其实就是目标函数对参数θ的二阶导数。

通过比较牛顿法和梯度下降法的迭代公式,可以发现两者及其相似。海森矩阵的逆就好比梯度下降法的学习率参数alpha。牛顿法收敛速度相比梯度下降法很快,而且由于海森矩阵的的逆在迭代中不断减小,起到逐渐缩小步长的效果。

牛顿法的缺点就是计算海森矩阵的逆比较困难,消耗时间和计算资源。因此有了拟牛顿法。

时间: 2024-11-03 20:50:36

『科学计算_理论』优化算法:梯度下降法&牛顿法的相关文章

『科学计算_理论』最大似然估计

概述 通俗来讲,最大似然估计,就是利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值. 重要的假设是所有采样满足独立同分布. 求解模型参数过程 假如我们有一组连续变量的采样值(x1,x2,-,xn),我们知道这组数据服从正态分布,标准差已知.请问这个正态分布的期望值为多少时,产生这个已有数据的概率最大? P(Data | M) = ? 根据公式 可得: 对μ求导可得 ,则最大似然估计的结果为μ=(x1+x2+-+xn)/n 由上可知最大似然估计的一般求解过程: (1) 写出似然函数

『科学计算』通过代码理解SoftMax多分类

SoftMax实际上是Logistic的推广,当分类数为2的时候会退化为Logistic分类 其计算公式和损失函数如下, 梯度如下, 1{条件} 表示True为1,False为0,在下图中亦即对于每个样本只有正确的分类才取1,对于损失函数实际上只有m个表达式(m个样本每个有一个正确的分类)相加, 对于梯度实际上是把我们以前的最后一层和分类层合并了: 第一步则和之前的求法类似,1-概率 & 0-概率组成向量,作为分类层的梯度,对batch数据实现的话就是建立一个(m,k)的01矩阵,直接点乘控制开

python科学计算_scipy_常数与优化

scipy在numpy的基础上提供了众多的数学.科学以及工程计算中常用的模块:是强大的数值计算库: 1. 常数和特殊函数 scipy的constants模块包含了众多的物理常数: import scipy.constants as CC.c ?#真空中的光速C.h ?#普朗克常数C.pi #圆周率? 在C.physical_constants字典中,通过物理常数的名称访问该物理常数,如: C.physical_constants['speed of light in vacuum'] (2997

分布式_理论_05_ 一致性算法 Paxos

一.前言 二.参考资料 1.分布式理论(五)—— 一致性算法 Paxos 2.分布式理论(五) - 一致性算法Paxos 原文地址:https://www.cnblogs.com/shirui/p/9660822.html

优化算法—梯度下降

转自:https://www.cnblogs.com/shixiangwan/p/7532858.html 梯度下降法,是当今最流行的优化(optimization)算法,亦是至今最常用的优化神经网络的方法.本文旨在让你对不同的优化梯度下降法的算法有一个直观认识,以帮助你使用这些算法.我们首先会考察梯度下降法的各种变体,然后会简要地总结在训练(神经网络或是机器学习算法)的过程中可能遇到的挑战. 目录: 梯度下降的各种变体 批量梯度下降(Batch gradient descent) 随机梯度下降

『科学计算』层次聚类实现

层次聚类理论自行百度,这里是一个按照我的理解的简单实现, 我们先看看数据, 啤酒名 热量 钠含量 酒精 价格Budweiser 144.00 19.00 4.70 .43Schlitz 181.00 19.00 4.90 .43Ionenbrau 157.00 15.00 4.90 .48Kronensourc 170.00 7.00 5.20 .73Heineken 152.00 11.00 5.00 .77Old-milnaukee 145.00 23.00 4.60 .26Aucsberg

『科学计算』线性代数部分作业

最小二乘法求解垂足 from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D A=np.array([[1],[2],[3]]) B=np.array([[1],[1],[1]]) x=np.linspace(-0.5,1,10) x.shape=(1,10) xx=A.dot(x) C=A.T.dot(B) AA=np.linalg.inv(A.T.dot(A)

[算法] 优化算法 梯度下降

导数 导数是一个数,函数y(x)在x0点的导数y'(x0)反应了在x0处y随x的变化快慢 微分 微分指函数值的微小变化 在x0可微:在x0点y和x的微分成线性关系(只与该点函数值有关) 导数可看做函数的微分与自变量的微分之商,故导数又称微商 偏导数 函数在一点处沿坐标轴的变化率 方向导数 函数在一点处沿射线方向的变化率 偏导数是双侧的,方向导数是单侧的.函数f(x,y)在一点处对x偏导数等于沿x轴正向的方向导数 梯度 梯度是一个向量 方向导数沿梯度方向取最大值,最大值为梯度的模,即沿梯度方向函数

数值优化-梯度下降法

NG的课件1,引出常用的优化方法梯度下降法(gradient descent) ? ? 对于 ordinary least squares regression, cost function为 求最小值,意味着求导数为0的位置 ? ? 考虑只有一个样本 ? ? 这叫做LMS update rule (Least Mean Squares) ? ? 对应所有样本的训练集合 ? ? 这种方法叫做batch gradient decent ,与之对应的在样本数目比如海量的情况下,为了计算快速,经常会每