s1:Simple test-time scaling为什么有效?
前言这是我最近读到的两篇很有意思的论文:《s1: Simple test-time scaling》和《Does Reinforcement Learning Really Incentivize Reasoning Capacity in LLMs Beyond the Base Model?》,里面的结论刷新了我之前的看法,恰好之前做了一次论文分享,就将分享的内容整理为文字,主要是结合后一篇论文谈谈我对前一篇论文的想法。
研究背景在OpenAI-o1出来之前,提升大模型的能力主要是在训练的时候加大计算量以及投入。o1的出现提示人们可以通过加大测试的时候的计算量得到更好的效果(test-time scaling)。
作者想要找到一个最简单的方法来实现测试时扩展和强大的推理性能。
研究过程o1对比普通模型最大的区别就是有一个思考过程,并且o1在回答问题的时候输出的时间更长,输出的token更多。
一般思考模型进行思考的时候<think>和</think>来包围思考过程,用<answer></answer>来包围答案,一是一般思考的过程集中 ...
目标检测论文阅读笔记(1)
R-CNN
参考视频:【入门级目标检测发展概述及概念简介】
视觉定位+深度学习的经典论文。做法也是经典的2-Stage方法,先生成一系列的候选框,然后将候选框进行裁剪。之后将每个裁剪后图片通过CNN去预测类别,从而得到不同类别的检测框。
但主要问题是:
直接裁剪图像,再送到CNN开销比较大。论文中2k张图片,假设裁剪后的图片是1KB,那2k张都是将近2MB了。batch size更大的时候这样裁剪更低效。所以之后的Fast R-CNN等优化方法都在特征上进行裁剪。在图片上裁剪的少之又少了。
RP总会有重叠的,之后难以避免要用到NMS(非极大值抑制)来去掉冗余框,也就避免不了NMS的缺点:耗时长和对人物重合效果不好。
CNN的输出类别是固定的,所以类别是有限的,对新的类别又要重新训练。
RetinaNet
参考视频:【入门级目标检测发展概述及概念简介】
像论文中所说:当时在生成候选框(RP)阶段,很多2-Stage方法可以通过一些算法,迅速将候选物体位置的数量缩小到少数(例如,1-2k),过滤掉大多数背景样本。但是1-Stage方法就没法过滤,因为一阶段方法不生成RP,它必须 ...
目标检测入门
基础概念目标
检测任务一般分为两步:
检测出预测框(回归)
将预测框中的物体分类(分类)
同时用到了回归和分类。比如在这张图中就需要框出人和猫两个检测框,然后再对检测框做分类
所以标签(ground_truth)需要检测框坐标(bbox)和类别标签。类别标签有一个集合,比如有80个类别,模型就只会在图像中检测出这80个类别。
一些概念Region proposals(RP)
中文叫做备选框。输入一张图像,可以得到很多候选框,每一个候选框可以看成一个被检测出来的目标,之后这些候选框就被拿去分类。就可以知道这个候选框对应的类别。就完成了目标检测的任务
IoUIoU的计算公式为两个框的交集除以并集
NMS(non-maximum suppression)
中文叫非极大值抑制。因为一个人可能有多个框都预测到这一个人,所以要用一种方法合并这些框,或者说叫过滤冗余框。
但NMS也有缺点,比如两个人重叠在一起了,就有可能被NMS过滤成同一个人。
分类1-Stage和2-Stage1-Stage的模型分为Anchor-based和Anchor-free的。Anchor-based相当于用预定 ...
从策略梯度到GRPO
策略梯度
参考:B站视频
基础概念经验轨迹$τ$
智能体可以感知到当前的环境状态,然后作出行为,会影响环境的状态并从环境中得到奖励。这里将状态表示为$s$,智能体的行为表示为$a$,智能体得到的奖励为$r$。
那么智能体与环境交互一次的经验轨迹为 $ \tau = s_0, a_0, r_1, s_1, \cdots, a_{T - 1}, r_T, s_T $,其中 $ T $ 为终止时刻。就是状态、智能体采取的动作、智能体得到的奖励、下一状态……的一个数列。
经验轨迹的概率 $ P_\theta(\tau) $经验轨迹出现的概率由环境和智能体两部分决定:
\begin{align*}
P_\theta(\tau) &= p(s_0) \cdot \pi_\theta(a_0 \mid s_0) \cdot p(s_1 \mid s_0, a_0) \cdot \pi_\theta(a_1 \mid s_1) \cdots \pi_\theta(a_{T - 1} \mid s_{T - 1}) \cdot p(s_T \mid s_{T - 1}, a_{T - 1}) \\
...
解决DeepSpeed offload时找不到动态库的问题
问题在DeepSpeed Offload时候需要编译并加载一个动态库,使得Adam优化器可以从GPU卸载到CPU。可以用以下方法测试编译是否成功:
12import deepspeeddeepspeed.ops.op_builder.CPUAdamBuilder().load()
我刚开始的时候遇到了报错,提示找不到其中的一个动态链接库:
1/home/xxx/miniconda3/envs/Visual-RFT/bin/../lib/gcc/x86_64 - conda - linux - gnu/11.2.0/../../../../x86_64 - conda - linux - gnu/bin/ld: cannot find - lcurand: No such file or directory
解决方案如果要编译动态库,需要用到CUDA Toolkit,而且要是官网下载的(Conda/Pytorch安装的CUDA Toolkit是不全的)。
所以需要:
下载安装CUDA Toolkit
设置环境变量让DeepSpeed可以找到(因为我是非ROOT用户安装的,我装在了~/C ...
用fast-reid提取人物特征
前言最近要做人物的识别,有些图片没有正脸,所以要用到ReID相关的技术(有正脸就很好处理,用人脸检测现在有很多现成的库)。在网上找了一圈没找到很适合入门的教程,于是打算在这里写一下我是怎么用fast-reid库来做人物的特征向量的提取的。方便之后的人入坑。
现成的reid的库我就只找到了torchreid和fast-reid。前者我尝试了,但没跑起来,而且代码好久没维护了,fast-reid是京东近年来发布的,品质更有保障,所以就选了后者。
环境配置fast-reid并不像一些Python包可以直接用pip install fastreid安装,它的项目地址中并没有提到能用pip直接安装,所以装起来有点麻烦。
安装依赖首先先创建一个虚拟环境,.venv或者conda都可以。然后安装一些依赖(fast-reid需要用到,在项目的文档里也提到了):
Pytorch ≥ 1.6
torchvision(装和Pytorch版本兼容的)
yacs
gdown
sklearn
termcolor
tabulate
faiss
前面七个每个都用pip install packet_nam ...
博客搬家记
起因原先的博客运行在我的Windows笔记本上,因为平时不怎么用该笔记本,传输文件都用ToDesk,不是很方便。更重要的是,如果哪天它坏掉了,那我就得重新配置一次环境,还要重新配置一次Hexo。环境还是小事,Windows备份也麻烦,如果哪天磁盘坏了,写过的博客就整个不见了。
总之,想着不能让我的博客绑定在这个Windows笔记本上。痛定思痛😭,决定将其整个环境搬迁到Docker当中。
迁移过程服务器的选择因为:
需要配置Docker以及Node.js环境,我不想在自己笔记本上装太多东西。
需要让女友也能将博客上传。
所以我选择将Hexo博客运行在一个服务器上。搜索了一圈,发现阿里云天工开物计划可以白嫖服务器。配置还不错:
2核CPU
2G内存
50G硬盘
每月20G免费流量
自带公网IP
最重要的是免费,还是包年的。于是我打算把Hexo部署在上面。
领取的方法可见《如何白嫖阿里云服务器?》
打包Hexo博客迁移的第一步就是把原先的博客整个打包,我把整个Hexo博客都存在了一个Blog文件夹下,所以只需要把这个文件夹压缩就好了。
除了写的博客以外,另一个需要迁移的就是Hexo ...
图论
图论基础图论基础概念
有限图:顶点数和边数有限的图称为有限图。
平凡图:只有一个顶点的图。
零图:一个没有边的图被称为零图。
n阶图:顶点数为n的图。
$(n,m)$图:顶点数为 𝑛 的图,边数为 𝑚 的图
边的重数:连接两个相同顶点的边的条数
环 :端点重合为一点的边
简单图:无环无重边的图;其余的图称为复合图
顶点 𝑢 与 𝑣 相邻接
顶点 𝑢 与 𝑣 间有边相连接
𝑢 与 𝑣 称为边的两个端点
通常规定一个顶点与自身是邻接的
顶点 𝑢 与边 𝑒 相关联:顶点 𝑢 是边 𝑒 的端点
边 $e_1$与边 $e_2$相邻接:边 $e_1$ 与边 $e_2$ 有公共端点
途径:有限非空序列 $ w = v_0e_1v_1e_2v_2 \ldots e_kv_k $,$ e_i $ 端点 $ v_{i-1}, v_i $。途径长度为边数;$ v_0, v_k $ 分别为起点终点。
迹:边不重复的途径。
路:顶点不重复的途径。
闭途径、闭迹与圈:起点终点重合的途径、迹、路。闭迹也称为回路。长度为 $ k $ 的圈称为$k$圈,$ ...
信号与系统
复数基础基础概念复数表示形式复数的标准形式为$a+bi$
指数表示复数可以用指数形式表示,形式为:
z = re^{i\theta}三角形式复数的三角形式是:
z = r(\cos \theta + i\sin \theta)辅角和模$r$ 是复数的模(实数),$\theta$ 是复数的辐角(主值通常在 $[-\pi, \pi]$ 或 $[0, 2\pi]$ 范围内)
复数的模定义为:
r = |z| = \sqrt{a^2 + b^2}相位若$z=a+bi$,相位的定义为$arctan(\frac b a)$。
共轭复数的共轭定义为:
z^* = a - bi其中,$z = a + bi$ 是复数的标准形式。共轭运算具有以下性质:
$z \cdot z^* = |z|^2$
$(z_1 \cdot z_2)^ = z_1^ \cdot z_2^*$
$(z^)^ = z$
$z+z^*=2Re\{z\}$ (Real)
$z-z^*=2Im\{z\}i$ (Imaginary)
这里$Im\{z\}$是不包含$i$的
欧拉公式
e^{ix} = \c ...
从0开始配置mindtorch环境
本文的linux(昇腾)服务器是一个刚安装好Ubuntu20.04 LST的裸机,具体的信息如下:
Distributor ID: Ubuntu
Description: Ubuntu 20.04.5 LTS
Release: 20.04
Codename: focal
NPU:910A
本文将会一步步展示如何完整配置一个完整的,可以运行mindtorch(0.3.0)的环境。
要安装的依赖为了配置一个可以运行mindtorch的环境,需要安装以下的依赖:
Miniconda:用于管理Python环境
Python
NPU固件与驱动
Cann软件包:昇腾AI处理器配套软件包
Mindspore
Mindtorch
下面逐个来安装
参考链接:
Miniconda安装
Cann安装
Mindspore安装
Mindtorch安装
安装依赖准备首先需要找到一个文件夹,用于放置安装包,本文选择在~/packages下放置安装包。
123cd ~/mkdir packagescd packages
Miniconda这里下载最新的Miniconda。
...