当前位置: 首页 > news >正文

深度学习原理

1 简介

        AIGC(Artificial Intelligence Generated Content,即人工智能生成内容)是一种利用人工智能技术自动创建文本、图像、音频和视频等内容的技术。AIGC的核心是通过机器学习和深度学习算法,让计算机模型学会理解和生成人类语言,从而能够自动产生有价值的内容。这是几个关键概念的关系:

生成式AI系统的设计通常基于神经网络模型,尤其是自然语言处理(NLP)领域的模型。这些模型的设计灵感往往来源于人脑的结构和功能,通过模拟神经元的连接和信息传递机制,构建复杂的网络结构。

        右边的节点网络中,最左侧的3个浅紫色的点是输入节点,最右边的2个红色节点是输出节点,中间的2层就是处理层(又叫隐藏层神经元)

一个典型的神经网络模型可能包括以下三部分:

(1)输入层:接收输入数据,如文本、语音或图像。

(2)处理层:通过多层的神经网络对输入进行处理和学习,提取关键信息和特征。

(3)输出层:根据学习到的信息生成响应或内容。

对神经网络简化,得到只有一个输入、1个处理和1个输出的模型:

这个图里,输入数据X经过线性函数l和非线性函数r计算,最终得到结果Y’。

要怎么理解上面这个图呢?

下面我们将它用一个例子来讲清楚其原理。

2 用一个求函数表达式的问题解析深度学习原理

首先提出问题:求下图中的y=f(x)关于x的表达式:

可以看到这个函数曲线大致分为了3部分,我们把它标注为下图:

        如果要知道f(x)的表达式,那把1、2、3的表达式求出来,他们组合的结果就是f(x)的函数表达式了。

2.1 线性和非线性函数

        在进行下一步之前,咱们得先了解下线性函数和非线性函数的区别:

2.1.1 线性函数(Linear Function)

        线性函数是指输入和输出之间存在线性关系的函数。在线性函数中,输出是输入的加权和,可能还会加上一个偏置项。线性函数的一般形式可以表示为:

y=wx+b

        其中,w 是权重,x 是输入,b 是偏置项,而 y 是输出。线性函数的特点是,当输入增加时,输出成比例地增加;当输入减少时,输出成比例地减少。线性函数无法捕捉输入和输出之间的复杂关系,如非线性模式或特征。

2.1.2 非线性函数(Non-linear Function)

        非线性函数是指输入和输出之间不是简单比例关系的函数。非线性函数可以引入数据的复杂模式和结构,使得神经网络能够学习和模拟更加复杂的函数映射。非线性函数在神经网络中又比称为激活函数,常见的激活函数包括:

  • ReLU 函数:ReLU(x)=max(0,x)
  • Sigmoid 函数:....
  • Tanh 函数:....
  • Swish 函数:Swish(x)=xσ(x)

        非线性函数的特点是,它们可以使得神经网络的输出不仅仅依赖于输入的线性组合,还能够捕捉输入之间的相互作用和复杂的非线性关系。这对于解决实际问题非常重要,因为现实世界中的很多问题都是非线性的。

2.1.3 线性与非线性在神经网络中的作用

        在线性神经网络中,如果网络只包含线性函数,那么无论网络有多少层,最终的输出都是输入的线性组合。这意味着多层线性网络的功能与单层线性网络相同,因为线性函数的复合仍然是线性的。这就是为什么我们需要非线性激活函数的原因。非线性激活函数打破了线性,使得每一层都能够学习到新的、更复杂的特征表示,从而使神经网络能够解决更加复杂的任务。

例:

Y=a(c(ex+f)+d)+b

3次线性操作后合并同类项,最终结果会等于:

Y= Ax+B

还是线性函数。

2.2 深度学习原理

2.2.1 函数分段

        回到上面的例子,要求解的函数图像分割成3部分

        对应上面的1、2、3分段的函数,3部分的表达式组合即可表达函数的y=f(x)。

2.2.2 引入非线性函数

        接下来引入一个非线性函数,本例使用上文提到的ReLU函数。其图形如下所示:

2.2.3 非线性函数图形变换

        对于坐标轴上的任意一段分段图形,都可通过调整R(x)函数获得,如下图所示:

对应到函数表达式上为:

R(x)1=R(x-1)

R(x)2=3R(x-4)-5

2.2.4 线性操作与非线性操作示例

以R(x)2=3R(x-4)-5 这个变换后得到的图像为例:

对数据X来说,

  1. x进行一次线性操作: y=x-4 (参数分别是1和4)

  1. 线性操作的结果做一次非线性操作:y=R(x-4)

  1. 非线性操作的结果再做一次线性操作:3R(x-4)-5 (参数分别是3和5)

        自此,输入x通过线性+非线性+线性操作,得到一个任意位置的R(x)函数。

2.2.5 函数求解的神经网络图表达

我们将上述例子的求解方法按照前面的神经图来输出,就得到了下图:

        图示有3个神经元,每个路径经过1次线性操作L,1次非线性操作R,1次线性操作L,得到1个分段函数f(x)1,3个路径得到3个分段函数组成预测函数Y’。

        然而,正常情况下的要求的函数图像并不是规则的,于是就需要更多的处理节点、更多层数的隐藏层去处理,以得到更拟合原有函数y=f(x)的预测结果。

通过在隐藏层增加更多层的处理层,来获得更精确的预测结果。

        隐藏层越多、单层的处理节点越多,其参数就越多,模型也越加复杂,结果也就接近正确值,正是因为中间隐藏层很多、很深,所以神经网络模型也叫深度学习模型。

        在这个过程中,模型训练就是通过调整每个线性函数的参数(权重Weights和偏移量Biases),使结果更准确的拟合。

