之前写了一系列跟医疗信息化相关的内容,其中有提到人工智能,但是写的都是原先的一些AI算法基础上的医疗应用。现在大模型出现的涌现推理能力确实让人惊讶,并且出现可商用化的可能性,因此最近一年关于大模型在医疗的应用也开始出现,本章就大模型的一些基本原理、如何微调一个大模型以及大模型与医疗说一下自己的看法,可能存在不准确的地方,望能指出,谢谢。
大多数人对大模型的了解只是知道ChatGPT-3、ChatGPT-3.5、ChatGPT-4、文心一言3.5等大模型,并且其功能就是能够聊天对话。其实大模型不是一个,哪怕是ChatGPT-3也存在多个大模型,如果你有用过ChatGPT的API,你就会了解到ChatGPT的API就有很多个。这时候会存在疑惑就是这些大模型都是干什么的?下面通过大模型分类和国内外一些常见大模型让你认识一下大模型一些基本内容。
其实当时OpenAI在训练ChatGPT-3时,训练了4个大模型,分别是ada、babbage、curie、davinci,其最大区别就是参数量不同。然后你还发现OpenAI还有DALL·E、Whisper等其它大模型,这时候开始你就要了解不同大模型的作用。很多人喜欢分为以下2类:
如果按照更为细致的功能划分,可以分为:
当然还有很多不同的大模型,这里之所以先了解不同大模型,就是为了让你知道大模型并不是单单只有一种。这里还需要注意一个词“通用”,后续在微调的时候你会知道为什么叫通用大模型。
我们知道最近一年发布的很多大模型,但是其实很多大同小异,你无需知道太多,只需要通过Hugging face和LMSYS等排行榜,就能够知道哪些大模型。这里简单列举一些国外大模型
大模型 | 是否开源 | 文本/多模态 | 公司/组织 |
---|---|---|---|
ChatGPT | 否 | 文本 | OpenAI(微软投资) |
Claude | 否 | 文本 | Anthropic(谷歌投资) |
LlaMA | 是 | 文本 | Meta |
DALL·E | 否 | 多模态 | OpenAI(微软投资) |
MiniGPT | 是 | 多模态 | 沙特的大学研究院 |
国内在国外某些大模型开源之后,迅速涌现出估计超过100个的大模型,但同样的,有的要么其实只是利用开源微调,有的要么效果其实不佳,国内大模型总结一下就是大厂的基本都差不多,相对于ChatGPT还是有些差距,但是由于涉及中文问题,有时候你可能还是需要利用国内模型可能会取得更好效果(只是因为国内大模型可能有更好更多的中文训练数据,但其大模型推理能力还是没有ChatGPT强)。
大模型 | 是否开源 | 文本/多模态 | 公司/组织 |
---|---|---|---|
文心一言 | 否 | 文本 | 百度 |
通义千问 | 否 | 文本 | 阿里 |
混元 | 否 | 文本 | 腾讯 |
百川 | 否 | 文本 | 百川 |
ChatGLM | 是 | 文本 | 清华大学 |
visualGLM | 是 | 多模态 | 清华大学 |
国内目前闭源的多模态大模型可能还处于科研阶段,不适合真正商用。
我们知道,上面列举的大模型其实都是通用大模型,如果我们要在实际某些行业中使用,需要经过微调。那么有哪些开源的医疗大模型,
关于大模型的训练和原理,网上有很多教程和原理说明,这里不会讲数学公式,这里只是让你了解大模型的底层概念,让你能更好的了解大模型。
我们知道AI的算法有很多,但是大模型普遍使用的就是深度学习中的神经网络。如下图:
神经网络有3个层级,输入层+隐藏层+输出层,数据通过输入层一直到输出层,就会输出结果
输入层:会有输入的特征+权重参数+偏移量参数,一开始的权重参数和偏移量参数都是随机的。
隐藏层:可以多层,每层使用不一样的激活函数对输入层的数据进行计算。
输出层:有一个输出函数,根据你想要的结果可能是个回归、二分类、多分类的结果选择不同输出函数。
正向传播就是从输入层开始,一直通过隐藏层的激活函数计算,最后使用输出层的输出函数计算,得到输出结果。
损失函数:评判预测的准确性。将输出结果与真实结果通过损失函数评断其准确性,通过计算样本的准确率。
反向传播的作用就是调整权重参数和偏移参数,提高其准确率,那么应该如何提高呢。通过反向传播。这里举一个简单例子,比如通过计算输出结果与真实结果之间的方差,方差越小说明输出结果越准确。那么怎么通过反向传播调整参数呢?
首先我们可以采用一个损失函数如下图:
因为我们开始的权重参数和偏移量参数都是随机的,那么这时候通过损失函数计算会得到一个点,这点应该在上图中的某个点。我们要调整的就是不断的往下走,找到损失函数的最底部的那个点,那个点代表输出结果和真实结果最接近的。
当我们第一次正向传播后,得到一个点,这时候就需要做梯度下降算法。
梯度下降算法:就是不断地让你计算得到的点慢慢往下移动,这样输出结果和真实结果就越来越接近,那么得到的模型就越来越准确。
求导:求导的作用就是通过计算某个点的斜率,通过这个斜率,你就可以让你的开始计算的那个点往下移动某个变量(一般通过学习率+某个函数)。采用移动后的点,再次正向传播,再次计算一个新的输出结果,再次通过损失函数计算准确度,然后再次梯度下降算法反向传播,这样不断的循环(这时候设置循环次数或者训练次数)计算,得到越来越准确的模型。
上面只是简单说了一下正向传播和反向传播过程,但是其实真实情况是输入特征、权重参数都是一个很大的向量(如ChatGPT说有1750亿个参数,说的就是这些入参的个数)。通过向量并行计算,这样就更快的计算出结果。
大模型有一个修饰词“通用”,所谓的通用,其实就是推理能力。通过一个简单例子来举例:比如你在建筑行业学习到项目管理的通用能力,但是如果让你去做另外一个行业的管理,虽然有通用项目管理能力,但是由于对那个具体行业的业务不了解,中途会做出一些不在正确的管理,这时候需要你不断学习某个行业的业务再结合你原先的项目管理通用能力,这样你就能很好的管理新的行业。那么大模型微调就是通过你要做的具体场景的数据集输入,加上微调方法,再次训练大模型,让其推理能力来掌握你具体场景。所以微调就是:数据集+微调方法+工具,对大模型进行新的训练,以适合你所需的场景。因此对于大模型的再次训练,其重要的就是数据集和微调方法,可能需要不同调整或增加数据集,然后采用不同微调方法做实践,得出一个更加准确的模型。
目前微调的方法有很多种,不同的微调方法有不同的场景,你需要了解这些微调方法的基本原理和其使用场景,这样你在做选择时,可以知道你应该选择哪些方法。
随着大模型在不同行业的应用,慢慢地摸索出一套比较通用的应用流程和工具,LangChain就是规范化这个流程,并且里面集成各个流程所需的工具。以下是LangChain的6个模块
Models:大语言模型
Prompts:内置Prompts模板,也就是优化提示语
Chains:思维链,拆分复杂任务
Agents:利用本地工具
Memory:存储交互的内容,用于更好的交互
Index:本地文件交互索引
医疗中喜欢分为诊前、诊中、诊后、科研等不同过程,这里就不具体区分,而是列举一些详细的应用场景: