0%

蚁群算法

概念

蚁群算法(Ant Colony Optimization, ACO)是一种受自然界蚂蚁觅食行为的正反馈机制启发的仿生优化算法。在自然界中,蚂蚁通过在路径上释放信息素(pheromone)来标记行进路线,其他蚂蚁倾向于选择信息素浓度较高的路径,从而逐渐收敛到从巢穴到食物源的最短路径。

应用

旅行商问题(TSP)

给定一组城市 \(C = \{c_1, c_2, ..., c_n\}\),旅行商需要从某个城市出发,访问每个城市一次且仅一次,最终回到起点,使得总路程最短。

状态转移概率

假设蚂蚁种群的规模为 \(m\) ,城市的数量为 \(n\) ,城市 \(i\) 和城市 \(j\) 之间的距离记为 \(d_{i,j}\)

在初始情况下,所有蚂蚁分布在各个城市里,各个城市连接路径上的信息素浓度都相同,设为 \(\tau_{init}\),即有: \[ \tau_{i,j}(0)=\tau_{init} \] 蚂蚁 \(k\) 从城市 \(i\) 移动到城市 \(j\) 的概率为: \[ P_{ij}^{(k)}(t) = \begin{cases} \displaystyle \frac{[\tau_{ij}(t)]^{\alpha} \cdot [\eta_{ij}]^{\beta}}{\sum\limits_{l \in \text{allowed}_k} [\tau_{il}(t)]^{\alpha} \cdot [\eta_{il}]^{\beta}}, & \text{if } j \in \text{allowed}_k \\ 0, & \text{otherwise} \end{cases} \] 其中:

  • \(\tau_{ij}(t)\):在时刻 \(t\) 时城市 \(i\)\(j\) 之间的路径 \((i,j)\) 上的信息素浓度;
  • \(\eta_{ij} = \frac{1}{d_{ij}}\):启发函数,通常为城市间距离的倒数;
  • \(\alpha\):控制信息素的重要程度;当 \(\alpha=0\) 时,转移概率只跟距离有关,算法退化成关于路径距离的贪婪算法。
  • \(\beta\):控制启发函数的重要程度;当 \(\beta=0\) 时,则会退化成随机搜索算法。
  • \(\text{allowed}_k\):蚂蚁 \(k\) 尚未访问过的城市集合,每次到达一个城市时进行更新。

确定各个城市的转移概率后,我们就可以使用轮盘赌算法来依照概率选择一个城市作为目的地。

注意:如果 \(\alpha\) 过分大,启发值几乎不起作用,并且一开始所有路径信息素初值一致,该算法就相当于蚂蚁随机走动。如果 \(\beta\) 值(启发值重要程度)过分大,则蚂蚁的每次选择几乎根据路径长度决定,该算法就相当于贪心策略,很难搜索到全局最优解。通常我们将 \(\alpha\) 设置为 1 而将 \(\beta\) 设置成 6。

信息素更新公式

在每一轮迭代结束后,信息素会进行挥发与增强。 \[ \tau_{ij}(t+1) = (1 - \rho) \cdot \tau_{ij}(t) + \sum_{k=1}^{m} \Delta \tau_{ij}^{(k)}(t) \] 其中:

  • \(\rho \in (0,1)\):信息素挥发系数;
  • \(\Delta \tau_{ij}^{(k)}(t)\):蚂蚁 \(k\) 在本轮内在边 \((i,j)\) 上留下的信息素增量。

信息素增量有多种定义。最基础的定义为: \[ \Delta \tau_{ij}^{(k)}(t) = \begin{cases} \displaystyle \frac{Q}{L_k}, & \text{若蚂蚁 } k \text{ 走过边 } (i,j) \\ 0, & \text{否则} \end{cases} \] 其中:

  • \(Q\):常数,控制信息素的总量;
  • \(L_k\):蚂蚁 \(k\) 经过的路径总长度。

假设总共有 \(n\) 个城市,蚂蚁 \(k\) 构建的路径为: \[ P_k = (c_1, c_2, ..., c_n, c_1) \] 其中 \(c_1\) 是起始城市,最终回到它。路径总长度 \(L_k\)​ 是: \[ L_k = \sum_{i=1}^{n} d_{c_i, c_{i+1}}, \quad \text{其中 } c_{n+1} = c_1 \] 注意:虽然在时刻 \(t\) 蚂蚁 \(k\) 未完成周游,但是信息素的更新并不是即刻的,而是滞后到所有蚂蚁完成一趟周游后(即得到完整的 \(P_k\))才执行的。并且并不是在每次蚂蚁转移后都立即对路径上的信息素进行更新,而是在所有蚂蚁都完成一遍对所有城市的访问后,才统一更新各路径信息素的浓度。

