首页 文章 精选 留言 我的

精选列表

搜索[零点击],共10000篇文章
优秀的个人博客,低调大师

零基础解码Transformer与大模型核心原理

本文以通俗易懂的方式,为“大模型小白”解析Transformer的核心原理,包括其与大模型的关系、自注意力机制、多头注意力机制、位置编码、Encoder和Decoder的组成等内容,帮助读者全面理解这一支撑现代AI的语言模型基石。 前言 鉴于ChatGPT、DeepSeek等AI应用的兴起,大模型的风暴很快席卷了整个互联网行业,各个部门或多或少都在学习大模型的相关知识,在这些学习过程中,很容易就发现怎么都绕不开一个词“Transformer”。相信很多同学在学习中,都和笔者最初有一样的困惑:到底什么是Transformer?Transformer对大模型真的如此重要么? 基于上面的疑问,本文旨在帮助和笔者一样的“大模型小白们”了解Transformer的核心技术,并尽量用通俗易懂的语言进行描述。最后,如文中有不对的地方,欢迎大家指正~ Transformer和大模型之间是什么关系? 首先,你可以把Transformer想象成一种“超级配方”,而大模型就是用这个配方做出来的“满汉全席”。举个例子:假设你想做一道超级复杂的菜(比如佛跳墙),但普通锅具(传统AI模型)只能炒炒青菜,火力不够、步骤也麻烦。而 Transformer 就像发明了一种“万能高压锅”: 火力猛:能同时处理大量信息(比如一句话的所有词语一起分析,而不是逐个字看); 步骤简:用“注意力机制”(Attention)自动找到关键信息(比如理解“猫吃鱼”时,自动关联“猫→吃→鱼”的关系); 可复制:这套方法能无限扩展,锅越大(模型参数越多),菜越香(效果越好)。 所以关系就是:Transformer 是“方法论”,教会AI怎么高效学习;而大模型是“实践成果”,用这种方法练出来的“全能学霸”。 Transformer到底是什么? 了解了大模型和Transformer的宏观关系后,现在就要开始真正了解transformer的内核架构了,下图就是经典的transformer架构图,相信很多同学都已经看到过无数次了~ 下面我们将真正开始介绍本文的重头戏transformer。 Transformer内部结构 首先在看transfomer的模型时,你可以将该模型图一分为二来看,左边是Encoder,在有一段语句输入后,编码器负责将输入的序列进行编码,它可以将输入语句的每个单词向量(emmbedding)和单词的位置信息(position)进行融合编码,最终会得到一个编码后的矩阵,随后将其喂给右侧的Decoder模块,进行解码,Decoder 依次会根据当前推理过的单词 1~ n 再进行推理下一个单词 n+1。 只看语言描述,有点抽象,举一个🌰来看: 首先,假如我们在做一个翻译类型的任务,比如我们有一句话:我喜欢编码,当我们把这句话喂给Transformer时,就会有如下的流程: 第一步:获取输入句子的每个单词的特征值,也就是常说的embedding,但是只获取单词的特征值是不够的,因为推理一个句子,还需要单词之间的依赖关系,所以需要对单词的具体位置进行编码,获取到位置的编码信息(即位置的embedding,后面会详细讲位置信息如何编码的~),随后将两个Embedding相加,即可得到拥有位置信息的编码矩阵,如下图所示。 Transformer输入句子处理 第二步:将上面带有位置信息的矩阵X(每一行代表一个单词的向量信息)输入到6个Encoder中进行编码,得到最后的矩阵E,如下图所示。矩阵E,用 表示,其中n为句子中的单词数量,d为向量的维度,论文中的d=512 Transformer编码图解 第三步:得到Encoder的编码矩阵E后,会将E喂进Decoder进行解码处理,Decoder依次会根据当前已经翻译过的单词再推测下一个单词,比如当前翻译了“I” ,下次需要翻译“like”,模型会根据〈begin〉(起始符)和“I”综合推理翻译“like”这个单词。并且在这个推理过程中,存在Mask机制,比如你翻译到“I”,他会通过Mask盖住“I”之后的单词“like encoding”来进行预测,具体流程如下图所示 Transformer编码图解 Encoder和Decoder的核心原理是什么? 了解了Transformer的大体流程后,肯定有很多同学会好奇,上文只说了编码和解码,那Transformer到底是如何做到的这些呢?先别急,我们再回到文章的一开始的Transformer架构图,可以看到在Encoder、Decoder内部都拥有着两个非常重要的模块,Multi-Head-Attention模块和Feed Forward模块。其中,Encoder包含一个Multi-Head-Attention模块,而Decoder则包含两个Multi-Head-Attention模块,不难发现,Transformer的核心其实就是这个多头注意力机制,那么下面我们就先从这个多头注意力机制进行攻克。 ▐ 4 .1 Self-Attention机制 要理解多头注意力机制,首先要先搞明白注意力机制是什么。你可以把注意力机制想象成人类在阅读时用荧光笔标记重点 的过程。比如你读这段话时,眼睛会自然聚焦在" 荧光笔 "这个关键词上,而忽略"比如""过程"这些辅助词。 在注意力机制中,当它处理一句话时,模型会给每个词分配不同的"关注值",比如翻译"那只猫舒服地趴在窗台上 ",生成"comfortably"这个词时 "舒服地"会获得最高关注值(90%) "趴"获得中等关注(70%) "窗台"只获得少量关注(30%) 这种动态权重分配让模型能灵活捕捉关键信息,就像我们读书时用荧光笔划重点一样,然后根据划线部分理解内容。而传统模型在处理这些任务时更像用手电筒看长文章,只能照亮当前位置附近;注意力机制则像同时打开整个房间的灯,还能自动调节每个区域的亮度。这种特性特别适合处理需要联系上下文的任务。 了解完Self-Attention大概是什么之后,我们接下来看一下Self-Attention具体是怎么运行的,接下来内容会偏硬核,需要一定的数学基础,笔者尽量描述的通俗易懂。 Self-Attention 流程图 上图是Self-Attention的总体机制流程,其实是对Attention计算公式的图形化描述,attention计算公式如下: 4.1.1 公式含义 我们先抛开Q K V三个矩阵不谈,单论 这个公式是什么含义呢? 首先要搞明白,一个矩阵乘它自身的转置矩阵代表了什么。我们知道矩阵本身就是一系列向量的集合,一个矩阵乘它自身的转置矩阵,就可以理解为这些向量分别和其他的向量做内积,而向量内积其实表示的是两个向量的夹角,表征一个向量在另一个向量上的投影,说人话就两个向量的内积是表示两个向量之间的相似度 。 用一个例子来看: 有一个“早上好”的特征矩阵,每一行代表这个字的特征向量,可以看出来在“早上好”矩阵和“早上好”的转置矩阵做计算时,“早”会跟自己以及其他两个字(“上”、“好”)的向量分别做内积,来得到一个新的向量。那这个新的向量有什么意义呢?结合我们上面对内积的解释,我们可以把它理解为这个值越大,说明两个向量的相似度越高,值越小说明两个向量之间关系越弱。进一步理解一下,这个向量是不是可以在一定程度上(不是完全)表示,在关注词A的时候,是不是应给予B词更多的关注。 那矩阵的结果是一个矩阵,它里面保存了每个向量 与 自己、以及其他向量 进行内积的计算结果。至此,我们了解了一个矩阵乘它自己转置矩阵的含义,那我们再来看softmax的作用是什么? 这里不再对softamax公式进行详细介绍,只简单介绍意义。softmax的作用就是归一化,简单来说,经过归一化后,会将单行向量的值的和变为1,如上图的结果矩阵将由[11,11,10],变为[0.4,0.4,0.2]。 归一化的这个结果,其实就相当于我们后续乘的X的权重系数。用人话来讲就是,当我们关注“早”这个字的时候,我们应分配0.4的权重关注它自身,分配0.4的权重关注“上”,0.2的权重关注“好”。 我们理解完了 ,那最后的乘X是什么作用呢?如下图所示 观察上图,行向量X与第一个列向量相乘,得到了第一个新的行向量[1.4],且这个行向量与X的的维度相同。那么新的行向量的每一个数值,都是由三个词向量在这一维度加权求和后得到的,这个新的行向量就代表“早”字经过注意力加权求和后的表示 。 理解了公式整体的含义之后,再看一个细节 ,为什么要除 呢?其实这个操作只是为了防止QK的结果过大,所以会除一个尺度标度 ,而 表示query和key的向量的维度,如果不对softmax的输入做缩放,那么万一输入的数量级很大,softmax的梯度就会趋向于0。 4.1.2 Q K V含义 理解了上面自注意力机制公式的含义后,其实Q(Query),K(Key),V(Value)只是一个公式的入参,本质是根据输入矩阵X跟线性矩阵WQ、WK、WV做内积得到的,而输入矩阵X则是之前单词的特征向量矩阵X或者上一个Encoder block的输出,具体的计算过程如下图所示。 Q K V矩阵计算 看到这里,可能有些同学会有疑问,既然都是通过线性矩阵得到的Q、K、V,那为什么不使用X矩阵本身呢?这个答案其实并不难想,本质上使用线性矩阵是为了提升模型的拟合能力,因为矩阵W都是可以训练得到的,从而起到一个缓冲的效果。 一句话总结Q、K、V在自注意力机制里做的事情:通过query和key的相似程度来计算出value的权重分布。 ▐ 4 .2 Multi-Head Attention机制 其实理解了注意力机制后,多头注意力机制也是非常好理解的,简单来说它是对单层注意力机制的一个叠加模型,通过多层计算Q、K、V,再将各部分结果拼接,最后通过线性化处理得到一个与输入同等维度的结果矩阵,多头注意力机制架构图如下所示。 Multi-Head Attention机制 将上述过程展开叙述:首先通过权重矩阵将Q、K、V分割,每个Head单独计算self-attention,同时因为训练出的也各不相同,所以得出的Q、K、V也是不同的,因此我们说每个Head的关注点也 各有侧重。最后将每个Head得出的结果进行Concat(拼接)操作,然后通过总体权重矩阵决定对每个Head结果的关注程度(注意最后的Z矩阵维度和最初输入的X维度相同), 从而能够做到在不同语境下对相同句子的不同理解 。具体图解如下图所示。 Multi-Head Attention计算流程 位置编码 从Transfomer架构图可以看到,其实在Encoder之前还有一个模块,即位置编码模块。不免有同学好奇,为什么需要在Encoder输入之前要进行位置的编码呢?其实这也不难理解,通过上面的学习,我们可以发现在做自注意力机制时,它是跟每一个输入的词向量进行内积,在这个过程中,并没有考虑到词向量的顺序,所以这最后得到的结果一定是缺失原来文本的顺序信息的。 Transformer内部结构 位置信心的Embedding通常有两种方式获得,一种是通过训练得到,另一种是直接使用公式,而Transformer中的位置信息则是采用了后者——公式获得。计算公式如下: 针对上面的公式,进行解释一下:pos代表单词的位置,2i和2i+1则分别代表偶数位置和奇数位置,d则代表向量维度(和前面单词的embedding维度相同),使用该公式有以下几个好处: 使用公式法能够适应比训练集里所有句子更长的句子场景,这么说可能有点绕,举一个例子,假设我们训练的时候,训练集里最长的句子只有100个单词,但是现实中我们在推理的时候,可能会存在101个单词的场景,这时候呢根据公式就可以计算出101单词的位置信息。 可以让模型更容易地计算出相对位置。举一个例子,假设A单词的位置是pos, B单词和A单词之间的位置距离为L,那么PE(pos+L) 则可以由 PE(pos) 计算得到。因为 Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B) , Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B) 根据公式得到位置信息后,将单词的Embedding信息和位置Embedding相加,就可以得到带有位置信息和单词特征信息的向量,而这个向量也正是Encoder的输入。 Encoder的组成 可以看到Encoder的内部除了Multi-Head Attention模块,还有Feed Forward Network、Add & Norm模块,这两个模块都是跟在Multi-Head Attention模块之后做“加强表现”效果的。 Encoder架构 ▐ 6 .1 FFN模块 首先,可以看到不论Encoder还是Decoder,在做完Multi-Head Attention后,都会接一个FFN网络,那这个FFN网络到底有什么用呢?要搞清这个问题,还是要先从原理入手。 FFN的计算公式:通过公式,其实不难得出,FFN是由全连接层(FC)和激活函数Relu组成。其实通过分析公式,已经可以得出FFN的作用,即对矩阵进行 空间的变换 ,引入 非线性特征 ,来增强模型的表现能力。 FFN模块架构图 可能有些同学会存在疑问,在Multi-Head Attention的最后其实有线性矩阵 的计算,已经将结果映射成和输入X相同维度了,为什么这里还要增加一个FFN模块?笔者认为这里是把向量先 线性变化到高维空间 再重新变换回来可以得到更加抽象的数据,泛化效果更好。当然把FFN模块去掉也可以使用,但是效果差了很多。(笔者观点,有待讨论~) ▐ 6 .2 Add & Norm模块 Add & Norm 层由 Add 和 Norm 两部分组成,其计算公式如下: 从公式开始分析,X为Multi-Head Attention 或者 Feed Forward 的输入(从架构图中更能清晰得出),MultiHeadAttention(X) 和 FeedForward(X) 则表示输出 。有些同学会疑问这两者是否可以直接相加?其实我们看前面所有的技术介绍时,可以发现所有的模块在最后都经过了线性的变换 , 从而保证输出和输入的X矩阵维持同样的维度,比如在Multi-Head Attention模块,最后乘了 矩阵保证了输出和输入相同维度。 Add是指X + MultiHeadAttention(X)和X + FeedForward(X),这是一种残差网络,通常用于解决深度学习中多层网络训练的问题,通过将前一层的信息无差别的传递到下一层,从而可以让网络只关注当前差异的部分 。(具体残差网络的知识不在此展开) 残差网络 Norm模块则代表了Layer Normalization,简单来说它的作用是规范优化空间,加速训练的收敛 。 当我们使用梯度下降算法做优化时,我们可能会对输入数据进行归一化,但是经过网络层作用后,我们的数据已经不是归一化的了。随着网络层数的增加,数据分布不断发生变化,偏差越来越大,导致我们不得不使用更小的学习率来稳定梯度。Layer Normalization 的作用就是保证数据特征分布的稳定性,将数据标准化到ReLU激活函数的作用区域,可以使得激活函数更好的发挥作用。 Decoder模块的组成 从Decoder的架构图中,我们可以看到和Encoder层会有一些相似之处,但也存在一些差异: Decoder存在两个Multi-Head Attention模块,而Encoder只有一个 Decoder的第一个Multi-Head Attention模块采用了Mask操作 Decoder的第二个Multi-Head Attention模块的输入,并不止依赖于第一个Multi-Head Attention模块的结果,同时依赖了Encoder的输出(后面会详细解释) Decoder架构 ▐ 7 .1 Masked Multi-Head Attention模块 首先我们要了解什么是Mask,在深度学习中Mask通常表示掩码的意思,即它会对某些值进行掩盖处理,使在训练中进行参数更新时不会产生效果。而在Transformer模型中,它是对未来的内容进行了掩盖处理,在t时刻时,我们的解码输出只能依赖于t时刻之前的产出,而不能依赖t时刻之后的输出 。举一个例子,我喜欢写代码的翻译是“I like encoding”,在t时刻我们预测了“<begin> I”,这时候在需要预测"like"时,只能依赖“<begin> I” 而不能依赖“like encoding”进行。所以,在transformer里需要想了一个办法,把t时刻之后的信息全部给隐藏起来。 具体的做法其实也很简单,它产生一个上三角的矩阵,上三角的值全部为0。把这个矩阵和我们的目标矩阵相乘时,便可以做到将t时刻之后的特征全部隐藏。 举一个例子: 假如我们有一个 0 1 2 3 4的单词向量矩阵,那它的Mask同样也得是一个5*5的矩阵,按照设定,我们将上三角的区域全部置为0(即绿色区域为非掩盖区,黄色为0值区),这样在注意力机制算得 矩阵后,再将其与Mask矩阵进行 按位相乘, 即可得到一个带有掩码的矩阵结果(黑色部分为0值),后续再乘V矩阵即可得 到最终的self-attention的结果。 ▐ 7 .2 Decoder的两个Multi-Head Attention模块 从Decoder架构图中,我们不难看出,第一个Multi-Head Attention模块的query key value均来自前一层的Decocder的输出,但是加入了Mask操作,从而让模型只能attend到前面已经推理过的词语,因为在真正推理过程中我们当前是不知道下一个输出词语,这是我们之后才会推测到的。 而第二级的Multi-Head Attention模块,即它的query来自于之前一级的Decoder层的输出,但其key和value则来自于Encoder的输出,这使得decoder的每一个位置都可以attend到输入序列的每一个位置。这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息 (这些信息无需 Mask) Decoder架构 Transformer如何根据Decoder结果实现预测的 解码组件的输出是一个实数的向量,我们如何能够把这些浮点数变成一个单词?这便是后面的linear+softmax模块需要做的。 线性变换层是一个简单的全连接层神经网络,它可以把Decoder产生的向量矩阵投射到一个比它大的多的一个被称为对数几率的向量 里(logits, 维度为 vocab_size), 表示模型对每个词汇的“原始分数” 。 例如,词表有 30000 个词,则输出一个 30000 维的向量,并且每个单元格里都对应某一个单词的分数。 最后会通过softmax层,把这些分数转换成概率信息,概率最高的单元格 则会被选中,并且它对应的单词作为 这个时间步的输出 ,具体流程如下图所示。 总结 1. Transformer由Encoder、Decoder、位置编码模块组成 Encoder用来对输入序列进行高纬度特征提取,并生成编码后的向量信息 因为Encoder获取不到序列之间的位置信息,所以需要位置编码模块对其进行位置特征的补充,从而让模型能够拥有语义信息+位置信息的特征 Decoder基于已生成的结果和Encoder的输入进行生成最终目标序列 2. Self-Attention 可以同时关注序列中的所有元素,而不像传统的 RNN 或 LSTM 那样需要逐步处理。这使得它能够并行计算,训练速度更快,同时也能更好地捕捉长距离依赖关系。 3. Multi-Head Attention 实际是多个Self-Attention机制的叠加,它的作用是让模型能够同时从多个角度捕捉输入序列中不同位置之间的依赖关系,从而更全面地理解上下文信息 4. 一句话总结Transformer的作用:可以处理序列数据(如文本、语音等),并能够高效地捕捉序列中元素之间的依赖关系,从而完成各种复杂的语言任务。 参考 《Attention Is All You Need》https://arxiv.org/pdf/1706.03762 《The Illustrated Transformer》 https://jalammar.github.io/illustrated-transformer/ 《Transformer模型详解(图解最完整版)》 https://zhuanlan.zhihu.com/p/338817680 《超详细图解Self-Attention》https://zhuanlan.zhihu.com/p/410776234 团队介绍 本文作者逾末,来自淘天集团-直播技术团队。淘宝直播作为全球领先的直播电商平台,正在重新定义人与商品、人与内容的连接方式。我们致力于打造沉浸式、互动式的购物体验,让数亿用户在这里发现好货、感受乐趣。无论是时尚穿搭、美食评测,还是科技新品发布,淘宝直播都在引领电商行业的创新潮流。同时淘宝直播也在推进打造行业领先的AI数字人技术,实现虚拟主播、智能互动、个性化推荐等创新功能。 ¤拓展阅读¤ 3DXR技术| 终端技术 | 音视频技术 服务端技术| 技术质量 | 数据算法 本文分享自微信公众号 - 大淘宝技术(AlibabaMTT)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

从零开始初识机器学习 | 京东云技术团队

本篇文章中我们将对机器学习做全面的了解与介绍,其中第一章 初识机器学习分为上下两个小章节,对机器学习是什么、机器学习由来以及机器学习的理论等展开说明。目的是能让即便完全没接触过机器学习的人也能在短时间对机器学习有一个全面了解。后续将推出机器学习的进阶内容,包括经典基础篇(线性模型、决策树、集成学习、聚类等),实战进阶篇(特征工程、模型训练与验证、融合与部署等)。本篇为第一章 初识机器学习(上),我们从这里开始,开启一个全新的学习旅程。 1 机器学习描述 1.1 机器学习是什么? 机器学习(Machine Learning,ML)是使用统计(或数学)技术从观察到的数据中构建模型(或系统)的一个计算机科学领域。机器学习用计算机程序模拟人的学习能力,从样本数据中学习得到知识和规律,然后用于实际的推断和决策。 从广义上来说,机器学习能够赋予“机器”学习的能力,使其实现直接编程无法完成的工作。但从实践意义上来说,机器学习是利用数据训练出模型,并使用模型进行预测的一种方法。“训练”与“预测”是机器学习的两个过程,“模型”则是过程中间的输出结果,“训练”产生“模型”,“模型”指导 “预测”。接下来我们把机器学习的过程与人类对历史经验归纳演绎的过程做个比对。 机器学习中的“训练”与“预测”过程可以对应到人类的“归纳”和“演绎”过程。通过这样的对应,我们可以发现,机器学习的思想并不复杂,仅仅是对人类在生活中学习成长的一个模拟。由于机器学习不是基于编程形成的结果,因此它的处理过程不是因果的逻辑,而是通过归纳思想得出的相关性结论。 人类对历史经验归纳过程 人类在成长、生活过程中积累了很多的历史与经验。人类定期地对这些经验进行“归纳”,获得了生活的“规律”。当人类遇到未知的问题或者需要对未来进行“推测”的时候,人类将使用这些“规律”,对未知问题与未来进行“演绎”,从而指导自己的生活和工作。 1.2 机器学习的应用范围 机器学习应用广泛,在各方面都有其施展的空间,包括:数据分析与挖掘、模式识别、虚拟助手和交通预测等。从行业来看,在金融领域(检测信用卡欺诈、证券市场分析等)、互联网领域(自然语言处理、语音识别、搜索引擎等)、医学领域、自动化及机器人领域(无人驾驶、信号处理等)、游戏领域、刑侦领域等也都有所涉及。 1.2.1 数据分析与挖掘 “数据挖掘”和”数据分析”通常被相提并论,但无论是数据分析还是数据挖掘,都是在帮助人们收集与分析数据,使之成为信息并做出推测与判断。因此可以将这两项合称为数据分析与挖掘。数据分析与挖掘是机器学习技术和大数据存储技术结合的产物,利用机器学习手段分析海量数据,同时利用数据存储机制实现数据的高效读写。机器学习在数据分析与挖掘领域中拥有无可取代的地位,2012年Hadoop进军机器学习领域就是一个很好的例子。 1.2.2 模式识别 模式识别的应用领域广泛,包括计算机视觉、医学图像分析、光学文字识别、自然语言处理、语音识别、手写识别、生物特征识别、文件分类、搜索引擎等,而这些领域也正是机器学习大展身手的舞台,因此模式识别与机器学习的关系越来越密切。 1.2.3 虚拟助手 Siri,Alexa,Google Now都是虚拟助手。在交互过程中,虚拟助手会协助查找信息,搜索相关历史行为,或向其他资源(如电话应用程序)发送命令收集更多信息,以满足人们提出的需求。 1.2.4 交通预测 生活中我们经常使用GPS导航服务,机器学习能够帮助我们预测交通堵塞。当前高德地图,腾讯地图等都应用了机器学习技术,识别拥挤路段,规划最优路线。 2 机器学习发展史 2.1 浅层学习阶段 1957年,Rosenblatt发明了感知机(Perceptron),是神经网络的雏形,同时也是支持向量机的基础,在当时引起了不小的轰动。 1959年,IBM的写出了可以学习的西洋棋程序,并在 IBM Journal of Research and Development期刊上发表了一篇名为《Some Studies in Machine Learning Using the Game of Checkers》的论文中,定义并解释了一个新词——机器学习(Machine Learning,ML)。将机器学习非正式定义为“在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域”。 1960年,Widrow发明了Delta学习规则,即如今的最小二乘问题,立刻被应用到感知机中,并且得到了一个极好的线性分类器。 1970年,Seppo Linnainmaa首次完整地叙述了自动链式求导方法(Automatic Differentiation,AD),是著名的反向传播算法(Back Propagation,BP)的雏形,但在当时并没有引起重视。 1974年,Werbos首次提出把BP算法的思想应用到神经网络,也就是多层感知机(Multilayer Perception,MLP),并在1982年实现,就是现在通用的BP算法,促成了第二次神经网络大发展。 1985-1986年,Rumelhart,Hinton等许多神经网络学者成功实现了实用的BP算法来训练神经网络,并在很长一段时间内BP都作为神经网络训练的专用算法。 1986年,J.R.Quinlan提出了另一个同样著名的ML算法—决策树算法(Iterative Dichotomiser 3,ID3),决策树作为一个预测模型,代表的是对象属性与对象值之间的一种映射关系,而且紧随其后涌现出了很多类似或者改进算法,如ID4,回归树,CART等。 1995年,Yan LeCun提出了卷积神经网络(Convolution Neural Network,CNN),受生物视觉模型的启发,通常有至少两个非线性可训练的卷积层,两个非线性的固定卷积层,模拟视觉皮层中的V1,V2,Simple cell和Complex cell,在手写字识别等小规模问题上,取得了当时世界最好结果,但是在大规模问题上表现不佳。 1995年,Vapnik和Cortes提出了强大的支持向量机(Support Vector Machine,SVM),主要思想是用一个分类超平面将样本分开从而达到分类效果,具有很强的理论论证和实验结果。至此,ML分为NN和SVM两派。 1997年,Freund和Schapire提出了另一个坚实的ML模型AdaBoost,该算法最大的特点在于组合弱分类器形成强分类器,可以形象地表述为:“三个臭皮匠赛过诸葛亮”,分类效果比其它强分类器更好。 2001年,随着核方法的提出,SVM大占上风,它的主要思想就是通过将低维数据映射到高维,从而实现线性可分。至此,SVM在很多领域超过了NN模型。除此之外,SVM还发展了一系列针对NN模型的基础理论,包括凸优化、范化间隔理论和核方法。 2001年,Breiman提出了一个可以将多个决策树组合起来的模型随机森林(Random Forest,RF),它可以处理大量的输入变量,有很高的准确度,学习过程很快,不会产生过拟合问题,具有很好的鲁棒性。 2001年,Hochreiter发现使用BP算法时,在NN单元饱和之后会发生梯度损失(梯度扩散)。简单来说就是训练NN模型时,超过一定的迭代次数后,容易过拟合。NN的发展一度陷入停滞状态。 2.2 深度学习阶段 二十一世纪初,学界掀起了以“深度学习”为名的热潮。所谓深度学习?狭义地说就是“很多层”的神经网络。在若干测试和竞赛上,尤其是涉及语音、图像等复杂对象的应用中,深度学习技术取得了优越性能。以往机器学习技术在应用中要取得好性能,对使用者的要求较高;而深度学习技术涉及的模型复杂度非常高,以至于只要下工夫“调参”,只要把参数调节好,性能往往就好。因此,深度学习虽缺乏严格的理论基础,但它显著降低了机器学习应用者的门槛,为机器学习技术走向工程实践带来了便利。那么它为什么此时才热起来呢?有两个原因,一是数据量增大了,二是计算能力强了。深度学习模型拥有大量参数,若数据样本少,则很容易“过拟合”。如此复杂的模型、如此大的数据样本,若缺乏强力计算设备,根本无法求解。恰恰人类进入了大数据时代,数据储量与计算设备都有了大发展,才使得深度学习技术又焕发一春。 2006年,Hinton和他的学生在《Nature》上发表了一篇深度置信网络(Deep Belief Network,DBN)的文章,从此开启了深度学习(Deep Learning,DL)阶段,掀起了深度神经网络即深度学习的浪潮。 2009年,微软研究院和Hinton合作研究基于深度神经网络的语音识别,历时两年取得成果,彻底改变了传统的语音识别技术框架,使得相对误识别率降低25%。 2012年,Hinton又带领学生在目前最大的图像数据库ImageNet上,基于深度神经网络对图分类问题取得了惊人的结果,将Top5错误率由26%大幅降低至15%。(ImageNet 是一个计算机视觉系统识别项目,是目前世界上图像识别最大的数据库。是美国斯坦福的计算机科学家,模拟人类的识别系统建立的。能够从图片识别物体。) 2012年,由人工智能和机器学习顶级学者Andrew Ng和分布式系统顶级专家Jeff Dean领衔的梦幻阵容,开始打造Google Brain项目,用包含16000个CPU核的并行计算平台训练超过10亿个神经元的深度神经网络,在语音识别和图像识别等领域取得了突破性的进展。该系统通过分析YouTube上选取的视频,采用无监督的方式训练深度神经网络,可将图像自动聚类。在系统中输入“cat”后,结果在没有外界干涉的条件下,识别出了猫脸。 2012年,微软首席研究官Rick Rashid在21世纪的计算大会上演示了一套自动同声传译系统,将他的英文演讲实时转换成与他音色相近、字正腔圆的中文演讲。同声传译需要经历语音识别、机器翻译、语音合成三个步骤。该系统一气呵成,流畅的效果赢得了一致认可,深度学习则是这一系统中的关键技术。 2013年,Google收购了一家叫DNN Research的神经网络初创公司,这家公司只有三个人,Geoffrey Hinton和他的两个学生。这次收购并不涉及任何产品和服务,只是希望Hinton可以将深度学习打造为支持Google未来的核心技术。同年,纽约大学教授,深度学习专家Yann LeCun加盟Facebook,出任人工智能实验室主任,负责深度学习的研发工作,利用深度学习探寻用户图片等信息中蕴含的海量信息,希望在未来能给用户提供更智能化的产品使用体验。 2013年,百度成立了百度研究院及下属的深度学习研究所(Institute of Deep Learning,IDL),将深度学习应用于语音识别和图像识别、检索,以及广告CTR预估(Click-Through-Rate Prediction,CTR),其中图片检索达到了国际领先水平。 2014年,谷歌宣布其首款成型的无人驾驶原型车制造完毕,将会在2015年正式进行路测。 2016年,谷歌旗下DeepMind公司开发的人工智能程序AlphaGo击败围棋职业九段选手李世石。 2017年,DeepMind团队公布了最强版AlphaGo,代号AlphaGo Zero,它能在无任何人类输入的条件下,从空白状态学起,自我训练的时间仅为3天,自我对弈的棋局数量为490万盘,能以100:0的战绩击败前辈。 3 易混淆领域梳理 3.1 机器学习与人工智能 人工智能(Artificial Intelligence,AI)是计算机科学的一个分支,它企图了解智能的本质,生产出一种能比肩人类,并做出智能反应的机器。我们都知道机器学习是人工智能最重要的一种实现方法,但机器学习并不是人工智能一开始就采用的方法。人工智能的发展主要经历了逻辑推理,专家系统,机器学习三个阶段。 第一阶段的重点是逻辑推理,例如数学定理的证明,这类方法采用符号逻辑来模拟人类智能。 第二阶段的重点是专家系统,这类方法为各个领域的问题建立专家知识库,利用这些知识来完成推理和决策。比如将医生的诊断经验转化成一个知识库,然后用这些知识对病人进行诊断。 第三阶段的重点即为机器学习,如今的人工智能主要依赖的不再是逻辑推理和专家系统,而是建立在机器学习的基础上解决复杂问题。无论是基于数学的机器学习模型,还是基于神经网络的深度学习模型,都活跃在如今大多数人工智能应用程序之中。 3.2 机器学习与深度学习 深度学习(Deep Learning,DL)是机器学习的一个重要分支,深度学习和机器学习的关系属于继承和发展的关系。在很多人工智能问题上,深度学习的方法加上大数据的出现以及计算机运行速度的提高,更突出了人工智能的前景。比如,自动驾驶汽车,足以彻底改变我们的出行方式,它的实现就需要深度学习的图像识别技术,需要用到卷积神经网络(Convolutional Neural Networks, CNN)来识别马路上的行人、红绿灯等。 为了更清晰的认识深度学习,我们首先介绍神经网络(Neural Networks, NN),顾名思义,它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。神经网络有输入层、隐藏层(中间层)以及输出层,其中输入层负责神经网络的输入,输出层负责产生输入的映射。机器学习中的逻辑回归,可以看作是一层的神经网络,即除了输入层、输出层之外只有一个隐藏层。 而深度学习,就是指神经网络使用了很多隐藏层。 那么深度学习的每一层都在学什么?? 当你输入一张脸部的照片时,神经网络的第一中间层,可以看成是一个特征探测器或者边缘探测器,它会去找这张照片的各个边缘(第一张图片);第二中间层又把照片里组成边缘的像素们放在一起看,然后它可以把被探测到的边缘组合成面部的不同部分(第二张图片),有眼睛、鼻子等;最后再把这些部分放在一起,比如鼻子眼睛嘴巴,就可以识别或者探测不同的人脸(第三张图片)。 3.3 机器学习与数据挖掘 数据挖掘(Data Mining,DM)是指从大量的数据中搜索隐藏于其中信息的过程。机器学习是数据挖掘的重要工具之一,但数据挖掘不仅仅要研究、拓展、应用一些机器学习方法,还要通过许多非机器学习技术解决大规模数据与数据噪音等实际问题。大体上看,数据挖掘可以视为机器学习和大数据的交叉,它主要利用机器学习提供的技术来分析海量数据,利用大数据技术来管理海量数据。 3.4 机器学习与统计学 1.统计学简述 统计学(Statistics)是基于数据构建概率统计模型并运用模型对数据进行分析与预测的一门学科。统计学依托背后的数学理论,在远早于机器学习大爆发的几十年,率先从解释因果的角度,努力寻找最优函数(或模型)。统计学里最重要的两个部分是回归分析和假设检验。其他的方法或者技术在统计学这个大框架下,最终也是为了这两者服务的。回归分析提供了解释因果的武器,假设检验则给这项武器装上了弹药。单纯的线性回归用最小二乘法求解逼近事实的真相,再使用显著性检验,检测变量的显著性、模型的显著性、模型的拟合精度。当然是否属于线性,也可以使用假设检验的方法检测。非线性回归的问题,使用极大似然估计或者偏最小二乘回归求解模型,后续的显著性检验仍然是一样的思路。 2.机器学习与统计学对比 统计学是个与机器学习高度重叠的学科,统计学近似等于机器学习。但是在某种程度上两者是有分别的,这个分别在于:统计学是理论驱动,对数据分布进行假设,以强大的数学理论解释因果,注重参数推断,侧重统计模型的发展与优化;机器学习是数据驱动,依赖于大数据规模预测未来,弱化了收敛性问题,注重模型预测,侧重解决问题。 3.5 机器学习算法与“普通”算法的异同 这里我们以《算法导论》中所诠释的算法作为机器学习算法的比较对象。其相同点,两者的目的都是通过制定目标,增加约束,求得最优的模型。不同点是《算法导论》里的“算法”,本质上是如何更有效率地求解具有精确解的问题。效率,可以是计算时间更短,也可以是计算过程所需要的空间更少。而机器学习算法要解决的问题一般没有精确解,也不能用穷举或遍历这种步骤明确的方法求解。这里需要强调的是“学习”这个属性,即希望算法本身能够根据给定的数据或变化的计算环境而动态地发现新的规律,甚至改变机器学习算法的逻辑和行为。 作者:京东物流 星火团队 来源:京东云开发者社区

优秀的个人博客,低调大师

Java-Sparrow —— 零依赖高性能的 Java 框架

sparrow 是一个全新的低耦合、0依赖的高性能 java 基础框架,它的名称源自中国俗语“麻雀虽小,但五脏俱全”。 有没有发现我们的工程代码其实很臃肿? 有没有发现我们依赖了很多没有用的jar包? 有没有发现在项目中因为jar 冲突而折腾很久? 有没有想过我只依赖jdk 就实现一个WEB工程? 有没有发现其实我们只需要一小块功能,而需要引入一个大框架? 有没有发现其实有些功能非常简单,而被框架限制了? 有没有发现其实有些功能原理不复杂,而框架实现很庞杂?因为不相信程序员! 有没有发现相似的框架提供的业务功能是一致的?但对外的接口是不同的?想不想统一? 有没有想过自己也实现一套JAVA-WEB 框架? 如果你也一样? 那么sparrow 非常适合你! 为此基于oop的基本思想,构建一层api,最大化的解耦。 框架特点 相信程序员 通过对原理有了更深入的了解,对写程序来讲会更简单,高效,很多框架之所以很重,很重要的一个原因是不相信程序员,这个框架从jdk出发,尽量不依赖第三方jar 包,让程序能跑起来,让程序更快。 从0开始 人脑思维是发散的,如果中间某个知识点断掉,可能就会产生知识盲点,这个盲点可能产生的影响很大的,尤其是技术更象是一层窗户纸,捅破了,简单,捅不破,如隔山。 所以我们从0开始,让知识连贯起来,消除盲点,不只让程序变得高效,更让程序员变得高效。 0依赖 框架实现最简单的,最核心的功能,尽量不依赖任何框架,包括spring。 解耦/隔离 sparrow模块 只定义了一些接口,具体实现在其他的模块中,是否依赖由业务端决定,最大化解耦。 扩展 遵循开闭原则,对业务提供扩展点。 项目架构及远期规划 架构中大部分功能已具基本的使用框架,但还需要进一步完善和优化,具体内容可查看架构详细介绍 jedis和rocket mq 客户端已具备基本的生产环境使用条件 其它模块还需进一步完善,欢迎有兴趣的小伙伴,一起加入 email:zh_harry#163.com Quick start cd sparrow-bom mvn clean install -Dmaven.test.skip cd .. mvn clean install -Dmaven.test.skip 项目demo演示 #13 sparrow 为保持代码整洁,所有的test 项目单独由一个sparrow-test 项目管理,该项目已有部分功能通过test case,朋友们可以下载了解sparrow 运行 测试用例 https://github.com/sparrowzoo/sparrow-shell/tree/master/sparrow-testcase 逐步完善中... 我们的愿景和未来 让程序员脱离spring, 也能写代码,而且更快,更优雅

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册