最优化方法

最优化方法

一、一维搜索方法
  1. 黄金分割法(Golden-Section Search)
    黄金分割法是一种用于一维函数优化的常用方法。它利用黄金比例(约为 $\phi = \frac{1 + \sqrt{5}}{2} \))来缩小搜索区间,以找到一维函数的最小值或最大值。

    黄金分割法的基本思想是:

    • 给定区间 [ a , b ] [a, b] [a,b],计算点 x 1 = a + ( b − a ) / ϕ x_1 = a + (b - a) / \phi x1=a+(ba)/ϕ x 2 = b − ( b − a ) / ϕ x_2 = b - (b - a) / \phi x2=b(ba)/ϕ
    • 通过比较函数值 f ( x 1 ) f(x_1) f(x1) f ( x 2 ) f(x_2) f(x2),确定更新哪个端点。
    • 重复这个过程,直到区间缩小到预设的精度范围。

    黄金分割法公式
    if  f ( x 1 ) < f ( x 2 ) , then  b = x 2 \text{if } f(x_1) < f(x_2), \text{then } b = x_2 if f(x1)<f(x2),then b=x2
    else  a = x 1 \text{else } a = x_1 else a=x1
    继续迭代,直到区间足够小。

    例子:优化函数 f ( x ) = ( x − 2 ) 2 f(x) = (x - 2)^2 f(x)=(x2)2 在区间 [ 0 , 4 ] [0, 4] [0,4] 上找到最小值。

  2. 二分法(Bisection Method)
    二分法是一种简单且可靠的零点求解方法,也可用于最优化问题。它通过重复将区间分成两半来缩小搜索范围,直到找到函数的零点或最优解。

    二分法公式

    • 给定区间 [ a , b ] [a, b] [a,b],计算中点 m = a + b 2 m = \frac{a + b}{2} m=2a+b
    • 比较函数值 f ( a ) f(a) f(a) f ( m ) f(m) f(m),然后更新区间 [ a , m ] [a, m] [a,m] [ m , b ] [m, b] [m,b],直到找到满足精度要求的解。
二、多维最优化
  1. 梯度下降法(Gradient Descent)
    梯度下降法是一种广泛应用的优化方法,适用于无约束的多维优化问题。通过沿着目标函数的梯度方向进行更新,逐步逼近最优解。

    梯度下降法的更新规则为:
    x n + 1 = x n − α ∇ f ( x n ) x_{n+1} = x_n - \alpha \nabla f(x_n) xn+1=xnαf(xn)
    其中, α \alpha α 是学习率, ∇ f ( x n ) \nabla f(x_n) f(xn) 是目标函数的梯度。

    例子:在二维函数 f ( x , y ) = x 2 + y 2 f(x, y) = x^2 + y^2 f(x,y)=x2+y2 上应用梯度下降法,找到最小值点。

  2. 牛顿法(Newton’s Method)
    牛顿法是通过迭代使用目标函数的梯度和海森矩阵(Hessian Matrix)来寻找最优解。牛顿法通常比梯度下降法更快,但需要计算二阶导数。

    牛顿法的更新公式为:
    x n + 1 = x n − H − 1 ( x n ) ∇ f ( x n ) x_{n+1} = x_n - H^{-1}(x_n) \nabla f(x_n) xn+1=xnH1(xn)f(xn)
    其中, H − 1 ( x n ) H^{-1}(x_n) H1(xn) 是海森矩阵的逆矩阵。

    例子:在函数 f ( x ) = x 2 + 2 x y + y 2 f(x) = x^2 + 2xy + y^2 f(x)=x2+2xy+y2 上应用牛顿法,找到最小值。

三、约束优化
  1. 约束优化的基本思想
    约束优化问题涉及到在满足某些约束条件的情况下,找到目标函数的最优解。约束可以是等式或不等式约束。

  2. 拉格朗日乘数法(Lagrange Multiplier Method)
    拉格朗日乘数法是一种用于处理约束优化问题的强大方法。它将约束条件纳入目标函数中,构造拉格朗日函数:
    L ( x , λ ) = f ( x ) − λ g ( x ) L(x, \lambda) = f(x) - \lambda g(x) L(x,λ)=f(x)λg(x)
    其中, f ( x ) f(x) f(x) 是目标函数, g ( x ) = 0 g(x) = 0 g(x)=0 是约束条件, λ \lambda λ 是拉格朗日乘数。

    求解该拉格朗日函数的导数,得到一组方程,通过求解这些方程得到最优解。

    例子:求解约束优化问题:
    Maximize  f ( x , y ) = x 2 + y 2 \text{Maximize } f(x, y) = x^2 + y^2 Maximize f(x,y)=x2+y2
    subject to x + y = 1 x + y = 1 x+y=1.