2.2.6 损失函数

        既然是根据分段来拟合,那必然少不了与原始函数的差异,拟合函数与原函数的差异,我们用损失函数来说表示,损失函数是衡量模型预测结果与真实结果之间差异的指标。在训练过程中,模型的目标是最小化这个损失。

                如:使用绝对值均值(Y与Y’在相同x的差值的绝对值的均值)来衡量损失函数的值。在计算得到损失函数的值后,通过优化算法、反向传播算法来调整权重,以找到最小化损失函数的权重值

2.2.6.1 反向传播算法

        反向传播算法是神经网络训练中的核心,它通过计算损失函数相对于每个权重的梯度来更新权重。这个过程从输出层开始,逐层向输入层反向传播误差信号,每个神经元的权重都会根据误差梯度进行调整。反向传播通常与梯度下降算法结合使用,以找到最小化损失函数的权重值。

2.2.6.2 优化算法

        优化算法用于更新网络中的权重,以减少损失函数的值。最常见的优化算法是随机梯度下降(SGD)及其变体,如Adam等。这些算法通过在每次迭代中调整权重来逐步优化模型的性能。

2.2.7正则化

        在深度学习中,正则化是一种用于防止过拟合的技术。过拟合是指模型在训练数据上表现很好,但在未见过的测试数据上表现较差的现象。这通常是因为模型学习到了训练数据中的噪声和细节,而没有捕捉到数据的潜在分布或泛化特征。

常见的正则化方法包括:

        L1正则化(Lasso):在损失函数中添加权重的绝对值之和,倾向于产生稀疏权重矩阵,即许多权重为零。

        L2正则化(Ridge):在损失函数中添加权重的平方和,倾向于让权重均匀地分布,而不是选择少数几个特征。

        Dropout:在训练过程中随机丢弃(即暂时移除)网络中的一些节点,防止模型对特定的神经元过度依赖。

        早停(Early Stopping):在训练过程中监控模型在验证集上的表现,当性能不再提升或开始下降时停止训练,以避免过拟合。

        正则化是深度学习中提高模型性能的重要手段,通过适当的正则化策略,可以使模型在未知数据上表现得更好。

OK,到这里我们已经把深度学习的整个流程讲完了,总结一下:

深度学习的核心部分,是通过一系列的学习和训练过程来掌握数据的特征和模式。

这个过程可以分为以下几个关键步骤:

(1)前向传播:

        当输入数据(如文本序列)被送入模型时,它会通过每一层的神经元进行前向传播。每个神经元都会接收来自前一层的输入,通过加权求和(考虑每个连接的权重)后,通常会通过一个非线性激活函数(如ReLU)进行转换,产生输出到下一层。这个过程会一直重复,直到达到输出层。

(2)权重初始化:

        在训练开始之前,模型中的权重通常会被初始化为随机值。这是为了防止权重在训练初期就陷入局部最优解,确保模型能够开始学习。权重初始化的方法有很多种,如随机初始化等,每种方法都旨在帮助模型更有效地学习。

(3)模型训练与参数优化

        在训练过程中,模型通过损失函数来衡量模型预测结果与真实结果之间差异,在计算得到损失函数的值后,通过优化算法、反向传播算法来调整权重,以找到最小化损失函数的权重值。这个过程通常涉及到监督学习,即模型通过比较预测结果和真实结果的差异来不断调整自身参数。为了防止模型过拟合(即在训练数据上表现很好但在未见数据上表现差),通常会在训练过程中加入正则化项。

        通过这些步骤,模型的处理层能够逐渐学习到如何从输入数据中提取特征,并将这些特征转化为有意义的输出。随着训练的进行,模型的性能会逐渐提高,最终能够生成符合预期的内容。

        相信通过这篇文章,也能明白各种大模型里的提到的亿级的参数、模型训练等都是什么意思了。

相关文章:

  • 在HTML中,如何正确使用语义化标签?
  • 医学图像预处理之z分数归一化
  • 如何在 Windows 10/11 上编辑 PDF [4 种简单方法]
  • 设计模式--动态代理
  • 2024年,收付通申请开通流程
  • C++数据格式化5 - uint转换成十六进制字符串二进制的data打印成十六进制字符串
  • kotlin之foreach跳出循环
  • GitLab项目组相关操作(创建项目组Group、创建项目组的项目、为项目添加成员并赋予权限)
  • element-plus的Tour 漫游式引导怎么去绑定Cascader 级联选择器或者它的内容 popper
  • flink学习-容错机制
  • PyMuPDF 操作手册 - 01 从PDF中提取文本
  • el-date-picker 有效时间精确到时分秒 且给有效时间添加标记
  • Ubuntu 22.04 下 CURL(C++) 实现分块上传/下载文件源码
  • 学习笔记——交通安全分析05
  • leetcode45 跳跃游戏II
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Docker: 容器互访的三种方式
  • EventListener原理
  • Node + FFmpeg 实现Canvas动画导出视频
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Python进阶细节
  • Vue小说阅读器(仿追书神器)
  • 简单易用的leetcode开发测试工具(npm)
  • 爬虫模拟登陆 SegmentFault
  • 如何使用 JavaScript 解析 URL
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 新版博客前端前瞻
  • 移动端解决方案学习记录
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #pragma multi_compile #pragma shader_feature
  • #传输# #传输数据判断#
  • (1)STL算法之遍历容器
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (java)关于Thread的挂起和恢复
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (黑马点评)二、短信登录功能实现
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)Linux+Windows下安装ffmpeg
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .md即markdown文件的基本常用编写语法
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net framework 4.8 开发windows系统服务
  • .NET Framework杂记
  • .NET gRPC 和RESTful简单对比
  • .Net 中Partitioner static与dynamic的性能对比