各路径上的信息素可以被记录在一个矩阵中。

完整流程

超参数设置中,蚁群数量最好为目标城市数量的 \(1.5\) 倍,信息素挥发因子 \(ρ\) 一般设置在 \([0.2,0.5]\) ,迭代次数一般设置在 \([100,500]\) ,在 scikit-opt 库中,信息素常量 \(Q\) 的值被默认为 \(1\)

生物智能与算法

课程报告要求

课题范围:与生物智能相关

内容:

  • 对已有的方法进行深入阐述,有余力可编程实验并评价
  • 探索新的方法
  • 针对科研中的问题,提出计算智能方法并实验

报告可采用图形摘要、漫画等趣味形式,形成具有科普和专业性质的报告。

提交至学在浙大。

第一部分:选题与文献综述

  1. 研究主题简述 请明确您要研究的生物智能算法,并提供简要介绍。
  2. 相关文献概述 列出一到多篇相关文献,并为每篇文献提供3-5句话的说明,包括:
    • 该文献试图解决的问题。
    • 使用的生物智能算法。
  3. 问题定义 根据参考文献,阐述您打算解决的具体问题。必要时,请使用图表来辅助说明。

第二部分:选题方法详述

  1. 解决方法 分段描述您所采用的方法及建立的模型。在需要的地方,可以使用公式和图表来辅助说明。接下来的部分应详细描述所用方法的算法流程,建议参照LaTeX伪代码环境(algorithm)的格式进行书写。
  2. 数学模型的几何解释 对所述问题的数学模型给出几何解释。对于高维数据,可选择三维数据来绘制示意图。如果难以通过几何方式表达,则进行定性说明即可。
  3. 最优化问题模型的几何解释 描述最优化问题模型的几何意义,同样地,当涉及复杂情况时,考虑使用三维参数数据作图。若难以直观展示,则提供定性分析。如果研究内容不涉及优化模型,则此部分可省略。
  4. 求解过程的几何解释 说明求解过程中涉及到的几何解释,可能的话,利用三维参数数据制作示意图或动态图像(GIF/MP4/PNG格式)。如遇困难,仅需定性描述。非优化类问题则可通过绘制过程仿真图来代替。
  5. 结果展示 展示算法实现后的结果图、效果图或结果表。若未完成实际编码工作,可以直接引用已有文献中的结论,并附上适当注释。若对原算法进行了改进,则需进一步比较新旧版本的效果差异并得出结论。
  6. 结果分析与讨论 对获得的结果进行深入剖析,并提出个人见解。

第三部分:结论与展望

  • 总结 概括所研究算法或其改进版本的主要成效。
  • 未来方向 探讨潜在的研究扩展领域或进一步优化的可能性。

概念

强化学习(英语:Reinforcement learning,简称RL)是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益[1]。强化学习是除了监督学习非监督学习之外的第三种基本的机器学习方法。与监督学习不同的是,强化学习不需要带标签的输入输出对,同时也无需对非最优解的精确地纠正。其关注点在于寻找探索(对未知领域的)和利用(对已有知识的)的平衡[2],强化学习中的“探索-利用”的交换,在多臂赌博机问题和有限MDP中研究得最多。

概念

  • RLVR( Reinforcement Learning with Verifiable Reward ) 带可验证奖励的强化学习
  • OOD( Out-of-Distribution ) 模型在训练数据分布不同的任务/数据上进行测试,用于测试模型泛化能力
  • In-Domain 模型在训练数据分布相似或相同的任务/数据上进行测试,用于测试模型的拟合能力

RLVR 和 SFT

项目 RLVR SFT
全称 Reinforcement Learning with Verifiable Reward Supervised Fine-Tuning
方法类型 强化学习范式 监督学习范式
训练目标 通过奖励信号优化策略 拟合已有标注样本
训练数据 需要奖励函数或轨迹评估机制 需要标注好的输入-输出对
常用场景 高层推理、泛化能力要求高的任务 精细拟合已有任务、in-domain 性能优化

摘要

在OOD 视觉推理任务(如复杂计数/问答)中,RLVR 优于 SFT,而在几何类等分布内任务中,SFT 表现更好。

在 SFT 中强行引入 Chain-of-Thought(CoT)推理,往往会削弱小型 VLM 的性能;相比之下,RLVR 所采用的 GRPO 方法可以自适应选择是否进行 CoT 推理(可以不推理或进行长推理),无需人工干预,同时实现了强泛化能力(SuperClevr 数据集上 RLVR 得分为 68.7%,SFT 仅为 19.4%)。

方法

Visual RL with Verifiable Reward

研究聚焦于对精度要求较高的任务,如计数和数学问题——在这些任务中我们可以较容易地收集基于规则的结果型奖励,用于模型优化。

在给定训练样本 \((x_i, y^{\ast}_i)\) 的情况下,我们要求策略模型 \({\pi}_{\theta}\) (即 VLM)对输入 \(x_i\) 预测输出 \(y_i\) ,并基于真实答案 \(y^{\ast}_i\) 验证预测结果的正确性,从而获得结果型奖励(outcome reward)

为了使模型能够探索不同的解题路径,我们引导策略模型 \({\pi}_{\theta}\) 在输出答案之前生成一个思考过程 \(z_i\) 。整体输出格式如下:

<think>thinking path</think>\n\n<answer>prediction</answer>

我们借鉴 DeepSeek-R1-Zero 的策略,使用准确率奖励(accuracy reward)格式奖励(format reward)对模型进行优化:

  • 准确率奖励:通过验证模型最终答案在数值或符号上的正确性进行打分。
  • 格式奖励:评估模型输出是否严格遵循指定格式,即思考过程与答案分别封装在对应的 <think><answer> 标签内。

在训练过程中,我们使用 Group Relative Policy Optimization(GRPO) 作为强化学习算法,并直接将 RL 应用于基础模型,无需任何 SFT 作为冷启动(cold start)。 需要注意的是,所有 RLVR 实验在训练过程中不使用 CoT(Chain-of-Thought)推理

SFT with Visual Reasoning Trace Distillated from R1

我们研究了如何将纯文本模型 R1 的推理能力迁移到 VLM 上。

虽然像 R1 这样的推理型语言模型擅长显式的逐步推理,但视觉语言模型通常缺乏这种透明的推理能力。

我们的方法主要包括以下三个部分:

数据集构建 我们开发了一套方法,可将图像转换为详尽的场景描述,内容涵盖每个物体的属性(大小、颜色、材质、形状)、空间位置(三维坐标、旋转角度)以及像素坐标。例如,一个场景描述可能如下所示:场景描述:

一个大型红色橡胶圆柱体,旋转角度为 291.3°,位于三维坐标 (-0.89, -2.73, 0.70),像素坐标为 (101, 152, 10.04) 一个小型紫色金属球体,旋转角度为 247.7°,位于三维坐标 (2.93, 0.87, 0.35),像素坐标为 (379, 183, 9.66) ...

这些详细的场景描述使 DeepSeek R1 能够在现有的 VQA 数据集基础上,为视觉推理问题生成高质量的思考路径。模型生成的推理路径通过预测准确率进行验证,基于“合理推理路径能够提升答案正确率”的假设。

数据收集 我们构建了一个包含约 3.7 万个带推理路径的训练样本的数据集,涵盖多种视觉推理问题。

基于 CoT 的监督微调(CoT-SFT) 我们对视觉语言模型进行训练,使其能够输出推理路径并预测答案,目标为最大化联合概率: \[ \arg\max P(y, t|I, Q) \] 其中,\(y\) 表示目标答案,\(t\) 表示思考路径,\(I\)\(Q\) 分别表示图像和问题。


我们在多个 in-domain 和 out-of-domain 数据集上评估了三种模型版本:基础模型、SFT 模型、RL(GRPO)模型,用于比较它们在视觉感知任务中的相对表现。

实验

数据格式

训练的数据文件格式为jsonl,包含以下属性:

1
2
3
4
5
{
"image_path": "./images/superCLEVR_new_025000.png",
"question": "How many different items are there in the image?",
"ground_truth": 4
}

在模型回复后,包含输出的文件格式为json,包含以下属性:

1
2
3
4
5
6
7
8
9
10
{
"question": {
"image_path": "/home/chenliang/images/superCLEVR_new_025000.png",
"question": "How many different items are there in the image?",
"ground_truth": 4
},
"ground_truth": 4,
"model_output": "<think>\n There are four distinct objects in the image: a cyan fighter, a red van, a cyan mountain bike, and a green mountain bike.\n </think>\n<answer>\n 4\n </answer>",
"extracted_answer": 4
}

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment