Tips
Go
(18条消息) Go语言自学系列 | golang包_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之channel的遍历_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之select switch_COCOgsta的博客-CSDN博客_golang select switch
(18条消息) Go语言自学系列 | golang并发编程之runtime包_COCOgsta的博客-CSDN博客_golang runtime包
(18条消息) Go语言自学系列 | golang接口值类型接收者和指针类型接收者_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之Timer_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang方法_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之WaitGroup实现同步_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang构造函数_COCOgsta的博客-CSDN博客_golang 构造函数
(18条消息) Go语言自学系列 | golang方法接收者类型_COCOgsta的博客-CSDN博客_golang 方法接收者
(18条消息) Go语言自学系列 | golang接口_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang接口和类型的关系_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang结构体_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang结构体_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang标准库os模块 - File文件读操作_COCOgsta的博客-CSDN博客_golang os.file
(18条消息) Go语言自学系列 | golang继承_COCOgsta的博客-CSDN博客_golang 继承
(18条消息) Go语言自学系列 | golang嵌套结构体_COCOgsta的博客-CSDN博客_golang 结构体嵌套
(18条消息) Go语言自学系列 | golang并发编程之Mutex互斥锁实现同步_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发变成之通道channel_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之原子操作详解_COCOgsta的博客-CSDN博客_golang 原子操作
(18条消息) Go语言自学系列 | golang并发编程之原子变量的引入_COCOgsta的博客-CSDN博客_go 原子变量
(18条消息) Go语言自学系列 | golang并发编程之协程_COCOgsta的博客-CSDN博客_golang 协程 并发
(18条消息) Go语言自学系列 | golang接口嵌套_COCOgsta的博客-CSDN博客_golang 接口嵌套
(18条消息) Go语言自学系列 | golang包管理工具go module_COCOgsta的博客-CSDN博客_golang 包管理器
(18条消息) Go语言自学系列 | golang标准库os模块 - File文件写操作_COCOgsta的博客-CSDN博客_go os模块
(18条消息) Go语言自学系列 | golang结构体的初始化_COCOgsta的博客-CSDN博客_golang 结构体初始化
(18条消息) Go语言自学系列 | golang通过接口实现OCP设计原则_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang标准库os包进程相关操作_COCOgsta的博客-CSDN博客_golang os包
(18条消息) Go语言自学系列 | golang标准库ioutil包_COCOgsta的博客-CSDN博客_golang ioutil
(18条消息) Go语言自学系列 | golang标准库os模块 - 文件目录相关_COCOgsta的博客-CSDN博客_go语言os库
Golang技术栈,Golang文章、教程、视频分享!
(18条消息) Go语言自学系列 | golang结构体指针_COCOgsta的博客-CSDN博客_golang 结构体指针
Ansible
太厉害了,终于有人能把Ansible讲的明明白白了,建议收藏_互联网老辛
ansible.cfg配置详解
Docker
Docker部署
linux安装docker和Docker Compose
linux 安装 docker
Docker中安装Docker遇到的问题处理
Docker常用命令
docker常用命令小结
docker 彻底卸载
Docker pull 时报错:Get https://registry-1.docker.io/v2/library/mysql: net/http: TLS handshake timeout
Docker 拉镜像无法访问 registry-x.docker.io 问题(Centos7)
docker 容器内没有权限
Linux中关闭selinux的方法是什么?
docker run 生成 docker-compose
Docker覆盖网络部署
docker pull后台拉取镜像
docker hub
Redis
Redis 集群别乱搭,这才是正确的姿势
linux_离线_redis安装
怎么实现Redis的高可用?(主从、哨兵、集群) - 雨点的名字 - 博客园
redis集群离线安装
always-show-logo yes
Redis集群搭建及原理
[ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some - 亲爱的不二999 - 博客园
Redis daemonize介绍
redis 下载地址
Redis的redis.conf配置注释详解(三) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(一) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(二) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(四) - 云+社区 - 腾讯云
Linux
在终端连接ssh的断开关闭退出的方法
漏洞扫描 - 灰信网(软件开发博客聚合)
find 命令的参数详解
vim 编辑器搜索功能
非root安装rpm时,mockbuild does not exist
Using a SSH password instead of a key is not possible because Host Key checking
(9条消息) 安全扫描5353端口mDNS服务漏洞问题_NamiJava的博客-CSDN博客_5353端口
Linux中使用rpm命令安装rpm包
ssh-copy-id非22端口的使用方法
How To Resolve SSH Weak Key Exchange Algorithms on CentOS7 or RHEL7 - infotechys.com
Linux cp 命令
yum 下载全量依赖 rpm 包及离线安装(终极解决方案) - 叨叨软件测试 - 博客园
How To Resolve SSH Weak Key Exchange Algorithms on CentOS7 or RHEL7 - infotechys.com
RPM zlib 下载地址
运维架构网站
欢迎来到 Jinja2
/usr/local/bin/ss-server -uv -c /etc/shadowsocks-libev/config.json -f /var/run/s
ruby 安装Openssl 默认安装位置
Linux 常用命令学习 | 菜鸟教程
linux 重命名文件和文件夹
linux命令快速指南
ipvsadm
Linux 下查找日志中的关键字
Linux 切割大 log 日志
CentOS7 关于网络的设置
rsync 命令_Linux rsync 命令用法详解:远程数据同步工具
linux 可视化界面安装
[问题已处理]-执行yum卡住无响应
GCC/G++升级高版本
ELK
Docker部署ELK
ELK+kafka+filebeat+Prometheus+Grafana - SegmentFault 思否
(9条消息) Elasticsearch设置账号密码_huas_xq的博客-CSDN博客_elasticsearch设置密码
Elasticsearch 7.X 性能优化
Elasticsearch-滚动更新
Elasticsearch 的内存优化_大数据系统
Elasticsearch之yml配置文件
ES 索引为Yellow状态
Logstash:Grok filter 入门
logstash grok 多项匹配
Mysql
Mysql相关Tip
基于ShardingJDBC实现数据库读写分离 - 墨天轮
MySQL-MHA高可用方案
京东三面:我要查询千万级数据量的表,怎么操作?
OpenStack
(16条消息) openstack项目中遇到的各种问题总结 其二(云主机迁移、ceph及扩展分区)_weixin_34104341的博客-CSDN博客
OpenStack组件介绍
百度大佬OpenStack流程
openstack各组件介绍
OpenStack生产实际问题总结(一)
OpenStack Train版离线部署
使用Packstack搭建OpenStack
K8S
K8S部署
K8S 集群部署
kubeadm 重新 init 和 join-pudn.com
Kubernetes 实战总结 - 阿里云 ECS 自建 K8S 集群 Kubernetes 实战总结 - 自定义 Prometheus
【K8S实战系列-清理篇1】k8s docker 删除没用的资源
Flannel Pod Bug汇总
Java
Jdk 部署
JDK部署
java线程池ThreadPoolExecutor类使用详解 - bigfan - 博客园
ShardingJDBC实现多数据库节点分库分表 - 墨天轮
Maven Repository: Search/Browse/Explore
其他
Git在阿里,我们如何管理代码分支?
chrome F12调试网页出现Paused in debugger
体验IntelliJ IDEA的远程开发(Remote Development) - 掘金
Idea远程调试
PDF转MD
强哥分享干货
优秀开源项目集合
vercel 配合Github 搭建项目Doc门户
如何用 Github Issues 写技术博客?
Idea 2021.3 Maven 3.8.1 报错 Blocked mirror for repositories 解决
列出maven依赖
[2022-09 持续更新] 谷歌 google 镜像 / Sci-Hub 可用网址 / Github 镜像可用网址总结
阿里云ECS迁移
linux访问github
一文教你使用 Docker 启动并安装 Nacos-腾讯云开发者社区-腾讯云
Nginx
Nginx 部署
Nginx 部署安装
Nginx反向代理cookie丢失的问题_longzhoufeng的博客-CSDN博客_nginx 代理后cookie丢失
Linux 系统 Https 证书生成与Nginx配置 https
数据仓库
实时数仓
松果出行 x StarRocks:实时数仓新范式的实践之路
实时数据仓库的一些分层和分层需要处理的事情,以及数据流向
湖仓一体电商项目
湖仓一体电商项目(一):项目背景和架构介绍
湖仓一体电商项目(二):项目使用技术及版本和基础环境准备
湖仓一体电商项目(三):3万字带你从头开始搭建12个大数据项目基础组件
数仓笔记
数仓学习总结
数仓常用平台和框架
数仓学习笔记
数仓技术选型
尚硅谷教程
尚硅谷学习笔记
尚硅谷所有已知的课件资料
尚硅谷大数据项目之尚品汇(11数据质量管理V4.0)
尚硅谷大数据项目之尚品汇(10元数据管理AtlasV4.0)
尚硅谷大数据项目之尚品汇(9权限管理RangerV4.0)
尚硅谷大数据项目之尚品汇(8安全环境实战V4.0)
尚硅谷大数据项目之尚品汇(7用户认证KerberosV4.1)
尚硅谷大数据项目之尚品汇(6集群监控ZabbixV4.1)
尚硅谷大数据项目之尚品汇(5即席查询PrestoKylinV4.0)
尚硅谷大数据项目之尚品汇(4可视化报表SupersetV4.0)
尚硅谷大数据项目之尚品汇(3数据仓库系统)V4.2.0
尚硅谷大数据项目之尚品汇(2业务数据采集平台)V4.1.0
尚硅谷大数据项目之尚品汇(1用户行为采集平台)V4.1.0
数仓治理
数据中台 元数据规范
数据中台的那些 “经验与陷阱”
2万字详解数据仓库数据指标数据治理体系建设方法论
数据仓库,为什么需要分层建设和管理? | 人人都是产品经理
网易数帆数据治理演进
数仓技术
一文看懂大数据生态圈完整知识体系
阿里云—升舱 - 数据仓库升级白皮书
最全企业级数仓建设迭代版(4W字建议收藏)
基于Hue,Dolphinscheduler,HIVE分析数据仓库层级实现及项目需求案例实践分析
详解数据仓库分层架构
数据仓库技术细节
大数据平台组件介绍
总览 2016-2021 年全球机器学习、人工智能和大数据行业技术地图
Apache DolphinScheduler 3.0.0 正式版发布!
数据仓库面试题——介绍下数据仓库
数据仓库为什么要分层,各层的作用是什么
Databend v0.8 发布,基于 Rust 开发的现代化云数据仓库 - OSCHINA - 中文开源技术交流社区
数据中台
数据中台设计
大数据同步工具之 FlinkCDC/Canal/Debezium 对比
有数数据开发平台文档
Shell
Linux Shell 命令参数
shell 脚本编程
一篇教会你写 90% 的 Shell 脚本
Kibana
Kibana 查询语言(KQL)
Kibana:在 Kibana 中的四种表格制作方式
Kafka
Kafka部署
canal 动态监控 Mysql,将 binlog 日志解析后,把采集到的数据发送到 Kafka
OpenApi
OpenAPI 标准规范,了解一下?
OpenApi学术论文
贵阳市政府数据开放平台设计与实现
OpenAPI简介
开放平台:运营模式与技术架构研究综述
管理
技术部门Leader是不是一定要技术大牛担任?
华为管理体系流程介绍
DevOps
*Ops
XOps 已经成为一个流行的术语 - 它是什么?
Practical Linux DevOps
Jenkins 2.x实践指南 (翟志军)
Jenkins 2权威指南 ((美)布伦特·莱斯特(Brent Laster)
DevOps组件高可用的思路
KeepAlived
VIP + KEEPALIVED + LVS 遇到Connection Peer的问题的解决
MinIO
MinIO部署
Minio 分布式集群搭建部署
Minio 入门系列【16】Minio 分片上传文件 putObject 接口流程源码分析
MinioAPI 浅入及问题
部署 minio 兼容 aws S3 模式
超详细分布式对象存储 MinIO 实战教程
Hadoop
Hadoop 部署
Hadoop集群部署
windows 搭建 hadoop 环境(解决 HADOOP_HOME and hadoop.home.dir are unset
Hadoop 集群搭建和简单应用(参考下文)
Hadoop 启动 NameNode 报错 ERROR: Cannot set priority of namenode process 2639
jps 命令查看 DataNode 进程不见了 (hadoop3.0 亲测可用)
hadoop 报错: Operation category READ is not supported in state standby
Spark
Spark 部署
Spark 集群部署
spark 心跳超时分析 Cannot receive any reply in 120 seconds
Spark学习笔记
apache spark - Failed to find data source: parquet, when building with sbt assembly
Spark Thrift Server 架构和原理介绍
InLong
InLong 部署
Apache InLong部署文档
安装部署 - Docker 部署 - 《Apache InLong v1.2 中文文档》 - 书栈网 · BookStack
基于 Apache Flink SQL 的 InLong Sort ETL 方案解析
关于 Apache Pulsar 在 Apache InLong 接入数据
zookeeper
zookeeper 部署
使用 Docker 搭建 Zookeeper 集群
美团技术团队
StarRocks
StarRocks技术白皮书(在线版)
JuiceFS
AI 场景存储优化:云知声超算平台基于 JuiceFS 的存储实践
JuiceFS 在 Elasticsearch/ClickHouse 温冷数据存储中的实践
JuiceFS format
元数据备份和恢复 | JuiceFS Document Center
JuiceFS 元数据引擎选型指南
Apache Hudi 使用文件聚类功能 (Clustering) 解决小文件过多的问题
普罗米修斯
k8s 之 Prometheus(普罗米修斯)监控,简单梳理下 K8S 监控流程
k8s 部署 - 使用helm3部署监控prometheus(普罗米修斯),从零到有,一文搞定
k8s 部署 - 使用 helm3 部署监控 prometheus(普罗米修斯),从零到有,一文搞定
k8s 部署 - 如何完善 k8s 中 Prometheus(普罗米修斯)监控项目呢?
k8s 部署 - k8s 中 Prometheus(普罗米修斯)的大屏展示 Grafana + 监控报警
zabbix
一文带你掌握 Zabbix 监控系统
Stream Collectors
Nvidia
Nvidia API
CUDA Nvidia驱动安装
NVIDIA驱动失效简单解决方案:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.
ubuntu 20 CUDA12.1安装流程
nvidia开启持久化模式
nvidia-smi 开启持久化
Harbor
Harbor部署文档
Docker 爆出 it doesn't contain any IP SANs
pandoc
其他知识
大模型
COS 597G (Fall 2022): Understanding Large Language Models
如何优雅的使用各类LLM
ChatGLM3在线搜索功能升级
当ChatGLM3能用搜索引擎时
OCR神器,PDF、数学公式都能转
Stable Diffusion 动画animatediff-cli-prompt-travel
基于ERNIE Bot自定义虚拟数字人生成
pika负面提示词
开通GPT4的方式
GPT4网站
低价开通GPT Plus
大模型应用场景分享
AppAgent AutoGPT变体
机器学习
最大似然估计
权衡偏差(Bias)和方差(Variance)以最小化均方误差(Mean Squared Error, MSE)
伯努利分布
方差计算公式
均值的高斯分布估计
没有免费午餐定理
贝叶斯误差
非参数模型
最近邻回归
表示容量
最优容量
权重衰减
正则化项
Sora
Sora官方提示词
看完32篇论文,你大概就知道Sora如何炼成? |【经纬低调出品】
Sora论文
Sora 物理悖谬的几何解释
Sora 技术栈讨论
RAG垂直落地
DB-GPT与TeleChat-7B搭建相关RAG知识库
ChatWithRTX
ChatRTX安装教程
ChatWithRTX 踩坑记录
ChatWithRTX 使用其他量化模型
ChatWithRTX介绍
RAG 相关资料
英伟达—大模型结合 RAG 构建客服场景自动问答
又一大模型技术开源!有道自研RAG引擎QAnything正式开放下载
收藏!RAG入门参考资料开源大总结:RAG综述、介绍、比较、预处理、RAG Embedding等
RAG调研
解决现代RAG实际生产问题
解决现代 RAG 系统中的生产问题-II
Modular RAG and RAG Flow: Part Ⅰ
Modular RAG and RAG Flow: Part II
先进的Retriever技术来增强你的RAGs
高级RAG — 使用假设文档嵌入 (HyDE) 改进检索
提升 RAG:选择最佳嵌入和 Reranker 模型
LangGraph
增强型RAG:re-rank
LightRAG:使用 PyTorch 为 LLM 应用程序提供支持
模型训练
GPU相关资料
[教程] conda安装简明教程(基于miniconda和Windows)
PyTorch CUDA对应版本 | PyTorch
资料
李一舟课程全集
零碎资料
苹果各服共享ID
数据中心网络技术概览
华为大模型训练学习笔记
百度AIGC工程师认证考试答案(可换取工信部证书)
百度智能云生成式AI认证工程师 考试和证书查询指南
深入理解 Megatron-LM(1)基础知识
QAnything
接入QAnything的AI问答知识库,可私有化部署的企业级WIKI知识库
wsl --update失效Error code: Wsl/UpdatePackage/0x80240438的解决办法
Docker Desktop 启动docker engine一直转圈解决方法
win10开启了hyper-v,docker 启动还是报错 docker desktop windows hypervisor is not present
WSL虚拟磁盘过大,ext4迁移 Windows 中创建软链接和硬链接
WSL2切换默认的Linux子系统
Windows的WSL子系统,自动开启sshd服务
新版docker desktop设置wsl(使用windown的子系统)
WSL 开启ssh
Windows安装网易开源QAnything打造智能客服系统
芯片
国内互联网大厂自研芯片梳理
超算平台—算力供应商
Linux 磁盘扩容
Linux使用growpart工具进行磁盘热扩容(非LVM扩容方式)
关于centos7 扩容提示no tools available to resize disk with 'gpt' - o夜雨随风o - 博客园
(小插曲)neo4j配置apoc插件后检查版本发现:Unknown function ‘apoc.version‘ “EXPLAIN RETURN apoc.version()“
vfio-pci与igb_uio映射硬件资源到DPDK的流程分析
KubeVirt
vnc server配置、启动、重启与连接 - 王约翰 - 博客园
虚拟机Bug解决方案
kubevirt 如何通过CDI上传镜像文件
在 K8S 上也能跑 VM!KubeVirt 簡介與建立(部署篇) | Cloud Solutions
KubeVirt 04:容器化数据导入 – 小菜园
Python
安装 flash_attn
手把手教你在linux上安装pytorch与cuda
AI
在启智社区基于PyTorch运行国产算力卡的模型训练实验
Scaling law
免费的GPT3.5 API
AI Engineer Roadmap & Resources 🤖
模型排行
edk2
K8S删除Evicted状态的pod
docker 中启动 docker
远程本地多用户桌面1.17(一种不让电脑跟你抢键鼠的思路) - 哔哩哔哩
华为鲲鹏服务器(ARM架构)部署Prometheus
在Linux上安装配置Grafana_AI开发平台ModelArts_华为云
-
+
首页
华为大模型训练学习笔记
我是盘古大模型团队的首席架构师,也是华为云计算机视觉领域的前首席专家。今天,我们将用大约一个半小时的时间,深入讲解大模型的理论体系、训练方法以及相关的基础设施。今天的重点内容包括:什么是大模型,为什么要构建大模型,以及如何构建大模型。 大模型的构建依赖于复杂的基础设施,它是一个系统性工程,不仅仅是软件层面的深入,还包括硬件层面的支撑。今年,我计划详细阐述这些问题。今天的议题大致分为五个部分。首先,我们为什么要构建大模型?在此之前,我们回顾一下自2012年、2013年以来深度学习技术的发展。 在过去的十年中,尤其是在2015年、2016年国内深度学习技术开始兴起之后,我们几乎将这项技术应用到了各个领域,也就是所谓的“千行百业”。在上一波金融浪潮中,出现了大量的创业公司,各大厂商也在积极跟进,华为也不例外。我个人在这个行业已经深耕了十年。 ![](https://yg9538.kmgy.top/202404041052355.png) 2017年,我加入华为,开始着手建立这样一个团队。我刚进公司时,我们部门只有100多人,而今年已经发展到2000人的规模,涉足各行各业。我们在讨论为什么需要这么多人力来从事这项工作。是因为业务量巨大吗?还是其他原因?本质上,问题在于技术层面。虽然在小模型阶段,我们能够利用数据驱动的方式产生智能,并解决了许多以前无法解决的问题,但有一个根本问题尚未解决,那就是模型的泛化能力较差。 所谓模型的泛化能力,指的是模型在一个场景中的适应性,以及它在另一个相似场景中的适应性。例如,在人脸识别领域,有各种手机、闸机、摄像头等设备的人脸识别技术。即便是在手机内部,还分为背光和逆光等多种情况。实际上,这些人脸识别模型和场景都无法用一个统一的模型来解决所有问题。每个场景都需要针对其特殊性进行迭代和优化,这就是泛化能力不足的典型表现。 还有许多其他例子,比如工业质检。在工业质检领域,任何一个小的场景都可能成为一个问题,而且工业资源还有一个问题,那就是它通常是小样本的情况,收集训练样本非常困难。这导致每个小案例都需要重新设计,泛化能力就更差了。因此,在工业应用过程中,无法实现随着产业规模增长而降低边际成本的目标。我们都知道,商业行为的本质是制造固定产品,然后不断复制,降低边际成本。但在AI时代,由于技术不通用、不泛化,我们无法实现这一目标。这是为什么我们需要构建大模型的根本原因。 大模型是迄今为止最有效的解决泛化问题的方法。如果这个问题得不到解决,那么我们谈论AI进入千行百业就只是空谈。因为AI技术只会进入那些高利润的行业,而对于那些低利润的行业,由于成本问题,AI技术永远无法进入。这就是我们为什么要构建大模型的根本性原因。业内有许多洞察报告讨论这个问题,但我认为它们都没有触及到问题的本质。 解决泛化问题的重要性早已被认识到。我自己在2019年就意识到了这个问题的严重性。那时,我的业务量已经超过了亿级别。我们的团队规模也非常庞大,但存在一个问题,就是我们的团队非常疲惫,因为不断有新的需求需要迭代和创新,不断有新的工作要做,这使得团队非常疲惫。因此,我们开始思考一些更好的方法。第一个方法就是使用类似于工作流的低代码工作流方式来解决部分问题。我们发现,在许多相似的场景中,每次迭代的过程几乎相同。例如,在表单识别OCR领域,OCR识别中有许多表单需要识别,如身份证、驾驶证、行驶证以及各种规格的发票。所有这些表单识别都无法实现通用化。 每个表单识别任务都需要单独进行,这导致成本非常高。但是,它们有共同的特点,即表单识别这件事情的流程非常相似。基本上就是对表单的格式进行标注,哪里是文字,哪里是表格,这些文字的范围是什么,然后进行训练,再进行后续的处理。那么我们能否将整个流程固化下来,通过一种低代码的方式对外提供服务呢?这就是华为云的一款产品mol ASS pro的设计初衷。它能够在一定范围内解决一些重复的开发工作。但是,对于一些新的工作,可能还需要人力来完成。 ![image-20240404105315654](https://yg9538.kmgy.top/202404041053758.png) 此外,我们还面临着数据收集的问题,尤其是一些小样本的情况,数据收集非常困难。在工业产品中,我们需要花费大量人力来设计数据。因此,我们的平台还内置了一个数据回流的通道,来解决数据回流的问题。我们甚至采用了active learning来自动筛选一些数据,这种机制能够让系统越运行越好,因为它能够收集到更多的高质量数据。目前,自动驾驶领域的许多研发逻辑也是如此。 还有一块是关于标注的问题,因为我们知道在AI领域,大量的人力都投入到了数据标注和治理中。标注本身就是一个劳动密集型的工作。因此,我们也采用了一些半监督或弱监督的标注方案来解决问题。所谓的半监督,就是你可能只需要标注部分数据。例如,你有100万条数据,你只需要标注其中的10万条,或者你标注一些非常简单的数据,比如在一个画面中,你只需要标注出里面有几个目标,而不需要把目标的具体位置标出来。这种弱监督的方式也能大幅提升生产效率,虽然它在性能上可能不如全监督,但在很多场景中仍然非常有用。 半监督标注大致可以分为三大类:一致性假设、对抗学习和自监督学习。如果大家对这些技术感兴趣,可以分别去了解这三大技术体系,在这里我就不再详细介绍了。这是我们过去做的一些事情。那么,在大模型阶段又是如何实现的呢?首先,在大模型阶段,大家很早就意识到一个问题,即大模型真的能够提升泛化能力。但是,它的具体理论是什么?我稍后会讲,但首先我要说的是,大模型其实很早就出现了,尤其是语言类大模型。早在2012年,华为就发布了自己的语言类大模型。然而,直到去年底GPT的出现,大家才真正开始重视大模型。 ![image-20240404105332962](https://yg9538.kmgy.top/202404041053089.png) 这是为什么?因为从去年底开始,我们就从当前的大模型自然理论中发现了一个规律,即智能可以在模型规模达到某个阶段后涌现。模型规模达到一定阶段,某种训练任务加入后,它会涌现出所谓的智能。这种智能涌现主要表现在三个方面。第一方面就是我刚才说的泛化能力,即训练一个模型后,将其迁移到新任务时,它仍然能够表现得很好。这也就是我所说的泛化能力。还有一种方式是,我不需要再对模型进行微调,只需要给它一个提示,它就能理解我的意图,并完成我需要的任务。基于这种提示,我们可以将其应用于许多下游任务。这种涌现能力特别像人类的学习能力,因为人类具有举一反三的能力。我们学习时不是死记硬背,而是理解一个道理后,就能在新的场景中解决问题。所以人类具有这种举一反三的学习能力,而目前的大模型表现出了与人类相似的能力,虽然是假象,但我稍后会解释为什么是假象。现在我就是说,有了这种能力的表现,它就能够解决人类的很多问题。 ![image-20240404105346283](https://yg9538.kmgy.top/202404041053393.png) 第二种涌现能力是思维链的涌现。我们发现,大模型现在展现出一种强大的能力,它似乎不再像过去的判别式模型那样只给出一个答案,而是能够告诉我们整个求解过程,即它是如何解决问题的。这种思维链的能力非常惊人,容易让人产生一种误解,认为模型具备了类似人类的逻辑推理能力。我们人类之所以优于其他动物,是因为我们拥有非常强的逻辑推理能力。目前,大模型在思维链方面也得到了体现。第三种涌现能力是创新能力。我们发现,人类能够发明许多从未有过的东西。目前看来,无论是文本大模型还是图像生成大模型,都具备一定的创新能力。它们似乎能够创造出一些前所未有的东西。例如,一幅画面中,马和宇航员的组合,在所有训练数据中都是不存在的。它不是基于某个特定图片的修改或借鉴,而是全新构造出来的画面。背景是星空,宇航员骑在马上,这样的画面是创新、创造出来的。所以,大模型展现出非常强的创新能力,就像人类一样。目前这三种智能涌现给人一种错觉,认为现在的人工智能非常强大,似乎要超越人类。我们先不讨论这是真的还是假的,但这种能力的表现已经能够解决人类的很多问题。 ![image-20240404105353810](https://yg9538.kmgy.top/202404041053924.png) 具体来说,大模型能够解决三大问题。第一个问题是概念设计。因为我们拥有很好的创新涌现能力,所以可以用来做概念设计,提升整个生产的创意水平。例如,在游戏制作领域,如果我想借鉴某个东西或创造某个东西,我可以告诉机器我的想法,它就能立即将这个画面绘制出来。比如我在埃及旅游时,看到金字塔中的某个造型,我就想,这个造型是否可以被引用到我自己的产品中?我可以将这个理念或图片提供给大模型,然后它就会创造出具有这种风格的新东西。这就是概念设计。无论是文本还是图像生成,都处于概念设计领域。比如我想创业,需要写一个周报或会议纪要,我提出我的要求,它就能快速地写出来。基于它,我可以进行修改,也可以改变它的用词风格等,提升创意水平。在这方面,营销文案的应用最为广泛,我们在抖音上看到的许多营销文案其实都是由生成模型创作出来的,而不是人类编写的。 ![image-20240404105441458](https://yg9538.kmgy.top/202404041054586.png) 第二个问题是,由于大模型具有很好的学习能力,我们可以利用它来代替那些仅需学习知识并不断应用知识的工作。例如,律师,如果仅仅是回答法律问题,根据法律典籍回答问题,那么这项工作很容易被机器取代。大模型本质上可以提升整个社会生产效率。我们预测,到2025年,由于这项技术的出现,整个社会的成本效率可以提升1%,这是一个非常惊人的数字。 第三个问题是,大模型展现出的对话意图理解和表达能力,它可以作为一个超级人机接口,取代过去的方式。我们知道,我们与数字世界的交互在过去很多年里发生了很大的变化,从最初的网站、搜索引擎到推荐系统,我们的交互方式发生了许多改变。但未来,这种交互方式可能会进一步演变成以自然语言的方式与机器对话,与数字世界对话。这非常有意思。如果这一点成立,那么围绕这个会形成一个超级的流量入口,并且围绕这个流量入口会形成一个超级的应用市场,它将颠覆现在的互联网业态。因此,互联网的大厂在这方面非常积极,投入大量资源去抓住这个流量入口。 ![image-20240404105516718](https://yg9538.kmgy.top/202404041055845.png) 我们在讨论大模型具备上述这些能力的原因时,其实很简单。当我要达到一个模型的泛化性时,我训练一个超大模型,就需要把模型设计得很大,然后用大量的数据去训练。当我的数据量足够多时,它就会展现出上述的能力。但有一个问题是,你永远不可能对所有的数据进行标注。你不可能做到这一点。我给大家举一个例子,以前Google做自动驾驶的时候,可能还是比较早,大概在2013年、2014年做自动驾驶的时候。他花了数亿美金去标了大概2000万公里的数据,然后他就宣称自己的人工智能自动驾驶是非常安全的。但这个真的很难说,因为如果你把这项技术用在一个量产车上,比如说比亚迪上面去,那比亚迪一年出货100万辆的话,它每辆车只要开20公里。那就是2000万公里,对吧?那实际上我们每台车一年至少也开1.5万公里以上吧。那实际上2000公里对1.5万公里来说,采样率是非常低的,这还是一年的数据,所以你怎么能说你通过标注了2000万公里就保证你的整个泛化性这么好,然后安全呢?是不成立的。所以你只有把所有的数据都进行训练,我们才能保证这一点。但是所有的数据标注,无论是标注量还是训练量,都是不可能的。所以这个不成立。那么为了把所有的数据都进行训练,我们必须找到一种自监督的训练方法,不再依赖于人类的标注。那么这件事情才可能实现。所以我们要找到一种自监督的学习任务。那我们就找啊找,找了很久。诶,我们就发现了一个规律。就是自然语言领域,我们找到了一种自监督学习任务。我们为什么自然语言领域,大模型是最早成功的呢?它其实不是偶然的,它是必然的。因为语言信号本身的一种重要特性就是语言本身有很好的自解释性。语言是可以自己解释自己的。所以我们可以利用这种自解释性去做大规模的自监督训练,因为它是自带标签的,它不需要你去标注。比如我举个例子。我们说“大学之道,在明明德”。那这里面有两个“明”,它分别是什么意思呢?如果大家知道语义的话,肯定是知道两个“明”是不一样的。对吧?但是对于计算机来说,如果只是两个字符,这个字符编码是完全不知道这个意思的。所以语言本身能够依赖于这句话的上下文去解释两个不同的意思。这种例子还有很多。你比如说“道可道,非常道;名可名,非常名”。这里面的“道”和“名”,它的意思都不一样。它也是依赖于上下文去解释的。所以语言是一个非常好的案例,它是严格依赖于上下文去解释它自己的。OK,那你看我再给举个例子,比如说夏天能穿多少穿多少,冬天能穿多少。如果对于计算机来说,它是不可能去分辨这两句话什么意思的。但是人都知道,因为人具备夏天和冬天这两个概念去帮助去做分词、做解释。还有很多例子啊,你比如说下面几个例子,研究表明汉字的顺序并不影响你阅读。你看发现没有,它是乱序的。但是它影响你阅读吗?它也不影响你阅读啊。因为它能依赖于上下文能快速纠错。所以语言有非常好的自解释性。所以你可以依赖于语言的这种特性去做大规模的自监督训练。这是我要讲的第一点。 ![image-20240404105525518](https://yg9538.kmgy.top/202404041055642.png) 那语言有这种解释性,这解释性可以做训练,那我还需要一种什么代理任务啊,能够挖掘这种上下文关系。我们知道它是要依赖上下文的,对不对?那我要挖掘这种上下文,所以我要去设计一种代理任务。那么大家知道上下文挖掘里面最好的一个例子就是完形填空。我们高中时候都做过完形填空。你要会做完形填空,那么你一定非常懂得几个语言的上下文规律,比如说语法的上下文规律,语法的规律、词代规律、行为逻辑、起承转合、行为风格。所有的这些规则也好,上下文也好,你都必须懂,你才能够把完形填空做好。那么你反问我,你是不是意味着你?你当你做好了完形填空,当一个模型能够完成完形填空,就代表这个模型能够掌握刚才所说的这些语言语义呢?我先现在就基于这个假设,我假设是这样子成立的。OK,我假设成立的。然后我们就设计了两种代理任务,一个叫做自监督,一个叫做自编码,一个叫做自回归。他们都很相似,无非就是自编码呢,它是把一个词语、一个句子中间的某个词掩盖掉,然后运用上下文去预测这个词。而自回归呢,它是把一句话里面最后一个词解决掉,然后每一次都是预测下一个词、下一个词、下一个词,他只用了上文,没有用下文。就此而已。所以这就是两种代理任务,目前不能说哪个好哪个坏,但是各自在用。但是他们都属于完形填空,本质上都是基于我刚才这个理论假设,并且现在现实世界证明这个理论假设。啊,它能够work非常好,所以我们就认为这个假设检验是成立的,这个理论成立的。这是我想想说的第二点。 ![image-20240404105533983](https://yg9538.kmgy.top/202404041055113.png) ![image-20240404105551806](https://yg9538.kmgy.top/202404041055935.png) 那第三点是什么呢?第三点是我要讲语意和语言是不一样的。语言只是语意的一个符号化表达。语义是语言的翻译不变性。这个怎么解释呢?就说啊,我们讲各种各样的语言,包括你讲方言也好,我讲普通话也好,你讲外语也好,我讲俄语也好,大家这个这个这个理解语言都不一样,但是有一个共同的东西是这样的,就是。他们表达不同语言之间表达的同一个意思,那个不变的东西才叫语义。比如说“老婆”啊,这个“老婆”南方人叫“老婆”,或者配偶吧,配偶这个概念,南方人叫“老婆”,北方人叫“媳妇儿”。对吧,然后湖南人叫什么呢?湖南人叫“堂客”,对吧?然后那个外语里面也有各种各样的叫法。但发现没有,它的表达都不一样,但是它的语义是一样的,就是配偶。那么,这种翻译的不变性,不同语言之间的翻译不变的东西,这叫语义。大家可以理解吧。这一点很重要。 ![image-20240404105603870](https://yg9538.kmgy.top/202404041056011.png) ![image-20240404105615352](https://yg9538.kmgy.top/202404041056480.png) 那么,这里面例子还有很多啦,你比如说嗯,中医里面有很多东西,但是外语是翻译不出来的,比如说什么叫“气”?对吧,什么叫“气功”?你这外语里面没有翻译不出来,这是一个反例。还有比如说那个叫什么?觉悟。或者对就是佛教里面的一个词叫“觉悟”。那我们中国人是可以翻译,但凡是佛教国家都可以翻译这个单词,“觉悟”这个单词,但是非佛教国家,它是没有办法翻译这个单词的。这种例子很多啊,还有比如说那个德国以前有一个有一个哲学家叫哈德格尔,哈德格尔很有意思,他很喜欢倒斗金。尝试着把道德经翻译成拉丁语系,但是他尝试了很久都失败了,他为什么?因为道德经里面的很多哲学观点呢?是在中文,是在中华民族这个理论体系里面,这个文明体系里面存在的。拉丁语系里面是不存在的,所以对于这种不存在的东西无法做翻译的。对吧,它就所以说翻译不变性这个东西呢,就在某一它它当它无法做翻译的时候,那那种不不能翻译的也也是一种原因。所以这个例子很多啊,我主要是。讲到这三点。 那么这我为什么讲这一点其实很有意思,就后面会讲啊,就是说你看啊,那个我们知道它的GPT,它的语料用了全世界各种各样的语言。比如说用中文,他只用了2%不到,但是他会他的中文语言能力会超过所有的用中文语料训练的大模型。这是为什么?那大家先看一下,这是为什么?对吧,因为他学到了,不再是语言本身的规律,他学到的是语言内涵,内在的语义。而这种语义是不依赖于某一种语言的。 这就是为什么GPT模型虽然只使用了不到2%的中文语料,但其中文语言能力却能超过所有使用中文语料训练的大模型。这是因为GPT学到的不仅仅是语言本身的规律,而是更深层次的语义内涵。这种语义是独立于语言的,因此,很多国内大厂的做法是错误的,他们认为要构建一个综合大模型,就只能使用综合语料,这个理论是错误的。如果你只使用中文语料,你肯定无法胜过使用全世界所有语言语料的模型。OK,然后我们继续往下。 我们刚才讲到了,语言自然语言领域有很好的特性,可以进行大规模的自监督训练,并且发明了代理任务。但是在计算机视觉领域,我们是否能找到相似的方法呢?我们的发明家何凯明同学做了一个类似的工作。他把图片画成格子,然后把这个格子的部分掩盖掉,跟那个mask出来一样的。然后他说他训练了一个模型encoder结构出来,把这个掩盖部分恢复出来,他就觉得看我可以把这幅图像恢复出来,是不是我就理解了这个语义呢?做法一样的吧,只是换了一种模态的数据。然后其他作者就直接follow他,然后发现有规律,发现这个模型当你用2016年的数据去训练这个模型的时候,对于下游任务的性能提升非常小,只有不到2%。它跟原大模型不一样,原大模型有一个更重要的特点就是它满足scale,只要你的参数量够大,只要你的数据变大,它的性能会随着正比增长。但在这里,这个问题就不成立,你无论增加多少数据,它的效率就是不高,它达到某个水平就停滞不前了。这说明这里有问题。那么问题的原因是什么呢?啊,是因为我们在图像领域去做这种局部的恢复时,它是不依赖于语义的,它只依赖于局部的相关性。比如说我大概知道这个鸟头,这里我就能猜到几个嘴巴,所以他不需要知道这是一只鸟,它就能够把它恢复出来。人用的方法刚才我们的假设检验就不成立,并不代表你恢复就能理解语义,所以从某种意义上讲,要么视觉不具备这种自解释性,或者说要么你没有发明行之有效的自解释的监督任务。反正我也不知道,但是不成立吧。那在视觉有没有更好的方法去解决这个问题呢?是有的。所以我们发明了另外一种任务,叫做跨模态的弱监督训练。我们发现,虽然我们无法对所有的视觉信号进行标注,进行训练。但是互联网上存在了这么多图文对,有图片有文本,我们可不可以利用这种图文对进行图片训练呢?我们就找到一种叫做keep的方法。这种方法很简单,就是把图文对里面图片部分和文本部分分别进行特征提取,然后再一个网络里面去计算它的相关性。那用这种方法利用文本去监督这个图片,用这种方法学习一个超级的模型,就能够非常好的理解几乎所有的视觉概念。那我们把这个方法应用在我们的业务里面,效果非常明显,比如说在2013年、2014年深度学习出来之后,各个厂商都会提出自己的通用大模型,包括AWS、百度、阿里都在做。那么通用大模型的做法很简单,就是我准备一万个标签,然后每一个标签收集1000个数据,然后我就训练一个一万的分类器,这样一来我就能识别各种东西了。但很可惜,这是不足够的。因为世间万物远远超过一万个。视觉概念是远多于语言概念的,可能有几百万上千万,那么你怎么可能所有的都能去识别呢?对不对?所以当你运用它的时候,如果出现一个新的case,然后你不认识,你就识别不出来。那你怎么办?你让添加数据对吧?重新训练对吧?然后遇到一个新场景,又搞不定,反反复复,反反复复。所以这个case用的最多就是多媒体的推荐,推荐就是要干这个事情。那么,这个问题我们用新的方法就能得到很好的解决,因为我们用了十亿的图像文本对去训练一个超大的模型,让这个模型去识别很多东西,当你增加一个标签的时候,你其实只需要增加一个文本,你不需要重新训练,它就能快速去识别。所以从结果来看,无论我们的召回率还是准确性,都优于传统方法。所以这就是新的技术带来的生产范式的改变。他彻底的解决了边际成本问题。所以这套模型去推广他的边际成本就是零。这个东西已经上线在华为云了,是我去年做的。 那我们刚才讲到了,说我们要从语言里面去,语言具备可以自监督学习的特性,同时语言自监督就是通过完形填空来计算上下文。但是呢,我们要找到一种算子来计算上下文,什么叫上下文呢?就是你跟我的关系就叫上下文。比如说咱们一群人开会,那有一个人总是跟我在一起,那他跟我肯定有某种关系,对吧?就这所谓上下文就是关系。所以说当你的语料里面有很多词a1、a2、a3、a4,我现在不用token,我就用单词的这个这个来来表,所以有有四个单词。那我是不是需要两两计算它们之间的相关性呢?对吧?但是呢,这种方式的计算量非常的庞大。所以我们假设一种新的计算方式。就是把每一个单词表现为k、q、v三个词向量。那q向量是去请求别人的一个向量,v向量是别人请求我的一个向量,k向量是表达自己的一个向量。然后通过k去和另外一个单词的k,q去和另外一个单词的k运算的那个权重,然后对v进行加权。就可以用来表达自己,这个就叫典型的self-attention的机制。那么self-attention更直观的理解就是什么呢?就是比如说嗯。比如说你们班上,你们班上有有有一个40个同学,那我现在选择课代表有一种方法是说呃,是一种叫做你们谁进谁的英语成绩最好,谁就是英语课代表。这种方式是一种选择方式,这种方式叫做max pooling,把一个组里面最大的词提出来,代表这个班级。所以这个同学的英语水平就代表了这个班级的英语水平。最后最好的一个水平,这是一种方式。那那那有些同学就说这个不好啊,这个如果大家都很弱,就他一片墙,那不是有偏差对不对?所以我们要换一种方式,什么方式呢?大家来投票。大家来投票,每一个人去投票,对他进行投票。然后得到一个权重,然后再去加权,就往上表达。那这种方式呢?就更为科学一点,因为每个人都参与了。对不对?你所以这就是self-attention本质上的一个逻辑是在这里。他是通过相互之间的相关吸引去作为表达自己的一个权重。OK,就是这一点。 那么我们还知道说,但是词之间呢,它是有多义性的,还有多义性。特别是在中文领域,中文里面的字有非常多的独立性。所以那我用一个词向量去表达我一个意思,那是不合适的,为了满足这种多义性呢,我又把它做成多个词向量。一个词用多个词向量去表达,多组来表达,比表达的多一些,所以这就叫多头注意力,就是这个字母来的。所以它是一步步这么发展过来的。所以对吧,所以其实很简单,你要对一个上下文进行建模,因为上下文嘛,就语言逻辑其实在本质上就是。就是概念常识。语法概念很简单,常识嘛,就是AI SB就是一种常识。语法语法,大家很简单了,各种各样的语法规则,那么推理逻辑,语言风格,其实这些所有东西都表现为三个词的关系。所以从机器学习视角来看呢,语言逻辑其实就是一种模式表现为实体与实体之间的,这样的关系,那么就是创立了这种多头注意力集中区。去挖掘暴力,挖掘这种上上下文关系,所以你可以看到这个图,它其实其其实它是利用了计算机的暴力计算和暴力通信去挖掘。啊,这个相关关系的。为了。为了证明这个,还有一个case就很有意思,就是说你看GBT 3啊,它从GBT 3到GPT 4,它的词向量。是在逐步增加的,增加到了32个三三万两千个投屏。那这什么意思呢?就是说嗯,就是说一次嗯,这个gpt four 32k。它一次能读取32k个单词。然后在这个单词之间去做两两计算。这什么概念啊,就相当于一次能读取一张50页的a4纸的论文,然后论文里面每两个单词都计算相关性。去判断他们之间是否相关。所以它是一个超级的暴力计算的过程,对吧?它充分的应用这种计算机的暴力计算,所以它的这种暴力计算,这种学习能力已经完全超过了人类。ok,就现在这个时间呢,还在增加,有的还做了200k,什么概念一次能读一本书进去。OK,那讲完这一点,我们再继续讲,我们讲说我们对某嗯,对语言进行建模,那么还有呃,但是呢?那我们现在你知道a gc它的一个重要特点是说它能够生成东西,对不对?它能生成文本或生成图像。大模型跟AI gc什么关系呢?大模型呢?它只是把模型做大,但是AI gc生成是大模型的一种应用啊,你可以把大模型用来做别的任务也可以。但是aigc是一种生成任务,是一种特例,所以为了讲这个生成呢,我就不得不先讲一下什么是生成的机器学习原理。为了讲这个大模型的机器学习原理,生成原理呢,我要先讲这种视觉的生成原理,因为从从我我尝试着从理论上是统一。那理论上也统一什么意思呢?就是我先讲这个啊,视觉我们知道,刚才我们讲的文本的概念,我们讲视觉概念,视觉概念就也不一样,它有比如说构图。主体主体关系啊,纹理颜色,这就是视觉概念,对不对?视觉概念。那么,这些视觉概念,它的表现是什么呢?我举一个简单例子。比如说我们女孩子喜欢画眉毛。我们就以画眉毛这个事情来举例,眉毛大家知道有非常多的眉形,有柳叶眉啊,有什么一字眉啊,有什么很多很多眉。不同的眉毛,其实代表的是某种视觉概念。或者某种语义。对不对那?柳叶眉,它表观表现为什么呢?它表现为眉毛那个区域,它的像素的一个形状。如果某些一一堆像素表现出某种柳柳叶的形状,那我们就叫柳叶眉。所以通俗来讲。啊,我们深呃深入一点就是说。语义图像的语义只是表现为信号在某种维度上的分布而已。可以这么理解吧当。像素满足一个柳叶的分布的时候,它就是柳叶眉。OK,那我们能不能把图像里面所有的概念都能够进行建模,把它变成?多种分布呢,比如说构图主体,主体关系,纹理都进行分布呢,如果我们对它这种分布都能进行建模。那就是很好,我们就能非常好的理解你重建它,我们就可以从数据里面学习所有的语义的分布,然后从分布里面去采样。这样一来,我就可以生成了,对不对?那你看我这个例子。这是一个金句的例子。这个是我去呃,去年初前年底给冬奥会做的一个项目。这个做法很简单,就是说我把收集到的很多的脸谱数据做上去训练。我训练,我尝试着对脸谱的很多元素,因为脸谱里面有很多元素,眼睛,眉毛,鼻型,嘴巴什么乱七八糟颜色。我对他进行建模,我尝试着把脸谱的所有的要素能够结合出来,然后建立建立这种。分布那我就可以,如果我能建立分布,我就可以进行采样,所以我用了一种叫的方式对它进行建模。那么塞盖呢?它把把它这种n个要素都做成了n个高斯分布,然后我只需要在这个不同层的高斯分布里面去采样。我就可以得到新的图像,如果我随机的采样,我就能得到随机的生成的,你组合的脸谱。如果我连续的采样,我就会得到像这个连续变化的脸谱。这个实验充分的证明,我是有可能把一种信号,特别是图像信号内在的某种意义给抽象给给给分离出来。对吧,那么另外一个例子就是VIE这个模型,这也是一个图像生成的,比较著名的模型,那么它的也是一样的,假设他认为。他认为,在语义层面上,它存在着很多的高斯分布,每一种高斯分布对一种一种语义。然后能够把。原始信号映射到这个高斯分布上去,然后只要在高斯分布里面去采样,就能恢复主图像,所以他对于。这种手写体零到九,这种手写体进行的这种方法,然后在里面做连续采样,它就会得到连续变化的零到九。对零跟五是很相近的,五跟三是很相近的,三跟八是很相近的,这种连续变化的skt。所以这两个实验都能证明我们是可以。把这个东西语义给分离出来。给建模的,但是有一个不好的地方是什么呢?是它是它的生存是不可控的,为什么不可控呢?是因为我虽然能够把它分离出若干个。高斯分布,但是我不知道每一个高斯分布代表什么意思。比如说我现在要生成一个红色的脸谱,我不知道在这个里面该怎么去采样,我不知道是这个a代表的颜色还是这个a的表颜色。即便是知道这个a代表颜色,我也不知道这个高斯分布里面哪个点代表红色,哪个点代表蓝色,我不知道,所以我是。虽然能生成,但是完全不可控的。也不可控生成,但是你知道AI gc里面最牛逼的地方就是它是可以做可控的生成。那么,怎么做可控的生成呢?所以我们科学家又发明了另外一种方法,叫做stable diffusion。doubled pu很简单,它有两个模块,第一个模块是clip模块。c就是我刚才说的那个语言大模型的一部分,它能够对语言进行建模。第二个模块呢?它是ldm模块,能够对自觉概念进行建模,然后这两个模块之间呢?它用一个叫做quartz天行的模块去进行连接。他就能知道某这个语言他就能知道某个语言中的某个词代表了图像中的某个特征分布。这样一来,就可以通过语言去对图像进行控制。所以,当你写出一句话说“独具匠心的画家在山间作画”,他先理解这句话,然后发现这里面有“画家”、“作画”、“山间”、“创作”、“独具匠心”等要素,所以他把这几个要素在画面中都呈现出来。这样一来,生成的图像就变得可控了。非常有意思。 从数学角度来讲,我们无非是在学习一个条件概率分布P(X|Y)。本质上,我们通过预训练模型建立了一个P(X),但通过可控的方式,我们把它变成了P(X|Y),这样一来,我就可以通过Y的输入来有选择性地输出X的概率。这就是图像的可控生成,就是这么简单。 文本的可控生成能不能做呢?我们知道,我们预训练一个大模型,在过去的2021年,我们就预训练了一个大模型,但这个大模型就很“傻”。你只能对他做下游任务的微调,把任务固定下来,你才能使用它。当你不固定任务时,他就胡说八道,他都不知道自己要表达什么。所以最早在2021年做大模型用来做对话的时候,一个典型问题就是他会胡说八道,你骂他,他就会骂你。他完全就不可控。然后,直到我们这个SFT(Supervised Fine-Tuning)技术出现的时候,我们能够用一些问答对去训练,去微调这个模型。这时候,我们就可以把这个模型由P(X)变成P(X|Y),这个条件概率分布,这样一来我就可以根据我的输入我的prompt或者input去控制我的输出。这就是现在大家用的许多产品的基础。 那么,为什么我们需要prompt engineering?其实在图像生成领域和文本生成领域都有prompt engineering这个概念。为什么我们需要做prompt engineering?问题很简单,因为我在训练P(X)的时候,我可能用到了几千亿的token,但是当我训练P(X|Y)的时候,我只用了不到1000万的数据。那在这么稀疏的采样情况下,你其实是没有办法对实际输入的这个probability分布拟合得特别好。所以我们要约束这个Y,对后面的这个output其实是为了约束这个Y,来去的一个模式,也就是说你必须按照某个套路来去输入你才能得到好的答案,如果不按照套路来,你就不行。比如说你说请介绍一下,我前几天刚试过百度的,我说请介绍一下玉小圆的基本情况,对吧?他就跟你胡扯,说我是什么企业家,什么乱七八糟的,也不知道他是怎么编出来的。但如果你换一个问法,你说请介绍一下喻晓媛博士的情况,唉,她最后输出的结果就非常正确,90%以上的知识都是正确的。所以你看我加了一个单词,他的输出就很不一样。这就是proper engineering,一句话就能说清楚,非常简单。 OK,那我们再讲另外一个事情,我们刚才讲到了说语言模型也好,文本生成模型也好,它有非常好的这种创新能力,但是我们又讲到说图像生成或者文本生成,它只是学习语义的分布,然后对分布进行采样。最多他只是做了组合,他怎么可能创造出新的东西呢?他的创新来自于哪里呢?他怎么可能脱离训练数据去创造更多从来没有的东西呢?对不对? 啊,那么我们经过机制的分析,发现一个逻辑是什么呢?它虽然只做了组合模式的组合,对于机器来说,仅仅是模式的组合,但是对于人类来说就是创新。所以这个就很有意思了,就是说。你看我们很多人类的创新,基本上都是组合式创新,我们比如说中央美院里面的学生啊,他们学习四年本科毕业,他们学到的东西都是复课学习别人的这种技法,复课别人的东西,然后去做各种组合式的创新。很少有发明家能够做原创性的创新,但这种也有啊,你去一些博物馆去看一些大师的作品的时候,你就会发现是原创的创新,因为那种作画风格,那种纹理啊,他是从来没有过的,就是他自己发明出来的,这种才叫原创。但是,组合式创新对人类来说已经够用了呀,所以你看我们就可以用组合式创新画一张图,或者说以某个作家的口吻写一篇关于某个事件的微博,因为他已经学习过这个作家的文章,所以他知道这个作家的行为风格是什么样子。他也知道这个事件的事实是什么样子,诶,他就跟你胡扯那么一篇微博出来,很有创新,这种应用就非常广了,可以大规模复制。但是这里面有一个问题。的幻觉和反事实的问题,你比如说如果这篇文章里面出现了一些与与我党不利的言论,那就很糟糕。对吧,他也许从某个语料里面学习这种不健康的东西,完了在这里给你输出了,完了他就是反人类或者反事实或者反社会的反党的也不行。图像里面也是一样的,如果你让他输出一个马有三条腿,你觉得还OK啊,因为那个安排里面的马就很有创意,他就是三条腿。但如果你让他生成了一个人,里面有三条腿,那你就不行了,因为这是反伦理的。对吧,这是怪物了。所以我们一定要注意这种反思式的创新,要严格去控制的,这就是为什么大模型要接一个非常强大的一个审核模块。去约束这个事,包括那个很多那个增强呃,那个强化学习模块也是为了解决部分这个问题。还有幻觉,幻觉的产生也是来源于于此,所以幻觉本质上是解决不了的,可能被约束解决不了。唉,然后我们再讲呃好,我们讲到这里呢,我们再回到前面。我们讲那个。讲到这里,我们讲我刚才说到说三种涌现都是假象。那很多人不服,说是这个讲的,那我们再来回顾一下为什么大模型具备的有限能力呢?具具具备的这个zero-short的泛化性能。其实很简单,就是因为它的数据量多。所以他有泛化性,他见过,所以他有泛化性,为什么他有思维链的涌现呢?是因为他语料里面包含的是包含思维链数据,因为你要知道思维链也是一种上下文关系。对吧,思维链也是一种上下文关系,如果我的语料里面包含含有思维链的这种上下文的语料,然后他就能对这种思维链进行建模,所以他就具备了思维链。它不是真的,是能推理它,仅仅是学习的这种模式而已。为什么他要组合创新?那就很简单了,对吧?所以这三种智能都是假象有表现,但是都是假象,所以大家完全不用担心说机器人会把人类干掉。 ![image-20240404105647704](https://yg9538.kmgy.top/202404041056852.png) 那我们讲另外一点。我们知道说刚才讲到说我们有这么多的理论啊,但是有一个问题是说为什么GPT和middle journey分别在文本生成和图像生成领域呢,遥遥领先在其他厂商都很难追赶,包括开源社区,包括Llama,包括ability AI他们都很难追赶呢,那本质原因我我说的一直语料,另外一个很重要的原因就是他们已经形成了数据飞轮。这两家厂商作为第一个头部客户,他一上来就数亿的注册用户,每天都有几千万的访问量。甚至上亿的访问量,所以它能收集大量的外。啊,那么我们刚只知道Y很重要,对吧?Y也是语料的一部分。为他。有这种数据分流效应,其他厂商就很收集来自。这就是一个一个一个大家追赶不了它的一个原因。啊,这个不讲,这个也不讲,这个就谈理论了,所以整个理论体系我也帮大家梳理了一下。泛化性的提升,然后要技术突破就是transformer算子和自监督学习对吧?然后需要大规模的基础设施对吧?这个。然后呃,如果说企业要做自己的大模型,那该怎么做呢?那我我我要把整整个企业它划分以及它的整个大型方案给列举出来的,首先你必须得自己去做业务,抽象因为大多数企业是不会做通用大模型。他会只会。啊,根据自己的业务特点去设计自己相应的大模型方案,所以他需要对自己的业务进行数学抽象。建模对进行基于这个做模型的选型,然后数据的选型,基础设施的选型,然后就是预训练阶段,然后就是微调阶段,然后就是一个应用。啊,这么几步,所以最难的其实是前面部分训练或者微调或者微调,这是个啥呢?这个是整个大模型的训练的步骤,这个是open AI放出来的啊,我们叫九阴真经,但是啊,不是九阴真经,是那个。嗯,那个哎,那个北朝洪文殿的是啥来着?对,只是他九阴真经的一一章。就是他肯定会有很多的trick,他是没有给你讲的,我都没翻译,因为他我觉得这个这个这这个baseline就非常好。你看他先预训练,他先收集大量语料,然后去构建了一个大的一个预训练模型,然后同时他构建了大量的这种sft的数据嗯pro response的数据,然后再去呃sft。这个模型,然后他的资源规模啊,最后呢,因为他要做强化学习,所以强化学习两个模块,一个模块是做一个环境模拟器rewarding model。呃,然后再去训练一个强化学习的模块,再来一个强化学习的模型,整个步骤是这样子的,非常简单,这个这个这个,但是应该open AI它的。他的秘籍应该是远不止这一点。对对,然后我们讲预训练阶段,因为预训练阶段这个怎么这个怎么搞呢?一般情况下,因为预训练通常情况下要。尽可能的泛化,尽可能通用,所以嗯,你看看大家都会用到的非常多的通用数据集啊,用到的什么书籍啊,什么代码呀,网页呀,很多很多。啊,尽可能丰富,因为它要因为尽可能有很多的背景知识要换取 ![image-20240404105703623](https://yg9538.kmgy.top/202404041057720.png) 为了确保模型的泛化性和通用性,预训练阶段通常会使用大量多样化的数据集。这些数据集可能包括书籍、代码、网页等,内容丰富多样。通常,预训练数据的规模应该是模型参数量的20倍以上,这样模型的性能才有意义。如果没有足够的数据,即使模型规模扩大,也只会出现过拟合,而不会有好的结果。 ![image-20240404105719680](https://yg9538.kmgy.top/202404041057795.png) 大型公司通常只能训练到百亿级参数的模型,而无法达到千亿级甚至更大规模的参数,原因在于没有足够的数据支持。例如,Llama模型使用了1.4亿参数,而Llama 2使用了2100亿参数,实际上只使用了2000亿中文数据。而Blue模型使用了更多的数据,但相对于其参数量来说,数据量仍然较小。 在这里,我也列举了一些知名的开源数据集,供大家参考,如Common Crawl、WikiText等,这些都是非常好的数据集。如果企业要进行模型微调,那么必须使用企业自己的数据,并根据自己的案例来准备数据集。典型的案例包括指令性的描述,输入和输出的格式。你必须将企业的数据也准备成这种格式,并且在训练自己的模型时,还需要将通用数据集的部分数据混合进去。如果不这样做,可能会出现灾难性遗忘,即模型会忘记一些已经学到的知识。 ![image-20240404105728824](https://yg9538.kmgy.top/202404041057939.png) 此外,还可以使用其他第三方的结构化数据或者通过数据增强技术来生成数据。细节我就不在这里详述。然后是微调阶段,微调其实非常简单。我给出了几个我认为微调做得比较好的案例,大家可以下载代码,使用开源数据自己跑一遍,大概就能掌握微调的流程。实际上,难度并不在于微调,而是在于业务建模和数据治理,这非常依赖于你对整个理论体系的理解深度。因此,我花这么多时间讲解理论部分,是因为内功的修炼是最重要的。 ![image-20240404105734153](https://yg9538.kmgy.top/202404041057258.png) 至于强化学习部分,我个人并不推荐大家使用,因为强化学习的难度目前非常大,也不一定能取得好的效果。不过我还是简单介绍一下这个过程,因为强化学习的训练步骤非常繁琐,它需要学习一个环境模型,每个步骤都涉及到大量的计算。强化学习的reward model类似于一个仿真器,用来对现有模型进行评估。这是一个不断迭代的过程。 ![image-20240404105744547](https://yg9538.kmgy.top/202404041057652.png) 然后是应用框架的部分,我们知道单一模型除了通用模型之外,通用模型的特点是通用性强,但实施性不好。比如我现在训练一个通用模型,使用的是去年或者到现在的数据,那我发布的是年底的模型,那么这四个月的新数据就无法加入训练,导致模型无法回答这四个月的问题。因此,我们通常需要保证一些小模型的精准性,一个大模型的通用性,并且配合数据库进行检索,将这三者结合起来,形成一个应用框架。目前有两款应用框架,一个是中国的BM2,一个是国外的Lang Chain,它们都可以完成这项工作。虽然目前这些框架还不成熟,但仍然可以使用。 ![image-20240404105827602](https://yg9538.kmgy.top/202404041058698.png) 另一个本质的原因是,无论是向量数据库和模型之间的交互,还是模型之间的交互,他们本质上做的事情就是做语言的对齐。因为模型是分开训练的,所以很难保证向量是在同一个语义空间内对齐的。目前只能通过prompt template的方式进行对齐,这样大家就可以通信了。因此,在训练时先约束你,加入一定的template方式去训练,这样一来我们就能理解各自的prompt engineering,然后就可以去沟通了。大概是这个意思。 ![image-20240404105811146](https://yg9538.kmgy.top/202404041058239.png) 对于基础设施部分,我们知道训练一个大模型,如前所述,本质上是一个暴力计算和通信的过程。它面临的典型挑战有三个:首先,计算量巨大;其次,每次训练的batch size非常大,对显存的要求很高;第三,整体数据规模庞大,可能需要在千卡或万卡集群上训练长达30到60天。这就带来了许多挑战,例如参数太大,传统的单卡训练无法容纳;序列太长,单卡显存不足;以及数据规模太大,需要长时间训练,对系统的可靠性要求很高。 ![image-20240404105846755](https://yg9538.kmgy.top/202404041058868.png) 为了解决这些问题,我们通常从以下几个方面入手:首先,必须进行分布式训练,将复杂的训练任务分解为多个小任务。例如数据并行、流水线并行和模型并行等。不同的分布式策略虽然都能提高计算效率,但也会带来更多的节点间通信需求。因此,需要依赖于高效的通信网络,如华为的F摩羯座网络或Rockel网络。 ![image-20240404105856805](https://yg9538.kmgy.top/202404041058925.png) 此外,由于显存需求巨大,我们还需要进行显存优化。例如,Deep Speed Zero等策略就是为了优化显存使用。通过这些策略,我们可以在有限的硬件资源下训练更大的模型。 在训练大模型时,我们需要考虑的另一个关键因素是算力需求。有一个理论公式可以帮助我们估算不同参数量和数据量下的能耗和运行时间。根据这个公式,我们可以规划自己的业务需求,选择合适的硬件配置。 在华为云中,我们采用了一种独立于框架的分布式训练体系结构。它包括计算节点和存储节点,这是两个最重要的节点。数据存储在存储节点上,而计算节点负责执行运算。我们的软件体系结构包括算子实现层、MindSpore和PyTorch两个框架层,以及分布式训练层。华为云的ModelLink Ascend自带分布式框架,性能优异,因为它支持自动分布式训练。Deep Speed和Megraton是微软和英伟达开发的,我们也兼容这些框架。 ![image-20240404105905111](https://yg9538.kmgy.top/202404041059204.png) ![image-20240404105929073](https://yg9538.kmgy.top/202404041059199.png) 在集群管理方面,我们使用了MindX工具,它提供了模型迁移、精度调节和性能调节的工具。每个模型可以通过修改少量代码来适配不同的硬件平台,如GPU或NPU。完成迁移后,我们需要进行精度对齐和性能对齐,确保模型在不同硬件上的表现一致。 ![image-20240404110005289](https://yg9538.kmgy.top/202404041100390.png) ![image-20240404110034543](https://yg9538.kmgy.top/202404041100676.png) ![image-20240404110057078](https://yg9538.kmgy.top/202404041100175.png) ![image-20240404110112275](https://yg9538.kmgy.top/202404041101390.png) ![image-20240404110123225](https://yg9538.kmgy.top/202404041101329.png) ![image-20240404110133076](https://yg9538.kmgy.top/202404041101195.png) 最后,我们的算子已经支持1400个算子,并且我们能够以每周两个新算子的速度进行开发,这在开源社区中也是非常快的。我们的开源社区也在积极跟进,基本上所有的算子都已经适配完毕。
yg9538
2024年4月6日 09:47
476
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码