Automatic Fortran to C++ conversion

1. 安装fable环境

Pre-requisites:

  1. Please have a Linux environment, bash shell.

  2. Please create a working directory

    1
    2
    export WORK=<new working directory>
    cd ${WORK}
  3. Download source code:

    1
    2
    wget https://raw.githubusercontent.com/cctbx/cctbx_project/master/libtbx/auto_build/bootstrap.py --no-check-certificate
    python bootstrap.py hot update --builder=cctbx

Create and configure a conda environment:

1
2
3
4
5
6
7
8
9
10
wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh --no-check-certificate
chmod u+x Miniconda2-latest-Linux-x86_64.sh
./Miniconda2-latest-Linux-x86_64.sh # tested with conda 4.5.11
# please install in directory ${WORK}/miniconda2
# no, do not prepend Miniconda2 to .bashrc

source miniconda2/etc/profile.d/conda.sh
conda create -y --name fable36 python=3.6
conda activate fable36
conda install six future

Create and configure FABLE:

1
2
3
4
5
6
7
mkdir build36
cd ${WORK}/build36
python ../modules/cctbx_project/libtbx/configure.py fable
# python ../modules/cctbx_project/libtbx/configure.py --enable_cxx11 fable # support C++11 standard
source ${WORK}/build36/setpaths.sh
cd ${WORK}/build36; make; cd ${WORK}
cd ${WORK}/build36; make; cd ${WORK}

Test FABLE in a new login shell (bash, cd ${WORK}):

1
2
3
4
5
source miniconda2/etc/profile.d/conda.sh
conda activate fable36
source ${WORK}/build36/setpaths.sh
mkdir test36; cd test36
libtbx.run_tests_parallel module=fable nproc=Auto

[!NOTE]

Not yet tested with MacOSX

Also works with Python 2.7 (change 3.6 to 2.7)

2. 使用fable

[!IMPORTANT]

fable comes with the C++ fem Fortran EMulation library. The entire fem library is inlined and therefore very easy to use: simply add -I/actual/path/fable or similar to the compilation command.

先启动上面创建好的python环境

1
2
3
source miniconda2/etc/profile.d/conda.sh
conda activate fable36
source ${WORK}/build36/setpaths.sh

之后开始转换代码

1
fable.cout your_fortran_code.f --namespace=example > example.cpp

编译新生成的C++代码

1
g++ example.cpp -I ${WORK}/fable -I ${WORK}/fable/modules/cctbx_project

[!NOTE]

其他问题可以参阅 https://cci.lbl.gov/fable/

断网 GPU 服务器使用 Claude Code 指南

适用场景:本地 macOS + SSH 密码登录 + 服务器完全断网

原理

1
服务器 → SSH 反向隧道 → 本地电脑(Clash/pproxy)→ 互联网 → Anthropic API

方案选择

场景 推荐方案
本地使用 Clash 代理上网 方案一:直接转发 Clash 端口(推荐)
本地直连外网,无代理工具 方案二:pproxy 自建代理

方案一:转发 Clash 端口(推荐)

如果本地使用 Clash/Clashy 上网,直接把 Clash 的代理端口通过 SSH 隧道转发给服务器,流量完全走 Clash 的规则,VPN 分流等策略全部生效。

第一步:确认 Clash 代理端口

在 Clashy 界面查看 HTTP 代理端口,默认为 7890

第二步:建立 SSH 反向隧道(终端1)

1
ssh -R 2081:localhost:7890 -N -p 30513 root@10.8.128.123

替换 30513root10.8.128.123 为你自己的 SSH 端口、用户名、服务器 IP。

⚠️ 输入密码后无任何输出属于正常现象,此终端保持运行,不要关闭。

第三步:SSH 登录服务器并设置代理(终端2)

1
ssh root@10.8.128.123 -p 30513

登录后设置代理环境变量:

1
2
3
export HTTP_PROXY=http://127.0.0.1:2081
export HTTPS_PROXY=http://127.0.0.1:2081
export ALL_PROXY=http://127.0.0.1:2081

💡 可以把这三行写入 ~/.bashrc,之后每次登录自动生效。

第四步:验证网络连通性

1
curl --proxy http://127.0.0.1:2081 https://ifconfig.me

返回的 IP 与本地 Clash 出口 IP 一致即表示成功。

第五步:安装并运行 Claude Code

1
2
npm install -g @anthropic-ai/claude-code
claude

方案二:pproxy 自建代理

如果本地没有 Clash,用 pproxy 在本地起一个代理。

第一步:本地安装并启动 pproxy(终端1)

1
2
pip3 install pproxy
python3 -m pproxy -l socks5://0.0.0.0:1080 -l http://0.0.0.0:1081

⚠️ 此终端保持运行,不要关闭。

第二步:建立 SSH 反向隧道(终端2)

1
ssh -R 2080:localhost:1080 -R 2081:localhost:1081 -N -p 30513 root@10.8.128.123

⚠️ 输入密码后无任何输出属于正常现象,此终端同样保持运行。

第三步:SSH 登录服务器并设置代理(终端3)

1
ssh root@10.8.128.123 -p 30513

登录后设置代理环境变量:

1
2
3
export HTTP_PROXY=http://127.0.0.1:2081
export HTTPS_PROXY=http://127.0.0.1:2081
export ALL_PROXY=http://127.0.0.1:2081

第四步:验证网络连通性

1
curl --socks5-hostname 127.0.0.1:2080 https://ifconfig.me

返回一个 IP 地址即表示成功。

第五步:安装并运行 Claude Code

1
2
npm install -g @anthropic-ai/claude-code
claude

安装其他软件包

设置好环境变量后,pip、npm、claude 均可直接使用。apt 需一次性写入代理配置:

1
2
echo 'Acquire::http::Proxy "http://127.0.0.1:2081";' > /etc/apt/apt.conf.d/proxy.conf
echo 'Acquire::https::Proxy "http://127.0.0.1:2081";' >> /etc/apt/apt.conf.d/proxy.conf

之后各工具直接使用:

工具 命令
pip pip install 包名
apt apt install 包名
npm npm install 包名
claude claude

常见问题

错误信息 原因 解决方法
connection to proxy closed 本地代理未启动 确认 pproxy 或 Clash 正在运行
Could not resolve host DNS 未走代理 改用 --proxy--socks5-hostname 参数
Protocol socks5h not supported 服务器 curl 版本太旧 改用 --socks5-hostname 参数
Missing dependencies for SOCKS pip 缺少 SOCKS 支持 改用 HTTP 代理端口 2081
channel 2: open failed GatewayPorts 未开启 服务器执行 echo "GatewayPorts yes" >> /etc/ssh/sshd_config && systemctl restart sshd
服务器能联网但未走 VPN Clash 分流模式未覆盖 pproxy 流量 改用方案一直接转发 Clash 端口

曾经沧海难为水,除却巫山不是云

终有弱水替沧海,再无相思寄巫山

深爱之人藏心不挂嘴,久爱之人在梦不在眼

相遇就像你特别喜欢可乐,喝的时候爽到了就是意义;重点不是结局在不在一起,而是共同创造了独属于你们的时间线。

“如果有一天我不来找你,你会怎么办?”
“我会试着不期望你来。”

他说:
“九叶重楼二两,
冬至蝉蜕一钱。
煎入隔年雪煮沸,
可医世人相思疾苦。”
我又问:
“可重楼七叶一花,
冬日何来蝉蜕
雪又怎能隔年
相思又怎可解。”
大夫说:
“孰不知,夏枯即为九重楼,
掘地三尺寒蝉现,
除夕子时雪,落地已隔年,
过了离别时,相思亦可解!”
——
吾悲叹:“可奈何,
夏枯辛苦深寒,
寒蝉体小声微,
面拂寒夜风,隔年雪冻人。
相思虽可解,但寒苦卑弥已入喉,肠已断,泪难收,回首白头亦乃无解。”

没有什么一成不变,要学着允许一切发生。

当你凌晨睡不着 突然意识到自己曾经最想共度一生的人 居然变成了人生中的一个教训时

你根本没做错什么 我们都一样 爱就是会消散

“她满脸厌恶的求我放过她,我忽然愣住了,想起很久以前她小心翼翼的问我,你会离开我吗”

爱情不是一个强烈的感觉, 你以为我fall in love, 那个人, 我对他朝思暮想, 盘踞我的脑海, 盘踞我的心灵, 然后呢昼思夜想, 你觉得你这个叫做爱, 我错了, 爱不是感觉, 爱是一种意志, 是一种许诺, 因此他跟你的人格息息相关, 也因此爱必须经过学习

你要光靠感觉去维系爱情, 注定失败, 你对于你喜欢的对象, 你其实应该可以学习, 慢慢的客观的真正的去了解他, 而不是一定要他改头换面, 变成你喜欢的样子, 你才要爱他, 那这种爱都是这就不是真正的爱, 因为你只是爱上你自己的投影, 邻人之间也一样好, 等到发现什么, 你不是我想象中的样子好, 就是say goodbye

