2024年大模型Alignment偏好优化技术:从PPO, SPO到MCTS-DPO

a79fbfe9a86ff9d2df865ae759e20774.gif

©PaperWeekly 原创 · 作者 | 吴高升

研究方向 | LLM、对比学习等

今年做过一段时间的 alignment 工作,做得有点不开心,各种 social 的原因,觉得自己的发挥受到了限制,最近又闲下来了,所以看了一些相关的论文,但是对这个方向还是挺感兴趣的,这里来分享一下我对 alignment 的一些理解。

对齐一般使用的是 chat 或者 instruct 模型,而不是 base 模型,自从 OpenAI 利用 RLHF 做人类偏好对齐后,开源社区就涌现了一些列的对齐技术。RL 技术中,典型的是 PPO(缺点是训练不太稳定,效率低),如果数据集是人类标注的就是 RLHF,如果是 GPT,PaLM2 等模型标注的,就是 RLAIF。

后面出现了非 RL 的技术,典型的就是 DPO(直接构造偏好数据集进行优化),然后有一些工作觉得 SFT+RLHF 不是 end2end,索性直接在 SFT 上加一个 alignment 的 loss,这个典型的就是 ORPO。

还有一部分工作觉得 DPO 训练的 pair-wise(x,y_w,yl)的数据集获取很困难,于是有了 point-wise(x,y,label)的方法,典型的是 KTO,还有一些就是优化 Alignment 的输出长度的,加了一个类似正则化项的限制等等。

最近又出现了一种 step-wise 的优化方法(例如 Step-DPO),直接对 reasoning 的过程进行优化限制(step-level),而不是等模型输出完了再进行优化(Instance-level)。

另外,有人觉得 reward model 无法优化 general perference(不可传递性偏好,比如 a>b,b>c, c>a 的情况)于是有了 DNO,SPO(引入了纳什均衡,Nash equilibrium),有的人觉得 DPO 优化的是单轮,因此对多轮的偏好优化做了拓展(multi-turn DPO)。

最后还有一波人,索性直接摆烂,方法超不过你,就直接合成数据,用 MCTS(exploration and exploitation 保证多样性和质量)等方式造完数据,直接 DPO 开始训练就完了,完美的数据闭环,alignment 的论文有一个特点,就是数学推导过程超级的长(可能最初的就是强化学习的理论得来,数学基因在那里,也可能作者写论文的时候没啥好写的,开始秀起数学能力了,能占篇幅哈哈哈)。

a0b0a213c55cd8d1c473969f5e15cb98.png

DPO 我这里简单介绍一下,因为后面的改进都跟它有关,它跟 PPO 主要区别就是不用单独训练一个 reward 模型了,直接构造偏好数据集对齐原来的模型即可。

e030b2498ed07147e0b9c07ab1b57958.png

4c9afafba28a6f0e4c08d45d43f17dd9.png

这里面的 y-w 就是正样本(你期望的输出),y-l 就是负样本(你不期望的输出),然后数据集就是(x,y-w,y-l)这样的 pair-wise 偏好数据集。下面是一些 RLHF 在 2024 年发展的一些代表性的技术,如果想了解 2023 年的一些 alignment 迭代方法,可以参考下面的链接,跟本文有少量交叉,另外,欢迎读者给出一些改进意见:

https://zhuanlan.zhihu.com/p/662753985

79ba27d894ac0cc04f8ede1269fd5238.png

KTO

Kahneman 和 Tversky 的前景理论告诉我们,人类以一种有偏见但定义明确的方式感知随机变量;例如,人类以厌恶损失而闻名。我们表明,将 LLM 与人类反馈相匹配的目标隐含地包含了许多这些偏见——这些目标(如 DPO)在交叉熵最小化方面的成功部分可以归因于它们属于我们称之为人类感知损失(HALO)的损失函数家族。

然而,这些方法赋予人类的效用函数仍然与前景理论文献中的效用函数不同。使用 Kahneman-Tversky 人类效用模型,论文提出了一种直接最大化生成效用的 HALO,而不是像目前的方法那样最大化偏好的对数可能性。

这种方法称为 KTO,它在 1B 到 30B 的尺度上与基于偏好的方法的性能相匹配或超过,尽管它只从二进制信号(0 或者 1)中学习输出是否可取。更广泛地说,我们的工作表明,没有一个 HALO 是普遍优越的;最佳损失取决于最适合给定设置的归纳偏差,这是一个经常被忽视的考虑因素。

KTO 的损失函数如下,本质上就是把 pair-wise 的公式变成了 point-wise 的方式:

8300d58a9afe0d459b153f539628899b.png

为了更稳定的训练,我们不通过 z0 (当成类似常量的值,仅仅是求出来,也不产生梯度)进行反向传播;它纯粹是为了控制损失饱和而存在的。直观地说,KTO 的工作原理如下:如果模型以直接地(blunt manner,不知道咋翻译)的方式增加了理想示例的奖励,那么 KL 惩罚也会增加,并且不会取得任何进步。

这迫使模型准确地了解是什么让输出变得理想,这样就可以增加奖励,同时保持 KL 项持平(甚至减少)。在实际实现中,KL term 是通过当前 batch 里面的正负样本进行估计得到的,详细可以 debug KTOTrainer 的源代码:

KTO: Model Alignment as Prospect Theoretic Optimization

https://arxiv.org/abs/2402.01306

https://github.com/huggingface/trl/blob/main/trl/trainer/kto_trainer.py#L256

19851638befd24a45d68f2cb74b59104.png

ORPO

模型对齐技术的比较如下图所示。ORPO 通过将弱惩罚分配给被拒绝的响应,将强适应信号分配给所选择的响应,并将简单的对数比值比项附加到负对数似然损失,以单步方式在没有参考模型(reference model)的情况下对齐语言模型。

a5c9271c59b5b08ac69dcdae0f917ddc.png

ORPO 的目标函数如下:

bba4f751fb6366e75bd1b8d80c3357cf.png

ab49dc5f33ce61313218fd26c80f548b.png

a2215b8c7dd7125f31800e8772a6cef1.png

b30c660217691d6717bbb17f129ab00d.png

ORPO 的梯度:L Ratio 的梯度进一步证明了使用比值比损失的合理性。它包括两个术语:一个是惩罚错误的预测,另一个是对选择的和拒绝的回答进行对比。当有利响应的几率相对高于不利响应的几率时,方程 9 中的 δ(d)将收敛到 0。这表明,如果模型更有可能产生被拒绝的响应,δ(d)将发挥惩罚项的作用,加速参数更新。

e522fd1e8d993d2ac0256f1a0ccc727c.png

同时,方程 10 中的 h(d 意味着来自所选择的和被拒绝的响应的两个梯度的加权对比度。具体而言,当似然性 P(y|x) 的对应侧较低时,分母中的 1−P(y|x) 放大梯度。对于所选响应,随着可能性的增加,这加速了模型对所选响应分布的适应。

详细内容请参考论文:

ORPO Monolithic Preference Optimization without Reference Model

https://arxiv.org/abs/2403.07691

https://github.com/huggingface/trl/blob/main/trl/trainer/orpo_trainer.py

ab3491e316081980cf95da90156ad3c7.png

SimPO

直接偏好优化(DPO)是一种广泛使用的离线偏好优化算法,它重新参数化了从人类反馈(RLHF)强化学习中的奖励函数,以提高简单性和训练稳定性。论文提出了 SimPO,这是一种更简单但更有效的方法。

SimPO 的有效性归功于一个关键设计:使用序列的平均对数概率作为隐式奖励。这种奖励公式与模型生成更好地保持一致,并且消除了对参考模型的需求,使其计算和内存效率更高。

此外,在 Bradley-Terry 目标中引入了目标奖励边际,以鼓励获胜和失败响应之间的更大边际,从而进一步提高算法的性能。实验的结果表明,SimPO 的表现始终显著优于现有方法,且不会大幅增加响应长度。

具体而言,SimPO 在 AlpacaEval 2 上的表现比 DPO 高出 6.4 分,在 Arena-Hard 上的表现比 DPO 高出 7.5 分。基于 Llama3-8B-Instruct 构建的最佳模型在 AlpacaEval 2 上实现了惊人的 53.7 长度控制胜率——在排行榜上超越了 Claude 3 Opus,在 Arena-Hard 上实现了 36.5 胜率——使其成为最强大的 8B 开源模型。具体地,SimPO 的 reward 函数添加了 Length-normalized reward formulation:

edf21c70ded97aa4e1a05187d46d16c2.png

SimPO 的目标函数,本质上是在 DPO 的基础上多了一个 gamma(论文叫做target reward margin)的参数:

4e35d4201f374517cbe2122fd06cb1ad.png

所以最终的损失函数为:

85006743f6dda5f30e7adf0742ad3d2a.png

局限性:math benchmarks 性能会下降,缺乏理论依据,只注重 helpfulness,忽略了 safety 和 honesty 和 fairness。

请参考论文:

SimPO Simple Preference Optimization with a Reference-Free Reward

https://arxiv.org/abs/2405.14734

https://github.com/princeton-nlp/SimPO

a2c4132492f962ae5a55071c7da0bd45.png

TDPO

微调预训练的大型语言模型(LLM)对于使其与人类价值观和意图保持一致至关重要。该过程通常利用成对比较和 KL 散度等方法与参考 LLM 进行比较,重点是评估模型生成的完整答案。然而,这些反应的产生是在 token 级别上发生的,遵循顺序的、自回归的方式。

论文介绍了 Token-level Direct Preference Optimization(TDPO),这是一种通过在 Token-level 优化策略来使 LLM 与人类偏好保持一致的新方法。与之前在发散效率方面面临挑战的方法不同,TDPO 为每个 token 引入了前 KL 散度约束,提高了对齐和多样性。TDPO 将 Bradley Terry 模型用于基于 token 的奖励系统,增强了 KL 散度的调节,同时保持了简单性,不需要显式的奖励建模。

各种文本任务的实验结果表明,TDPO 在平衡对齐与生成多样性方面具有卓越的性能。值得注意的是,在受控情绪生成(IMDB 情感分析数据集)和单轮对话数据集中,TDPO 的微调比 DPO 达到了更好的平衡,并且与基于 DPO和  PPO 的 RLHF 方法相比,显著提高了生成响应的质量。

DPO,TDPO1,TDPO2 的目标函数如下,sg 表示的是 stop gradient 操作,TDPO1 和 TDPO2 通过增加额外的参数对KL散度进行精细化的控制。

743309b3ac74ec1218210eb8de8bb438.png

算法流程如下:

c4ef55dc2a45010fcfc97b8fbc9ebc72.png

请参考论文:

Token-level Direct Preference Optimization

https://arxiv.org/abs/2404.11999

https://github.com/Vance0124/Token-level-Direct-Preference-Optimization

86c5a412be6d467e0ede1cb0807b122f.png

Step-DPO

数学推理对大型语言模型(LLM )提出了重大挑战,因为要实现准确性需要广泛而精确的推理链。确保每个推理步骤的正确性至关重要。为了解决这个问题,旨在通过 RLHF 来增强 LLM 的稳健性和真实性。然而,直接偏好优化(DPO)对长链数学推理的益处有限,因为采用 DPO 的模型很难识别错误答案中的细节错误。这种限制源于缺乏细粒度的过程监督。论文提出了一种简单、有效且数据高效的 Step-DPO 方法,它将单个推理步骤视为偏好优化的单位,而不是整体评估答案。

此外,为 Step-DPO 开发了一个数据构建 pipeline,可以创建包含 10K 个逐步偏好对的高质量数据集。在 DPO 中,由于后者的分布不均性质,自生成数据比人类或 GPT-4 生成的数据更有效。研究结果表明,对于具有超过 700 亿个参数的模型,仅需 10,000 个偏好数据对和少于 500 个 Step-DPO 训练步骤即可使 MATH 的准确率提高近 3%。值得注意的是,当将 Step-DPO 应用于 Qwen2-72B-Instruct 时,在 MATH 和 GSM8K 的测试集上分别获得了 70.8% 和 94.0% 的分数,超越了一系列闭源模型,包括 GPT-4-1106、Claude-3-Opus 和 Gemini-1.5-Pro。下图显示了 DPO 和 Step-DPO 的区别:

Step-DPO 的损失函数如下,本质上就是从以前的对运行结果的 loss,加上了对中间推理过程的 loss:

2a354b2fdab51a3df41755012eabd9a2.png

Step-DPO 的数据集构造过程如下:


1. Error collection:使用了 COT 的推理 prompt,例如 'Let’s think step by step. Step 1:',这确保模型的推理结果被结构化为多个推理步骤,每个步骤都明确以 “Step i:” 开头。


2. Step localization:假设每个错误推理结果都明确地呈现为一系列推理步骤 y = s1、s2、...、sn,继续验证每个推理步骤的正确性,直到找到第一个错误并记录其步骤号 k。此过程可以手动完成,也可以使用 GPT-4。我们选择 sk 作为错误推理步骤 s lose,从而得到一个包含错误步骤的数据集。


3. Rectification:为了得到 D2 中每个样本对应的正确推理步骤,需要通过提示 x 和前面的正确推理步骤 s1∼k−1 推断模型 π ref,来抽样多个输出 y cont。我们保留最终答案与基本事实相符的输出。在剩余的输出中,选择 y_cont 中的第一个推理步骤作为 swin,从而得到最终数据集 D。

462086fd432cd9d00a75d1ba63d84c92.png

Step-DPO 的示例如下,包括 prompt, initial_reasoning_steps, chosen_step, rejected step 这四个部分:

ee4626cfc7640801de3e9380dd36c851.png

请参考论文:

Step-DPO: Step-wise Preference Optimization for Long-chain Reasoning of LLM

https://arxiv.org/abs/2406.18629

https://github.com/dvlab-research/Step-DPO


6e436a4e835913c2c9ed2f8bfb206db3.png

DMPO

在开发 language agents 时,将大型语言模型(LLM)调整为 agents 任务至关重要。直接偏好优化(DPO)是一种很有前途的适应技术,可以减轻复合错误,提供一种直接优化强化学习(RL)目标的方法。

然而,由于无法取消分区函数,将 DPO 应用于多轮任务会带来挑战。克服这一障碍需要使分区函数独立于当前状态,并解决首选和不首选轨迹之间的长度差异。

因此论文在 RL 目标中用状态动作占用度量约束替换策略约束,并在 Bradley-Terry 模型中添加长度规范化,从而产生一种名为 DMPO 的新型损失函数,用于多轮 agents 任务,并提供理论解释。在三个多轮 agents 任务数据集上进行的大量实验证实了 DMPO 损失的有效性和优越性。


DMPO 损失的说明如下图,它通过最大化首选轨迹相对于非首选轨迹的可能性来直接优化 RL 目标。

acfc87f8c97fe76eabbb98be8438a839.png

受模仿学习的启发,用 SAOM 约束代替策略约束,并得到以下 RL 目标:

32fbb7a486590145db9eddbe2dc4bd26.png

公式推导的最终结果,公式打出来比较耗时,所以就直接截图了:

c0baa5e41ab6b23563fee080bda724e7.png

Case study,在本部分中,通过 WebShop 的一个示例比较了 DPO 和 DMPO 的性能。在该示例中,DPO 丢失了答案第一步所需的价格信息。相比之下,DMPO 在初始步骤中提供了全面的答案,从而获得了成功的结果。

67108f59ca1983d925087c2c6afaf8aa.png

请参考论文:

Direct Multi-Turn Preference Optimization for Language Agents

https://arxiv.org/abs/2406.14868

4ff7b5da068f01e6418b11dd6c1dc6ce.png

SPO

论文提出了自我对弈偏好优化(SPO),这是一种从人类反馈中进行强化学习的算法。SPO 方法是极简主义的,因为它不需要训练奖励模型,也不需要不稳定的对抗训练,因此相当容易实现。SPO 方法是极繁主义的,因为它可以证明处理非马尔可夫、非传递和随机偏好,同时对困扰离线顺序预测方法的复合误差具有鲁棒性。

为了实现上述品质,我们以极小极大赢家(Minimax Winner, MW)的概念为基础,这是社会选择理论文献中的偏好聚合概念,它将从偏好中学习定义为两种策略之间的零和博弈。

通过利用这种博弈的对称性,SPO 可以简单地让单个 agent 与自己对弈,同时保持强大的收敛保证,而不是使用传统的两种策略决斗技术来计算 MW。实际上,这相当于从策略中抽取多个轨迹,要求偏好或教师模型对它们进行比较,然后使用获胜比例作为特定轨迹的奖励。

在一系列连续控制任务中,能够比基于奖励模型的方法更有效地学习,同时保持对在实践中汇总人类判断时经常出现的不可传递(intransitive)和随机(stochastic)偏好的鲁棒性。


如下图,基于偏好的 RL / RLHF 的标准流程(左)涉及基于成对偏好数据集训练奖励模型(即分类器),然后通过 RL 对其进行优化。引入了 SPO(右),这种方法直接基于偏好或教师模型提供的偏好反馈进行优化,每个轨迹都会根据其偏好的其他 onpolicy 轨迹的比例获得奖励。我们通过经验证明和验证,这种方法比以前的研究对非传递、非马尔可夫和嘈杂偏好更具鲁棒性。

9a72db13a190bd2491ae7781d7a2b4db.png

论文的贡献如下:


1. 推导出 SPO:一种避免奖励建模、复合错误和对抗性训练的 RLHF 算法。通过基于社会选择理论中的 Minimax Winner 概念,能够将 RLHF 构建为双人零和游戏。然后,我们利用该游戏收益矩阵的对称性来证明可以简单地训练单个 agent 对抗自己。


2. 使用基于归约的分析来研究 SPO 的收敛特性。当存在非传递偏好时,证明 SPO 以底层无悔算法(no-regret algorithm,一种在线学习的方法,在线学习中,数据是逐一呈现的,算法需要在收到每个数据点后立即做出决策,并且无法回过头去修改之前的决策。有兴趣可以问问 gemini 机器人)的速率收敛到近似的 Minimax Winner。当存在底层奖励函数时,该方法以与标准技术相匹配的快速速度收敛到最佳策略。


3. 实验证明,在具有现实偏好函数的一系列连续控制任务中,SPO 比基于奖励模型的方法更有效。在各种偏好设置中,SPO 方法能够比基于奖励模型的方法更高效地学习样本。这包括基于最简单情况下的地面实况马尔可夫奖励的轨迹级比较、随机偏好、轨迹级非马尔可夫偏好和通过聚合子群体而引起的非传递偏好。


一个非传递偏好函数 P1 超过(a, b, c, d)。如果 P(x ≻ y) = 1,则 P1(x, y) = 1;如果 P(x ≻ y) = 0,则 P1(x, y) = −1;如果 P(x ≻ y) = 0.5,则 P1(x, y) = 0。请注意,没有唯一的科普兰赢家(Copeland Winner)。

下面的矩阵具有不传递性:a ≻ c,c ≻ d,d ≻ a。这意味着没有奖励函数可以解释上述偏好,因为它需要同时满足 r(a) > r(c)、r(c) > r(d) 和 r(d) > r(a),这是不可能的。

因此,模型被迫在 a 和 d 之间打破平局,这可能会让一半的人口感到不满意。实际上,这种打破平局是基于用于训练奖励模型的极其嘈杂的数据执行的,这完全是任意的。

890196341eab501f6144f30570425815.png

由于篇幅限制,我就不展开讲这篇论文了,有兴趣可以参考论文:

A Minimaximalist Approach to Reinforcement Learning from Human Feedback

https://arxiv.org/abs/2401.04056

还有一篇 DNO 也是类似技术的延续,有兴趣可以参考链接:

https://arxiv.org/abs/2404.03715


4522565a1579beb58766f578be291538.png

MCTS-DPO

文引入了一种旨在通过迭代偏好学习过程增强大型语言模型(LLM)推理能力的方法(叫做 MCTS-DPO),该方法受到 AlphaZero 所采用的成功策略的启发。MCTS-DPO 利用蒙特卡洛树搜索(MCTS)迭代收集偏好数据,利用其前瞻能力将实例级奖励分解为更细粒度的 step-level 信号。为了增强中间步骤的一致性,结合了结果验证和逐步自我评估,不断更新新生成数据的质量评估。

所提出的算法采用直接偏好优化(DPO)来使用此新生成的步骤级偏好数据更新 LLM 策略。理论分析揭示了使用策略采样数据对于成功自我改进的重要性。对各种算术和常识推理任务的广泛评估表明,与现有模型相比,性能有显著提高。

例如,MCTS-DPO方法在 GSM8K、MATH 和 ARC-C 上的表现优于 Mistral-7B 监督微调(SFT)基线,准确率分别大幅提升至 81.8%(+5.9%)、34.7%(+5.8%)和 76.4%(+15.8%)。

如下图,蒙特卡洛树搜索(MCTS)通过迭代偏好学习提升模型性能。MCTS-DPO 框架的每次迭代(左侧)包含两个阶段:MCTS 用于收集 step level 偏好,偏好学习用于更新策略。

具体来说,我们使用 MCTS 估计的动作值 Q 来分配偏好,其中 Q 值较高和较低的步骤将分别标记为正数据(绿色)和负数据(紫色)。Q 的比例在颜色图中可视化。使用右侧训练过程中的验证准确率曲线展示了迭代学习框架中在线方式的优势。ARC-C 验证的性能说明了我们提出的方法与其离线变体相比的有效性和效率。

eb84fe0741756f92ef0723115bed9cde.png

MCTS-DPO的流程如下(画红色方框的部分,下表弄错了,其中一个应该是y_w):

7041765ea5e48d9b4f044e25297c7138.png

DPO 的损失函数如下,加入了 label smothing 平滑项 alpha, beta 则是 KL 散度的缩放参数:

8d4acdc632fd7ec12cc3917ae65c320c.png

由于篇幅限制,其他的内容请参考论文:

Monte Carlo Tree Search Boosts Reasoning via Iterative Preference Learning

https://arxiv.org/abs/2405.00451

https://github.com/YuxiXie/MCTS-DPO

731940811331690c5a9e43739b8b2e48.png

应用场景

8.1 模型安全

这是 alignment 最开始的一个功能(论文里面提到的 safety, helpfulness 等),限制回答一些黄赌毒以及一些敏感的问题,主要是安全合规,能让大模型朝着积极有意义的发展的方向发展。

8.2 Agents应用

Agents 是现在大模型最流行的应用范式,现有的工作主要是利用 Agents 生成偏好数据,来优化模型,提升模型的性能;也有直接构造环境,使用环境的数据来做 agents 的偏好优化(比如 agentsQ 利用 MCTS-DPO 来实现订票),让 agents 的能力得到了拓展。

1993d2571d3f66887ad2a155f7dbf64b.png

总结

总的来说,大模型的 Alignment 现在集中在损失函数的修改,以及 RL 理论的集成,数据的合成上面,训练方法从不稳定的 PPO 变成的 DPO 及其变体,虽然论文有一大堆的推导,实际上是越来越简单了,自然门槛会越来越低,后面出现了 AgentQ,我仔细看了一下原来是 MCTS+DPO,我有个没有依据的猜测,会不会后面没有 SFT 了,只有 DPO+environment,源源不断的跟环境交互进行训练。

outside_default.png

参考文献

outside_default.png

[1] A Comprehensive Survey of LLM Alignment Techniques: RLHF, RLAIF, PPO, DPO and More https://www.arxiv.org/abs/2407.16216

[2] https://arxiv.org/abs/2309.00267

[3] Direct Preference Optimization: Your Language Model is Secretly a Reward Model https://arxiv.org/abs/2305.18290

更多阅读

2542d36ccdca30a1117d36120a52f20b.png

c1b2fe136d4e98cdcf8cb704eb1ce330.png

5257e6d82d96eda0616a06e5693280ab.png

33debbb0c3c2b7e892f081c7bc4e95ed.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

7bd959fe38f7ea975eef13b70c2e7f82.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

·

e185cfe2a7992e305a4f3261e408ee72.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值