当前位置: 主页 > 资讯中心 > 常见问题 » Scipy: optimize 使用minimize梯度下降进行多参数优化
对于有些问题,其中有许多参数,有时甚至是数十上千个,如深度学习中的神经元权重,又或者是生活中常见的线性规划问题,对于较少的参数还可以利用穷举的方法找出最优的参数组合,这种方式虽然笨拙,但是可以看到整个参数在搜寻域上的变化,但当参数更多的时候,这种方法就不适用了,费时费力,很难确定出最优组合。
在多参数优化问题中,梯度下降是一个非常常用的方法,尽管他会进入局部最优,但他却是最简单直观的方法,除此之外,多参数调优还可以用退火算法,蚁群算法等等。具体介绍可参考:
用什么优化算法(遗传算法, 神经网络等)解决多个参数的优化问题? - 泳鱼的回答 - 知乎
用什么优化算法(遗传算法, 神经网络等)解决多个参数的优化问题?用什么优化算法(遗传算法, 神经网络等)解决多个参数的优化问题? - 浅笑bxyz的回答 - 知乎
用什么优化算法(遗传算法, 神经网络等)解决多个参数的优化问题?关于这个问题在scipy中有一模块optimize,其中的minimize函数可以用梯度下降很方便地解决这个问题。
这里会简单举例说明minimize函数的使用,并对其中的传入参数做简单的介绍:
from scipy.optimize import minimize
# 定义需要优化的函数
def function(x):
# x是要优化的参数列表
# tmp 是要优化的函数
tmp=100/(x[0]**2 + x[1]**2 + x[2]**2 + x[3]**2)
if tmp >=0:
return tmp
else:
return -tmp
# 给定初始参数
initial_guess=[1.0, 2.0, 3.0, 1.0]
# 给定参数范围
parameter_bounds=[(0.0, 10.0), (0.0, 5.0), (1.0, 100.0), (0.0, 200.0)]
# 调用优化函数
result=minimize(function, initial_guess, bounds=parameter_bounds)
# 打印优化后的参数
print("优化后的参数:", result.x)
print("优化后的函数值:", result.fun)
2. minimize
def minimize(fun, x0, args=(), method=None, jac=None, hess=None,
hessp=None, bounds=None, constraints=(), tol=None,
callback=None, options=None):
fun:待优化函数
x0:初始参数
method:梯度下降方法
jac:计算梯度的函数
bounds:参数范围
tol:当两次计算小于tol时,认为达到了收敛
options:最大的迭代次数