因为误会而结合, 然后因为了解而分开, 为什么我们总是落入这样这样的苛臼里面, 就应该要照他原来的样子去接受它

那我们现代人向往的一种爱情形态, 就是一见钟情, 因为我们相信直觉, 我们相信直觉超越了任何的永恒量, 超越了很多的思考, 强大的一种感性所选择的那个对象, 我你们觉得这才是最纯粹, 最没有任何杂质的一种爱情, 真的是这样吗, 有太多的形态是因为物误会而结合, 因为了解而分开, 一见钟情的情强度固然让我们感到一种震撼, 但是震撼过后请恢复理性, 你要追求的是终其一生, 细水长流的真实的爱情好

所以所谓的love就是你的心灵状态, 它不应该涉及到任何其他欲望的成分, 欲望就是欲望, 爱就是爱

可是婚姻是生活, 不是只有爱就能够支撑, 你要光靠感觉去维系爱情哦, 注定失败了, 爱情没有你所想象的可以那样子, 无坚不摧, 我们这个时代的好处在于说, 就因为这个对象是我选的, 所以以后不管信或不信人, 一定要学会自己去对你的人生做出选择, 然后选择你所爱的, 接下来也学习爱你所选择的欢乐的全都有

你应该是先建立一个深刻的相互的了解, 甚至彼此有共同的兴趣, 因此将来可以无限的延伸, 然后结了婚之后, 那就是一种意志跟承诺, 在这个意志跟承诺之下, 创造性的态度转向对方, 我可以帮助你配合你, 同样的, 当双方都是这样想的时候, 他们的情感就会越来越深厚

爱不只是说很强烈的吸引而已, 强烈的东西它会消退的, 会弱化的, 可是当你这个爱里面, 结合了NE的时候, 你会感谢对方对你的好, 你会愿意付出, 你不会觉得这个付出是一种压力, 所以我也应该对你好, 这是人跟人之间最好的一种互动, 通过对对方的爱好, 你因此也爱世界, 也爱自己

爱情应该就是要跟品德人格结合在一起的, 每一个人必须审视自己, 交给自己生命的意义, 有些东西并非需要发现, 而是必须加以铸造

你在后天去思考, 做一个人怎样才有价值, 于是你认识到这个价值之后, 你去打造你的性格, 所以性格是千锤百炼出来的, 是在你在一个价值的领导之下去努力追寻的, 它不是唾手可得, 不是只要你的生命, 你的自然是什么样子就可以得到的, 当你在铸造生命的意义的时候, 你甚至很有可能是在违背你的生理, 跟你的本能的那个程序

好看的外表是上天慷慨给予的礼物, 我们应该感谢并且珍惜, 但是绝对不应该把这份礼物变成是, 潘朵拉的盒子, 在华丽的表面下装满丑陋的欲望, 那就算是金玉其外, 败絮其中了, 长得好看的人未必就会风流花心, 而外表老实的人也很可能一肚子坏水, 人不可貌相, 有一句谚语说, Beauty is only in deep, 美丽呀只是一张皮肤的程度, 这等于中国人所说的肤浅, 看穿美貌的浅薄与虚假, 而守住珍贵的灵魂, 年华易逝, 所谓的红颜弹指老, 刹那芳华, 他只不过是很短暂的梦幻泡影而已, 而一旦内在装的是败絮, 那么这个人其实连毁灭也就不远了, 一个人最重要的是真心, 外表只不过是一张薄薄的皮而已, 看透它吧, 你反而能够得到真实而美好的人生

当时我们都太年轻了,还不懂得如何去爱

无论我们最后生疏成什么样子,曾经对你的好都是真的。就算终有一散,也别辜负相遇。希望你不后悔认识我,也是真的快乐过。如果能回到从前,我会选择不认识你,不是我后悔,是我不能面对现在的结局

“只要你观察一个人足够仔细,就会爱上这个人”

红酥手,黄縢酒,满城春色宫墙柳。东风恶,欢情薄。一怀愁绪,几年离索。错、错、错。

春如旧,人空瘦,泪痕红浥鲛绡透。桃花落,闲池阁。山盟虽在,锦书难托。莫、莫、莫!

世情薄,人情恶,雨送黄昏花易落。晓风干,泪痕残,欲笺心事,独语斜阑。难,难,难!

人成各,今非昨,病魂常似秋千索。角声寒,夜阑珊,怕人寻问,咽泪装欢。瞒,瞒,瞒!

一般来说,开发岗位的算法面试是不会出题要求面试者临时设计一个数据结构来解决某个问题,大多数时候只是要求面试者能够熟练掌握常见的数据结构及其实现、能够说出这种数据结构的优缺点即可。

大模型架构

原始 Transformer

transformer

分词方式

字节对编码 BPE

本质上是subword作为词表,只不过是优先合并出现频率高的字符,直到词表大小合适或者最高词频为1

注意力机制

注意力评分函数

  • 加性注意力评分函数

    加性注意力评分函数可以看作,将查询和键连结起来后输入到一个多层感知机(MLP)中, 感知机包含一个隐藏层,其隐藏单元数是一个超参数ℎ。 通过使用tanh作为激活函数,并且禁用偏置项,

  • 缩放点积注意力评分函数

    为确保无论向量长度如何, 点积的方差在不考虑向量长度的情况下仍然是1, 将点积除以

Summary:

  1. 加性注意力和缩放点积注意力计算复杂度接近,但矩阵乘法有非常成熟的加速实现,所以缩放点积注意力的计算效率更高。
  2. 在d(注意力矩阵的维度)较小时,加性和缩放点积注意力效果接近,但随着d的增大,加性注意力开始显著超越缩放点积。原因是极大的点积值将整个 softmax 推向梯度平缓区,使得收敛困难,所以缩放点积注意力需要除以

多头注意力机制 MHA

QKV 三部分有相同数量的头,且一一对应。每次做 Attention,head_i 的 QKV 做好自己的运算就可以,输出时各个头加起来就行

多查询注意力机制 MQA

让 Q 仍然保持原来的头数,但 K 和 V 只有一个头,相当于所有的 Q 头共享一组 K 和 V 头,所以叫做 Multi-Query 了。

分组查询注意力机制 GQA

是 MHA 和 MQA 的折衷方案,既不想损失性能太多,又想获得 MQA 带来的推理加速好处。具体思想:不是所有 Q 头共享一组 KV,而是进行分组,一定头数 Q 共享一组 KV
image-20250304220202678

Multi-Head Latent Attention

MLA是为了解决在推理时KV Cache占据空间过大的问题

image-20250306162758437

Normalization

  • Batch Norm

    同一个位置token下,同一批batch下不同条数据进行标准化

  • Layer Norm(pre Norm (用的更多,训练起来更方便,但是没有post Norm上限高)and post Norm)

    同一条数据中,不同位置token进行标准化

  • RMS Norm

    RMSNorm和LayerNorm的主要区别在于RMSNorm不需要同时计算均值和方差两个统计量,而只需要计算均方根 Root Mean Square 这一个统计量,RMS Norm认为,Layer Norm成功的原因是re-scaling,因为方差Var计算的过程中使用了均值Mean,因此RMS Norm不再使用均值Mean,而是构造了一个特殊的统计量RMS代替方差Var。

为什么 LN 比 BN 更适用于 Transformer 类模型呢,这是因为 transformer 模型是基于相似度的,把序列中的每个 token 的特征向量进行归一化有利于模型学习语义,第一步调整均值方差时,相当于对把各个 token 的特征向量缩放到统一的尺度,第二步施加 时,相当于对所有 token 的特征向量进行了统一的 transfer,这不会破坏 token 特征向量间的相对角度,因此不会破坏学到的语义信息。与之相对的,BN 沿着特征维度进行归一化,这时对序列中各个 token 施加的 transfer 是不同的,破坏了 token 特征向量间的相对角度关系

pre-norm 和 post-norm的区别

pre-norm:训练更加稳定, 在训练稳定和收敛性方面有明显的优势

post-norm:训练不稳定,但是潜在效果会更好,对训练不稳定,梯度容易爆炸,学习率敏感,初始化权重敏感,收敛困难。好处是有潜在效果上的优

归一化 | 标准化 的概念区分

  • 归一化

  • 均值归一化

  • 标准化

  • 单位化

RoPE 位置编码

绝对位置编码

  • 训练式位置编码
  • sin位置编码

绝对位置编码的缺陷在于无法长度外推

RoPE 是相对位置编码,本质上通过让高维向量旋转 的方式将相对位置信息加入到 词向量中,具体做法是词向量乘以一个旋转矩阵,旋转矩阵中有相对位置信息
$$


$$

激活函数

SoftMax

softmax一般用于多分类的结果,一般和one-hot的真实标签值配合使用,大多数用于网络的最后一层

Sigmoid

sigmoid是原本一种隐层之间的激活函数,但是因为效果比其他激活函数差,目前一般也只会出现在二分类的输出层中,与0 1真实标签配合使用

ReLU