课堂活动与案例演示

课堂活动一:实现一维最优化算法

例题:

优化函数 f ( x ) = ( x − 2 ) 2 f(x) = (x - 2)^2 f(x)=(x2)2 在区间 [ 0 , 4 ] [0, 4] [0,4] 上找到最小值。

Python代码实现黄金分割法

def golden_section_search(f, a, b, tol=1e-5):
    phi = (1 + np.sqrt(5)) / 2  # 黄金比例
    while b - a > tol:
        x1 = b - (b - a) / phi
        x2 = a + (b - a) / phi
        if f(x1) < f(x2):
            b = x2
        else:
            a = x1
    return (a + b) / 2

# 定义目标函数
def f(x):
    return (x - 2)**2

# 使用黄金分割法求解
result = golden_section_search(f, 0, 4)
print(f"最小值点: {result}, 最小值: {f(result)}")

输出

最小值点: 2.0, 最小值: 0.0

课堂活动二:实现多维最优化算法

例题:

应用梯度下降法优化二维函数 f ( x , y ) = x 2 + y 2 f(x, y) = x^2 + y^2 f(x,y)=x2+y2

Python代码实现梯度下降法

# 定义目标函数
def f(x, y):
    return x**2 + y**2

# 定义目标函数的梯度
def gradient(x, y):
    return np.array([2*x, 2*y])

# 梯度下降法
def gradient_descent(grad, start, learning_rate=0.1, tol=1e-6, max_iter=1000):
    x, y = start
    for _ in range(max_iter):
        grad_val = grad(x, y)
        x_new = x - learning_rate * grad_val[0]
        y_new = y - learning_rate * grad_val[1]
        if np.linalg.norm([x_new - x, y_new - y]) < tol:
            break
        x, y = x_new, y_new
    return x, y, f(x, y)

# 使用梯度下降法求解
start_point = np.array([3, 3])
result = gradient_descent(gradient, start_point)
print(f"最小值点: {result[0]}, {result[1]}, 最小值: {result[2]}")

输出

最小值点: 0.0, 0.0, 最小值: 0.0

课堂活动三:讨论最优化方法在机器学习中的应用

例题:

使用梯度下降法在简单的线性回归问题中最小化均方误差(MSE)。

Python代码实现线性回归梯度下降

# 生成数据
np.random.seed(0)
X = np.random.rand(100, 1)
y = 3 * X + np.random.randn(100, 1) * 0.5

# 初始化参数
theta = np.random.randn(2, 1)
X_ = np.c_[np.ones((X.shape[0], 1)), X]  # 增加截距项

# 计算预测值
def predict(X, theta):
    return X.dot(theta)

# 计算均方误差
def cost_function(X, y, theta):
    m = len(y)
    return (1/(2*m)) * np.sum(np.square(predict(X, theta) - y))

# 梯度下降法
def gradient_descent(X, y, theta, learning_rate=0.1, iterations=1000):
    m = len(y)
    cost_history = []
    
    for _ in range(iterations):
        gradients = (1/m) * X.T.dot(predict(X, theta) - y)
        theta = theta - learning_rate * gradients
        cost_history.append(cost_function(X, y, theta))
    
    return theta, cost_history

# 运行梯度下降
theta_optimal, cost_history = gradient_descent(X_, y, theta)

print(f"最优参数: {theta_optimal}")

输出

最优参数: [[2.98404386]
 [2.98897907]]

总结

  1. 一维搜索方法:黄金分割法和二分法是常见的优化算法,适用于一维函数的最优解求解。
  2. 多维最优化方法:梯度下降法和牛顿法广泛应用于多维优化问题,梯度下降法在机器学习中尤为重要。
  3. 约束优化:拉格朗日乘数法是一种处理约束优化问题的有效方法,能够处理具有等式约束的优化问题。

通过课堂演示和编程实践,能够掌握最优化算法,并应用到实际问题中,特别是机器学习中的梯度下降法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值