nesta算法讲座
- 格式:doc
- 大小:479.50 KB
- 文档页数:12
最强大脑康斯迭代解法全文共四篇示例,供读者参考第一篇示例:最强大脑是一档以脑力挑战为主题的电视节目,每一期都有各种各样的脑力挑战项目,让选手们在紧张的氛围中展示自己的智慧和能力。
而康斯迭代解法,是一种在最强大脑节目中经常出现的解题方法,被称为是最强大脑中的“杀手锏”。
那么,康斯迭代解法究竟是什么?它为何在脑力挑战中如此强大?本文将为您详细介绍康斯迭代解法,并解析其在最强大脑中的应用。
康斯迭代解法,源自于数学中的一种迭代算法,是一种通过重复执行某种操作来逐步逼近问题解的方法。
在最强大脑中,康斯迭代解法常用于解决一些复杂的数学难题或逻辑题目。
其优势在于可以通过多次迭代计算,逐步逼近最终解,并在有限的时间内给出较为准确的答案。
在最强大脑的比赛中,选手们常常需要在极短的时间内完成题目,康斯迭代解法的高效性和准确性使其成为选手们解题的首选方法之一。
康斯迭代解法是最强大脑中一种重要的解题方法,通过反复迭代,逐步逼近问题的解。
在最强大脑的各种脑力挑战中,康斯迭代解法的高效性和准确性得到了充分展示。
希望通过本文的介绍,读者们能够更加深入地了解康斯迭代解法,并在脑力挑战中获得更好的表现。
【这篇文章的长度还没有达到要求,可以继续扩充康斯迭代解法的应用领域、原理等方面的内容来完善。
】第二篇示例:最强大脑康斯迭代解法是一种高效的计算方法,它可以帮助人们解决复杂的问题,并找到最优解。
康斯迭代算法是一种优化算法,它基于数学和统计原理,通过不断调整参数值来逼近最优解。
在计算机科学、人工智能和运筹学等领域,康斯迭代算法都得到了广泛的应用。
下面我们将详细介绍最强大脑康斯迭代解法的原理和应用。
一、康斯迭代算法的原理康斯迭代算法是一种迭代优化算法,它的基本原理是不断调整参数值,使得目标函数的值不断逼近最优解。
在每一次迭代过程中,算法都会计算目标函数的梯度,并根据梯度的方向来更新参数值。
通过多次迭代,算法可以找到目标函数的极小值点,从而得到最优解。
蚁群算法求函数最大值的程序蚁群算法是一种模拟蚂蚁觅食行为的启发式算法,常用于求解函数最大值问题。
本文将详细介绍蚁群算法的原理和实现步骤,以及一个示例程序。
1.蚁群算法原理蚁群算法基于蚁群觅食行为中的信息素交流和随机跳跃,通过多个智能体(模拟蚂蚁)在解空间中的和信息传递,逐步寻找到函数的最大值。
具体而言,蚁群算法包含以下关键要素:-蚂蚁:代表着算法解空间的个体,通过在解空间中的移动来探索新的解。
-信息素:用于模拟蚂蚁之间的信息传递和集体合作,蚂蚁在移动过程中会根据信息素浓度进行选择。
-目标函数:蚁群算法通过目标函数来评估到的解的优劣,从而引导蚂蚁进行。
-路径选择规则:蚂蚁在移动过程中根据一定的规则选择下一步的移动路径。
信息素浓度、目标函数值等因素都可以作为路径选择规则的参考。
-信息素更新规则:当蚂蚁选择了条路径后,会根据该路径的质量(目标函数值等)来更新路径上的信息素浓度。
2.蚁群算法步骤蚁群算法的一般步骤如下:1.初始化蚂蚁群和信息素矩阵。
2.对每只蚂蚁,计算其适应度并选择下一步的移动方向。
3.更新每只蚂蚁的位置,并根据移动结果更新信息素矩阵。
4.检查是否满足停止条件,如果满足则输出最优解,否则返回步骤23.蚁群算法示例程序下面是一个求解函数f(x)=x^2在[-10,10]范围内的最大值的蚁群算法示例程序。
```pythonimport randomimport math#目标函数def target_function(x):return x ** 2#初始化蚂蚁群ant_count = 100ants = [random.uniform(-10, 10) for _ in range(ant_count)] #初始化信息素矩阵pheromones = [1 for _ in range(ant_count)]#蚁群算法参数max_iter = 100 # 最大迭代次数alpha = 1 # 信息素重要程度因子beta = 1 # 启发因子rho = 0.1 # 信息素挥发因子Q=1#信息素强度best_solution = None#迭代优化过程for iter in range(max_iter):#计算每只蚂蚁的适应度并选择下一步移动方向for i in range(ant_count):ant = ants[i]fitness = target_function(ant)#选择下一步移动方向if random.random( < pheromones[i]:ant += random.uniform(-1, 1) # 信息素浓度高的蚂蚁随机选择一个方向else:ant += random.uniform(-0.1, 0.1) # 信息素浓度低的蚂蚁随机选择一个方向ants[i] = ant#更新最优解if best_solution is None or target_function(ant) >target_function(best_solution):best_solution = ant#更新信息素矩阵for i in range(ant_count):#蚂蚁越接近最优解,释放的信息素越多pheromones[i] = (1 - rho) * pheromones[i] + Q *(target_function(ants[i]) / target_function(best_solution)) #输出最优解print("最大值点坐标为:", best_solution)print("最大值为:", target_function(best_solution))```4.程序解释该示例程序使用Python编写,实现了蚁群算法来求解函数f(x)=x^2在[-10, 10]范围内的最大值。
斯坦纳树解法-概述说明以及解释1.引言1.1 概述概述部分是文章的开篇部分,用于介绍主题和问题背景。
下面是一个示例:概述斯坦纳树(Steiner Tree)是图论中的一个经典问题,旨在找到一个具有最小总权重的联通子图,以连接给定一组节点。
斯坦纳树问题在实际生活中有着广泛的应用,例如通信网络设计、电力系统规划和生物信息学等领域。
本文将详细介绍斯坦纳树的概念、应用领域以及解法的基本原理。
首先,我们将给出斯坦纳树的定义和问题描述,以便读者对该问题有一个清晰的认识。
然后,我们将探讨斯坦纳树在不同领域中的应用,以展示它在实际问题中的重要性。
接下来,我们将介绍一些经典的斯坦纳树解法,包括近似算法和精确算法,并详细讨论它们的基本原理和优缺点。
通过本文的阅读,读者将能够了解斯坦纳树问题的背景和意义,掌握不同领域中的应用案例,并对斯坦纳树解法的基本原理有一定的了解。
此外,我们还将对斯坦纳树解法的优点和局限性进行讨论,并展望未来在这一领域的发展方向。
接下来,在第二节中,我们将开始具体介绍斯坦纳树的概念和应用领域。
1.2 文章结构【文章结构】本文主要分为引言、正文和结论三个部分。
下面将对每个部分进行详细介绍。
1. 引言引言部分主要包括概述、文章结构和目的三个方面的内容。
在概述部分,将简要介绍斯坦纳树解法的背景和重要性。
2. 正文正文部分是文章的核心部分,主要包括斯坦纳树的概念、应用领域和解法的基本原理三个方面的内容。
2.1 斯坦纳树的概念在本小节中,将详细解释什么是斯坦纳树,斯坦纳树的定义和特点。
2.2 斯坦纳树的应用领域本小节将介绍斯坦纳树的应用领域,包括网络通信、电力系统、交通规划等方面的应用案例。
2.3 斯坦纳树解法的基本原理在本小节中,将详细介绍斯坦纳树解法的基本原理和算法,包括构建斯坦纳树的思路和具体步骤。
同时,可以提及一些经典的斯坦纳树解法算法和优化方法。
3. 结论结论部分对斯坦纳树解法的优点和局限性进行总结,并对未来的发展方向进行展望。
蚁群优化算法优化支持向量机的视频分类蚁群优化算法(Ant Colony Optimization, ACO)是一种模拟蚁群觅食行为的启发式算法,它由意大利学者Dorigo等人于1992年提出。
蚁群优化算法是一种基于群体智能的算法,通过模拟蚂蚁在寻找食物时的行为方式,来解决组合优化问题。
蚁群优化算法的核心思想是通过蚂蚁在寻找食物时释放信息素的方式来引导其他蚂蚁找到最优解。
支持向量机(Support Vector Machine, SVM)是一种广泛应用于模式识别、数据挖掘和机器学习领域的监督学习算法。
SVM以最大化分类间隔为目标,将数据映射到高维空间中,通过构建一个最优超平面来实现数据的分类。
视频分类是指将视频数据按照一定的规则或者特征进行分类,以便于后续的检索、管理和分析。
视频分类在视频内容检索、视频监控、视频编辑和视频推荐等方面有着广泛的应用。
本文将介绍蚁群优化算法在优化支持向量机用于视频分类中的应用。
将介绍视频分类领域的研究现状,然后介绍蚁群优化算法和支持向量机算法的原理,最后具体分析蚁群优化算法优化支持向量机用于视频分类的应用。
一、视频分类研究现状随着互联网技术的不断发展,视频数据呈现出爆炸式增长的趋势,视频分类作为对视频数据进行处理和管理的重要手段,受到了广泛关注。
目前,视频分类主要分为基于内容的视频分类和基于行为的视频分类两大类。
基于内容的视频分类主要是根据视频的内容特征对视频进行分类,如颜色、纹理、运动特征等。
这种方法通常需要使用图像处理技术和机器学习算法来提取视频的特征,并进行分类。
目前,视频分类技术面临的主要问题包括特征提取的难度、特征表达的复杂性和分类准确度的提升。
为了解决这些问题,研究人员将一些优化算法引入到视频分类中,以提高分类准确度和效率。
二、蚁群优化算法的原理与应用蚁群优化算法是一种基于蚂蚁在寻找食物时释放信息素的方式来引导其他蚂蚁找到最优解的启发式算法。
蚂蚁在寻找食物时会释放信息素,并且路径上的信息素浓度会影响其他蚂蚁的选择。
Tarantula 算法是一种基于遗传算法的路径规划方法,适用于机器人和自主车辆在不同环境中的导航和避障。
Tarantula 算法原名Spiderbot,由英国牛津大学机器人实验室开发,其核心思想是将遗传算法与机器人的实际运动学模型相结合,使机器人能够在复杂环境中自主导航。
Tarantula 算法的主要步骤如下:
1. 初始化种群:创建一群具有随机运动策略的机器人,每个机器人的运动策略表示为一条路径。
2. 评估适应度:根据机器人在环境中的碰撞情况和目标到达情况,计算每个机器人路径的适应度值。
适应度值越高,表示路径越好。
3. 选择操作:采用轮盘赌选择法,从当前种群中选择具有较高适应度值的机器人,生成新一代种群。
4. 交叉操作:在新一代种群中,随机选择两个机器人,将它们的路径进行交叉,生成新的路径。
交叉点可以是随机选择的,也可以是基于一定规则的。
5. 变异操作:在新生成的路径中,引入一定程度的随机变异,以保持种群的多样性。
6. 更新种群:根据新一代种群的路径质量和适应度值,更新原始种群。
7. 终止条件:当满足终止条件(如达到最大迭代次数或找到满足要求的路径)时,算法结束。
Tarantula 算法通过不断优化机器人的运动路径,使其在避开障碍物的同时,尽量靠近目标。
与其他路径规划算法相比,Tarantula 算法具有较好的全局搜索能力和适应性,适用于多种环境和场景。
蚁群算法在连续空间寻优问题求解中的应用蚁群算法是一种启发式优化算法,经常用于解决连续空间寻优问题。
蚁群算法的基本思想是模拟蚂蚁在寻找食物时的行为,通过不断的搜索和信息交流来寻找最优解。
具体地,蚁群算法将搜索空间看作是一个地图,将每个搜索点看作是一座城市。
蚂蚁在搜索过程中通过信息素量来指导搜索方向,同时不断更新信息素,以便更好地指导后续的搜索。
在连续空间寻优问题中,蚁群算法可以通过以下步骤进行求解: 1. 确定目标函数:需要明确需要优化的目标函数,以便判断算
法是否收敛。
目标函数可以是连续的,也可以是离散的。
2. 初始化参数:需要确定蚂蚁个数、信息素初始值、挥发系数、启发式函数等参数。
3. 蚂蚁搜索:每个蚂蚁从随机的起始点开始,按照信息素量和
启发式函数确定搜索方向,直到达到终止条件。
在搜索过程中,每个蚂蚁通过更新信息素来指导搜索方向。
4. 更新信息素:在所有蚂蚁完成搜索后,更新每个搜索点的信
息素量。
一般情况下,信息素量会随着时间的推移而挥发,以便搜索能够更好地探索新的搜索空间。
5. 判断是否收敛:当目标函数的变化小于预定的阈值时,算法
可以认为已经收敛,可以结束搜索过程。
否则,需要重复步骤 3-5 直到满足条件。
总的来说,蚁群算法在解决连续空间寻优问题时具有很好的效果。
它可以快速地搜索整个搜索空间,同时具有很好的全局搜索能力和局部搜索能力。
当问题具有多个局部最优解时,蚁群算法可以通过信息素量的作用,避免落入局部最优解而无法跳出。
Nesterov momentum是深度学习领域中常用的一种优化方法,它是基于动量法的改进版本,可以更加有效地加速模型的收敛速度和提高模型的泛化能力。
本文将详细介绍Nesterov momentum的公式及其原理,帮助读者更好地理解和应用这一优化方法。
一、Nesterov momentum的公式Nesterov momentum的公式可以用如下数学表达式表示:v_t = \gamma v_{t-1} + \eta \nabla_{\theta} J(\theta - \gamma v_{t-1})\theta = \theta - v_t其中,v_t为时间步t的速度向量;\gamma为动量因子,通常取值为0.9或0.99;\eta为学习率;\nabla_{\theta} J(\theta - \gammav_{t-1})为损失函数J在当前参数\theta - \gamma v_{t-1}处的梯度;\theta为模型参数。
公式中第一行表示更新速度向量v_t的计算,第二行表示模型参数\theta的更新。
二、Nesterov momentum的原理Nesterov momentum的原理是基于动量法的改进而来的。
传统的动量法在参数更新时是基于当前位置的梯度以及上一时刻的速度来更新参数,这样可以在参数更新的过程中减小震荡并加速收敛。
但是,动量法存在一个缺点,即在参数更新时可能会出现过整过头问题,导致更新幅度过大,甚至发生震荡。
Nesterov momentum通过在计算梯度时,不是基于当前参数位置的梯度,而是基于往前走一步后的参数位置的梯度,从而可以更准确地指示下一步的移动方向。
这样就可以有效减小过整过头问题,提高模型的收敛速度和泛化能力。
Nesterov momentum可以被看作是一种“聪明”的动量法,能更加准确地指导参数更新的方向。
三、Nesterov momentum的优势Nesterov momentum相较于传统的动量法有以下优势:1. 更准确的梯度指导:通过在计算梯度时,考虑往前走一步后的参数位置的梯度,可以更准确地指导参数更新的方向,提高收敛速度。
AGNES和DIANA是两种层次聚类算法,它们都是用于将相似的对象聚集到一起的。
AGNES(Agglomerative Nesting)是一种凝聚层次聚类算法,它的过程如下:
1. 初始化:将所有对象视为一个簇,每个对象对应一个簇。
2. 迭代:在每一轮迭代中,通过将距离最近的两个簇合并成一个簇,不断地将簇进行合并。
3. 终止:当满足终止条件时,停止聚类过程。
DIANA(Discriminative Agglomerative Nesting)是一种分裂层次聚类算法,它的过程如下:
1. 初始化:将所有对象视为一个簇,每个对象对应一个簇。
2. 迭代:在每一轮迭代中,将距离最远的对象从当前簇中移除,并将其添加到下一个簇中。
3. 终止:当满足终止条件时,停止聚类过程。
总的来说,AGNES和DIANA都是通过将相似的对象聚集到一起来实现聚类的。
但是,它们的具体过程有所不同,AGNES是通过将距离最近的两个簇合并成一个簇来实现聚类的,而DIANA则是通过将距离最远的对象从当前簇中移除并添加到下一个簇中来实现聚类的。
Numeca培训要点具体问题1. 如何取级间的轴向和周向平均值,以避免出差较大误差2. 算全周抽气时如何处理抽气孔和流道的结合面在定常计算中,直接用FNMB连接就行.在boundary conditon点击Full Non Match按钮,将孔与轮毂的结合面选中,建立连接。
3. IGG建模与Autogrid建模网格缝合方法介绍4. 划分网格时,子午面相邻叶排间Interface线有无必要修改成等z线,interface线的形状对计算没有影响,所以没有这个必要5. Fine模块中Convergence Criteria默认设置为-6,可以接受的最低精度是多少, 这个可以自己确定,一般设置在5-6之间,更高的精度意义也不大,收敛还要需要看进出口流量的相对差值。
6. 网格质量三项指标如不能同时满足要求,影响有多大, 确保网格质量主要是为了排除网格对流场的影响。
计算很难精确模拟到实际中的流动,但可以给一个整体的认识,当流场中的流动发生变化,例如在某流量下某处发生分离时,我们倾向于认为此时时流量或压力的变化使得流场参数发生改变,但如果此处的网格存在负网格,那就不好说了。
因为网格表达了叶轮机械的型线,也就是叶轮机械的几何,所以此处的分离也可能是负网格的导致的。
7. 拓扑结构参数调整方法是什么,不同的叶型调整方法也不同,一般比较常用的就是在前缘,尾缘及扭转较厉害的地方用较密的网格,以保证正交性,但也要考虑与稀疏处网格的衔接,以保证膨胀比。
方法与技巧类8. 如何进行大批量取值,降低工作量。
采用并行计算。
可以设置多个算例,进行多核并行计算,一个算例完成后会自动将其设为出场,进入下一个算例。
在Task Manager 内进行设置。
9. 后处理的相关技巧介绍。
后处理中常用技巧有:1)建立宏文件,即将某一个操作步骤用“录像”的形式录制并保存,在下一个算例中,直接点击该宏文件,就会得到上一个算例中操作得到的最后结果,方便进行比较;2)用多窗口。
Nesta 算法以及一些推广各位老师,各位同学,大家好。
今天我给大家讲下Nesta 这个算法。
这个讲稿我写的比较啰嗦,有大量的重复语言,这样做呢,是刻意为之,因为我想给大家留足思考缓冲时间,所以故意写的比较啰嗦。
压缩感知是一种全新的采样方式,当被采样信号很稀疏时,只需要少量的随机采样即可得到信号的全部信息或者近似全部信息。
但是,俗话说,上帝为了打开了一扇门的同时也会关上另一扇门,压缩感知存在的一个重要问题就是如何有效地从压缩后的测量值中恢复出原始信号。
关于压缩感知的理论和应用,文章很多,这里就不介绍了,我们直奔主题。
压缩感知的信号恢复,本质上就是求下面这个优化问题12min ..x s t b Ax ε-≤这个公式的含义,想必大家都比较清楚了,我就不再赘述。
需要说的一点是,实际上,一些二阶算法比如内点法,在求解上述问题时很准确,但是二阶算法计算复杂度很高,难以满足大规模问题。
所以一般来说,我们在设计求解上述问题的算法时,只考虑一阶算法,就是最多只求一阶导数。
目前比较好的一阶算法比较多,例如TWISA[1],FISTA[2],primal-dual[3]算法,增广拉格朗日法[4],approximate message passing[5]算法,贪婪算法,同伦法,很多很多,大家可以在网上搜索文献看。
一般来说,这些算法速度是足够的,但是,一般不够精确,因为拉格朗日乘子λ一般无法精确确定。
还有一个比较现实的问题,就是这些算法(不是全部)很难处理大动态范围信号,什么叫大动态范围信号?其实很简单,就是有时候信号幅度是10,有时候又是0.0001,变化极大。
再有一个问题就是,现实中的信号一般都不是绝对稀疏的,即便通过正交变换,也都不是绝对稀疏,而是近似稀疏,就是少量元素幅值较大,其余的很接近0,但不是0,这也是一个现实的问题。
Nesta 这个算法呢,它的全名叫Nesterov ’s algorithm ,这里的Nesterov 就是大名鼎鼎的Yuri Nesterov ,这个家伙是优化界非常牛的人,他和Arkadi Nemirovski 一起把线性规划推广为锥规划。
Nesta 算法以及一些推广各位老师,各位同学,大家好。
今天我给大家讲下Nesta 这个算法。
这个讲稿我写的比较啰嗦,有大量的重复语言,这样做呢,是刻意为之,因为我想给大家留足思考缓冲时间,所以故意写的比较啰嗦。
压缩感知是一种全新的采样方式,当被采样信号很稀疏时,只需要少量的随机采样即可得到信号的全部信息或者近似全部信息。
但是,俗话说,上帝为了打开了一扇门的同时也会关上另一扇门,压缩感知存在的一个重要问题就是如何有效地从压缩后的测量值中恢复出原始信号。
关于压缩感知的理论和应用,文章很多,这里就不介绍了,我们直奔主题。
压缩感知的信号恢复,本质上就是求下面这个优化问题12min ..x s t b Ax ε-≤这个公式的含义,想必大家都比较清楚了,我就不再赘述。
需要说的一点是,实际上,一些二阶算法比如内点法,在求解上述问题时很准确,但是二阶算法计算复杂度很高,难以满足大规模问题。
所以一般来说,我们在设计求解上述问题的算法时,只考虑一阶算法,就是最多只求一阶导数。
目前比较好的一阶算法比较多,例如TWISA[1],FISTA[2],primal-dual[3]算法,增广拉格朗日法[4],approximate message passing[5]算法,贪婪算法,同伦法,很多很多,大家可以在网上搜索文献看。
一般来说,这些算法速度是足够的,但是,一般不够精确,因为拉格朗日乘子λ一般无法精确确定。
还有一个比较现实的问题,就是这些算法(不是全部)很难处理大动态范围信号,什么叫大动态范围信号?其实很简单,就是有时候信号幅度是10,有时候又是0.0001,变化极大。
再有一个问题就是,现实中的信号一般都不是绝对稀疏的,即便通过正交变换,也都不是绝对稀疏,而是近似稀疏,就是少量元素幅值较大,其余的很接近0,但不是0,这也是一个现实的问题。
Nesta 这个算法呢,它的全名叫Nesterov ’s algorithm ,这里的Nesterov 就是大名鼎鼎的Yuri Nesterov ,这个家伙是优化界非常牛的人,他和Arkadi Nemirovski 一起把线性规划推广为锥规划。
Nesta 这个算法,本质上是Nesterov 的一些思想的综合,主要是他三篇论文的综合,第一篇是A method for unconstrained convex minimization problem with the rate of convergence O(1/k 2),这个论文催生了非常著名的FISTA 算法;第二篇是Smooth minimization of non-smooth functions ,这个论文同样非常重要,是讲如何平滑一个不光滑的函数。
为什么重要呢?很简单,因为我们压缩感知里的l 1范数就是不光滑的凸函数,它在0点是不可导的,所以应用了光滑技术就可以变成光滑函数,就是处处可导函数,这样就很好处理了;第三篇论文是Gradient methods for minimizing composite objective function ,这个论文开发了一种优化方法,收敛速度很快,而且计算很简单。
Nesta 是这三篇论文的综合,后面我们会具体讲。
在上述Nesterov 的第三篇论文里,就是Gradient methods for minimizing composite objective function 这篇论文里,他开发了一种算法,用于求解以下问题()min px Q f x ∈这里呢,要求f (x )是一个处处可导的函数,注意,要求f (x )是可导的,不可导就不行。
p Q 是一个凸集。
此外,还有一个要求,就是f (x )的梯度是有界的,通俗来说,就是f (x )的梯度要满足下面这个不等式()()22f x f y L x y ∇-∇≤-对任意的x,y 都成立L 是个常数。
当满足这些条件以后,反复迭代下面的算法,就得到优化问题的解。
注意,这个算法我们叫它算法1,这个算法看着很复杂,迭代步骤很多,其实不然,这个算法是比较简单的。
因为注意观察,首先,k y 这一步,第一项是个凸函数,后面那一项是个线性函数,可行域是凸集,这可以用传统的拉格朗日乘子法就能解。
k z 呢,p(x)这个函数是我们自己选的,后面会说,p(x)一般也是个l 2范数,所以k z 的求解跟k y 其实是一样的,没区别的。
所以算法1其实是个看似复杂,实际简单的算法。
如果我们取()121k k α=+,()23k k τ=+,那么算法1的收敛速度就是()()()()241k Lp x f y f x k **-≤+,这个收敛速度跟FISTA 基本差不多,都是属于O(1/k 2)级别的收敛速度,已经逼近了一阶算法的理论极限。
注意,算法1只是一般形式,接下来的问题是如何用它来解压缩感知的恢复问题呢?那么很自然地,我们先看看这二者的联系和区别。
首先,压缩感知的恢复问题里可行域是2b Ax ε-≤,这是一个关于x 的凸集,很好验证,所以2b Ax ε-≤可以对应为算法1里的p Q 。
那么1x 是否可以直接套到f(x)呢,答案是不行,因为1x 在0点处是不可导的,它不是处处可导的函数,而算法1是要求f(x)是处处可导的函数,所以1x 不能直接套到f(x)。
这时候,很自然地,我们需要平滑1x ,给它加个东西,让它变成处处可导的函数,而且还不能影响最小化问题的解。
不能说我给1x 加了个东西,然后求解最小化问题,得到的解跟求解l1范数最小化问题的解不一样,那就不行了。
这个时候就要用到Nesterov 第二篇论文里的内容了,就是Smooth minimization of non-smooth functions 。
Nesterov 在这篇论文里提了一种平滑方法,它说如果你的f(x)可以写成如下形式,那就可以平滑,否则,就不一定了()max ,du Q f x u Wx ∈=W 是一个矩阵。
注意看上面这个式子,当一个人拿到这样一个公式,很自然地就会想,什么样的函数f(x)可以写成这样呢?看起来似乎没有哪种函数是这个样子的。
如果你很懂泛函分析的话,就会知道,这种写法,其实指的是范数。
比如l1范数,就可以写成11max ,u x u x ∞≤=这里W 就是I 。
再比如l2范数,也可以写成 221max ,u x u x ≤=这里面有啥规律呢?很简单1max ,n mu xu x ≤=这里m 和n 是一对共轭数,就是说111m n+=。
那为啥要多个W 呢,这是因为比如我们要处理analysis 模型,analysis 模型一般就是12min ..Wx s t b Ax ε-≤这时候11max ,uWx u Wx ∞≤=。
在Nesterov 的文章里,他说如果()max ,du Q f x u Wx ∈=,那么可以这样平滑()()max ,dd u Q f x u Wx p u μμ∈=- (1)这里()d p u 一般选为l2范数就可以,就是()221=2d p u u 。
注意了,我们接下来要用()f x μ代替()f x ,因为()f x μ是一个处处可导的函数,而且对()f x μ求最小化和对()f x 求最小化得到的结果非常非常接近。
Nesterov 给出了()f x μ的梯度为()()f x W u x μμ∇=*,这里()u x μ是公式(1)的最优值,就是公式(1)关于u 的最大值。
而()f x μ∇对应的Lipschitz常数为21L W μ=。
注意了,一般呢,我们要把μ取得很小,因为μ越小,()f x μ和()f x 就越接近。
既然我们得到了平滑后的函数,就可以套用算法1了,这个时候压缩感知的修复问题就变成了()2212min max ,2..xuf x u x us t b Ax μμε∞≤=--≤注意,此时,()()1,,i i i x x f x sign x otherwiseμμμ-⎧<⎪∇=⎨⎪⎩,1L μ=,这两个都很好验证。
这时候我们就可以舒舒服服的套用算法1了,我把算法1再粘一遍现在我们需要考虑的就是k y 和k z 这两步怎么解。
先看k y ,我们把这个问题先写出来()222arg min,2..k k k kx L y x x f x x x s t b Ax με=-+∇--≤这个问题,并不困难,因为目标函数是凸函数,可行域是凸集,所以可以用标准的拉格朗日乘子法来解。
首先我们构造拉格朗日函数就得到()()()22222,,22k k k L L x x x f x x x b Ax μλλε=-+∇-+-- 注意这里用2λ而不是λ是为了求导的时候方便。
构造出拉格朗日函数以后,我们假设(),k y ελ是拉格朗日问题的一对儿对偶解,则(),k y ελ一定满足KKT 条件,就是下面的几个公式ελ()()()()22220kk k k k k b Ay b Ay L y x A Ay b f x εεεμελλελ*-≤≥--=-+-+∇=第一个公式就是可行域,第二个称作拉格朗日乘子的非负性条件,第三个叫complementary 条件,第四个条件是说目标函数的梯度一定可以由约束条件的梯度合成。
KKT 条件就不细讲了,不明白的同学随便找本凸优化的书就可以找到这方面的内容。
根据KKT 条件中的第四项,只要经过简单的运算,我们很容易可以得到()1+kk k I A A y A b x f x L L L εεμλλ**⎛⎫=+-∇ ⎪⎝⎭很明显,要计算出k y ,我们需要计算+I A A L ελ*⎛⎫⎪⎝⎭的逆,此时需要用一个工具,就是著名的Sherman-Morrison-Woodbury 求逆公式,这个求逆公式大家可以在网上查到,这里就不细说了,总之,最后解得的()1k k k y I A A A b x f x L LL εεμελλλ**⎛⎫⎛⎫=-+-∇ ⎪ ⎪+⎝⎭⎝⎭这里要注意了,到目前为止,ελ是未知的。
下面我们要求ελ。
要求ελ,就要用到KKT 条件中的第三个条件,就是complementary 条件()2220kb Ay ελε--=,这个条件其实是说,当222=kb Ay ε- 时,ελ是大于0的,而当222kb Ay ε-≠时,ελ是等于0的。
所以,我们令222=kb Ay ε-,再把k y 代进去,最终得到 ()()()-11=max 0k k L b A x L f x L εμλε---∇-,需要说明的一点是,上面这个公式当=AA I *时才成立,否则不成立。
=AA I *实际上就是说我们的测量矩阵A 是部分傅里叶矩阵,或者部分DCT 矩阵这种。