线性整流函数(ReLU函数)的特点:

  • 当输入为正时,不存在梯度饱和问题。
  • 计算速度快得多。ReLU 函数中只存在线性关系,因此它的计算速度比Sigmoid函数和tanh函数更快。
  • Dead ReLU问题。当输入为负时,ReLU完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零,Sigmoid函数和tanh函数也具有相同的问题
  • ReLU函数的输出为0或正数,这意味着ReLU函数不是以0为中心的函数。

Silu

SwiGLU 激活函数是Shazeer 在文献中提出,并在PaLM等模中进行了广泛应用,并且取得了不错的效果,相较于ReLU 函数在大部分评测中都有不少提升。可以看做是平滑的ReLU激活函数。

Tanh

双曲正切函数是双曲函数的一种。双曲正切函数在数学语言上一般写作tanh ⁡ \tanhtanh。它解决了Sigmoid函数的不以0为中心输出问题,然而,梯度消失的问题和幂运算的问题仍然存在

损失函数

KL散度

KL散度度量的是同一个随机变量的两个单独分布之间的距离,而非针对不同随机变量的

交叉熵损失函数

分类为什么用交叉熵而不用MSE?

MSE作为损失函数有梯度消失的问题

L1和L2正则化约束

L1是参数绝对值之和加到loss上,L2是平方和加到loss上

优化器

Adam

SGD

文本大模型

Llama3 架构

image-20250304160636510

残差网络的优点:

  1. 防止梯度消失
  2. 特征重用
  3. 能够让模型的层数变得很多

为什么decoder only架构成为主流?

首先淘汰encoder only的结构,因为masked language model预训练方式不擅长做生成任务

decoder only在工程上有更高的效率性,可以KV-cache,并且zero-shot的能力要更强

在理论上是因为Encoder的双向注意力会存在低秩问题,这可能会削弱模型表达能力,就生成任务而言,引入双向注意力并无实质好处。而Encoder-Decoder架构之所以能够在某些场景下表现更好,大概只是因为它多了一倍参数。所以,在同等参数量、同等推理成本下,Decoder-only架构就是最优选择了。

FFN层为什么先升维再降维

升维。其主要作用是拟合一个更高维的映射空间,从而提升模型的表达能力和拟合精度。

降维。其主要作用是还原维度,限制计算复杂度。

多模态大模型

Vit架构

ViT架构图
  1. Patch Embedding的作用是将一个CV问题通过切块和展平转化为一个NLP问题

总体架构

image-20250304160716362

Vision Mapping 就是用图片token将 占位符给替换掉

MOE架构

image-20250304160656049

Gate网络和专家选择机制

  1. 计算匹配得分
    Gate 网络通过线性变换计算每个 token 与所有路由专家的兼容性得分。得分反映了 token 与各专家“契合”的程度。
  2. 选择 Top-K 专家
    基于得分,Gate 网络为每个 token 选择 Top-K 个最合适的路由专家。在 DeepSeek‐V3 中,每个 token 通常选择 8 个路由专家(在一些实现中还可能对跨节点路由做限制,如最多路由到 4 个不同节点),从而只激活极少数专家进行计算。
  3. 专家处理与加权聚合
    被选中的专家各自对 token 进行独立处理(一般采用一个轻量级的前馈网络,类似于 Transformer 中的 FFN 模块),产生各自的输出。最终,这些专家的输出会根据 Gate 网络给出的权重进行加权聚合,再与共享专家的输出进行融合,形成当前 MoE 层的最终输出表示。

大模型微调

SFT微调算法

LORA

A矩阵参数初始化为正态分布,B矩阵参数初始化为0

  • 如果B和A全部初始化为零矩阵,缺点是很容易导致梯度消失。
  • 如果B和A全部正态分布初始化,那么在模型训练开始时,就会容易得到一个过大的偏移值△W,从而引起太多噪声,导致难以收敛。

QLORA

在反向传播过程中,QLoRA 将预训练的权重量化为 4-bit,并使用分页优化器来处理内存峰值。

Prompt-Tuning

Prompt Tuning设计了一种prefix prompt方法,即在模型输入的token序列前添加前缀prompt token,而这个前缀prompt token的embedding是由网络学到。

Prompt Tuning可以看做token已经确定,但是embedding是可以学的。它相当于仅用prompt token的embedding去适应下游任务,相比手工设计或挑选prompt,它是一种Soft的prompt(软提示),

Prefix-tuning

Prefix tuning为ll层的Transformer Layer的每层多头注意力的键和值都配置了可学习的prefix vectors.

Prefix-Tuning可以算是Promot Tuning的一个特例(Promot Tuning只在输入侧加入可学习的Prefix Prompt Token)

P-Tuning

  • Prefix Tuning 是将额外的 embedding 加在开头,看起来更像是模仿 Instruction 指令;而 P-Tuning 的位置则不固定。
  • Prefix Tuning 通过在每个 Attention 层都加入 Prefix Embedding 来增加额外的参数,通过 MLP 来初始化;而 P-Tuning 只是在输入的时候加入 Embedding,并通过 LSTM+MLP 来初始化。

P-Tuning V2

相比 Prompt Tuning 和 P-tuning 的方法, P-tuning v2 方法在多层加入了 Prompts tokens 作为输入

Adapter Tuning

Adapter Tuning试图在Transformer Layer的Self-Attetion+FFN之后插入一个先降维再升维的MLP(以及一层残差和LayerNormalization)来学习模型微调的知识。Adapter即插入的FF up + FF Down(其实就是一个MLP)

缺点:需要修改原有模型结构,同时还会增加模型参数量。

微调框架

Deepspeed

显存=模型参数+梯度+优化器状态+中间激活值

zero-0: 不采用任何内存优化方案,也就是普通DDP

zero-1:将optimer需要存储的值切分到各个显卡上

zero-2:将优化器状态和梯度都划分到不同的设备上

zero-3:将模型参数、优化器状态和梯度都分到不同设备上

img

Megatron-LM

  1. 数据并行
  2. 张量并行
  3. 流水线并行

大模型蒸馏

白盒蒸馏

黑盒蒸馏

大模型强化学习微调

为什么RLHF有效

  1. 多样性假设:对于同一个指令或者问题,模型应该能够产生多种多样的答案,而不是仅仅局限于SFT数据中对应的那一句回答
  2. 负样本均衡问题:对于SFT阶段,所有的数据都是精挑细选的高质量数据,也就是所谓的正样本,而我们都知道,训练模型时正负样本均衡才更有助于模型的泛化性,而SFT阶段没有向模型展示过任何负样本,而RLHF允许我们向模型展示负样本
  3. RLHF有助于解决模型幻觉

RLHF

强化学习微调需要用到四个模型,Actor模型、Reference模型、Critic模型、Reward模型

其中Actor模型是要微调的大模型,Reference模型是参数冻结的Base大模型,与Actor模型初始参数相同,Critic模型是用来评估Actor模型生成回答的整体好坏性,Reward模型是用来产生即时奖励的模型,初始的Critic模型与Reward模型是同一个模型,只不过Critc模型会与Actor模型一起进行参数更新,而Ref模型和Reward模型的参数是全程冻结的,Ref模型参数冻结是因为需要Ref模型的输出来作为一个参考,防止Actor模型跑偏。Reward模型在人类偏好训练完成之后便保持了与人类偏好一致,所以参数不能更新,否则将无法使Actor模型的输出与人类偏好对齐。Critic模型输出的奖励值一开始与Rewar模型一致,但是Critic模型需要不断估计在不同状态下Actor模型输出的好坏,所以需要随着数据不断进行参数更新,使自身对价值的估计与状态相契合。

参数更新需要用到loss, Actor模型的loss来自于其他三个模型,首先Ref模型将提供一个限制Actor模型跑偏的loss,Reward模型将提供一个一个token生成时的即时奖励loss, Critic模型提供一个当前token生成对未来长远影响的loss,一共三个loss,组成Actor模型的最终loss。这个最终loss的最终目标是想要让Actor模型在生成的意思没有太大变化的同时,使用符合人类偏好的文字来表达。

PPO

DPO

使用DPO数据,同一个问题,一个接受的答案,一个拒绝答案

DPO loss 计算:- Sigmoid((Actor模型在接受答案的概率-Actor模型在拒绝答案上的概率)- (Ref模型在接受答案上的概率-Ref模型在拒绝答案上的概率))

或者可以说 (Actor模型在接受答案的概率-Ref模型在接受答案上的概率)- (Ref模型在拒绝答案上的概率-Actor模型在拒绝答案上的概率)

也就是说 loss 使得Actor模型的生成答案相比较于Ref模型 更靠近接受答案, 更远离拒绝答案

GRPO

不使用优势,采用多次采样,近似得到baseline

  1. 为什么GRPO一开始loss为0?

    一开始actor model 和ref model 的KL散度是0,在一开始时损失函数等于倍的平均KL散度,所以loss一开始是0

  2. 为什么Loss的更新方向是增长方向的,不是(策略)梯度下降吗?

    一开始训练的时候,actor mode 参数更新之后,与ref model不一样之后,KL散度开始增加,所以loss变大

GRPO能直接使用在较小参数的模型上训练微调吗?

