About me
Research Interest
Aiming at diffusion models, quantitative trading, DL and RL currently, welcome to discuss with me.
Resume
oier (2017.7 - 2021.1)
noip2020: *First prize
WC2021: bronze medal
icpc_er (2022.7 - 2024.1)
icpc2023 Xi’an invitational contest: gold medal
icpc2023 Hangzhou regional contest: gold medal
icpc2023 east continent final: silver medal
csp: Top 0.3%
NJU-信计-强基 (2022.9 - ???)
COSEC paper: Preventing Dataset Abuse in Fine-Tuning Stable Diffusion Models
LAMDA RL project
Te ...
随笔-big city
和朋友聊起直博后的毕业出路,有感。
大城市并不好过,终其一生仅仅为北上广深添砖加瓦的人不占少数。大城市有最优秀的平台,最聪明的合作伙伴,也有最深的人情世故,最落魄的失败者。一个刚走出大学象牙塔进入社会的年轻人,凭什么在异地他乡的大城市里生存。请恕我用生存二字,我实在不想用幸福生活之类的话。绝大多数来到大城市的年轻人没有足够清晰的规划,但就我而言,我不喜欢在还没尝试前就去选择一眼看得到尽头的路,我始终认为只有大城市顶尖的平台和团队才能让我大展身手,实现个人追求,所以对大城市心向往之,而这种想法仅仅是以自我为中心,虽然暂时不会抛弃它,但我承认某种程度上它是理想主义的一厢情愿。
这里有几组矛盾点,第一是理想与现实,也许你很强,认为自己能在大城市打出自己的一片天地,但工作和事业仅仅是生活的一部分,在你全力投入工作之余,你的父母是否希望你留在他们周围,你的女友是否也同样想或者能够在大城市立住脚,大部分人包括我,很难提前预料生活上的种种柴米油盐。但现实从来不会和你开玩笑,始终如重担压在人们的肩上,往往还会越挑越重。第二点就是取舍问题,仔细捋一捋来到大城市的失与得(以我自己情况为例):
得:一段行业 ...
Metabit trading 实习记录
Metabit trading 实习记录
缘起
虽然对量化早有耳闻,但是没想到第一次线下接触量化公司竟然是在icpc ecfinal亚洲总决赛的现场。
开幕式上,继华为过后,美国对冲基金公司Jane street的老总亲临现场,用英语做了一个简单的量化介绍,并幽默地讲解了一个小算法。不止是Jane street,在现场还有很多国内外的量化公司,挺意外赞助席除了华为和自动驾驶,还有这么多量化公司对算法竞赛感兴趣。
比赛前,按照惯例,我拉着队友在会场到处领各家大小厂的周边,其中就有乾象投资的电子木鱼。
当然,白嫖周边的代价是添加HR和企业微信。
于是,在三月初春,一条量化实习招聘的微信消息出现在了我的手机,也没多想,抱着玩玩的心态顺手投了简历。
事后发现,乾象(Metabit Trading)竟然是华为之后第二赞助大爹。
面试
面试贯穿了整个三四月,共计五场,一场大概四五十分钟的样子。
由于实习不是我的重心,所以并没有也没啥时间准备面试。
鉴于保密协议,我就不展开讲了,只谈一下大概面了啥。
一面:聊了实习时间地点,个人简历,确认了有时间参加暑期北京三个月保底的实习。(不出意外期末考 ...
Quant note
打开量化交易的黑箱
概念阐明
1. “无效市场无风险套利”
“当其他交易者的需求使得证券市场的供需关系短暂失衡时,量化交易可以通过提供流动性使得市场更有效率。从有效市场(eficientmarket)的经济角度而言,不平衡性也称为市场无效(inefficients)。真正的无效市场代表着存在很少的、转瞬即逝的无风险套利机会。”
这段话主要讨论了量化交易如何通过提供流动性来帮助证券市场达到更高的效率,并简要提到了有效市场理论与市场无效的概念。下面我会逐步解释这些概念,以便更容易理解:
量化交易提供流动性
量化交易通常涉及使用算法和数学模型自动执行大量的交易。当市场上某些证券的买卖订单不平衡时,即供求关系失衡,量化交易可以迅速介入,通过买入或卖出这些证券,帮助“填补”市场上的订单空缺。这种快速响应市场的能力使得量化交易者可以为市场提供所谓的“流动性”,即使资金更容易、更快速地在市场参与者之间流动。
市场效率与市场无效
有效市场假说(Efficient Market Hypothesis,EMH)认为,市场价格在任何给定时间都已经反映了所有可用信息。因此,在一个完全有效的市场中,没 ...
OS_lab
OS lab
M1: 打印进程树 (pstree)
总体思路按照实验指南:
得到命令行的参数,根据要求设置标志变量的数值;
得到系统中所有进程的编号 (每个进程都会有唯一的编号) 保存到列表里;
对列表里的每个编号,得到它的的父亲是谁;
在内存中把树建好,按命令行参数要求排序;
把树打印到终端上。
1. 得到命令行的参数
c可以在main入口函数中得到命令行参数,这里的参数是一个字符串数组,每个字符串是一个参数,由空格分隔。于是遍历这些参数,并转化成我们需要的标志变量。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748int main(int argc, char *argv[]) for (int i = 0; i < argc; i++) { assert(argv[i]); // C 标准保证 // printf("argv[%d] = %s\n&quo ...
TRPO
TRPO
Background
在进入TRPO和PPO(两者同根生),我们先从自然梯度法(Natural gradient)引入信赖领域(proximal region)的概念。假设我们要求解的是某个概率分布πθ(s)\pi_\theta(s)πθ(s),那么一节梯度下降法本质就是对J(θ)J(\theta)J(θ)进行一阶展开:
θ′=arg minθ′∇θJ(θ)T(θ′−θ)\theta'=\argmin_{\theta'}\nabla_\theta J(\theta)^T(\theta'-\theta)
θ′=θ′argmin∇θJ(θ)T(θ′−θ)
但是直接这样粗暴的更新会带来问题:
参数空间θ\thetaθ的微小变动,会导致策略分布大幅度变化,让优化不稳定。
参数空间对策略分布的影响不一样,有些参数对策略分布的影响大,有些参数对策略分布的影响小,这样会导致优化效率低下。
于是我们放弃使用参数空间θ\thetaθ作为优化的“步长”,转而到πθ\pi_\thetaπθ中。我们用KL散度来衡量两个分布之间的差异,我们把策略空间用K ...
Generative Adversarial Network(GAN)
Generative Adversarial Network(GAN)
detect0530@gmail.com
生成器
具体来说,在模型输入时会将一个随机变量 z 与原始输入 x 一并输入到模型中,这个变量是从随机分布中采样得到。输入时可以采用向量拼接的方式将 x 和 z 一并输入。
我们预想训练一个预测游戏目标游走的模型,如果用传统的监督学习,结果可能会是的十分模糊的甚至游戏中的角色消失、出现残影的,造成该问题的原因是,我们监督学习中的训练数据对于同样的转角同时存储有角色向左转和向右转两种输出。当我们在训练的时候,对于一条向左转的训练数据,网络得到的指示就是要学会游戏角色向左转的输出。同理,对于一条向右转的训练数据,网络得到的指示就是学会角色向右转的输出。但是实际上这两种数据可能会被同时训练,所以网络就会学到的是“两面讨好”。当这个输出同时距离向左转和向右转最近,网络就会得到一个错误的结果———— 向左转是对的,向右转也是对的。
传统过的监督学习,只会让model输出一个结果,但是很多时候,我们希望模型有一些随机性(在有多个合理可能性时)。于是我们让网络有概率的输出一切可能 ...
SAC
SAC
detect0530@gmail.com
Problem to be solved
policy梯度那里,Z为什么能忽略。以及梯度加法那里。(泛函杀我)
SQL数学上和SAC区别
SAC’s background
SAC主要解决的是连续动作空间的控制问题,在我们一探SAC究竟之前,让我们先回顾SAC之前解决连续动作控制问题的两个主流算法:DDPG,PPO。
DDPG
DDPG是基于DPG(Deterministic Policy Gradient)的算法,我们接着先从DPG说起。
DPG
引入AC(actor - critic)框架,让值函数直接指导策略优化。这里有必要提一下,是因为DPG与之前的PG算法有本质的不同:
过去的PG算法使用累计收益(需要真的去模拟,做蒙特卡洛估计)作为目标,调整策略以追求更高的收益。
而DPG则是利用critic(Q函数)找到可能得最优策略,随后直接依靠Q值去优化策略函数,也就是说策略的调整完全不用依靠实际收益。
DPG的核心公式:
maxθEs∼D[Qωμ(s,μθ(s))]\max_{\theta}\mathbb{E ...
tensorboard
Tensorboard
详细的介绍和常见报错可以参考
TensorBoard最全使用教程:看这篇就够了
Tensorboard 无法打开网页 /不显示数据 / 命令行报错等解决办法集合
导入库
tensorboard是tensorflow的可视化工具,可以用来查看模型的训练过程,模型结构,模型参数等。
但是现在pytorch也支持tensorboard了,在处理loss,acc等数据的时候,可以使用tensorboard来可视化。
使用方法
123456# 生成一个writer对象,并指定生成图片的目录,其中logs为指定生成事件的目录writer = SummaryWriter("logs")for i in range(100): # 以y=x为标题,i为横坐标值,i同时也为纵坐标值,相当于绘制了一个y=x(0<=x<100)的直线 writer.add_scalar("y=x",i,i)writer.close()
运行代码之后会生成一个指定名字的目录,并且会包含一个事件在里面,这个事件要用tensorb ...
ArgumentParser
ArgumentParser
更具体细节的讲解可以参考知乎_Link
创建parser
12import argparseparser = argparse.ArgumentParser("Hyperparameters Setting for PPO-continuous")
创建parser对象,可以传入一个字符串作为描述信息。
添加参数
123parser.add_argument("--max_train_steps", type=int, default=int(3e6), help=" Maximum number of training steps")parser.add_argument("--evaluate_freq", type=float, default=5e3, help="Evaluate the policy every 'evaluate_freq' steps")parser.add_argument("--pol ...