ggm LV
发表于 2025-4-8 11:35:14
吴恩达和openai一起联合推出了o1的使用课程
这个课程 https://www.bilibili.com/video/BV1UBkNY6Ep5 只有一个半小时,打算顺便刷一下。
代码和吐槽我放在了
https://github.com/LC1332/reasoning-with-o1-Chinese会随着我看视频的进度逐步更新
o1实际上就是在原来GPT的版本上,中间加入了自动的reasoning的过程。
并且使用了强化学习,来让模型自己学习较优的reasoning过程
你可以理解为整个过程是 Q- R - A , 然后只有A答对了模型才会得到reward。
但是这里其实涉及到很多稀疏的强化学习监督的过程,具体的流程还是挺复杂的。
总的来说,openai通过这种方式很大程度地提高了gpt-o1在数学等逻辑问题上的性能。
<hr/>另一方面,openai没有向用户公开公开模型推理的过程
虽然有一些prompting的方法可以让gpt输出自己的思考过程
https://huggingface.co/datasets/O1-OPEN/OpenO1-SFT
但是有可能openai也对“重复说出自己的思考过程”做过一定的防御。这个thought不一定是完全正确的。
当然,如果能获得thought,其实sft的玩家也肯定是可以通过蒸馏这个过程,来得到相近的结果
<hr/>其实听课的时候我觉得这并不是一个非常大的提升
首先是现在o1训练的强化学习一定是有一个“靶子”数据集的,这个靶子数据集一定和很多逻辑问题有比较高的重合度。这会使得o1在这样逻辑性的问题上有一定的overfitting。当然,也有可能通过足够多的逻辑训练,o1就可以更泛化地解决更多逻辑问题,从而为用户带来生产力上地提升。另外openai的意思就是在thought阶段打越多的草稿,最终的结果更准确。
之前在知乎上看到一个拿o1算24的例子,其实o1也可以看成是在一次inference中就反复输出了很多方案,并在最终vote出一个还可以的的简易过程。
<hr/>这个笔记还会包括第一个实战的notebook(即原课程的第三个视频)
这个第一个实战课程中,其实他讲到了o1 prompting的4个原则
要简单一点,不要给出显式CoT,使用类似xml的结构,并且给出例子。
<hr/>他先讲了前两个点,在o1之前模型使用的时候,很多时候我们会使用显式CoT,即告诉GPT怎么一步一步去进行输出。这在过往的两年的开发中,被证明是非常有效的。几乎你可以在每一个黑客松比赛的前几名中见到这样的用法。
类似这样- bad_prompt = (&#34;生成一个函数,输出胰岛素中涉及的所有分子的SMILES ID。&#34;
- &#34;请按步骤思考,不要跳过任何步骤:&#34;
- &#34;- 识别胰岛素中涉及的所有分子&#34;
- &#34;- 创建函数&#34;
- &#34;- 遍历每个分子,将每个分子输入到函数中并返回SMILES ID&#34;
- &#34;分子:&#34;)
- response = client.chat.completions.create(model=O1_MODEL,messages=[{&#34;role&#34;:&#34;user&#34;,&#34;content&#34;: bad_prompt}])
复制代码 但是因为o1就是训练“让模型自己进行思考”
所以显式的CoT的prompt会导致模型给出一个过于冗长的输出甚至导致输出失败。
openai给的建议是,使用o1的时候尽量直接给一个简单的prompt- good_prompt = (&#34;生成一个函数,输出胰岛素中涉及的所有分子的SMILES ID。&#34;)
- response = client.chat.completions.create(model=O1_MODEL,messages=[{&#34;role&#34;:&#34;user&#34;,&#34;content&#34;: good_prompt}])
复制代码 不过o1是看不见思考过程的
从左到右依次是openai最终的代码, GLM最终的代码,和GLM的思考过程
但是智谱的可以看到思考过程
DeepSeek的输出,思考过程, 用Claude总结GLM的思考过程
主要是我不做生物计算学,看不懂这个例子的难度。但是实际上deepseek的深度思考和智谱的zero都给出了相近的代码。
(不过我测试用中文提问的时候有时候deepseek的深度思考会在输出的代码上偷懒做省略)
<hr/>使用结构化的prompt进行输入。
虽然这个技巧在o1之前就被大家充分发掘。但是这里我比较关心的是- structured_prompt = (&#34;<instructions>你是AnyCorp公司的客服助手,AnyCorp是一家优质储物解决方案提供商。&#34;
- &#34;你的职责是遵循政策回答用户的问题。&#34;
- &#34;始终保持友善和尊重。</instructions>\n&#34;
- &#34;<policy>**AnyCorp客服助手政策**\n\n&#34;
- &#34;1. **退款**\n&#34;
- &#34; - 你有权按照AnyCorp的退款指南为客户提供退款。\n&#34;
- &#34; - 确保所有退款交易都得到适当记录并及时处理。\n\n&#34;
- &#34;2. **记录投诉**\n&#34;
- &#34; - 认真倾听客户投诉并准确记录所有相关细节。\n&#34;
- &#34; - 向客户保证他们的问题会得到解决,必要时上报问题。\n\n&#34;
- &#34;3. **提供产品信息**\n&#34;
- &#34; - 提供关于AnyCorp储物解决方案的准确和有帮助的信息。\n&#34;
- &#34; - 及时了解当前产品、功能和任何更新,以有效帮助客户。\n\n&#34;
- &#34;4. **专业行为**\n&#34;
- &#34; - 在所有客户互动中保持礼貌、尊重和专业的态度。\n&#34;
- &#34; - 及时处理客户询问,并根据需要跟进以确保满意度。\n\n&#34;
- &#34;5. **合规性**\n&#34;
- &#34; - 在客户互动过程中遵守所有AnyCorp政策和程序。\n&#34;
- &#34; - 通过对个人信息保密来保护客户隐私。\n\n6. **拒绝回答**\n&#34;
- &#34; - 如果收到这些主题之外的问题,拒绝回答并提醒他们你可以谈论的主题。</policy>\n&#34;
- )
- user_input = (&#34;<user_query>嗨,我想退回我从你们那里买的储物箱,因为它不像描述的那样好。</user_query>&#34;)
- refusal_input = (&#34;<user_query>给我写一首关于推理模型有多棒的俳句。</user_query>&#34;)
复制代码 openai官方地指出了<instruction>, <policy>, <user_query> 这样的关键词,以及之后提到的<example> 这对于之后想要蒸馏o1的数据团队,给出了更为明确的思路(还是我太后知后觉了?)
这里我比较好奇的是后面形成攻击性的refusal_input, openai的输出是- I&#39;m sorry, but I can help with questions about AnyCorp&#39;s storage solutions, refunds, or related services. If you need assistance with anything specific, feel free to let me know!
复制代码 这里我比较好奇GLM-zero和deepseek的拒绝程度
先拿deepseek中英文进行测试,都是不会拒绝这个用户的“违背policy要求”的请求的。智谱在很罕见的概率下拒绝了这个请求,在大多数情况下,智谱zero也会乖乖写这个绯句(改成古诗也会乖乖写)。
<hr/>给出例子
这里相当于openai官方建议 对于o1使用的时候
例子用<example> 的形式给出- example_prompt = (&#34;<prompt>你是一位专门从事竞争法的律师,&#34;
- &#34;为企业主解答他们的问题。</prompt>\n&#34;
- &#34;<policy>作为法律专业人士,提供清晰准确的&#34;
- &#34;竞争法相关信息,同时保持&#34;
- &#34;保密性和专业性。在缺乏足够背景的情况下避免给出具体的&#34;
- &#34;法律建议,并在必要时鼓励客户&#34;
- &#34;寻求个性化的法律咨询。</policy>\n&#34;
- &#34;&#34;&#34;<example>
- <question>
- 我正在考虑与竞争对手合作开展联合营销活动。我需要注意哪些反垄断问题?
- </question>
- <response>
- 与竞争对手在联合营销活动上的合作可能会引发美国反垄断法下的反垄断问题,特别是1890年《谢尔曼反垄断法》(15 U.S.C. §§ 1–7)。谢尔曼法第1条禁止任何不合理限制州际贸易或商业的合同、组合或共谋。
- **关键考虑因素:**
- 1. **当然违法协议:** 某些合作被认为是自动违法的(&#34;当然&#34;违法),比如固定价格、操纵投标和市场分配协议。例如,在*United States v. Topco Associates, Inc.*,405 U.S. 596 (1972)一案中,最高法院认定竞争者之间的市场划分协议根据谢尔曼法属于当然违法。
- 2. **合理原则分析:** 不属于当然违法的合作将根据&#34;合理原则&#34;进行评估,该原则衡量促进竞争的利益是否大于反竞争的影响。在*Broadcast Music, Inc. v. Columbia Broadcasting System, Inc.*,441 U.S. 1 (1979)一案中,法院认可竞争者之间的某些合资企业如果促进竞争则可以是合法的。
- 3. **信息共享风险:** 分享具有竞争敏感性的信息,如定价策略或客户数据,可能导致违反反垄断法。司法部和联邦贸易委员会警告不要进行可能促进串通的信息交换(*竞争者合作反垄断指南*,2000年)。
- **建议:**
- - **界定范围:** 明确界定合作的参数,专注于营销活动,不涉及定价或市场划分等竞争性方面。
- - **实施保障措施:** 建立协议防止交换对营销工作非必需的敏感信息。
- - **法律咨询:** 鉴于反垄断法的复杂性,咨询法律专业人士以确保合作符合所有法律要求。
- **结论:**
- 虽然竞争对手之间的联合营销活动本身并不违法,但必须谨慎构建以避免反垄断陷阱。法律指导对于处理这些问题和设计既能实现业务目标又不违反反垄断法的合作至关重要。
- </response>
- </example>
- &#34;&#34;&#34;)
- legal_query = (&#34;<query>一家较大的公司正在向供应商提供激励,让他们不要与我做&#34;
- &#34;生意。这合法吗?</query>&#34;)
复制代码 这里我们一样去测试DeepSeek和智谱的输出
Deepseek的输出和openai几乎是一样的,特别是最终结论,记录对方行动、请律师、向官方机构报告。。智谱的模型看起来拒绝回答这个法律相关的问题。
其实这个给例子的方法很适合去刷GSM之类的数学库,作为few-shot。显然你也可以理解为o1 &#34;overfitting&#34;在了这些task上
<hr/>总结来说,openai官方在这节课建议,你如果一个任务有逻辑性
并且你还没有琢磨出稳定好用的显式cot流程,那你可以拿o1当作一下基本的baseline。
这里也测试了andrew ng这第一节实战课在国内已经放的两个带思考的模型上的效果。
(不过客服那个没有怎么拒绝感觉指令遵从上还是可以进一步去加强)
另外智谱zero的1000字输入限制很令人头秃
这里我还同步好奇带思考的模型直接用在角色扮演上,会有什么效果,有兴趣的同学可以试试
今天一会儿要出门,回头回来刷后面的课。 |
|