AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


模型训练的基本原理
发布日期:2024-09-05 11:08:05 浏览次数: 1590


    在之前的编程任务中,研发人员需要提前清楚程序运行的内部逻辑,并且用代码的形式把这些逻辑实现出来,且逻辑是确定性的,相同的输入会得到相同的输出。

    随着编程任务的复杂度越来越高,研发需要付出大量的工作去搞清楚程序运行的内部逻辑,时间和人力的消耗大,一些任务已经复杂到搞清楚全部运行逻辑是普通人力和团队无法承受的程度。且无法解决一些不确定性的任务,如一张图片里到底是一只猫还是一只老虎,不同的场景下会出现不确定的结果。

    面对这样的困境,研发希望不用去搞清楚程序运行的内部逻辑,也可以将逻辑实现出来,给定一个输入可以获得一个输出。

1、模型原理


    人工智能就是用来解决上述问题的。人工智能(Artificial Intelligence, AI)是一个广泛的领域,涉及设计计算系统和算法,使得计算机能够执行通常需要人类智能的任务。机器学习是人工智能的一个子领域,研究如何通过从数据中自动学习和改进算法,使得计算机可以进行预言预测和决策。神经网络是机器学习中的一种模型,也是当前最流行的一种模型。


1.1、神经网络


    很多任务,人类是可以完成的,人类是依赖大脑这种神经网络来完成这种复杂和不确定性的任务的,AI就是从中获取到启发。


    人类的大脑是由一个一个的神经元相互连接而组成的神经网络,每一个神经元只能处理很简单的任务,但是有足够多的神经元,相互连接传递信息,却能处理很复杂的任务。受此启发,AI引入了神经网络。


    神经网络是一种特定类型的AI模型,它受到人类大脑结构和功能的启发,用于识别复杂的模式和关系。神经网络由许多相互连接的节点(人工神经元)组成,这些节点通过连接(边)传递和处理信息。


    一个典型的神经网络如下所示:



神经元(节点):每个节点负责接收输入并进行特定的处理。


层:神经网络通常包括输入层、隐藏层和输出层。


输入层:接收原始数据,例如将一张图片转化成像素值,根据不同的任务类型有所不同


隐藏层:处理信息,每个隐藏层都有多个神经元,这些神经元通过加权连接传递信息。


输出层:将数值计算转换成最终的预测结果,根据不同的任务类型有所不同


1.2、隐藏层的神经元


    每个神经元实际上执行了以下步骤:



1.加权求和:


每个输入 ( x_i ) 乘以相应的权重 ( w_i ),然后将所有结果相加,加上一个偏置项 ( b_i ) [ z = \sum_{i=1}^{n} w_i x_i + b_i ] 其中,( n ) 是前一层神经元的数量,( w_i ) 是权重,( x_i ) 是输入,( b_i ) 是偏置,( z ) 是加权求和的结果。


所有的权重值组成一个权重矩阵w,偏置值组成偏置矩阵b,这两个矩阵可以理解为模型的参数。


2.激活函数:


将加权求和的结果 ( z ) 通过激活函数 ( f )(例如 ReLUSigmoidTanh 等)进行非线性变换,输出结果 ( a ) [ a = f(z) ]


因为很多场景都是非线性的,进行非线性转换可以让一个线性的网络处理非线性问题,激活函数不涉及参数,是一个固定的函数。


    神经网络可以实现对于复杂任务的模拟,其理论基础是通用近似定理。


    通用近似定理表明,一个具有足够多的神经元的神经网络,只要适当选择权重和激活函数,这个神经网络可以近似任何连续可微函数,从理论上讲,可以任意接近这些函数的输出。


    因此,AI可以不用搞清楚一个函数的内在实现逻辑,而是通过神经网络的方式模拟这些函数,从而获得对应函数的输出。


2、模型设计


    设计模型就是设计神经网络的结构的过程,其有以下几个方面:


1.确定任务的类型


2.选择适当的层数:


3.选择神经元数量:


4.选择激活函数


5.选择层类型


6.选择超参数


    目前对于不同的任务已经有大量开源的模型,比如用于图像处理的CNN,用于ChatGPTTransformer等,研发可以在开源的基础上进行调整以最大化的满足其场景需求。


