Summary

不管你用什么路径,也不是什么追踪,到达最大或最小的目标就行

graph LR
C[Optimizer] --> e((Better Value)) --> env[/Objective Function/] --> i((Current Value))
i --> C

#optuna #scikit-learn

静态规划(Static Planning)静态规划算法-CSDN博客
不确定优化入门:用简单实例讲明白随机规划、鲁棒优化和分布鲁棒优化 - 知乎
深度学习时代的不确定性优化(包含多阶段优化与learning-while-optimizing范式) - 知乎

线性规划

史上最详细单纯形法—从理解到计算(带约束规划问题) - 知乎

单纯形法

二次规划

莫罗包络

优化器:非线性规划

非线性规划(一):定义与数值优化方法(梯度法、牛顿法、拟牛顿法、变尺度法)变尺度法的原理-CSDN博客
优化器(Optimizer) - 知乎
优化器 (Optimizer) - MyEdgeTech
深度学习--优化器篇(超保姆级+附代码包含常用各种优化器)深度学习优化器-CSDN博客

class 优化器:
	步长增益 = 学习率 # 前进的胆量
	def 前进(self, 当前位置) -> 下个位置:
		if 传统:
			return 梯度指向(当前位姿)
		if 启发:
			return 采样选取(当前位姿)

基于梯度的方法

梯度下降

需要函数的具体梯度

class GD:
    def __init__(self, function, learning_rate=0.01):
        self.learning_rate = learning_rate
        self.function = function
    
    def grad(self, position):
	    return self.function.精确梯度(position)
	    
	def learning_rate(self):
		return self.learnning_rate
    
    def update(self, position):
        return position - self.learning_rate() * self.grad(position)

随机梯度下降

随机选择一个样本点来计算梯度

class SGD(GD):
	@override
    def grad(self, position):
	    return self.function.随机采样求出坡度来估计梯度(position)

Adagrad

根据参数的历史梯度方和根来调整学习率,参数频繁出现则学习率逐渐减小

class SGD(GD):
	grad_addup = 1
	@override
    def update(self, position):
	    self.grad_addup =  self.grad_addup + grad_precise**2
	    self.learnning_rate = self.learnning_rate() / math.sqrt()
        return super().update(position)

动量随机梯度下降

给目标点赋予惯性质量

基于二阶梯度的方法

牛顿法

高斯牛顿法

鸟群算法(粒子群)

人工智能结课作业-遗传算法/粒子群寻优/蚁群算法解决TSP问题 - roadwide - 博客园

Question

或许可以视为动量随机梯度下降的集群化

鸟怎么飞?

vᵢᵈ = w × vᵢᵈ + c₁ × r₁ × (pbestᵢᵈ - xᵢᵈ) + c₂ × r₂ × (gbestᵈ - xᵢᵈ)

c是学习因子(学习率),r是随机数。这个公式包含三个部分:

v[i]v[i1]=cmexmy best[i]rus+cusxour best[i]rus