GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

释放双眼,带上耳机,听听看~!
本文详细解析了GPT生成式预训练模型的工作原理、优化方法和训练步骤,包括单字接龙、自回归生成等关键概念,旨在帮助读者深入了解GPT模型的技术原理和应用。

基本概念

GPT: Generative Pre-Training Transformer(生成式预训练模型)

生成式:内容实时生成。
预训练:提前学习过大量知识。
模型:算法。

误解:ChatGPT是搜索引擎?

ChatGPT不是搜索引擎,所有的结果都是ChatGPT通过给定的上下文逐字实时生成的。
它能够创造不存在的文本,而搜索引擎只能够从数据库中查询已有的数据。
搜索引擎不会混淆答案,但是生成语言模型可能会。
比如生活中根本不存在的内容。

ChatGPT: GPT模型的基础上进行了特定的微调和优化,以提供更好的对话交互能力。

Prompt: 一种使用自然语言来引导用户与机器之间的交互的技术。

GTP 工作原理

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

本质就是单字接龙,通过上一次词自动计算出下一个词。

如何自动计算?

将每一个数据向量化,然后计算它们出现的概率分布,这样GPT就可以根据上文,通过概率去随机取得下一个关联的数据。这也是为什么每一次回答ChaptGPT的答案都不一样的原因。

注意:这里的数据可能是文本、可能是语音、可能是视频、可能是像素块等等。

任何数据均可向量化。比如,通过从身高、体重、籍贯等三个方面,就可以把人向量化为[11,22,33]。

最后形成多维空间的一个点。

数据被向量化后,有一个形象化的例子,就形成了空间中的概率分布图,点越密集的地方,证明某个数据出现的频次越高。

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

长的文章,通过单字接龙的自回归所生成。

什么是自回归生成?
将生成的所有数据作为下一次生成的参数,不断依次迭代进行,直到触发结束任务。
比如:输入一个”我”,希望ChatGPT生成一个我是一只小小鸟。

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

模型:GPT的大脑,也就是一种算法,对应着输入和输出。

通过大量高质量的学习材料,来学习通用规律,以便于能够根据上文自动生成下文内容,学习的方式就是单字接龙。

学习材料:各种互联网文本、书籍、语音、视频等…
还有一些问答范例的学习,比如:

白日依山尽的下一句是什么?
白日依山尽的下一句是黄河入海流。
…………………………..

大模型学习步骤

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

  1. 通过大量的数据学习人类的语义关系和语法规律。(开卷有益)

让ChatGpt对海量的互联网文本做单字接龙,以扩充模型的词汇量,语言知识、关于世界的信息和知识。使ChatGpt从一只“不会说话的鹦鹉”变成脑容量超级大的懂王鹦鹉。
注意:模型训练的目的不是记忆,而是学习提问和回答的通用规律。以便于当遇见从没有记忆过的提问时,也能够生成用户想要的回答。

OpenAI 学习材料 参数(类比函数的入参) 实际效果
GPT-1 5GB 1.17亿 平平无奇
GPT-2 40GB 15亿 平平无奇
GPT-3 45TB 1750亿 人类各种词语搭配和语法规则几乎都已明白
  1. 矫正GPT模型参数,让模型输出我们想要的结果 (模板规范)

让ChatGPT使用优质的,人工选择的优质对话范例进行单字接龙学习,以规范回答的对话模式和内容,使得ChaptGPT变成“懂规矩的博学鹦鹉”。

  1. 增强GPT的创新性,避免变成机械式的刻板回答(创意引导)

让ChatGpt根据人类对它生成答案的好坏评分来调节模型,以引导它生成人类认可的创意回答。使得ChatGPT变成既懂规矩又会试探的博学鹦鹉。

ChatGPT没有意识,没有思想,也没有欲望,只是一个算法模型,通过输入参数计算出输出结果而已。

编写一个优秀的Prompt步骤

原则:

你让模型猜测的东西越少,你得到的答案就会越精准。

明确指令和相关上下文

示例一:

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

示例二:

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

防止错误答案

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

让模型充当一个角色

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

使用分隔符来清楚的区分不同部分

对于简单直接的任务,使用分隔符可能不会对输出质量产生影响。然而,任务越复杂,消除任务细节的歧义就越重要。不要让模型费力去理解你具体要求什么。分隔符可以用 三引号、xml标签 等格式。

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

指定完成任务的步骤

