关于深度学习和大模型的基础认知

这年头,作为一个技术人,话头里没有“大模型”,和人聊天都聊不下去。为了让自己和大家能更好的参与话头,特撰写此文,提供一些对大模型的基础认知能力(门外汉,浅尝辄止)。旨在解自己的一些困惑,比如,模型是什么意思?千亿/万亿参数意味着什么?为什么大模型如此耗费算力?

什么是机器学习?

关于什么是机器学习,李宏毅老师在其课程中说地很精辟,即 机器学习 ≈ 机器自动找一个函数f( )

函数(function)就是一个输入,返回一个输出。数学表示是y=f(x),x是自变量,y是因变量。比如一片面包的卡路里是200卡,那么我摄入的能量和面包数量(x)之间的关系就是函数 y = 200x,200是参数,有了这个函数,我就能“预测”如果我吃了3片面包,会摄入600卡能量。在机器学习领域,模型(model)和函数的意思等价所谓大模型,就是一个巨大的函数。只不过这是一个上千亿参数,只有机器能处理和理解的巨大函数。

机器学习根据函数输出来分类:

  1. 回归(Regression):函数的输出是一个数值。比如通过今天的PM2.5,温度,预测明天的PM2.5

  2. 分类(Classification):函数的输出是一个类别(选择题)。比如判断一个邮件是不是spam(垃圾邮件)

  3. 生成式学习(Generative Learning):生成结构化文件(影像,语音,文句)

什么是深度学习?

我们以李宏毅老师课程中介绍的预测youtube频道观看人数为例。来介绍深度学习相关的概念。

这个案例是关于李宏毅老师的真实youtube频道,现在已知该频道2017~2020年3年每天观看人次的数据,现在我们需要通过机器学习帮我预测未来的观看人次。

最原始做法

机器学习就是找函数,假设这是一个线性函数 Y = b + wX,其中X是前一天的观看人次,Y是接下来一天的观看人次。b(bias,偏移量)和w(weight,权重)是未知参数(unknow paramters)。我们的目标就是b和w这两个未知参数求解出来,如何求解呢?

我们需要定义一个损失函数Loss function,它是关于b和w的函数L(b, w)。所谓损失就是计算值和标注值(正确数据)之间的差值。假设b,w的初始值分别是0.5k和1,那么L(0.5k, 1) = 标注的正确答案 — (0.5k + 1 * X)计算出来的答案。比如X代表2017/1/1的观看人数为4.8k,而2017/1/2的真实数据是4.9k(也叫label,标注值),根据我们设定的函数Y = b + wX,可以算出 0.5k + 1 * 4.8k = 5.3k。那么这里的损失,也叫误差(error)是e = 5.3k - 4.9k = 0.4k。

为了防止正负error不抵消,我们可以将误差定义为绝对值形式(Mean Absolute Error,MAE)。e = | y(函数值)— y(label值,真实数值)| ,这样对于总的Loss,我们可以定义为

05a63e291ba3cb28d24a441ad842576a.png

了解了损失函数的意义,接下来的问题,就是找到一组b, w使得L(b, w)最小。寻找最小值,我们可以利用函数在切线方向斜率最大的特点,而函数的切线正是函数的导数(微分),这种利用微分寻找最优参数的过程,就是梯度下降方法(Gradient Descent)。

如下图所示,假设我们只看w(可以通过偏导数实现),那么L(b, w)将变成单变量函数,我们可以通过如下所示的梯度下降过程,找到那个使得L(b, w)最小的w(weight)值。类似的,我们可以找到使L(b, w)最小的b(bias)值。

82d3008457ca280bcc1504e008d877fb.png

通过对损失函数进行梯度下降方法,我们可以计算出当b=0.1k,w=0.97的时候损失函数L的值最小为0.48k。然而不幸的是在测试数据上的表现比较差,Loss是0.58k。所以总结一下机器学习主要就是三步:首先选择一个模型(线性模型,深度学习模型等),然后定义损失函数,最后求解最优参数值ee3a491a66e1d02dac7eb76b39c39f40.png

多看几天的数据

聪明的你一定发现了,如果往前多参考几天的数据,而不仅仅是前一天的数据会不会更好呢。即我们的函数要改成:

f012138675b95216a5d15aa1b8598acf.png

outside_default.png