GRPO 多次采样是同一个输入,采样不同输出

大模型推理

推理常见参数

  1. Greedy Search
  2. Beam Search
  3. tok-k
  4. top-p
  5. temperature:当T=1时,输出分布将与标准softmax输出相同。T的值越大,输出分布就越平滑,T的值越小,输出分布越陡峭
  6. repetition_penalty

通常我们是将 top-k、top-p、Temperature 联合起来使用。使用的先后顺序是 top-k->top-p->Temperature。

LLM出现复读机现象?

原因:

  1. 由于贪婪策略,LLM趋向于提高重复先前句子的概率
  2. 而且这种现象会愈演愈烈,自我强化

解决办法:

  1. 构造伪数据,设计惩罚因子来惩罚训练
  2. 解码策略调整,使用惩罚重复参数,beam search、调整温度T参数

推理优化技术

KV Cache

每一步计算注意力分数的时候,只需要新token的Q与以往的的K计算得到注意力分数,然后与之前所有的V进行计算得到最终结果,所以只有新的Q是需要新的token的Q,而K和V之前计算过的可以重复利用,所以在每一步计算的时候将K和V保存下来在下一步计算,便可以减少计算量,达到加速效果。

Flash Attention

动机:Attention机制计算 对于长序列 不友好

将输入分块计算,然后合并重新计算

https://mp.weixin.qq.com/s/P_21MWC82l945jCWuUAD_A

大模型量化

float16, float32,bfloat16

image-20250320130142579

从左到右分别是,符号位S,指数E,尾数M, R是基数(2或10)

range越大表示范围越大,precision越大表示精度越高

大模型给定参数多少B,计算模型大小多少GB 和 显存占用多少GB?

模型大小:1B 约等于 4G 1b=1000M=4000MB=4GB 在float32的情况下 因为32bit=4byte

显存占用:总显存=4GB(参数)+4GB(梯度)+8GB(优化器状态)=16GB

AWQ

按照重要性来选择性量化某些值

GPTQ

按照层来选择性量化某些层

思维链推理

o1发布后,国内陆续发布了很多类o1模型,比如deepseek-r1kimi-mathmacro-o1qwq等等

  1. 树搜索派系,主要使用树搜索+multi-agent合成数据
  2. 蒸馏派系,主要通过各种jail-break攻破o1的思维链展示限制、爬deepseek-r1以及使用qwen-qwq刷数据蒸馏。

超长上下文扩展

线性位置插值法扩展

通过线性缩小输入位置索引以匹配原始上下文窗口大小,而不是超出训练上下文长度进行外推,这样可以减小注意力机制中相对位置的影响,帮助模型更容易适应扩展后的上下文窗口。

需要重新训练

动态插值法

利用神经正切核 (NTK) 理论,设计非线性位置编码插值方案,改变基数而不是缩放比例,使不同位置可区分,避免线性插值的问题。

Yarn方法

Yarn 方法对不同频率的正弦波进行不同程度的插值:

  • 对高频正弦波几乎不进行插值,保留细微位置信息。
  • 对低频正弦波进行接近线性的插值,保留位置大体信息。
  • 中频正弦波进行渐变的插值。

大模型测评

模型幻觉

产生的原因

  1. 大模型对自己的输出缺乏因果关系的判断
  2. LLM内部知识与人类标注的知识的不匹配,LLM内部知识不包含人类标注的知识时,模型就会产生幻觉

解决方案

  1. 让模型能够给出自己回答的依据、来源出处等(感觉是Cot的开端
  2. 强化学习,因为强化学习在给奖励是只是给出答案1比答案2好,并不给出具体原因和好的程度,所以能够让LLM自己探索出一条属于自己理解的道理

模型融合

Task Vector

TIES

第二步的方向选择上是如何选择的?

TIES-BT

Fuse

不拘泥于必须同一架构,主要融合多个模型的输出vocab概率分布,然后将融合后的概率分布作为target计算loss+clm的loss一起去train模型

Agent技术

面对 文本长度超过模型输入长度的情况,该怎么解决?

Prompt工程

Prompt外挂

分解和组合

反馈

Muti-Agent

前瞻性分析

中央执行机构

记忆

多模态

学习

世界模型

心理学效应

彼得原理

《彼得原理》(英语:Peter Principle)是管理学家劳伦斯·彼得在1969年出版的一本同名书,里面提出的“彼得原理”是指:在组织或企业的等级制度中,人会因其某种特质或特殊技能,令他被擢升到不能胜任的高阶职位,最终变成组织的障碍物(冗员)及负资产。

孕妇效应

孕妇效应意即偶然因素随着自己的关注而让你觉得是个普遍现象,就是当人怀孕了就更容易发现孕妇,你开了奔驰就更容易看到奔驰,你拎了一个LV就容易发现满大街都是LV。用来形容人们容易把自己的关注点投射在外界,以寻找更多案例来证实内心想法的情况。

梅拉宾法则

梅拉宾法则(The Rule of Mehrabian):梅拉宾在1971年提出:一个人对他人的印象,约有7%取决于谈话的内容,辅助表达的方法如手势、语气等则占了38%,肢体动作所占的比例则高达55%,

鹅卵石法则

今天看到一个说法:人们会时不时把有趣的短视频、图片或者可爱的小故事分享给所爱的人。这种行为叫Pebbling,意为“丢鹅卵石”。据说有一种企鹅喜欢在伴侣的巢穴中留一块鹅卵石,告诉它我来过,我很关心你。

GABA

人类喜欢从故事中得到顿悟。因为顿悟会激发一种叫做GABA的神经递质,它跟缓解焦虑有关。
每个人的大脑中,有两种主要的神经递质:一种是GABA,另一种是谷氨酸。当谷氨酸过多时,它会过度刺激神经细胞,导致焦虑、、紧张等情绪问题. 而GABA则相反

坎贝尔定律和古德哈特定律

坎贝尔定律说,决策当中使用的一项指标越受重视,就越容易被操纵。

好比网络购物,实物我们看不见摸不着,自然就会参考其他买家的评价,于是“刷单”现象也就应运而生了。

古德哈特定律则认为,如果一项指标被人们刻意追逐,那就不(或不再)是一个好的指标。

但在没有更好的替代指标的情况下,就必须确保数据的真实度了,就好像在考试中要不遗余力地打击作弊一样。

写作与思考

比莱斯利·兰波特(LaTeX排版系统的开发者)曾说:如果你不写作,你可能只是在自欺欺人地认为你已经思考了。(注:If you’re thinking without writing, you only think you’re thinking.)

蝴蝶效应

一只南美洲亚马逊河流域热带雨林中的蝴蝶,偶尔扇动了几下翅膀,在两周后可能引起美国得克萨斯州的一场龙卷风暴。在心理学上,蝴蝶效应表现为一种不同于普通的连锁效应的,因果性不明显的情绪反应和行为。

狄德罗效应

18世纪法国一位哲学家丹尼斯.狄德罗,某天友人赠其一件高级睡袍,他非常喜欢。但当他穿上之后,开始觉得家里的一切家具和装饰都显得粗陋庸俗,于是不得不把旧的东西一件件更新,但最终她仍不觉得开心,因为他最终发现,“自己竟然被一条睡袍胁迫”。

一种常见的“愈得愈不足效应”,即在没有得到某种东西时,心里很平稳,而一旦得到了,却不满足

齐加尼克效应

源于法国心理学家齐加尼克做的一次实验。他将受试者分成两组,分别去完成20项工作。其间,他对其中一组进行干预,使他们的工作不能顺利完成,而让另一组毫无阻碍,顺利完成全部工作。尽管所有受试者接受任务时都非常紧张,但顺利完成任务者紧张状态随之消失,而未能完成任务者,思绪总是被那些任务困扰,紧张状态持续存在。

罗森塔尔效应

古希腊传说中塞浦路斯岛一位年轻的王子皮格马力翁,酷爱艺术,通过锲而不舍的努力终于雕塑了一尊女神像。面对自己的作品他爱不释手,整日深情注视。天长日久,女神竟然奇迹般复活,并成为了他的妻子。这个故事说明,期待是一种力量。

1968年,美国心理学家罗伯.罗森塔尔提出了该项理论。此理论有一个我们最常听到的例子:两个病人同住一家医院,其中一人患了癌症,而另一人并无大碍。但医生把两人的诊断书弄混了。结果那个真正的病患得知后整天心情轻松,开心地在医院住了一段日子便健康地出院了。而那个原本身体无恙的人却终日活在对死亡与病痛的恐惧中,最后真的罹患绝症,在抑郁绝望中死去。

林迪效应

对于某些非易腐事物(如技术、思想、书籍等),其未来的预期寿命与其当前已存在的时间成正比。一个事物存在的时间越长,它未来继续存在的可能性就越大。

阿伦森效应

“阿伦森效应”是指人们最喜欢那些对自己的喜欢、奖励、赞扬不断增加的人或物,最不喜欢那些显得不断减少的人或物。 阿伦森是一位著名的心理学家,他认为,人们大都喜欢那些对自己表示赞赏的态度或行为不断增加的人或事,而反感上述态度或行为不断减少的人或事。

峰终定律

根据峰终定律,人们在回忆一段时间内的经历时,更多地依赖于该段经历的高峰(最显著的部分)和结束时的感受,而不是整段经历的平均体验。 具体来说,峰终定律认为: 高峰效应(Peak Effect):人们更倾向于记住或强烈关注经历中的高潮或高峰时刻,这些时刻通常是情感上最强烈或者最显著的部分。

模型 分数
glm-4-9b-chat-1m_7.csv 53
glm-4-9b-chat-1m_15.csv 64
glm-4-9b-chat-1m_20.csv 63
Yi-9B-chat-15 70
Yi-9B-chat-7 63
Yi-9B-chat-20 53
glm-4-9b-chat-1m_have_kongge_7.csv
glm-4-9b-chat-1m_have_kongge_15.csv 59
glm-4-9b-chat-1m_have_kongge_20.csv 74
glm-4-9b-chat-1m_have_kongge_25.csv 81
glm-4-9b-chat-1m_have_kongge_30.csv 79
glm-4-9b-chat-1m_have_kongge_35.csv 84
glm-4-9b-chat-1m_have_kongge_40.csv 79
glm-4-9b-chat-1m_have_kongge_45.csv 84
glm-4-9b-chat-1m_have_kongge_50.csv 76
glm-4-9b-chat-1m_have_kongge_55.csv 82
glm-4-9b-chat-1m_have_kongge_60.csv 81
glm-4-9b-chat-1m_have_kongge_65.csv 81
glm-4-9b-chat-1m_have_kongge_70.csv 77
glm-4-9b-chat-1m_rerank_30_15 77
glm-4-9b-chat-1m_rerank_70_30 82
glm-4-9b-chat-1m_rerank_80_25 80
glm-4-9b-chat-1m_rerank_80_30 79
glm-4-9b-chat-1m_have_kongge_story_new_45 81
glm-4-9b-chat-1m_have_kongge_story_new_35 83
Yi-9B-chat-7_have_kongge_15 50
Yi-9B-chat-7_have_kongge_16 61
Yi-9B-chat-7_have_kongge_17 58
Yi-9B-chat-7_have_kongge_12 59
Yi-9B-chat-7_have_kongge_13 59
Yi-9B-chat-7_have_kongge_7 52
Yi-9B-chat-7_have_kongge_20 57
qwen2-72B-In-have_kongge_15 68
57
Yi-9B-chat-7_rerank_30_15 52
  • 数据清洗,去除文档里面的脏数据
  • 切割文档的长度 这个参数还可以调
  • 多次答案投票
  • 微软的GraphRAG技术
  • 英文没有空格

A Controllable Text Generation Framework based Prompt learning for Query Auto-completion

论文思路

研究领域是query自动补全(QAC),对应的显示场景是搜索栏的用户搜索场景,用的研究方法是生成式模型而非召回是模型(该领域常规的方法是先生成候选词,然后对候选词排序)

对于QAC领域,传统的召回式生成query仅仅通过候选词频率进行召回,缺乏对于query语意层面的理解,同时对于unseen 的输入,难以生成高质量的补全,以及召回式的生成难以充分实现个性化的生成

其他生成模型的历史信息的局限性:时间跨度短,数据量比较少,随着NLP领域中NLG模型的发展,transformer系列的自然语言生成式模型在各个领域展现出巨大的潜力,而且像GPT2这样在大量无监督数据上训练的模型,拥有强大的语意理解能力,有越来越多的研究工作研究生成式模型用于QAC,生成式的模型能够有效应对上述的几个问题。(蹭大模型的热度,垂直领域生成模型)

对于GPT模型,我们使用提示学习来对GPT的生成做进一步的控制,来达到用户的个性化需求,通过使用提示学习对GPT进行微调,可以使GPT模型生成的query更加贴近用户偏好习惯,而传统上的提示学习包括hard提示和soft提示都是从自然语言语意层面对GPT的输出进行提示,而用户个人的消费行为习惯可能无法简单的从语言层面展现,而在使用bert模型进行语意理解和语意抽取进而进行下游任务的分类时,bert可以很好地进行高维度的特征表征,所以在本文中我们采用bert模型抽取高维度的用户个人特征表征作为GPT模型的提示,进而使GPT的输出达到个性化的要求。(特别的,bert和GPT使用统一词表来保证两个模型的高维映射空间是一致的)

Abstract

Query auto-completion (QAC) aims at suggesting plausible completions for a given query prefix. The recent QAC methods introduce Natural Language Generation to generate the completions for user input.

However, NLG (Natural Lagnuage Generation) methods ususally output unsense or wrong words without controll. Moreover, A serious drawback of generative methods is that they can produce an ether effect. It severely affected the performance of the generative methods.

We proposed a framework that controls the generation of queries using prompt learning methods, thereby making the generative methods controllable. This framework consists of three parts: the control module, the prompt module, and the generation module. The control module generates a prompt vector endowed with implicit features, then the prompt module ingests the prompt vector and user input into the generation module, and ultimately, the generation module generates the query under control.

We trained and tested our model on the Meituan dataset and the AOL dataset. The outcomes reveal that the framework we proposed can elevate the accuracy of queries while mitigating the incoherence of queries.

The CTGPrompt4QAC Framework

在这一节,我们首先介绍QAC的问题定义,然后介绍我们提出的可控提示框架,最后介绍整个框架是如何训练的。

The QAC task define

Query Auto-completion是利用用户少量的输入,来为用户生成其可能想要的结果,进而节省用户在搜索过程的时间的一种技术。假设表示用户输入,表示补全的结果,表示用户的信息,那么,表示完全利用用户的输入来为用户生成结果,而更加个性化的生成是,其中表示个性化的生成。

在QAC场景中,我们将问题转换为自然语言处理的问题。因为用户的输入和生成都是自然语言,即,其中都表示具体的字符token,所以可以看作一个自回归问题,即

Query Auto-completion is a technology that uses users’ minimal input to generate possible desired results for them, thereby saving them time during the search process. Assuming represents user input, represents completed results, and represents user information, then represents generating results completely utilizing user input, while a more personalized generation is .

In the QAC scenario, we convert the problem into a natural language processing problem. Since both user input and generated results are natural language, namely and where and represent specific character tokens, therefore can be regarded as an autoregressive problem, namely .

Overview of the framework

首先我们对框架的整体架构进行介绍和解释,框架包括三个部分:生成模块、提示模块和控制模块。生成模块是一个decoder架构,用于预测下一个token,生成模块通常是gpt这样的预训练模型。为了能够对生成模块进行生成效果的控制,我们使用提示学习的方法来进行控制,也就是在生成模块的输入前加入提示向量,提示向量能够对生成模块的模型起到提示作用,这就是提示模块的作用。提示模块中的提示向量是由控制模块产生的,控制模块通过从带有控制目的标签的历史数据中学习得到,生成具有控制效果的提示向量。

First, we introduce and explain the overall architecture of the framework, which includes three parts: the generation module, the prompt module, and the control module. The generation module is a decoder architecture that predicts the next token and generates text. It typically uses a pre-trained model like GPT. To enable control over the generation effect of the generation module, we use prompt learning methods for control. This means adding a prompt vector to the input of the generation module before generating the text. The prompt vector can provide hints to the model, which is the role of the prompt module. The prompt vector generated in the prompt module is produced by the control module through learning from historical data with controlled purpose labels. This generates a prompt vector with controlling effects.

1. Control Module

控制模块的输入是用户的个人特征信息和用户的历史数据,输出是用户是否进行点击行为的概率,用户是否对生成词进行点击代表了该用户的偏好,模型是用了Bert模型,因为Bert模型具有深层次的语义理解能力,能够对用户的历史行为数据进行深层次的语义理解和特征抽取。为了体现控制模块的控制作用,我们在考虑除了令控制模块生成体现用户偏好的高维特征向量之外,我们还考虑了生成式模型有非常严重的马太效应现象,因为生成式模型本质上是一个词概率预测模型,所以生成式模型会以更大概率生成在训练集中频繁出现的token,所以想要用控制模块在起到控制生成符合用户偏好结果之外同时能起到控制生成式模型的马太效应。所以在控制模块的Bert模型输出会输入到两个多层神经网络分类器进行多任务学习,一个分类器是用于区分用户是否进行点击,另一个分类器是用来区分用户是否会更倾向于点击低频词的生成结果。通过对用户个人信息和历史的行为数据进行建模,控制模块能够抽取到表征着用户偏好的特征向量。

The input to the control module is the personal feature information of the user and the user’s historical data, and the output is the probability of the user performing a click behavior. Whether the user clicks on the generated words represents the user’s preferences. The model uses the Bert model because the Bert model has deep semantic understanding capabilities and can perform deep semantic understanding and feature extraction on the user’s historical behavioral data. To reflect the controlling effect of the control module, in addition to letting the control module generate high-dimensional feature vectors reflecting user preferences, we also consider that the generative model has a severe Matthew effect phenomenon. Because the generative model is essentially a word probability prediction model, the generative model will predict tokens that appear frequently in the training set with a higher probability. Therefore, in addition to controlling the generation of user preference-conforming results, the control module can also control the Matthew effect of the generative model.Therefore, the output of the Bert model in the control module will be input to two multi-layer neural network classifiers for multi-task learning. One classifier is used to distinguish whether the user performs a click, and the other classifier is used to distinguish whether the user is more likely to click on the generated results of low-frequency words. By modeling the user’s personal information and historical behavior data, the control module can extract a feature vector representing the user’s preferences.

2. Prompt Module

提示模块主要由一个多层神经网络组成,将Bert抽取出来的高维特征映射到gpt模型的文本embedding空间中,并将控制模块生成的特征向量进行resize,并将特征向量作为提示与用户的输入embedding合并,之后一起输入到生成模块中。

3. Generation Module

生成模块的输入是提示模块的提示向量与用户的输入文本的向量,本文中生成模块的模型是GPT2,GPT2根据提示向量对用户输入文本进行结果补全,因为提示向量中蕴含的用户偏好特征情况下,GPT2模型能够生成更加符合用户偏好的结果,并且能够减少那些不热衷于高频商家的用户的马太效应。

Training Strategy

训练阶段分为两个个阶段:预训练、微调

预训练阶段分为两个部分:第一部分是对控制模块进行预训练,第二部分是对生成模块进行预训练

对控制模块预训练实际上是对预训练的Bert模型进行下游任务微调,将用户的用户特征和用户历史的输入和生成的item作为Bert模型的输入

微调阶段只要针对生成模块和提示模块,微调分为两个阶段:第一阶段只微调提示模块,生成模块的参数是冻结的;第二阶段是微调提示模块和生成模块。

Experiments

Experiment Settings

dataset

美团数据

AOL数据

Evaluation

BLEU-1、BLEU-2、BLEU-3、BLEU-4

基尼指数

Baselines

Implementation Details

Experimental Results

第一,在传统经典的生成式模型中,生成效果比较好的是Transformer模型,相比较与传统的RNN、CNN系列的生成模型,Transformer模型在自然语言建模上效果更好,所以在同样的数据集上进行训练,Transformer效果更好。甚至,Transformer模型的效果也要比不经过微调的GPT-2模型的效果要好,但是在UCTG框架下经过微调后的模型效果要好于其他所有模型

第二,与hard prompt 和 soft prompt 相比,在UTCG框架下微调的模型效果是更好的,从结果来看,hard prompt效果好于soft prompt,这是不符合常规逻辑的,但是综合QAC的具体场景和基于的底座模型来考虑,对于GPT-2这种参数量不大的底座模型,soft prompt的微调方法很难发挥出其特点,因为微调方法是依赖于底座模型的能力,如果底座模型的参数量越大,效果越好,那么经过soft prompt微调之后效果也会更好,相反,对于底座模型参数量小的情况,soft prompt可能会起到相反的作用。hard prompt的效果略好与未经微调的模型,这是因为hard prompt中有用户历史的点击item,能够对GPT-2起到一定的提示作用

第三,从基尼指数效果来看,经过UTCG(多任务)的提示微调的基尼指数要远远小于正常训练得到的模型,而且Transformer模型的基尼指数最高,这也说明Transformer模型非常依赖于token之间的关联度,其他的生成模型都不同程度的增强了生成的马太效应,而经过UTCG框架微调之后的模型基尼指数明显降低也证明了UTCG框架中控制模块抽取的embedding的有效性,并且可以看出,在经过多任务UTCG框架微调的GPT-2模型虽然在基尼指数上效果明显,但是在文本准确度上有所下降,这可能是因为控制模块生成的提示向量在信息容量不变的前提下无法做到将两种提示高维特征整合或者控制模块在多任务学习时更多地学习到了对马太效应的控制特征。

总的来说,经过UTCG框架微调过后的GPT-2模型能够在控制模块的定向提示下进行相应的文本控制,并且效果有明显地提升

原始的AOL查询日志包含用户输入的一系列查询以及时间戳详细信息。我们首先通过将所有查询转换为小写,删除重复和单个字符的查询,并删除具有占主导地位(>50%)的非字母数字字符的查询来预处理数据集。为了训练和评估QAC模型,大多数先前的工作从公共查询日志数据集中构建前缀-查询对作为正样本,通过拆分用户输入的完整查询,然后随机从候选池中选择一些查询构建负样本。这些数据集不包含任何真实的前缀到查询点击行为,但在实际的工业开发中,工程师通常使用前缀-查询对训练学习排序模型,其中包括用户输入的前缀和用户点击的完成查询作为正样本,其他对作为负样本。

原始的AOL quert log数据集只包含了用户的输入、用户是否有点击行为以及时间戳的信息,这些数据并无法直接表征出用户的输入、系统的query候选词、用户对系统query候选词的行为三者的关系,所以我们需要对AOL数据集进行一定的数据处理。我们首先将所有的用户真实输入全部转换为小写,删除重复和单个字符查询,并删除以非字母数字字符为主要输入的用户输入。之后对于每个用户的真实输入,随机取前几位作为用户的模拟输入,使用完整的用户输入作为模拟query,并随机从数据集中选择一些用户完整输入作为负样本,这样就构造出了包含用户输入、query候选词以及用户行为反馈的数据集。

Tables 3展示了模型在Meituan Query Log和AOL Query Log两个数据集上的指标效果

各个模型在AOL数据集上的效果趋势与在Meituan数据集上的大致相似,在传统生成模型中,Transformer在两个数据集上的效果都是最好的,与没有微调之前的GPT-2模型和freeze方式进行微调的GPT-2模型的效果差距很小,这说明了在两组实验上模型效果的一致性。在UTCG框架下微调之后的GPT-2模型,在Meituan数据集和AOL数据集市上都表现出了最好的效果,这说明了UTCG框架在不同数据集上的泛化性,证明了UTCG框架的有效性不是只出现在某个数据集上的,是具有普世性的。同时可以观察到,在Meituan数据集上UTCG框架微调的效果提升要明显高于在AOL数据集上的提升,这是因为Meituan数据集是垂直领域的数据集,文本数据都属于商品领域的数据,而AOL数据集的数据分布则要更为广泛,这导致UTCG在进行prompt生成的时候无法很好地生成符合控制条件的prompt。

Figure 1展示了UTCG框架不同微调和改变生成模块模型大小在不同测试数据量下的文本生成效果,通过控制其他模块不变,只改变生成模块GPT-2模型的大小,可以看出base大小下的UTCG整个的文本生成效果要明显好于distil大小下的UTCG,同时在不经过UTCG框架微调之前,base GPT-2的生成效果本身就要比distil GPT-2的效果要好,这说明在整个UTCG框架中,不同效果的模型作为生成模块会对整个UTCG框架的效果产生不同的影响,并且可以推断,越是效果好的模型作为生成模块,UTCG提示微调框架对模型效果的提升就越明显。另外,作用于不同大小的GPT-2,使用UTCG微调框架都取得了明显的提升,这也说明了UTCG微调效果的通用性和普适性。

Figure 2展示了UTCG微调框架和常规的两种prompt微调方法的对比效果。从实验结果可以看出,经过hard prompt微调后的模型效果较原模型有少量提升,但是经过soft prompt微调之后的模型效果却有所下降,UTCG微调框架的效果则有明显提升,原因有以下几种: 1) hard prompt和soft prompt的微调效果都依赖于所微调的模型效果本身,对于参数量很大的大模型,hard prompt和soft prompt能够在其基础上产生好的效果,但在本实验中GPT-2本身在电商特定领域数据集效果就不如在通用数据集上效果好,所以hard prompt和soft prompt在其基础之上就很难有较好的效果的提升 2)UTCG控制模块生成的提示向量是在用户历史行为数据作为反馈信号下生成的高维特征向量,该提示向量具有更准确的特征提示,所以尽管GPT-2模型对电商数据集不太熟悉,但依然能够对GPT-2模型起到文本控制生成的作用。

