我对优化算法之认识
以下皆为我个人见解,如有偏差实属正常情况。
- 优化问题概述
优化问题大抵可以抽象成以下描述,
有n个自变量X,对X有一个目标函数,我们需要求解其满足目标函数的情形,往往是极大值或者极小值,同时对于X,有一系列约束C。
我认为优化算法属于一种解题模型,不是问题模型,即使同一个问题,通过构造不同的解题模型,也就是自变量和目标函数,往往可以影响解题模型的效率,甚至是十分可解。
对于这类优化问题,往往存在着最优解法和渐进解法,最优解法是指通过某种方式直接访问最优解从而达到最优,而渐进解这是通过随机得到一个解,然后不断访问该解的相邻解来达到最终访问到一个较优解。/*我对两者的理解,前者往往是基于插值的,后者则基于交换。*/
最优解法在实际实施上,往往非常困难,甚至有些问题没有好的最优解法,所以经常使用渐进解法。对于优化问题,可分为离散问题和连续问题,连续问题如求解广义线性模型(例如线性回归和逻辑回归)中的权重,而离散问题则如求图的最短路径。
2连续问题
连续问题的最优解法往往是复杂的,广义线性模型中,权重求解的直接求解方式有一种矩阵直接求解的方式,但这种方式不仅对矩阵有一定要求,而且在矩阵行列较大的问题里,算法所需时间的也大幅度增长。
连续问题的渐进解法最常用的就是在机器学习中非常常用的梯度法了。
/* 一下这段贴的别人的 */
梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“。最速下降法越接近目标值,步长越小,前进越慢。梯度下降法的搜索迭代示意图如下图所示:
梯度下降法的缺点:
(1)靠近极小值时收敛速度减慢,如下图所示;
(2)直线搜索时可能会产生一些问题;
(3)可能会“之字形”地下降。
从上图可以看出,梯度下降法在接近最优解的区域收敛速度明显变慢,利用梯度下降法求解需要很多次的迭代。
在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
对批量梯度下降法和随机梯度下降法的总结:
批量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。
随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。
/*这段贴的别人的*/
还有一种方法是牛顿法以及牛顿法的各种改进。/*我看的这篇文章中,着重讲解了牛顿法和拟牛顿法,我在学习数值分析时接触过牛顿法,在那时提供了一系列牛顿法的些许改进,拟牛顿法大概是比较有效的方法所以被这篇文章的作者单独提出,不过大体思想应该算是牛顿法的改进,我们可以称他们为牛顿法族:)*/牛顿法主要用于求解y=0时x的值,对于某些求极小值的问题,可以使用这个方法,牛顿法的特点是收敛速度非常快。在此不做赘述。
3.离散问题
离散问题诸如TSP问题,其最优解法实质是对解空间生成树的遍历,而较优解法则是对解空间交换移动,在百度百科中把解法分为途程构建法和途程改善法。两种方法无非是以一下思路形成的两大类算法。
解空间生成树(途程构件法)
以A,B,C三个城市为例,其生成树为
当然在旅行商问题中这些解某些是重复的,不过我们不考虑剪枝,求解的过程就是从树根到各个叶子的过程。这类算法也可以称作是解的检索。如果以暴力搜索作为解空间生成树的,并且不计算无效解(如AAA等,当然,在这里我们将ABC和BCA都视为有效解,画图太麻烦了啊hd),最坏情况要移动3+3*2+3*2*1次情况(假设回溯不算移动)。
解空间交换图(途程改良法)
途程改良法的解空间如下,以交换任意两个位置的字母为路径。
最坏移动次数是6次,当然这里移动的开销实际上是有差异的,不过我们暂且忽略不计。在实际问题中,不管是最优解法还是较优解法,都是存在指导思想的,即生成树的子节点抉择和交换图的移动方向,都是有一定依据的,以此来减少移动次数。
/*现在讲究大数据,什么都想弄个大数据量解决方案,图就是一种,而且图运算本身就比较复杂,还弄些什么大数据的计算,唉*/
最优算法的派系往往是对解空间生成树的DFS和BFS族算法(贪婪,动态规划,回溯这类),/*族是我胡诌的概念,意思到了就行。*/可以概述为有决策方案遍历和回溯子树。
渐进算法,则是优化算法中常见的启发式算法,如遗传,蚁群,模拟退火之类的,这类算法大概是解决大规模数据时的主要算法。
/*这类启发算法不只可以用在这,也可以用在连续问题里,不过需要对连续问题做离散化,比如x属于[0,1]把x按照0.01为间隔离散成为100个离散值,在使用这类算法*/
4.拉格朗日松弛
基本原理
将目标函数中造成问题难的约束吸收到目标函数中,并保持目标函数的线性,使问题更加容易求解。
优化目的
在一些组合优化中,在原问题中减少一些约束,使得问题的求解难度大大降低(称这类约束为难约束)。
/*这个没太仔细看,有需要的时候调用学习一下*/