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

【大模型理论篇】大模型相关的周边技术分享-关于《NN and DL》的笔记

        本文所要介绍的一本书《Neural Networks and Deep Learning》,该书作者Michael Nielsen,Y Combinator Research的研究员,是多年之前自己看的一本基础书籍,很适合入门了解一些关于深度学习的概念知识,当然也包含了一些小的案例。刚好有篇当年存档的小笔记,做一下分享。

        该书以识别手写数字为切入点,以不断引入新的优化手段提升识别准确度为线索贯穿始终。

        一开始介绍了感知器,再引出多层感知器。仅仅三层MLP(输入层&隐藏层&输出层),代价函数采用MSE(均方误差),由于学习率直接影响到算法的迭代,对于学习率进行了一定的探讨,学习率不能太大也不能太小,一般来说还是一个经验值。同时对GD(梯度下降法),SGD(随机梯度下降法)。GD由于要使用全量的样本,因此速度较慢,不太适合真实场景;SGD随机选取mini-batch(小批量数据)的训练输入样本来计算梯度,通过对少量样本的平均值进行计算来对实际梯度进行快速近似。通过反向传播算法(BP)快速计算代价函数的梯度,训练得到合适的MLP模型,经过几十轮(epoch)迭代,模型可以达到约95%的准确度。通过增加隐藏层神经元,增加模型的复杂性,可以进一步提升到约96.5%。这也就引出了调整参数,是可以影响最终的学习效果。同时,插了一小段svm等统计机器学习算法的表现,通过增加好的训练样本数据,使用简单的机器学习算法,也是可以取得比较好的效果的。

        进而逐步引出稍复杂的神经网络,也就是多层结构(更多隐藏层)的网络(深度神经网络)。首先介绍了反向传播算法(四个基本方程),该算法同样是应用于深度神经网络的学习,反向传播其实是对权重和偏置变化如何影响代价函数过程的理解。同时使用权重矩阵,偏置向量的方式来表征相关学习参数。引入输出层误差概念。

        针对前述神经网络,提出了一系列的优化改进思路。首先是调整代价函数,由均方误差函数调整为交叉熵代价函数。把交叉熵看成代价函数,有两点原因:第一它是非负的;第二对于所有的输入x,神经元实际输出接近目标值,交叉熵接近0,这也是代价函数需要具备的性质。引入交叉熵取代二次代价函数,能够避免学习速度下降。交叉熵求导得到的结果,可以看到权重学习的速度是受到sigma(z)-y的影响,也就是输出值与目标值的差距,差距越大,学习速度越快,参数更新幅度越大。而二次代价函数求导的结果,权重学习的速度是与sigma(z)的导数有关,我们知道S函数,越到1 或 0,其导数越小,也就是饱和了,那参数基本就没法更新。交叉熵衡量我们学习到y的正确值的平均起来的不确定性。使用交叉熵训练的模型,可以提升到约96.8%。

        其次,文中引入softmax输出(柔性最大值),取代之前使用的sigmoid函数。softmax可以被看作是一种概率分布。得到分类任务中正确分类为j的概率。同时,引入softmax,也能够缓解学习缓慢的问题。把⼀个具有对数似然代价的柔性最⼤值输出层,看作与一个具有交叉熵代价的 S 型输出层⾮常相似,这是很有⽤的。在实际中,我们通常会使用softmax+log-likelihood或者sigmoid+cross  entropy。而柔性最⼤值加上对数似然的组合更加适⽤于那些需要将输出激活值解释为概率的场景。

        介绍完权重学习速度之后,然后引入过拟合和规范化,过拟合是影响模型泛化能力的关键。如果仅仅看模型在训练集上的代价函数曲线变化,如果出现持续下降,但是测试集的误差在变大,这就可能发生了过度拟合。early-stop是一种策略,在测试集开始出现误差升高的时候,进行提前终止训练。提出使用validation data来学习超参数,然后使用得到的最佳的参数模型再进行test的预测。这种称为hold out的做法,可以避免模型仅使用train&test data时偏向于找到test数据集的超参数,影响其应用到其他新数据上的效果。另外,增加训练样本的数量也是一种减轻多度拟合的方法。文中着重讲到降低网络的规模(复杂度)也是一种有效方式。一种最常见的规范化手段为权重衰减(weight decay)或者L2规范化。L2规范化的想法是增加一个额外的项到代价函数上,称为规范化项。规范化的效果是让网络倾向于学习小一点的权重。⼩的权重在某种程度上,意味着更低的复杂性,也就对数据给出了⼀种更简单却更强⼤解释,规范化⽹络受限于根据训练数据中常⻅的模式来构造相对简单的模型,⽽能够抵抗训练数据中的噪声的特性影响。因此应该优先选择调整后的模型效果也提升到了约98%。

        规范化的其他方式,还有L1规范化,dropout和人为增加训练样本。L1是在代价函数上加一个权重绝对值的和。在 L1 规范化中,权重通过⼀个常量向 0 进⾏缩⼩。在 L2 规范化中,权重通过⼀个和 w 成⽐例的量进⾏缩⼩的。所以,当⼀个特定的权重绝对值 w 很⼤时, L1 规范化的权重缩⼩得远⽐ L2 规范化要⼩得多。相反,当⼀个特定的权重绝对值 w很⼩时, L1 规范化的权重缩⼩得要⽐ L2 规范化⼤得多。最终的结果就是: L1 规范化倾向于聚集⽹络的权重在相对少量的⾼重要度连接上,⽽其他权重就会被驱使向 0 接近。dropout也是一种规划化的策略,在该策略中,不依赖于对代价函数的修改,而是改变网络结构。会从随机(临时)地删除网络中的半隐藏神经元,同时保持输入和输出层的神经元不变。每个epoch都会进行一次随机删除隐藏神经元,更新权重和偏置。所以看起来dropout很类似与random forest中的列抽样。本质上就是构建了很多不同结构的神经网络,起到投票的作用,这种平均的方式可以减轻过度拟合。另一种解释就是因为神经元不能依赖其他神经元特定的存在,可以减少复杂的互适应的神经元。权重和偏置的集合,是在一半隐藏神经元被弃权的情形下学到的,当我们运行整个网络时,是指两倍的隐藏神经元被激活。使用L2正则+弃权,模型可以提升到98.7%准确率。至于扩展数据集,通过旋转拉伸扭曲,加噪音,调整像素、颜色可以衍生出大量的新的数据,进行补充,可以进一步提升到99.3%的识别率。

        说完了规范化,降低过拟合风险后,引出权重的初始化,可以提升学习速度。一般上,我们通过独立高斯随机变量来选择权重和偏置,被归一化为均值0,标准差1。独立高斯分布相加后的均值方差即为各均值之和,和方差之和。这导致z是一个非常宽的高斯分布。这就导致隐藏神经元的输出sigma(z)很容易接近1或者0。导致隐藏神经元趋于饱和。在权重中进⾏微⼩的调整仅仅会给隐藏神经元的激活值带来极其微弱的改变。导致进⾏梯度下降算法时会学习得⾮常缓慢。如果将原先的高斯分布的标准差改为1/开根号(Nin),Nin是输入层的神经元个数,用它来初始化权重参数。仔细想想,该方式使得每一个输入都有同样的方差,并且相加之后的方差为1。不过偏置的初始化依然采用均值为0,标准差为1的高斯分布。Glorot等人所写的文章Understanding the difficulty of training deep feedforward neural networks中有类似的分析。在这篇论文中,作者的结论是建议初始化的形式是2/(Nin+Nout),即是把输出的神经元数据也考虑进。

        超参数选择,可以采用grid search,random search,以及hyperopt的贝叶斯观点超参优化。

        关于随机梯度下降,文中介绍了两种变种,Hessian和momentum技术。GD是使用一阶导(Jacobian矩阵), 而Hessian使用二阶导。Hessian矩阵就是一个二阶偏导矩阵。Hessian方法比标准的梯度下降方法收敛速度更快,通过引入代价函数的二阶变化信息,可以让Hessian方法避免在梯度下降中常碰到的多路径问题。虽然Hessian有这方面优势,但是二阶导的矩阵实在太大了,在实际应用中限制很大。受Hessian优化启发,引出了基于momentum梯度下降的方法。momentum技术中,引入了称为速度(velocity),又引入参数miu(monentum efficient)来控制速度的大小。速度是由梯度控制,而速度有控制w的变化率,通过不断重复叠加梯度项来构造速度,获得较大的动量。

        神经元激活函数,sigmoid(S函数),tanh(双曲正切),reLU(修正线性单元)。

        深度神经网络训练的问题。主要是我们熟知的梯度消失和梯度爆炸。以一个实验作为切入,通过增加隐藏层的层数,发现识别率反而下降了,这个问题引出所要探讨的梯度计算问题。直观感觉应该是增加隐藏层的层数,提升了模型复杂度,在分类上应该更好吧,但事与愿违。问题大概率就出在没有学习到更好的权重和偏置。通过对每一隐藏层神经元的学习过程(神经元在⽹络进⾏学习时改变的速度)分析,发现越靠近输出层的隐藏层神经元学习速度更快,前面的层学习速度低于后面的层。也就是在BP中,梯度倾向于变小,也就意味着在前面的隐藏层中的神经元学习速度要慢于后面的隐藏层。这就是所谓的梯度消失问题(vanishing gradient problem)。在深度学习中,权重初始值较大会导致梯度爆炸,激增问题也同样会遇到。这类问题统称为梯度不稳定。导致梯度消失或者梯度爆炸的原因,就是链式求导法则中的导数问题,如果激活函数使用的是sigmoid,那么求导后,其表达式为sigmoid*(1-sigmoid),其值最大为1/4, 同时加入w的初始化使用的是(0,1)高斯分布,w都是小于1,那么可以看到连乘之后,且层数越多,乘积下降的越快,即前面的层,其梯度越小。如果w初始为100,w*sigmoid导数>1,容易遇到梯度爆炸的问题。不稳定的梯度问题:根本的问题其实并非是消失的梯度问题或者激增额梯度问题,而是在前面的层上的梯度是来自后面的层上项的乘积。唯一让所有层都接近相同的学习速度的方式,是所有项的乘积都能得到一种平衡。因此使用标准的基于梯度的学习算法,在网络中的不同层会出现按照不同学习速度学习的情况。因此要想消除梯度消失问题,需要保证w*s‘(z)的绝对值大于1,而s'(z)又依赖于w*a+b,当w变大时,会使得wa+b变得很大,那么会导致sigmoid(z)的导数变得很小,很容易造成梯度消失。因此在深度神经网络中,就需要考虑其他的激活函数,如reLU。

        此外,介绍下语言模型解码中的Beam Search(集束搜索)。解码是seq2seq模型的常见问题,常用方法有贪心搜索(Greedy Search)集束搜索(Beam Search)。

        以下是一个简单的贪心搜索例子。Decoder根据Encoder的中间语义编码向量和标签得到第一个输出的概率分布,选择概率最大的0.4,即moi。根据隐向量h_1和moi得到第二个输出的概率分布[0.1, 0.1, 0.1, 0.1, 0.6],选择概率最大的0.6,即suis。以此类推,直到遇到<\s>标签,得到最终的序列moi suis étudiant。

        上面的贪心搜索只选择了概率最大的一个,而集束搜索则选择了概率最大的前k个。这个k值也叫做集束宽度(Beam Width)。

        还是以上面的例子作为说明,k值等于2,则集束搜索的过程如下图所示。得到第一个输出的概率分布[0.1,0.1,0.3,0.4,0.1],选择概率最大的前两个,0.3和0.4,即Je和moi。然后Je和moi分别作为Decoder的输入,得到两个概率分布,然后再选择概率和最大的前两个序列,0.3+0.8和0.4+0.6,即Je suis和moi suis。以此类推,最终可以得到两个序列,即Je suis étudiant和moi suis étudiant,很明显前者的概率和最大,为2.2,所以这个序列是最终得到的结果。

        集束搜索本质上也是贪心的思想,只不过它考虑了更多的候选搜索空间,因此可以得到更多的翻译结果。

附参考材料pdf链接:

链接: 书籍《Neural Networks and Deep Learning》 提取码: 7kf3

相关文章:

【大模型理论篇】大模型相关的周边技术分享-关于《NN and DL》的笔记

本文所要介绍的一本书《Neural Networks and Deep Learning》&#xff0c;该书作者Michael Nielsen&#xff0c;Y Combinator Research的研究员&#xff0c;是多年之前自己看的一本基础书籍&#xff0c;很适合入门了解一些关于深度学习的概念知识&#xff0c;当然也包含了一些小…...

CSS 圆形边框与阴影

目录 1. 圆角边框 1.1 正圆 1.2 圆角矩形 1.3 任意圆角 1.4 某个圆角 2. 盒子阴影 3. 文字阴影 1. 圆角边框 1.1 正圆 1.2 圆角矩形 1.3 任意圆角 1.4 某个圆角 2. 盒子阴影 3. 文字阴影...

Bianchi模型、python计算及ns3验证

由于项目与学习需要,最近学习了bianchi模型,并在python中进行了公式->代码的转化,仿真结果与ns3结果对比。 本文更多的是理解模型各个部分的含义、把各个简单的推导过程转化为python、ns3对比: 1 理论吞吐与传输概率、传输成功概率、包长、速率、排队时间、成功传输时…...

SQL常用语法

SQL&#xff08;Structured Query Language&#xff09;是一种用于存储、操作和检索数据库中数据的标准编程语言。以下是一些常用的 SQL 语法&#xff1a; 数据库操作 创建数据库&#xff1a;CREATE DATABASE database_name;删除数据库&#xff1a;DROP DATABASE database_name…...

计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

浏览器前端向后端提供服务

WEB后端向浏览器前端提供服务是最常见的场景&#xff0c;前端向后端的接口发起GET或者POST请求&#xff0c;后端收到请求后执行服务器端任务进行处理&#xff0c;完成后向前端发送响应。 那浏览器前端向后端提供服务是什么鬼&#xff1f; 说来话长&#xff0c;长话短说。我在人…...

文本到语音或视频的构想

₦X8s43Y1iIquVAeF₦ 在Python中&#xff0c;有几个库和模块可以用来实现文本到语音的转换&#xff0c;并且可以生成带有背景音乐的视频。以下是一些可用的库&#xff1a; 1. pyttsx3&#xff1a;这是一个离线文本到语音转换库&#xff0c;它支持多种语音引擎&#xff0c;不依…...

请解释一下数据库的分区和分片?请解释一下数据库的日志和日志的重要性?

请解释一下数据库的分区和分片&#xff1f; 数据库的分区和分片是两种用于提高数据库性能和可扩展性的技术&#xff0c;它们各自具有不同的特点和应用场景。以下是对这两种技术的详细解释&#xff1a; 一、数据库分区 定义&#xff1a; 数据库分区是将一个大型的数据库表或索…...

windows C++-创建数据流代理(二)

完整的数据流演示 下图显示了 dataflow_agent 类的完整数据流网络&#xff1a; 由于 run 方法是在一个单独的线程上调用的&#xff0c;因此在完全连接网络之前&#xff0c;其他线程可以将消息发送到网络。 _source 数据成员是一个 unbounded_buffer 对象&#xff0c;用于缓冲…...

大数据毕业设计选题推荐-个性化图书推荐系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…...

【Redis入门到精通九】Redis中的主从复制

目录 主从复制 1.配置主从复制 2.主从复制中的拓扑结构 3.主从复制原理 4.主从复制总结 主从复制 在分布式系统中为了解决单点问题&#xff0c;通常会把数据复制多个副本部署到其他服务器&#xff0c;满⾜故障恢复和负载均衡等需求。Redis 也是如此&#xff0c;它为我们提…...

系统架构设计师论文《论企业应用系统的数据持久层架构设计》精选试读

论文真题 数据持久层&#xff08;Data Persistence Layer&#xff09;通常位于企业应用系统的业务逻辑层和数据源层之间&#xff0c;为整个项目提供一个高层、统一、安全、并发的数据持久机制&#xff0c;完成对各种数据进行持久化的编程工作&#xff0c;并为系统业务逻辑层提…...

策略模式和模板模式的区别

目录 一、实现方式 策略模式 模板模式 二、使用场景 三、优点 四、举例 一、实现方式 策略模式 定义策略接口 Strategy创建具体策略类 OperationAdd、OperationSubtract、OperationMultiply创建一个上下文类 Context&#xff0c;包含一个策略对象的引用&#xff0c;并通…...

【ubuntu】ubuntu20.04安装conda

1.下载 安装参考&#xff1a;https://blog.csdn.net/weixin_44119391/article/details/128577681 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 2.安装 sudo chmod 777 -R ./Anaconda3-5.3.1-Linux-x86_64.sh ./Anaconda3-5.3.1-Linux-x86_64.sh Enter键确认安装…...

使用 SAP ABAP Webdynpro 实现 ABAP Push Channel 的 Web Socket 客户端

本系列前三篇文章,笔者向大家介绍了基于 ABAP Push Channel(简称 APC)的 TCP Socket 服务器端和客户端的编程,以及 Web Socket 的服务器端实现。 使用 ABAP 实现 TCP Socket 编程 (1) - 客户端部分的实现使用 ABAP 实现 TCP Socket 编程 (2) - 服务器端部分的实现使用 ABAP 实…...

15分钟学 Python 第41天:Python 爬虫入门(六)第二篇

Day41&#xff1a;Python爬取猫眼电影网站的电影信息 1. 项目背景 在本项目中&#xff0c;我们将使用 Python 爬虫技术从猫眼电影网站抓取电影信息。猫眼电影是一个知名的电影信息平台&#xff0c;提供了丰富的电影相关数据。通过这个练习&#xff0c;您将深入学习如何抓取动…...

电脑提示d3dcompiler_47.dll缺失怎么修复,仔细介绍dll的解决方法

1. d3dcompiler_47.dll 概述 1.1 定义与作用 d3dcompiler_47.dll 是 Microsoft DirectX 的一个关键组件&#xff0c;作为一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它在 Windows 操作系统中扮演着至关重要的角色。DirectX 是一套由微软开发的用于处理多媒体…...

CPU中的寄存器是什么以及它的工作原理是什么?

在计算机科学中&#xff0c;寄存器是数字设备中的一个重要组成部分&#xff0c;它用于存储数据和指令以快速处理。寄存器充当临时存储区&#xff0c;信息可以在这里被快速访问和操作&#xff0c;以执行复杂任务。寄存器是计算机中最基础的存储类型&#xff0c;它们在帮助机器高…...

【EXCEL数据处理】000021 案例 保姆级教程,附多个操作案例。EXCEL文档安全性设置。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000021 案例 保姆级教程&#xff0c;附多个操作案例。…...

windows7 32bit安装JDK以及EclipseEE

如果你的电脑是 Windows 7 32-bit 系统&#xff0c;那么需要下载并安装适用于 32-bit 系统的 JDK 和 Eclipse EE。以下是具体的步骤和下载链接&#xff1a; 1. 下载并安装适用于 Windows 32-bit 的 JDK 1.1 下载适用于 32-bit 的 JDK Oracle 不再提供最新版本的 32-bit JDK&…...

Python中的Enum

Python中的Enum Enum&#xff08;枚举&#xff09;在很多应用场景中都会出现&#xff0c;因此绝大部分编程语言都实现了Enum类型&#xff0c;Python也不列外&#xff0c;但列外的是Enum在Python3.4中才被正式支持&#xff0c;我们先来看看Python3中的Enum是怎么使用的。 枚举的…...

于BERT的中文问答系统12

主要改进点 日志配置&#xff1a; 确保日志文件按日期和时间生成&#xff0c;便于追踪不同运行的记录。 数据处理&#xff1a; 增加了对数据加载过程中错误的捕获和日志记录&#xff0c;确保程序能够跳过无效数据并继续运行。 模型训练&#xff1a; 增加了重新训练模型的功…...

基于SpringBoot“花开富贵”花园管理系统【附源码】

效果如下&#xff1a; 系统注册页面 系统首页界面 植物信息详细页面 后台登录界面 管理员主界面 植物分类管理界面 植物信息管理界面 园艺记录管理界面 研究背景 随着城市化进程的加快和人们生活质量的提升&#xff0c;越来越多的人开始追求与自然和谐共生的生活方式&#xf…...

MySQL连接查询:自连接

先看我的表结构 emp表 自连接也就是把一个表看作是两个作用的表就好&#xff0c;也就是说我把emp看作员工表&#xff0c;也看做领导表 自连接 基本语法 select 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件;例子1&#xff1a;查询员工 及其 所属领导的名字 select a.n…...

Prometheus+Grafana备忘

Grafana安装 官网 https://grafana.com/grafana/download 官网提供了几种安装方式&#xff0c;我用最简单的 yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.2.2-1.x86_64.rpm启动 //如果需要在系统启动时自动启动Grafana&#xff0c;可以…...

基于ssm实现的建筑装修图纸管理平台(源码+文档)

项目简介 基于ssm实现的建筑装修图纸管理平台&#xff0c;主要功能如下&#xff1a; 技术栈 后端框框&#xff1a;spring/springmvc/mybatis 前端框架&#xff1a;html/JavaScript/Css/vue/elementui 运行环境&#xff1a;JDK1.8/MySQL5.7/idea&#xff08;可选&#xff09…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-07

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-07 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-07目录1. Evaluation of Large Language Models for Summarization Tasks in the Medical Domain: A Narrative Review摘要研究…...

Mahalanobis distance 马哈拉诺比斯距离

马哈拉诺比斯距离&#xff08;Mahalanobis Distance&#xff09;是一种衡量点与分布之间距离的度量&#xff0c;尤其适用于多维数据。与欧几里得距离不同&#xff0c;马哈拉诺比斯距离考虑了数据的协方差结构&#xff0c;因此在统计分析和异常值检测中非常有用。 定义 给定一…...

R语言绘制直方图

直方图是一种统计图表。它将数据分成若干区间&#xff0c;统计每个区间内数据的数量或频率&#xff0c;用矩形条高度表示。能直观展现数据分布特征&#xff0c;如集中趋势、离散程度等。在数据分析、质量控制、市场调研等领域广泛应用&#xff0c;可帮助人们快速了解数据整体形…...

论文阅读笔记-LogME: Practical Assessment of Pre-trained Models for Transfer Learning

前言 在NLP领域,预训练模型(准确的说应该是预训练语言模型)似乎已经成为各大任务必备的模块了,经常有看到文章称后BERT时代或后XXX时代,分析对比了许多主流模型的优缺点,这些相对而言有些停留在理论层面,可是有时候对于手上正在解决的任务,要用到预训练语言模型时,面…...