Figure 3展示了对UTCG控制模块的loss函数进行修改之后的效果对比。从基尼指数上来看,控制模块多loss生成的提示向量对GPT-2模型进行微调之后,在基尼指数上有明显的下降,这说明控制模块多loss下生成的提示向量能够对GPT-2模型产生相对应的控制效果,该消融实验也证明了UTCG框架的更深层次的价值,通过更换UTCG中控制模块的loss函数,控制模块便可以生成具有相对应的控制作用的提示向量,并对GPT-2模型产生控制作用。

Figure 3是使用了T-SNE对1000条数据和embedding 向量进行聚类和可视化,通过可视化的结果可以看出,对于1000条数据根据距离远近形成若干个小的簇,而每个簇代表了用户在输入前几个词时的用户偏好,以Figure5的左下角来举例,图中左下角形成了一个明显的簇,通过每个点对应的用户和用户输入信息来看,该簇包含了用户2907007597.0输入词是炸鸡提示词是、用户1533072098.0输入词是黄焖鸡提示词是、用户613293787.0输入词是炸鸡提示词是、用户40962466.0输入词是猪肚鸡提示词是等文本,从文本内容上来看,聚集到一起的embedding向量对应的用户输入都是跟鸡肉相关的食物,而且这几个用户的历史点击也是主要跟食物相关,这也再次验证了UCTG框架中控制模块对用户的爱好建模与人的普遍认知是一致,也再次说明了控制模块生成的embedding具有实际的意义,并且能够对GPT-2进行提示进而控制文本的生成。

