只有认识模型,才能用好模型。
我们将直观地了解模型是如何运行的以及它的能力是如何产生的,不需要用到数学知识。
涉及的知识:为什么token和汉字不是一一对应、语料的作用、模型训练过程、模型如何运行、模型中的参数是什么、模型为什么几个字几个输出、涌现是什么、模型能力有什么决定、提示语工程、如何选择模型
一、先验知识
模型需要能认识文字,并且需要大量数据语料来学习。
-
比如下边是其中一个数据语料:
从前有一只可爱的小白兔,它住在一个美丽的森林里。小白兔非常勤劳,每天都会去森林里采集蘑菇和胡萝卜。
-
我们将这句话拆成词组,如下:
{从前}{有}{一只}{可爱的}{小}{白兔}...
上边出现的词组,例如:"从前"、"有"、"一只"、"可爱的"、"小"、"白兔"... 大括号中的每个部分叫做一个"token"。
所有词组成的表叫做"token表",它存储了模型能认识的所有字。
这就说明了为什么 一个"token"和一个汉字不一定是一一对应 的关系。
二、模型训练
使用如下语料,观察一下模型的训练过程:
从前有一只可爱的小白兔,它住在一个美丽的森林里。小白兔非常勤劳,每天都会去森林里采集蘑菇和胡萝卜。
对这句话进行token拆分,如下:
{从前}{有}{一只}{可爱的}{小}{白兔}...
训练的时候我们陆续盖住这些词组,让模型猜下一个词:
-
第一次训练:
input:从前
output:?
如果output猜的是{有},则不做操作,如果不是,则让模型调整[参数]。
-
第二次训练:
input:从前有
output:?
如果output猜的是{一只},则不做操作,如果不是,则让模型调整[参数]。
...
(备注,这里说的 [参数]实际是对应模型的大小 ,例如GPT3模型大小是175b参数)
所有语料都经过处理后,不断调整模型参数,最终模型调整完成。
使用模型
当使用训练好的模型时,首先输入信息(input){此例中:从前},模型生成输出(output){此例中:有},然后此输出加到输入中形成新的输入{此例中:从前有},再基于这个新输入生成新输出{此例中:一只}。这个过程一直重复,直到模型输出结束符号,这时模型输出完全完成。
这也就是为什么在 使用模型的时候,它是几个字几个字这样输出 的。
涌现
模型究竟学习到了什么?
模型学习到了在给定输入(input)的情况下,理解这个输入并基于理解生成输出(output)。
这个 理解和输出的过程,就是模型的能力。
因为通过大量的预料训练,模型从这些文本中找到了一些规律,包含不限于以下这些:
语法、语序、语义、逻辑、推理、情绪 。。;
这些能力都来自语料中的信息。
比如我们有两类主要语料信息:
数学题:
我们规定两人轮流做一个工程是指,第一个人先做一个小时,第二个人做一个小时,然后再由
第一个人做一个小时,然后又由第二个人做一个小时,如此反复,做完为止。如果甲、乙轮流做一个工程需要9.8小时,而乙、甲轮流做同样的工程只需要9.6小时,那乙单独做这个工程需要多少小时?
解:两次做每人所花时间:甲乙
5小时4.8小时
4.6小时5小时
∴甲做0.4小时完成的工程等于乙做0.2小时,乙的效率是甲的2倍,甲做5小时完成的任务乙只要2.5小时就能完成。
**∴**乙单独完成这个工程要2.5+4.8=7.3(小时)
故事书:
从前有一只可爱的小白兔,它住在一个美丽的森林里。小白兔非常勤劳,每天都会去森林里采集蘑菇和胡萝卜。
这些语料有个基本的特点,他们都是普通话描述的,所以模型的基础能力肯定有:
语法、语序、语义等。。
如果训练的数学数据很多的话,他就会出现了如下能力:
数学、推理等。。
当不同种类的训练预料多到一定程度的时候,就会产生各种能力,比如:
语法、语序、语义、数学、推理、编码、逻辑、推理、情绪 。。;
除了这些, 模型还学习到了很多很多说不清的能力,这些所有的能力称之为涌现。
充分训练后的LLM能力的示意图如下:
- 黑点部分为模型的能力
- 红色直线表示"已经充分训练后的LLM":
因为模型训练的语料大多是普通话,所以训练好的模型在语法、语序、语义方面能力很强。
至于数学、推理、编码、逻辑等能力,则 取决于训练语料的多少,不同能力的表现程度会有所不同。
模型的能力由什么决定?
第一个影响因素是token表: 他是指模型可以认识的字。(这部分差异不大,不做介绍。)
第二个影响因素则是语料:
各家模型的训练方法其实都是大同小异的,最大的差异在于他们用什么语料来训练模型。
比如豆包模型,它是字节跳动的模型,他们的抖音短视频信息很多,属于C端用户信息较多的,也会有很多营销策略等信息,所以他们处理C端营销的方案方面就比较强。
比如千问模型,它是阿里的模型,因为他们有阿里健康相关的预料,所以他们在医疗模块方面的能力就比较强。
这些预料的不同,就造成了不同厂家的模型有不同的能力,有些能力较强,有些能力则较弱。
我们的问题是:能力如此不同,怎么更好的与模型交互呢?
提示语工程
模型的逻辑是:通过你输入的input,去理解你的意思,使用模型的理解,去输出output。
这里说的 input,我们称之为提示语。
在一个大参数模型(一般指千亿规模100B+)下,如果预料训练充分的话,他的语言能力其实是差不多的,这些能力大概包括如下:
语法、语序、语义等。。
但是其他 涌现出来的能力都怎么样,其实就不能确定了 ,因为更多的是依赖预料的类型,这些能力大致包括如下:
语法、语序、语义、数学、推理、编码、逻辑、推理、情绪 。。;
模型的能力不确定的话,如何使用模型呢?
openai推出了一个提示语工程手册[1],手册大概描写了如何向模型提问的6个策略:
1.提供更详细的问题背景信息
2.让模型扮演一个角色
3.用分隔符,清晰的表达不同部分的逻辑
4.如果是复杂问题,给他个拆解步骤,让它按步骤执行
5.提供一些输入input和输出output的例子
6.指定输出的格式
这些策略的重点都是在于如何把一个问题描述清楚,然后使用模型涌现出的能力,得到最终的输出。
如果 你的input描述的很清楚,你的最佳策略应该是去尝试不同的模型了。
没有哪个模型是一定比另一个模型强的,不同的场景要使用不同的模型。
[1]openai提示语工程手册:https://platform.openai.com/docs/guides/prompt-engineering