目前常见的大型语言模型多采用右侧只使用 Decoder 的 Decoder-only 架构,例如我们熟知的 ChatGPT 等。这些架构都是基于谷歌 2017 年发布的论文“attention is all you need”中提出的 Transformer 衍生而来,其中包括 Encoder 和 Decoder 两个结构。
大模型的特点在于:
大模型之所以能有效生成高质量有意义的回答,关键在于“大”。例如 GPT-1 的参数规模是 1.5 亿,GPT-2 Medium 的参数规模是 3.5 亿,到 GPT-3.5 时,参数规模达到惊人的 1750 亿,参数规模的增加实现了量变到质变的突破,“涌现”出惊人的“智能”。
大模型的预训练机制是指其“脑袋”里存储的知识都是预先学习好的,预训练需要花费相当多的时间和算力资源。在没有其他外部帮助的情况下,大模型所知道的知识信息总是不完备且滞后的。
encoder-only:这些模型通常适用于可以自然语言理解任务,例如分类和情感分析.最知名的代表模型是BERTencoder-decoder:此类模型同时结合了Transformer架构的encoder和decoder来理解和生成内容。该架构的一些用例包括翻译和摘要。encoder-decoder的代表是google的T5decoder-only:此类模型更擅长自然语言生成任务。典型使用包括故事写作和博客生成。这也是我们现在所熟知的众多AI助手的结构我们目前耳熟能详的AI助手基本都来自左侧的灰色分支,当然也包括ChatGPT。这些架构都是根据谷歌2017年发布的论文“attention is all you need”中提出的transformer衍生而来的,在transformer中,包括Encoder,Decoder两个结构目前的大型语言模型就是右侧只使用Decoder的Decoder-only架构的模型大模型又大在哪呢?第一,大模型的预训练数据非常大,这些数据往往来自于互联网上,包括论文,代码,以及可进行爬取的公开网页等等,一般来说,现在最先进的大模型一般都是用TB级别的数据进行预训练。第二,参数非常多,Open在2020年发布的GPT-3就已经达到170B的参数在GPT3中,模型可以根据用户输入的任务描述,或给出详细的例子,完成任务但这与我们熟知的ChatGPT仍然有着很大的差距,使用ChatGPT只需要像和人类一样对话,就可以完成任务。除了形式上的不同之外,还有一个更加重要的差距,那就是安全性上的差别。
没错,这就是大语言模型真实工作的样子,平时使用大模型看到他逐字输出的样子,并不是程序员做的酷炫“打字机”效果,而是大模型就是如此这般工作的。按照我们的常识认知,这种依靠概率计算逐字接龙的方法,恐怕连生成一个通顺的句子都难,更别提生成高质量有意义的回答了,为什么这种方法会有效呢?答案就是大,GPT-1的参数规模是1.5亿,GPT-2 Medium的参数规模是3.5亿,到GPT-3.5时,他的参数规模来到了惊人的1750亿,我们常说大力出奇迹,参数规模的增加,使得大模型实现了量变到质变的突破,最终“涌现”出了这种惊人的“智能”。反观人类自身,无论是长周期看物种的进化,还是短周期看一个个体的学习成长历程,都有这样“涌现”的结构,就像当我打下这些文字的时候,我的大脑也在神奇的进行着快速的语言组织,这个边打字边思考边输出的过程,又何尝不是一场接龙游戏呢?图15文字接龙游戏预训练(Pre-trained):正如我们前面五点朴素洞察提到的,人类是不知道自己没见过/学过的知识的,大模型也是如此,大模型“脑袋”里存储的知识,都是预先学习好的,这个预先学习并把对知识理解存储记忆在“脑袋”里的过程,就称为预训练。预训练是需要花费相当多的时间和算力资源的,当你了解并意识到预训练机制的时候,你就会明白,在没有其他外部帮助(例如使用浏览器插件,RAG等)的情况下,大模型所知道的知识信息总是不完备的,滞后的(非实时)。
由于笔者实用的macOS系统,因此采用GGML量化后的模型,官方开源出来的模型大都以Python为主,效率可想而知,因此笔者一般会采用社区内的其他实现,比较有名的项目有:ggerganov/llama.cpp:Port of Facebook's LLaMA model in C/C++([7])ggerganov/whisper.cpp:Port of OpenAI's Whisper model in C/C++([8])[heading2]LLama[content]首先是编译,为了利用Metal的GPU,可以用如下命令编译:之后需要去Llama-2-7B-Chat-GGML([9])中下载模型,3G到7G不等,读者可以按需尝试即可。得到输出此外,llama.cpp还提供了WebUI供用户使用,首先启动server:它默认监听8080端口,打开浏览器就可以对话了