Figure 4是使用了UMAP(Uniform Manifold Approximation and Projection),一种高维数据将为算法,对1000条文本数据和embedding进行可视化展示,UMAP相对于T-SNE能反映全局结构。从降维可视化的图中可以看出,尽管更换了可视化的算法,”用户2907007597.0输入词是炸鸡提示词是“、”用户2561854230.0输入词是烤鸡提示词是“,”用户2270230980输入词是鸡汤提示词是“等还是聚集到了一起,从这些文本中可以看出,输入词主要也是跟食物相关,并且这几个用户的历史点击也表明其偏好特点在食物方面

从上述两个聚类\降维算法得到的可视化结果可以看出,UCTG框架中控制模块的到的高维向量确实表征了用户的行为偏好和特点,这也验证了在具体试验中UCTG微调之后的模型效果明显的提升确实是由于提示向量的提示作用。

我们提出的UCTG框架由两个阶段组成:(i)用下游任务数据集预训练GPT-2模型和BERT模型 和(ii)提示调优。这两个阶段的优化使得UCTG框架在前一个阶段GPT-2学习下游领域的相关信息,BERT模型学习到用户的偏好和query出现的频次特点,然后在后一个阶段中利用BERT模型抽取出来的高维向量去微调GPT-2的文本生成,从而使得GPT-2模型能够生成对应控制效果的。

具体而言,在预训练阶段,GPT-2模型的参数和BERT模型的参数是发生改变的,这是因为GPT-2模型需要在下游数据上进行参数更新以学习到下游数据中的新的信息,BERT模型需要通过对用户行为反馈数据和Query出现的频次特点进行参数更新以便能抽取出具有高维特征的向量。并且,为了后续调优阶段中BERT模型抽取的向量更好地匹配GPT-2的语义空间,需要控制GPT-2模型的vocab与BERT模型的vocab一致。之后,在提示调优阶段,有两种参数更新方式,i)GPT-2模型的参数冻结,提示模块中的参数更新,进一步调整提示向量以适应下游领域任务。ii)GPT-2模型的参数和提示模块中的参数一同更新以更加完美地适应下游领域任务。

用户3170313953.0输入词是炸鸡提示词是、用户980125838.0输入词是参鸡提示词是、、用户277412824.0输入词是黄焖鸡提示词是、用户2561854230.0输入词是烤鸡提示词是、用户1885650741.0输入词是烧鸡公提示词是、用户3652156408.0输入词是白切鸡提示词是、用户1189562967.0输入词是火锅鸡提示词是、用户3155472689.0输入词是鸡精提示词是、用户412329645.0输入词是凉拌鸡提示词是、用户951668225.0输入词是蛙蛙鸡提示词是、用户3678392590.0输入词是瑶鸡提示词是、用户3803971217.0输入词是鸡提示词是、用户312910262.0输入词是黄焖鸡提示词是、用户700332224.0输入词是猪肚鸡提示词是

曝光度计算指标

生成式模型有个很大的问题就是,生成内容容易受训练数据中的文本频率影响,所以需要控制某个商家的曝光率,以及整个推荐的覆盖率和多样性

所以说,在生成式场景下,马太效应会更加明显

1. 七猫小说推荐系统的做法

添加了6个特征进行模型的训练

用户该书30内书籍曝光次数
userbook_show_count_14 用户该书14内书籍曝光次数
userbook_show_count_7 用户该书7内书籍曝光次数
userbook_click_count_30 用户该书30内书籍点击次数
userbook_click_count_14 用户该书14内书籍点击次数
userbook_click_count_7 用户该书7内书籍点击次数

2. 覆盖率与基尼系数

覆盖率用来衡量推荐的物品占总物品的比例

基尼系数描述的是物品流行度的分布趋势

3. 商品出现次数

统计某个商品在一段时间内的出现次数占所有出现次数的比值作为该商品的曝光度

或者是基于历史数据算出某个商品下次出现的概率作为商品的曝光度, 可以使用贝叶斯概率计算

评审意见

写作问题

  1. Authors made several expiations for their experiment results, but from the results, it contradicts what authors explained.

  2. In addition, authors observed the contradict result when comparing soft prompt and hard prompt, the explanation was not quite convincible.

  3. Selected architecture is not well motivated compared to similar more flexible approaches like RAG

  4. missed an important span of work that would have beeen totally relevant for the presented use-case

    Learning to Write with Cooperative Discriminators

  5. This paper is not well-written and not presented effectively in appropriate format. Some typos are found and also the presentation of figures (like Figure 3) can be improved.

  6. There are some typos in the paper, i.e. in section 3.2 first paragraph, Figure index was missing.

实验问题

  1. Since this is a framework, authors should present more variety datasets to prove this framework work on different domains and datasets, only one specific domain which cannot persuade audience to believe this framework will work for other domains or tasks.

  2. experiments section heavily focuses on different variations of the same method

  3. designed architecture is not flexible and would require retraining given changes in base models

  4. outdated generative model (GPT2) in the experiments make the reader wonder what would be the results with more capable and versatile generative models

  5. failed to showcase the flexibility of the approach: flexibility is cited as an advantage of the approach, but not highlighted in the experiments

  6. More recent baselines can be chosen. The paper lacks comparisons and discussions with widely-known baselines in the field, which hinders the assessment of the novelty and performance of UCTG.

  7. This paper is not well-written and not presented effectively in appropriate format. Some typos are found and also the presentation of figures (like Figure 3) can be improved.

  8. 作者对他们的实验结果进行了多次解释,但从结果来看,这与作者所解释的内容相矛盾。

  9. 此外,作者在比较软提示和硬提示时观察到了矛盾的结果,他们的解释并不十分令人信服。

  10. 所选择的架构与类似更灵活的方法(如RAG)相比,缺乏充分的论证。

  11. 遗漏了一段重要的工作,这些工作对于所展示的用例来说完全相关。

  12. 这篇论文写作不佳,且没有以适当的格式有效地呈现。文中发现了一些错别字,同时图表的展示(如图3)也有待改进。

  13. 论文中存在一些错别字,例如在第3.2节的第一段中,图的索引缺失。

  14. 由于这是一个框架,作者应该展示更多种类的数据集,以证明该框架能够在不同领域和数据集上工作,仅有一个特定领域无法说服读者相信该框架适用于其他领域或任务。

  15. 实验部分过分关注同一方法的不同变体

  16. 设计的架构不够灵活,一旦基础模型发生变化,就需要重新训练

  17. 在实验中使用的生成模型(GPT2)已经过时,这让读者好奇,如果使用更强大、更通用的生成模型,结果将会如何。

  18. 未能展示方法的灵活性:灵活性被引用为该方法的优势,但在实验中并未突出显示。

  19. 可以选择更近期的基线进行比较。论文缺乏与该领域广为人知的基线进行比较和讨论,这阻碍了对UCTG的新颖性和性能的评估。

  20. 这篇论文写作不佳,且没有以适当的格式有效地呈现。文中发现了一些错别字,同时图表的展示(如图3)也有待改进。

程序员的数学2-概率统计

前言

  • 概率是面积与体积的泛化
  • 随机变量是一种以变量为名的函数

Open Information Extraction: A Review of Baseline Techniques, Approaches, and Applications

开放域抽取综述

TeacherLM: Teaching to Fish Rather Than Giving the Fish, Language Modeling Likewise

Use “{Question} {Answer} {Fundamentals} {Chain of Thought} {Common Mistakes}” five-element training object for each sample. These sample to train a small model called TeacherLM to re-construct others training data to train or fine-tuning larger LLM

Improving Prompt Tuning with Learned Prompting Layers

选择性prefix-tuning learning 由原来全部加个prefix 到 现在的选择性添加 prefix

Woodpecker: Hallucination Correction for Multimodal Large Language Models

Woodpecker的架构如下,它包括五个主要步骤: 关键概念提取、问题构造、视觉知识检验、视觉断言生成 以及幻觉修正。

ChatKBQA: A Generate-then-Retrieve Framework for Knowledge Base Question Answering with Fine-tuned Large Language Models

微调大模型+知识图谱 code link

五步工作法:

  1. 质疑每项要求。提出任何一项要求时,都应该附上提出这一要求的人。永远不要接受一项来自某个部门的要求,比如来自“法务部门”或者“安全部门”的要求。你必须知道提出这项要求的人的名字。接下来你应该质疑它,不管这个人有多聪明。聪明人提出的要求才是最危险的,因为人们不太可能质疑他们。这件事要一直做下去,即便这项要求来自马斯克本人。质疑后,大家就要改进要求,让它变得不那么愚蠢。
  2. 删除要求当中所有你能删除的部分和流程,虽然你可能还得把它们加回来。事实上,你如果最后加回来的部分还不到删除部分的10%,那就说明你删减得还不够。
  3. 简化和优化。这应该放在第2步之后,因为人们常犯的错误就是简化和优化一个原本不应该存在的部分或者流程。
  4. 加快周转时间。每个流程都可以加快,但只有遵循了前三个步骤之后才能这么做。在特斯拉工厂,我错误地把很多精力花在加快生产流程上,后来我才意识到有些流程原本就应该被拿掉。
  5. 自动化。在内华达工厂和弗里蒙特工厂犯下的一个大错就是我一开始试图将每个步骤进行自动化改造。我们本应该先质疑所有要求,删除不必要的部分和流程,把问题筛出来、处理掉,然后再推进自动化。

这套工作法有时还衍生出一些推论,包括:

  • 所有技术经理都必须有实战经验,比如说软件团队的管理人员必须至少花20%的时间进行编程,太阳能屋顶业务的经理必须花时间在屋顶上亲自做安装工作。否则光说不练,他们就像是不会骑马的骑兵队队长、不会舞刀弄枪的将军。
  • “你好,我好,大家好”是很危险的,人们会因此不再质疑同事的工作成果。人们天然有一种倾向是不想把要好的同事踢下船,而这种危险倾向一定要避免。
  • 犯错没关系,但错了还不肯低头就不行。
  • 永远不要要求你的团队做你自己都不愿意做的事。
  • 每当有问题需要解决时,不要只与你直接管理的相关负责人聊。深入调研就要跨层级沟通,去跟你属下的属下直接交流吧。
  • 招聘要招态度端正的人。技能是可以教的,但要扭转一个人的工作态度可就太费劲了,得给他“换个脑子”。
  • 疯狂的紧迫感是我们公司运作的法则。
  • 唯一要遵守的规则就是物理学定律能推导出来的规则,其他一切都只是建议。

如何高效率学习

学习方法

费曼学习法

费曼学习法的本质就是在于使用输出倒逼输入,通过讲自己以为明白了的东西以教别人的方式输出来达到验证自己,实际上是一个通过输出来发现缺陷和问题的过程,同时要求在教别人的时候用最通俗易懂的方式,这个要求本质上是要求把知识解构和重构的过程,也就是变成自己的东西,这个过程实际上就是利用了第一性原理,就是讲知识蒸馏,只剩下最根本的逻辑和公理,之后运用这套最基本的原理类的东西重构成一个新的案例。

感觉费曼学习法这一套流程中蕴含了其他几种学习原理,首先教会别人其实本质上就是知行合一的一种形式,教这个动作就是行,在教别人的时候遇到讲不通的地方,其实这个原理就是在行中发现问题,也只有行才能真正发现好问题,通过行发现的问题再回过头去学去搞明白,如此循环就是知行合一的体现。同时为什么选择教这个动作作为行而不是其他呢,这其实蕴含了其他原理在里面,就是第一性原理,其实也就是解构和重构的过程,因为教的对象是一个从来都没有接触过这方面的人,所以只能讲述最基本的原理,从而就可去掉一些附着的东西而直击本质,也就是第一性原理,而第一性原理也就是要抓住主要矛盾主要原理,去除掉不影响本质的东西,也就是解构,也叫解耦合,解构完成之后通过通俗易懂的表达教给别人,事先重构,也就是说,教这个动作能够让人在不经意间就完成解构和重构的过程。

知—> 行—> 第一性原理—> 发现问题—> 知

第一性原理

本质是解构,换一种表达就是人们常说的透过现象看本质,将无关紧要的附着物抛开,只关注最本质最重要的部分,这个原理可以指导“行”。从最基本的原理或者逻辑出发,理解并改进。

知行合一

知者行之始,行者知之成。知和行本来就是同一个事物。仅仅学习而不去实践,便不是学习。

凡明不得、行不去,须反在自心上体当,即可通。

你不应先学习,再开始。
而应先开始,再学习。 / 萨希尔·拉文吉亚

学会提出问题

相比较回答问题,更重要的是提出问题,提出高质量的问题,如何提出高质量的问题,这就取决于对问题本质的认识

体验式学习

要学什么,就要把自己放入学习目标产生实际效用的情境中,并且最好能够立刻看到目标对应的效果,拿到反馈

制定有效目标

目标越现实越好,越小越好,最好小到毫不费力

克服完美注意,切忌大而全

20分钟热身+1个小时左右的专注期

拖延的本质是完美主义

冥想、保持专注力

慢就是快,提高效率就是日积月累

休息很重要

模仿人物

马斯克

拥有清晰的目标、专注、第一性原理、三人行必有我师焉、跨学科学习、大量阅读

费曼

兴趣、费曼学习法

蔡志忠

终身阅读、主题性阅读,先设定一个主题,然后去阅读

看书应该像构筑房子般

山姆 奥特曼

  1. 跨领域学习

    不要局限于自己的领域学习。 从不相关的领域中获得灵感,并将其应用于自己的领域。 最具创新的解决方案常常是不同学科的交叉融合。

  2. 建立学习仪式

    每天花时间专注于学习。建立一个有规律的习惯,可以是:

    • 每天早上阅读一个小时

    • 上班途中收听播客

    • 晚上上在线课程

    深度工作需要持之以恒。

  3. 发挥科技的作用

    我们生活在一个信息超载的时代。利用人工智能工具整合信息。 跟随新的学习科技发展。 如果不利用科技,你将被抛在后面。

  4. 建立强大的个人网络

    人际关系是学习的乘数效应。建立一个强大的合作伙伴网络。

  5. 寻找可以指导和挑战你的导师。反过来,慷慨地帮助他人

    一个强大的网络可以使你接触新的观点和学习机会。

  6. 培养专注力

    25岁以上的成年人的神经系统储存新信息的空间较小。 强迫你的大脑接受新的模式:

    • 不要多任务

    • 集中精力工作

    • 远离电视和手机等干扰

  7. 充满好奇心

    追求那些你深深着迷的话题,而不仅仅是流行的话题。 任何领域中最成功的人都是最好奇的人。 读书是为了满足你的求知欲望,而不是为了炫耀或完成的缘故。

  8. 应用你所学的知识

    知识如果不应用只会导致停滞不前。学到新知识后,要问问自己:

    • 我如何应用这个概念?

    • 我可以用这个做什么项目?

    • 我如何教别人这个?

    应用是巩固理解的关键

  9. 接受重复

    在注意力不集中的时代,重复对于保持新知识至关重要。 建立系统,反复接触知识,直到它深入你的记忆。 即使是天才也会反复学习同样的材料。

  10. 教给他人

    巩固你的理解最好的方法之一是将概念教给他人。当你可以解释一个想法时,这是真正的掌握。 通过:

    • 写作

    • 指导

    • 公开演讲

    传授知识对学生和教师都有益处。

  11. 学习销售

    Altman称销售是“最重要的技能”。学会说服和沟通是至关重要的。 掌握传达自己想法的艺术。学会激励和激发他人。 销售对于创业者、员工和学者都是必不可少的。

  12. 敢于显得愚蠢

    对于很多人来说,害怕显得愚蠢是他们学习的绊脚石。 拥抱初学者的心态。提出天真的问题。承认自己不懂的事情。 为了学习的好处,放下自己的自尊是微不足道的代价。

  13. 热爱过程

    学习不仅仅是达到目的,而是目的本身。 热爱探索和成长的过程。培养对知识的真正热情。 学习的乐趣才是最终的回报。

如何高效率做一件事情

看清本质

学会提出问题

看清本质是提出好问题的前提

问题导向

带着问题在资料中找答案

迭代思想

做任何一件事情,最好的办法就是先有个初始解,然后进行迭代。

  1. 不管多烂,先搞出来个初始解
  2. 找个可以提升的方向
  3. 结合自身能力,设置步长
  4. 不断重复2-3步,不断进行迭代

如何做笔记

三个原则可以帮助你有效地记笔记

  1. 笔记必须符合你的思维方式

    做笔记要按照自己的思考方式,不能原封不动地按照老师(或者书本)的讲解方式。这样不仅你写起来更轻松,而且将来回顾笔记的时候,你也更容易理解自己当时的想法。

  2. 笔记必须代表你的知识

    笔记不要仅仅复制/粘贴他人的话语,而要用自己的语言表达。你不妨标记清楚,哪些地方是已经理解的,哪些地方还没有理解或者有疑问。

  3. 笔记必须可以轻松检索

    为了最大限度利用自己的笔记(其实也是节约自己的时间),它必须可以方便地检索。你要为每个部分写一个标题,并且定期整理出一份目录。

笛卡尔的思考秘籍:

第一、从清楚明白、无需怀疑的公理开始;

第二、复杂事情切分成部分,切分到可以处理为止;

第三、按顺序思考、从最简单的着手;

第四、考虑问题要全面、列举完全。

0%