先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注go)
正文
文章目录
已剪辑自: https://zhuanlan.zhihu.com/p/266874840
一个由金属退火启发的算法!
本文主要内容:
- 金属退火的原理
- 模拟退火算法机制
- 模拟退火的流程
- 模拟退火的应用
- 算法小结
1.金属退火的原理
金属退火是将金属加热到一定温度,保持足够时间,然后以适宜速度冷却(通常是缓慢冷却,有时是控制冷却)的一种金属热处理工艺。模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。
如上图,处在低温状态时,固体中分子具有的内能很低,在原本的位置上做小范围的振动。若是将固体加热到一定温度,分子内能将会增加,热运动加剧,分子排列的无序度增加。此时再将温度缓缓降低,在每个温度都达到平衡态(即准静态过程),分子具有的能量逐渐降低,最终回归到有序排列的状态,分子内能也跟着降到最低。
2.模拟退火算法机制
模拟退火算法(Simulated Annealing,SA)
最早的思想是由N. Metropolis
等人于1953
年提出。1983
年,S. Kirkpatrick
等成功地将退火思想引入到组合优化领域。它是基于Monte-Carlo
迭代求解策略的一种随机寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。
介绍模拟退火前,还是有必要先介绍爬山算法。
爬山算法
爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。
爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如上图所示:假设C
点为当前解,爬山算法搜索到A
点这个局部最优解就会停止搜索,因为在A
点无论向那个方向小幅度移动都不能得到更优的解。
模拟退火核心思想
模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合一定的概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。如下图:
这里的“一定的概率”的计算参考了金属冶炼的退火过程,这也是模拟退火算法名称的由来。将温度T当作控制参数,目标函数值f
视为内能E
,而固体在某温度T
时的一个状态对应一个解xix_{i},然后算法试图随着控制参数T的降低,使目标函数f
(内能E
)也逐渐降低,直至趋于全局最小值(退火中低温时的最低能量状态),就像金属退火过程一样。
关于爬山算法与模拟退火,有一个有趣的比喻:
- 爬山算法:兔子朝着比现在高的地方跳去。它找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。
- 模拟退火:兔子喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。
模拟退火数学原理
从上面我们知道,会结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,那么具体的更新解的机制是什么呢?如果新解比当前解更优,则接受新解,否则基于Metropolis
准则判断是否接受新解。接受概率为:
P={1, Et+1<Ete−(Et+1−Et)kT, Et+1≥Et P = \begin{cases} 1,~~~~~~~~~~~~~~~~~ E_{t+1} \lt E_{t} \ e^{\frac{-(E_{t+1} - E_{t})}{kT}},~~~~ E_{t+1} \ge E_{t} \end{cases} \
如上公式,假设当前时刻搜索的解为xtx_{t},对应的系统能量(目标函数)为EtE_{t},对搜索点施加随机扰动,产生新解xt+1x_{t+1},相应地,系统能量为Et+1E_{t+1},那么系统对搜索点从xtx_{t}到xt+1x_{t+1}转变的接受概率就为上公式。具体以下图为例:
假设开始状态在A
,随着迭代次数更新到B
局部最优解,这时发现更新到B
时,能量比A
要低,则说明接近最优解了,因此百分百转移,状态到达B
后,发现下一步能量上升了,如果是梯度下降则是不允许继续向前的,而这里会以一定的概率跳出这个坑,这个概率和当前的状态、能量等都有关系,如果B
最终跳出来了到达C
,又会继续以一定的概率跳出来,直到到达D
后,就会稳定下来。
3.模拟退火的流程
算法实质分两层循环,在任一温度水平下,随机扰动产生新解,并计算目标函数值的变化,决定是否被接受。由于算法初始温度比较高,这样,使E
增大的新解在初始时也可能被接受,因而能跳出局部极小值,然后通过缓慢地降低温度,算法就最终可能收敛到全局最优解,具体流程为:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
存中…(img-Q3IvbNSV-1713568193890)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!