3、模型训练


    模型训练的目标:通过大量的数据训练,确定合适的神经网络及其参数(如权重矩阵和偏置矩阵),从而实现对复杂任务最接近的模拟


    为了达到这一目标首先需要一个衡量指标,用来衡量当前模型对于复杂任务模拟的接近程度,这个指标就是损失函数。损失函数(Loss Function)是机器学习和深度学习中的一个重要概念,它用来衡量模型的预测结果与实际结果之间的差距,即误差。通俗地说,损失函数就像评分系统,告诉我们模型的表现有多好或者多差。通过最小化损失函数的值,我们可以不断优化模型,使其预测结果更加准确。



    模型的参数(权重和偏置)在开始时通常是随机初始化的,预测值和输出有很大的差距。


    前向传播:将输入数据通过网络传递,计算每个神经元的线性组合,再通过激活函数输出。


    神经网络前向传播产生的输出(即预测值)和真实数据的输出(即真实值)之间的差距需要用损失函数进行衡量,损失函数一般是根据不同的任务提前设置好的,比如均方误差,计算预测值和真实值之间差的平方和的平均值。


3.1、反向传播


    由于神经网络的不同的参数(权重矩阵和偏置矩阵),可以输出不同的预测值,也就是损失函数会取不同的值,训练的过程就是找到合适的参数,使得损失函数的值最小。这个过程就是反向传播。


    损失函数可以通俗的理解为参数的函数,要找到其最小值可以借助梯度这一数学工具。二维函数一般情况下就是使用导数来找到最小值,但是三维以上的函数就是使用梯度。


    梯度是一个向量,它的方向指向函数变化最快的方向,长度表示变化的速率。可以把梯度下降过程类比为沿着山坡向下走。如果我们站在函数的某个点,梯度告诉我们哪个方向是下坡最快的方向,我们一步一步地沿着这个方向走,每步步长由学习率(超参数)决定,这样我们可以逐渐接近山谷,即函数的最低点。


    反向传播流程如下:


1.计算损失:根据前向传播计算出输出值和真实数据的输出值,使用损失函数(如均方误差、交叉熵等)计算损失值。


2.计算梯度:计算损失函数关于每个权重和偏置的梯度,将这些梯度用于更新权重和偏置。


3.更新权重和偏置:使用优化算法(如梯度下降、Adam 等)根据梯度更新权重和偏置。


4.迭代:重复上述过程,直到损失函数收敛或达到预设的训练轮数。


    如果损失函数没有收敛,那需要调整模型或者优化算法超参数等,反之则继续训练至损失函数达到预期。


3.2、泛化

    一个模型除了在训练数据集上表现良好,还需要在非训练数据集上有比较好的表现,这个过程称之为泛化。因此下一步需要在非训练集上进行验证,非训练集大体分为两种:独立数据集和验证数据集。独立数据集是指从外部下载的公开数据集,验证数据集是指从训练数据集中提取一部分数据,这部分数据没有用来训练,而是用来验证。


    如果模型泛化表现依然良好,那就可以直接上线运行;反之,则需要继续调整模型或者调整训练数据集,来达到最终目的。


4、模型维护和迭代


    在实际应用中不断监控模型的预测性能,特别是数据分布变更时的表现,定期更新模型训练数据,重新训练模型以适应新数据,根据用户反馈和监控结果,定期进行模型优化和调优。


5、关于馗安社

欢迎大家关注馗安社,我们的成员简介(按姓氏拼音):

成员


简介


戴中印


商汤云安全架构师

刘新


兰州大学信息科学与工程学院副教授、硕士生导师,主要从事代码安全和 AI 对抗研究


于长奇


字节跳动隐私合规专家,专注移动端合规技术和解决方案,如违规收集个人信息,自启动等。曾从事过内核安全、java安全和Api安全


杨坤


御林安全负责人,蚂蚁金服和美团SRC年度TOP白帽子,专注自动化漏洞挖掘和web3领域


赵永福


网商银行办公安全负责人,主要研究方向为可信纵深防御、信创安全研究、数据安全与合规



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询