一文看懂多模态大型语言模型GPT-4
Posted 小沈同学呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文看懂多模态大型语言模型GPT-4相关的知识,希望对你有一定的参考价值。
文章目录
前言
近日,OpenAI发布了最新版的生成预训练模型GPT-4。据官方介绍,最新一代的模型是一个大模型,性能比CPT-3.5强悍很多,不仅仅是接受图像、文本、代码等的输入输出,更多的是在很多专业领域表现出人类的水准水;与上一代不同的是它的核心技术是基于Transformer的自回归语言模型,使用了大量的无标注数据进行预训练,学习了自然语言和其他模态之间的通用表示和关系。那么,今天我们就要一探究竟。
什么是GPT-4
GPT-4是OpenAI公司3月推出的新一代人工智能预训练AI模型,是一个多模态大型语言模型,使用了1.5万亿个参数,是GPT-3.5的10倍之多,当然它也是世界上最大的人工智能模型。
据官方所述GPT-4是OpenAI在扩大深度学习方面的最新里程碑,是一个大型多模态模型(接受图像和文本输入,发出文本输出),虽然在许多现实世界场景中的能力不如人类,但在各种专业和学术基准上表现出人类水平的性能。例如,它通过了模拟律师考试,分数在前10%左右;相比之下,GPT-3.5的得分在10%左右。我们花了6个月的时间,利用我们对抗性测试计划和ChatGPT的经验教训,反复调整GPT-4,在真实性、可操纵性和拒绝走出护栏方面取得了有史以来最好的结果。足以证明GPT-4简直就是人工智能预训练模型中的劳斯奈斯,简直牛得不要不要的。
GPT-4 VS GPT-3.5
官方文档说GPT-3.5和GPT-4之间的区别可能很小,但是当任务的复杂性达到足够的阈值时,差异就会显现出来——GPT-4比GPT-3.5更可靠、更具创造力,并且能够处理更细微的指令。
官方为了比较这两个模型之间的差异,在各种基准上进行了测试,包括最初为人类设计的模拟考试,以及最新的公开考试(在奥运会和AP免费回答问题的情况下),或者购买了2022年至2023年的练习考试。在测试过程中并没有对这些考试进行专门的培训,如下图所示,在这些偏向人类独立思考的考试中,GPT-4比GPT-3.5更加的可靠和更欧创造力。
GPT-4与其他模型对比
OpenAI为机器学习模型设计的传统基准上评估了GPT-4,GPT-4大大优于现有的大型语言模型,以及大多数最先进的(SOTA)模型,这些模型可能包括特定于基准的手工制作或额外的训练协议。
在测试的26种语言中的24种中,GPT-4的英语性能优于GPT-3.5和其他LLM(Chinchilla、PaLM),包括拉脱维亚语、威尔士语和斯瓦希里语等低资源语言。
GPT-4视觉输入
GPT-4可以接受文本和图像的提示,这与纯文本设置平行,允许用户指定任何视觉或语言任务。具体来说,它生成由穿插的文本和图像组成的给定输入的文本输出(自然语言、代码等)。在一系列领域,包括带有文本和照片的文档、图表或屏幕截图,GPT-4表现出与纯文本输入类似的功能。此外,它可以通过为纯文本语言模型开发的测试时技术进行扩展,包括少量镜头和思维链提示。图像输入仍然是一个研究预览,暂时并未对公众公开。
GPT-4局限性
尽管GPT-4具有功能,但它与早期的GPT模型具有类似的局限性。最重要的是,它仍然不是完全可靠的(它会“幻觉”事实并犯推理错误)。在使用语言模型输出时,特别是在高风险的上下文中,应该非常小心,因为确切的协议(如人工审查、以额外的上下文为基础或完全避免高风险的使用)与特定用例的需求相匹配。
虽然GPT-4仍然存在问题,但与之前的模型相比,它显著减少了幻觉。在官方的内部对抗性事实评估中,GPT-4的得分比最新的GPT-3.5高40%:
写在最后
GPT-4应该算得上是至今为止最为强大的人工智能预训练模型,无论是性能上、可靠性以及创造力都较GPT-3.5有较大提升。特别是最新的视觉输入功能,模型可以根据图片视觉分析并给出自己独立的答案,这可以算得上人工智能方向的一个新里程碑。虽然很强悍,但GPT-4还是有早期模型类似的局限性。所以,GPT-4之后的路还很长呀!
路漫漫其修远兮,吾将上下而求索
有兴趣的小伙伴也可以加我:
订阅号 ‘架构集结号’
知识星球 ‘Coding社区’
python3高级编程一文搞懂多进程
1 Linux平台下的多进程
1.1进程:
指正在执行的程序,是程序正在运行的一个实例,由程序指令和从文件、其他程序中读取的数据或者系统用户的输入组成。
1.2线程和进程的关系:
1.对操作系统来说,一个任务就是一个进程,
2.在一个进程内部,要同时做很多件,就需要同时运行多个“子任务”,把进程内部的这些子任务成为线程
3.线程是最小的执行单元,一个线程只能属于一个进程,而一个进程可以由很多线程,但是进程至少有一个线程组成,这个线程成为主线程
os.getpid()函数:获取Python程序占有的进程号
os.fork()函数:调用一次返回两次,在Linux使用
> 1.os.fork()函数一旦运行就会产生一个新的子进程,
> 2.os.fork()只能在Linux下运行
pid = os.fork()
if pid == 0:
print("子进程(pid = 0),父进程(id = 1)".foemat(os.getpid(),os.getppis()))
else:
print("父进程(pid = 0),子进程(cpid)".format(os.getpid(),pid))
2.跨平台的多进程
1.multiprocessing模块
1.multiprocessing模块提供Process类来代表一个进程对象,每实例化一个Process类就创建一个进程对象
from multiprocessing import Process
printcess(group=None,target=None,name=None,args=(),kwargs=,*,daemon=None)
参数说明:
taget:是函数名称,需要调用的函数
args:函数需要的参数,以元组的形式传入
主要方法:
start():启动进程
join():实现进程间的同步,等待所有进程退出
run():如果没有给定target参数,这个对象调用start()方法时,就执行对象中的run()方法
terminate():不管任务时候完成,立即终止进程
2.Python3中创建进程的两种方式
1)函数是创建进程
创建子进程的时候只需要创建一个执行函数和函数的参数鸡哥完成Process实例的创建。
import os
import time
from multiprocessing import Process
def osgetpid():
pass
def handle(name, num):
for i in range(num):
print('子进程运行中,name=0,i=1,pid=2,ppid=3'.format(name, i, osgetpid(), os.getppid()))
if __name__ == '__main__':
print('父进程%d' % os.getpid())
p1 = Process(target=handle, args=('python3', 2))
p2 = Process(target=handle, args=('java', 3))
p1.start()
p2.start()
p1.join()
p2.join()
print('子进程结束')
time.sleep(10)
print('父进程结束')
输出结果
父进程18464
子进程运行中,name=python3,i=0,pid=None,ppid=18464
子进程运行中,name=java,i=0,pid=None,ppid=18464
子进程运行中,name=python3,i=1,pid=None,ppid=18464
子进程运行中,name=java,i=1,pid=None,ppid=18464
子进程运行中,name=java,i=2,pid=None,ppid=18464
子进程结束
父进程结束
2)创建进程类,创建multiprocessing.Process的子类,来包装一个进程对象,通过继承Process类,并且重写Process类的run方法,在run()方法中定义具体要执行的任务。
3.子进程
subprocess模块:启动一个子进程,然后控制输入和输出
import subprocess
result = subprocess.call(['ping', '172.0.0.1'])
print(result)
3.进程池(pool)
批量创建进程时,使用multiprocessing模块的Pool类
pool类可以提供一个指定数量的进程提供给用户调用,如果池子没满,就创建一个新的进程来执行改请求,如果池满了,等到池子中有进程结束,才会创建新的进程来执行请求
multiprocessing.Pool类的主要用法
1.apply_async(func,args,kwds)
func:使用非阻塞的方式调用func函数,并执行,args为传递给func的参数列表
2.apply(func,args,kwds),使用阻塞方式调用func函数,阻塞方式必须等待上一个进程结束才能执行下一个进程3
3.join().主进程阻塞
4.close().关闭进程池,
5.terminate()不管任务是否完成,立刻终止进程池子
3 跨平台间的多进程通信
Queue类:用来进行多个进程间的通信
1.单进程通信:在单进程中使用multiprocessing模块的Queue类模拟队列储存和读取数据
2.跨平台的多进程通信:在多进程开发中,生产者就是生产数据的进程,消费者就是消费数据的进程,
4 分布式进程
分布式进程中,使用Python3的Queue生成发送任务的对象和接受任务的队列,在服务器端需要用multiprocessing.managers模块把Queue类的对象通过网络暴露出去,就可以让其他机器访问Queue
1.分布式进程包括服务进程(master)和任务进程(woker),分布式进程运行是需要关闭服务器进程和任务进程所在机器上的防火墙服务
2.服务器进程和任务进程运行在两台服务器时,两台机器代码的ip需要改成服务进程(master)的ip
以上是关于一文看懂多模态大型语言模型GPT-4的主要内容,如果未能解决你的问题,请参考以下文章