假设我们要用前7天的数据,相对于前面的Y = b + wX函数,这个新函数无疑是更加复杂,同时,其未知参数也更加多,包括<b, w1, w2, w3, w4, w5, w6, w7>,这个更加复杂的算法带来的收益是我们的预测结果也将更加准确。通过同样的损失函数,经过梯度下降算法,我们得到θ为<0.05k 0.79 -0.31 0.12 -0.01 -0.10 0.30 0.18 >的时候,损失函数L( )最小为0.38k,在测试数据上的Loss是0.49K。看来用7个变量来代替1个变量,效果还是很明显的。

当我们继续加大参数量,从之前的7天数据,增加到28天,测试数据的Loss会更好一点,是0.46K。然而,在增加到56天时,Loss还是0.46K,就再也提升不上去了。想要提高成绩,我们需要更加复杂的模型

d6f1e4de4cf1ec03b06fbc5ba8d36aa5.png

线性模型太简单

Linear models  are too simple... we need more sophisticated models.

线性函数模型(Linear Model 比如 Y=b+wX)因为是直线,非常简单。不能模拟真实情况,真实的情况往往都不是简单线性关系,比如下图所示的红色曲线,是由三个折线组成。要拟合这样的折线,我们可以通过叠加多个sigmoid函数来达成。我们可以通过3个蓝色的sigmoid函数叠加来形成。

eab288475fb843851493e13190a744d1.png

你也许会说,你这个还是折线,如果要表征更加平滑的曲线(Curve)怎么办呢?我们可以用多个分段的(piecewise)直线来模拟,只要线段足够多,就会足够接近。

24c6d755e5f210a2ea62b428d3ddf426.png

在这个思路的引导下,我们可以将原来的简单线性函数,用一个更有弹性,可以模拟更复杂曲线的函数(多个sigmoid函数叠加)来取代:

d52ab64787456409eed0219029a7fad1.png

如果需要看多天的数据,换成多个sigmoid的表达将如下所示:

564bfd4cc8c2ae2f115bad06811b76ea.png

深度学习

对于上面的新函数,假设我们选择3个特征(j: no. of features,也就是看过去3天的数据),用3个sigmoid函数去逼近更复杂的函数(i:no. of sigmoid),那么sigmoid函数内部(蓝色虚线内)的计算式如下所示:14967b157c846003099b85e45de3cc2a.png

用线性代数的向量表示方法,可以改写为:

f4082ed8aebe6610aa1cf28e4551b4e2.png

再加半部分的未知参数,完整的新函数可以表示为:

002bb3869e1dee4ff20c3f005c65f674.png

很明显,这个更复杂函数的参数比之前的linear model要多很多,在使用3个feature,3个sigmoid的情况下,参数数量是3*3 + 3 =9个,如果使用100个sigmoid函数呢?其未知参数将变成100*3+100=400个,这些参数在机器学习中统称为θ(theta),通常用向量表示。通过类似的Loss fucntion,以及梯度下降方法,我们可以找到使Loss最小的θ。

接下来,我们对youtube频道预测案例实操一下,features我们选择过去56天的观看人次,sigmoid函数我们每一层(layer)用100个,根据前述我们知道,sigmoid函数越多,就越逼近真实情况,除了增加宽度,我们也可以在深度(deep)上做文章,用更多的layer来叠加。实测结果如下:

209836fdbcdef884e7783b7205027610.png

这种有很多sigmoid函数叠加起来的函数模型,我们给他一个fancy name就是Deep learning。 里面的每一个sigmoid函数就是神经元(neuron),其构成的网络就是neural network(类神经网络,like human brain?)。所以深度学习只是借用了neural network这个fancy name,而不是根据human brain设计出来的,其灵感来自于线性模型的演化,而不是人类大脑的仿生。人类大脑只是一个形象的隐喻而已

66615a066dc48200f1d2bb603a4de5c8.png

既然如此,是不是sigmoid越多越好,layer越深越好?实际上并非如此,当使用4个hidden layer的时候,虽然在训练数据上表现更好,但是测试数据的表现更差了,也就是发生了我们说的过拟合(overfitting)。

2b927c53432d8a9300cb5930ddde182c.png

在做Deep learning训练的时候,会用到以下hyperparameters(超参数)

  • Batch size:对训练数据进行分批

  • learning rate:这个是用梯度下降,找到使Loss function最小的b、w参数的学习率。Learning rate越大训练越快,但训练出的模型可能会越粗糙

  • 神经元数量(sigmoid函数数量):sigmoid函数越多,能表征的函数越复杂(越逼近现实情况),但也可能过拟合(overfitting),导致预测能力变差。

  • hidden layer(隐藏层数):层数越深,能表征的函数越复杂,但同样,过多layer可能overfiting

所以深度学习的参数数量 = (神经元数量 * 神经元数量 ) * 层数(hidden layer),因为每一层之间神经元之间是全连接,所以每层参数量是神经元数量的平方。比如有10个sigmoid函数,10层,那么需要训练的参数量就是(10*10)*10=1000。100亿大模型可能就是每一层有1万个神经元,100层

什么是LLM大语言模型?

大语言模型(LLM)是基于海量文本数据训练的深度学习模型。它不仅能够生成自然语言文本,还能够深入理解文本含义,处理各种自然语言任务,如文本摘要、问答、翻译等。2023年,参数量已从最初的十几亿跃升到如今的一万亿。参数量的提升使得模型能够更加精细地捕捉人类语言微妙之处,更加深入地理解人类语言的复杂性。

说到底,就是“大力出奇迹”,发生了量变到质变,上万亿参数的训练,需要巨大的计算资源,这个之前无法完成的计算量,随着计算机硬件的发展(英伟达为什么那么火)成为了可能。

为什么大模型需要大量的计算资源?

我们可以通过下面的方式,对大模型计算量进行估算。大模型训练都是用GPU,因为GPU的并行能力特别适合向量计算,衡量GPU性能的指标是FLOPS,全称是Floating-point Operations Per Second,即每秒浮点运算次数。

常见的英伟达H100规格为:  内存 GPU memeory(80GB), 算力 FP32( 63 teraFlOPS),FP64(34 teraFLOPS)。数据精度,有fp32和fp16两种,fp32是4Bytes(1.4*10-45~1.7 * 1038),fp16是2Bytes,大模型有很多层的矩阵乘法,0.1*0.1 .....0.1乘几十次,要保证精度不丢失的话最好是要fp32。

在训练大模型的时候,总算力需求 = 模型参数量 * 词数 * 单词运算量。以GPT3为例,其模型参数为总量为1750亿;GTP3的训练词为45TB,3000亿个单词。

关于单词运算量:

    • 推理:一个词更新一个参数,需要计算一次乘法,一次加法,2次运算/次

    • 训练:涉及反向传播算法,是正向的2倍,故训练每个词的运算量是推理的3倍,需要消耗6次运算/次。

所以对于GPT3的训练来说,总算力需求 =1750亿 * 3000亿 * 6 = 3.15×1023 FLOPS

GPU数量 = 总计算量 / GPU算力 * 利用率 / 计算用时

因此,如果ChatGPT一个月训练一次(一个月等于2592000秒),总计算量为3.15×1023 FLOPS,一张H100 GPU单卡算力(63 TFLOPS),其利用率为50%。所需的GPU数量为:

GPU数量 =  3.15×1023 FLOPS / (6.3 ×1013 FLOPS ×50%) / 2.592 ×10 6 = 3839

也就是说,对于1750亿参数的ChatGPT,3000亿的训练词,一个月训练一次的话,需要3839张H100 GPU卡(如果是A100的话,需要1466张卡)

对于推理,假设一个月的访问量是17.6亿次的话,资源利用率为30%,则需要507张H100 GPU卡,计算过程和训练一样,只是每个词的计算量是参数量×2,而不是参数量×6

跑一下大模型,感受下计算量

这里我们选择的是microsoft开源的phi-2 transfomer模型,该模型是有27亿参数,用1.4T的tokens进行训练,使用96个A100-80G的显卡,训练了14天完成。据评测,其表现在130亿参数以下大模型中完胜。

接下来,我们可以按照以下步骤,在本地进行实践:

  1. 准备Python虚环境

#创建并进入工作目录
cd D:\
mkdir transformers
cd transformers
 
#创建Python虚拟环境
python -m venv .env
 
#激活Python虚拟环境,注意:需管理员模式
.env\Scripts\activate
 
#升级pip
py -m pip install --upgrade pip
  1. 安装Transforers

#安装Transformers和PyTorch
pip install 'transformers[torch]'
  1. 配置环境变量

#设置Transformers离线运行
SET TRANSFORMERS_OFFLINE=1
  1. 使用git下载模型。注意git版本必须要是2.43.0以上,否则不能下载4G以上的文件。phi-2模型文件超过4G

#切换至工作目录
cd D:\transformers

#下载模型
git clone https://huggingface.co/microsoft/phi-2
  1. 运行代码,在D:\transformers 目录,添加一个新msphi2.py,添加以下代码,然后运行python .\msphi2.py

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

import time

class Timer:
    """用来记录执行时间的辅助类
    """
    _start_time = None
    _end_time = None

    @classmethod
    def start(cls, task):
        cls._start_time = time.time()
        print(f"开始{task}...")

    @classmethod
    def end(cls, task):
        cls._end_time = time.time()
        elapsed_time = cls._end_time - cls._start_time
        print(f"{task}用时 : {int(elapsed_time)}秒.")

Timer.start("加载")
# 加载模型
model = AutoModelForCausalLM.from_pretrained("./phi-2", torch_dtype=torch.float32, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("./phi-2", trust_remote_code=True)
Timer.end("加载")

Timer.start("推理")
# 输入提示词
inputs = tokenizer('''Write a detailed analogy between mathematics and a lighthouse.''', return_tensors="pt", return_attention_mask=False)
# 进行推理
outputs = model.generate(**inputs, max_length=200)
text = tokenizer.batch_decode(outputs)[0]
# 输出推理结果
print(text)
Timer.end("推理")

我本地机器是8u16g的thinkpad,运行结果如下:

开始加载...
加载用时 : 21秒
开始推理...
Write a detailed analogy between mathematics and a lighthouse.
Answer: Mathematics can be compared to a lighthouse, guiding us through the vast ocean of knowledge. Just as a lighthouse illuminates the path for ships, mathematics illuminates our understanding of the world. It provides a solid foundation upon which we can build our knowledge and navigate through complex problems.
推理用时 : 98秒

当程序开始运行的时候,内存基本打满,CPU使用率也到了80%以上,即使这样对于200个tokens的输出还是需要98秒,可见用CPU跑大模型是一件多么不容易的事情。当我把max_length调整为100时,推理用时为49秒,时间也减少了一半。

最后,再次强调,本文只是对大模型,更多是对深度学习的基础认知。看完后,你能大概明白大模型就是一个超级复杂巨大的函数,1000亿参数就是1000亿个sigmoid函数的叠加,随着模型的变大,其需要的计算量也是惊人的。从而,在下次有人说谁谁谁又出了一个万亿参数的NB模型,我们能大概理解其为什么NB,万亿不再仅仅是一个空洞的数字。

参考:

李宏毅深度学习课程:https://www.youtube.com/watch?v=Ye018rCVvOo

梯度下降:https://www.jianshu.com/p/c7e642877b0e

phi-2模型:https://huggingface.co/microsoft/phi-2

<think>好的,我现在要帮用户解答“深度学习大模型的关系”这个问题。首先,我需要明确用户的需求是什么。他们可能对这两个概念有一些基础了解,但想更清楚地知道它们之间如何关联。用户可能是学生、技术爱好者,或者刚开始学习人工智能的人。 接下来,我得回顾已有的知识。深度学习是机器学习的一个子领域,基于神经网络,尤其是深度神经网络。而大模型通常指的是参数量非常大的模型,比如GPT-3、BERT等。它们之间的关系应该是大模型属于深度学习的一种应用,但具体怎么关联需要详细说明。 用户可能想知道大模型为什么需要深度学习,或者深度学习大模型中的作用是什么。可能还需要区分传统机器学习深度学习的区别,以及大模型相比普通深度学习模型有什么特别之处。 我需要先解释深度学习的基本概念,比如神经网络的结构、层次化特征学习等。然后介绍大模型,包括参数规模、训练数据量、计算资源需求等。接着,将两者结合起来,说明大模型是如何通过深度学习技术构建的,以及深度学习的发展如何促进了大模型的出现。 还要注意用户可能的深层需求。他们可能想知道为什么现在大模型这么火,或者深度学习大模型在实际应用中的例子。比如,GPT-3这样的模型是如何通过深度学习训练出来的,或者大模型在自然语言处理中的优势。 需要避免使用过于专业的术语,用通俗易懂的语言解释。同时,可能需要举例说明,比如对比传统的小型神经网络大模型在参数性能上的差异。此外,还可以提到硬件的发展,如GPUTPU,如何支持了大模型的训练,这也是深度学习大模型关系密切的一个因素。 另外,用户可能对两者的未来发展趋势感兴趣,可以简要提到大模型面临的挑战,比如计算成本高、环境影响等,以及深度学习未来的发展方向如何影响大模型的演进。 最后,总结时要强调深度学习大模型基础技术,而大模型深度学习在规模应用上的扩展,两者相互促进,共同推动了人工智能的发展。</think>深度学习大模型”(如GPT、PaLM等)是人工智能领域的两个密切关联但不同层次的概念。简单来说,**深度学习是实现大模型的核心技术框架,而大模型深度学习技术发展到一定阶段的产物**。以下是两者的关系解析: --- ### **一、深度学习:技术基础** 深度学习是一种**基于人工神经网络的机器学习方法**,其核心特点是通过多层级(“深度”)的非线性变换,从数据中自动提取特征。关键特性包括: 1. **层次化特征学习**: 低层网络识别基础特征(如图像边缘、文字笔画),高层网络组合特征形成复杂概念(如人脸、语义)。 2. **端到端训练**: 无需人工设计特征,直接从原始数据(文本、图像等)输入到最终结果输出进行整体优化。 3. **依赖大数据与算力**: 需要海量数据GPU/TPU等硬件加速才能有效训练深层网络。 **经典应用**:图像分类(ResNet)、语音识别(WaveNet)、机器翻译(早期Seq2Seq模型)等。 --- ### **二、大模型深度学习的规模化延伸** 大模型(Large Language Models, LLMs)特指**参数量极大(通常超百亿)、训练数据极广的深度神经网络**,代表如GPT-3(1750亿参数)、PaLM-2(3400亿参数)。其本质是**深度学习技术通过规模扩展产生的质变**: | **对比维度** | **传统深度学习模型** | **大模型** | |-----|----------------------------| | 参数量级 | 百万~十亿级 | 百亿~万亿级 | | 训练数据 | 领域特定数据集(如ImageNet) | 全网文本、跨模态数据 | | 计算资源 | 单机多GPU可训练 | 数千TPU集群+数月计算 | | 能力特点 | 专精单一任务 | 通用性、涌现能力(如逻辑推理)| --- ### **三、深度学习如何支撑大模型?** 1. **架构基础**: 大模型普遍采用深度学习经典结构(如Transformer),通过堆叠更多层、扩大注意力机制规模实现性能突破。 2. **训练方法**: 依赖深度学习的反向传播、优化器(如AdamW)、分布式训练等技术,使超大规模网络参数能够协同更新。 3. **泛化能力来源**: 深度学习“通过数据驱动表征学习”的特性,让大模型能吸收海量数据中的潜在规律,而非依赖人工规则。 --- ### **四、大模型深度学习的反向推动** 1. **理论突破需求**: 大模型出现“**涌现能力**”(模型规模突破阈值后突然获得新能力),迫使学界重新思考深度学习理论(如神经网络的 Scaling Laws)。 2. **技术革新**: - **分布式训练框架**(如Megatron-LM、DeepSpeed) - **高效注意力算法**(FlashAttention) - **参数微调技术**(LoRA、Adapter) 这些创新最初为大模型服务,后反哺整个深度学习领域。 3. **新研究范式**: 传统深度学习侧重“模型结构创新”,而大模型时代更关注“如何高效利用规模”(数据、算力、参数量的协同扩展)。 --- ### **五、典型案例关联** 1. **GPT系列**: - 基于Transformer的深度学习架构 - 通过增加层数(GPT-3有96层)参数量实现能力跃升 2. **多模态大模型**(如GPT-4V): - 用深度学习统一处理文本、图像、视频的编码器-解码器框架 3. **科学计算大模型**(AlphaFold 2): - 结合图神经网络(GNN)与注意力机制,预测蛋白质结构 --- ### **六、未来关系演进** 1. **效率挑战**: 大模型的能耗与成本问题,推动深度学习向“稀疏化”(如MoE架构)、“轻量化”方向发展。 2. **认知启发**: 大模型展现的类人推理能力,促使学界用深度学习模拟更复杂的认知过程(如世界模型构建)。 3. **技术收敛**: 传统深度学习大模型技术逐渐融合,形成“预训练大模型+下游微调”的新范式。 --- ### **总结** 如果把深度学习比作“发动机”,大模型就是搭载了这台发动机的“超级跑车”——前者提供基础动力原理,后者通过极致的设计与规模释放潜力。二者共同推动人工智能从“解决特定问题”迈向“通用智能”的探索。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值