指定GPT的输出步骤:

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

提供示例

当我们想要指定某一种输出格式,或者是某个想法难以用语言描述的时候,我们可以通过给出示例的方式来达到我们的效果。Gpt会模仿示例的要求进行回答。也就是”找规律”。

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

指定你想要的输出

这些模型无法读懂你的想法。如果输出太长,就要求它简短答复。如果输出太简单,就要求它用专家级别的能力来回复。如果你不喜欢输出的格式,请演示你希望看到的格式。

案例一:
GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

案例二:
GPT生成式预训练模型详解:工作原理、优化方法与训练步骤
GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

Prompt实战

工作用

编写一个mysql自动化部署脚本

你是一名ansible技术的大师,对ansible有着非常丰富的理论和实践经验。
我现在需要编写一个自动化部署mysql的剧本。以下是我当前已有的一些数据、环境现状以及要求:
“””

  1. 通过容器部署mysql,最终部署目录在/data/mysql目录下。
  2. 在/opt/home目录下有mysql的docker容器、docker-compose.yml、.env文件,该容器通过docker-compose命令进行启动。
  3. 容器初始化的时候需要自动执行一些初始化的sql脚本,脚本目录在/opt/home/sql目录下。
  4. 容器的配置文件、数据等目录需要从容器中挂载到宿主机的/opt/data目录中。
  5. mysql的端口、运行密码需要从变量中读取。

“””
请根据以上要求帮我编写一个自动化部署mysql的剧本。请确保你给出的剧本没有错误,如果你不清楚,请在{}中标注你不知道。另外,每一个步骤给出详细的注释。

以下是GPT生成的内容:

---
- name: 部署MySQL容器
  hosts: your_target_host
  become: yes
  tasks:
    - name: 安装Docker和Docker Compose
      apt:
        name:
          - docker.io
          - docker-compose
        state: present

    - name: 创建主机上的目标目录
      file:
        path: /data/mysql
        state: directory
      # 如果还有其他目录需要创建,请在此添加

    - name: 复制MySQL Docker文件到 /opt/home
      copy:
        src: /path/to/your/mysql-docker-files/
        dest: /opt/home
      # 请确保将 /path/to/your/mysql-docker-files/ 替换为实际路径

    - name: 使用Docker Compose启动MySQL容器
      command: docker-compose -f /opt/home/docker-compose.yml up -d
      args:
        chdir: /opt/home

    - name: 等待MySQL容器启动(根据需要调整等待时间)
      wait_for:
        timeout: 60

    - name: 将MySQL初始化SQL脚本复制到容器
      docker_copy:
        container: "{{ your_mysql_container_name }}"
        src: /opt/home/sql
        dest: /docker-entrypoint-initdb.d
      # 请将 "{{ your_mysql_container_name }}" 替换为实际的容器名称

    - name: 将MySQL配置文件和数据目录挂载到主机的 /opt/data
      docker_container:
        name: "{{ your_mysql_container_name }}"
        volumes:
          - /opt/data:/var/lib/mysql
        restart_policy: always
      # 请将 "{{ your_mysql_container_name }}" 替换为实际的容器名称

    - name: 设置MySQL的root密码和端口
      docker_container_exec:
        container: "{{ your_mysql_container_name }}"
        command: bash -c "mysql -u root -p'{{ your_mysql_root_password }}' -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '{{ your_mysql_root_password }}';""
      # 请将 "{{ your_mysql_container_name }}" 和 "{{ your_mysql_root_password }}" 替换为实际的容器名称和密码

    - name: 确保MySQL容器重新启动以应用更改
      docker_container:
        name: "{{ your_mysql_container_name }}"
        state: restarted
      # 请将 "{{ your_mysql_container_name }}" 替换为实际的容器名称

实现某个算法

Prompt

你是算法编程方面的大师,获得过国际上各种顶尖算法比赛的冠军。

我现在需要编写一个算法:

输入一个列表a和一个整数count,将列表a拆分为多个子列表,子列表的个数由count指定,最后输出这个子列表。

要求:Java语言实现、考虑到各种可能会发生的异常情况。

输出:

import java.util.ArrayList;
import java.util.List;

public class ListSplitter {

    public static List<List<Integer>> splitList(List<Integer> originalList, int count) {
        List<List<Integer>> resultLists = new ArrayList<>();

        try {
            // 判断拆分的集合是否为空,或者拆分大小是否小于1,如果是,抛出异常
            if (originalList == null || count < 1) {
                throw new IllegalArgumentException("Invalid input. List cannot be null, and count should be greater than 0.");
            }

            int size = originalList.size();
            
            // 判断集合是否大于拆分的长度,大于拆分,小于直接把原集合存入总集合
            if (size > count) {
                int pre = size / count;
                int last = size % count;

                //前面pre个集合,每个集合大小都是count个元素
                for (int i = 0; i < pre; i++) {
                    List<Integer> itemList = new ArrayList<>();
                    for (int j = 0; j < count; j++) {
                        itemList.add(originalList.get(i * count + j));
                    }
                    resultLists.add(itemList);
                }

                // 处理剩余不足count大小的数据
                if (last > 0) {
                    List<Integer> itemList = new ArrayList<>();
                    for (int i = 0; i < last; i++) {
                        itemList.add(originalList.get(pre * count + i));
                    }
                    resultLists.add(itemList);
                }
            } else {
                resultLists.add(originalList);
            }

        } catch (Exception e) {
            // 捕捉异常,并打印错误信息
            e.printStackTrace();
        }

        return resultLists;
    }

    public static void main(String[] args) {
        // 示例使用
        List<Integer> originalList = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            originalList.add(i);
        }

        int count = 3;
        List<List<Integer>> result = splitList(originalList, count);

        // 打印结果
        System.out.println("Original List: " + originalList);
        System.out.println("Split Result: " + result);
    }
}

辅助编程

编写一个Cypher语句

我们来玩一个角色扮演游戏,你是Neo4j技术的大师,有着非常丰富的实战和理论经验。
我现在有两个节点:STUDENT、SCHOOL。一个关系:STUDY。

我现在想要编写一个cypher语句:查找所有在SCHOOL中有STUDY关系的STUDENT节点。并根据SCHOOL进行分组。我的输入是一个SCHOOL节点id的列表。

要求:专业、严谨;确保你给出的代码是正确的,如果你不知道,请直接回答你不知道,否则不要给出任何的解释。

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

生活助手

讯飞星火、百度等大模型中已经集成了很多类型的插件可以直接使用。

讯飞星火:

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

以生成PPT为例

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

百度文心一言:

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

副业发展

可以通过自己Prompt制作各种各样的助手应用。也可以使用别人已经制作好的助手直接使用。

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

总结

目前的ChatGpt可能还不能够很好的处理范围很大、业务性强的一些事情。(或者说需要完成这种任务需要编写的Prompt可能都需要成千上万个字)

但是对我们大部分普通人来说,在日常生活、工作中针对于某些具体的事情,非常细分且明确的事情,它往往能够给出比较好的答案,并且还能够极大程度的解放我们的双手,提高工作效率。

因此,非常值得在学习和工作中拥抱大模型,感受这个新的时代。

大模型百花齐放

CHATGPT4.0

官网地址:openai.com/gpt-4

当前最强大的大模型。各方面性能都遥遥领先。

CHATGPT3.5

免费使用网址:chat-shared3.zhile.io/shared.html…

个人感觉比国内的一众大模型好用很多…

文心一言

官网注册账号即可使用:yiyan.baidu.com/

百度开发的大模型,个人感觉比较适用于零基础小白。

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

讯飞星火

官网注册账号即可使用:xinghuo.xfyun.cn/desk

科大讯飞开发的大模型,专业性稍微强一些。各种助手也很丰富。可以创建自己的模型。

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

通义千问

官网注册即可使用:tongyi.aliyun.com/

阿里巴巴开发的大模型,更加专注于一个生态。

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

腾讯混元大模型

官网注册即可使用:hunyuan.tencent.com/bot/chat

腾讯开发的大模型,更加专注于一个生态。

GPT生成式预训练模型详解:工作原理、优化方法与训练步骤

关联网站

OpenAi官网Prompt学习:platform.openai.com/docs/introd…
Prompt中文学习指南:prompt-guide.xiniushu.com/

GitHub上很吊的一些开源项目:
Prompt学习:github.com/f/awesome-c…
制造喵:github.com/PlexPt/awes…

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

lleaves:加速机器学习预测的开源决策树编译器

2023-12-19 15:29:00

AI教程

使用LlamaIndex和GPT创建文档问答聊天机器人的分步教程

2023-12-19 15:32:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索