<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>3-深度学习 on 知予AI</title>
    <link>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/</link>
    <description>Recent content in 3-深度学习 on 知予AI</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 01 Jan 2017 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>深度学习概述</title>
      <link>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl1-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%A6%82%E8%BF%B0/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl1-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%A6%82%E8%BF%B0/</guid>
      <description>&lt;h3 id=&#34;表示学习&#34;&gt;表示学习&lt;/h3&gt;&#xA;&lt;p&gt;为了提高机器学习系统的准确率，需要将输入信息转换为有效的特征，或者更一般称为&lt;strong&gt;表示(representation)&lt;/strong&gt;。如果有一种算法可以自动地学习出有效的特征，并提高最终机器学习模型的性能，那么这种学习就是可以叫做&lt;strong&gt;表示学习(representation learning)&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;表示学习的关键是解决&lt;strong&gt;语义鸿沟(semantic gap)&lt;/strong&gt; 问题。语义鸿沟问题是指输入数据的底层特征和高层语义信息之间的不一致性和差异性。比如给定一些关于“车”的图片，由于图片中每辆车的颜色和形状等属性都不尽相同，不同图片在像素级别上的表示(即底层特征)差异性也会非常大。但是我们人理解这些图片是建立在比较抽象的高层语义概念上的。如果一个预测模型直接建立在底层特征之上，会导致对预测模型的能力要求过高。如果可以有一个好的表示在某种程度上可以反映出数据的高层语义特征，那么我们就可以相对容易地构建后续的机器学习模型。&lt;/p&gt;&#xA;&lt;p&gt;在表示学习中，有两个核心问题：一是“什么是一个好的表示”；二是“如何学习到好的表示”。&lt;/p&gt;&#xA;&lt;h4 id=&#34;局部表示和分布式表示&#34;&gt;局部表示和分布式表示&lt;/h4&gt;&#xA;&lt;p&gt;一般而言，一个好的表示具有以下几个优点：&lt;/p&gt;&#xA;&lt;p&gt;(1) 一个好的表示应该具有&lt;strong&gt;很强的表示能力&lt;/strong&gt;，即同样大小的向量可以表示更多信息。&lt;/p&gt;&#xA;&lt;p&gt;(2)  一个好的表示应该&lt;strong&gt;使后续的学习任务变得简单&lt;/strong&gt;，即需要包含更高层的语义信息。&lt;/p&gt;&#xA;&lt;p&gt;(3) 一个好的表示应该具有&lt;strong&gt;一般性&lt;/strong&gt;，是任务或领域独立的。&lt;/p&gt;&#xA;&lt;p&gt;在机器学习中，我们经常使用两种方式来表示特征：&lt;strong&gt;局部表示(local representation)和分布式表示(distributed representation)&lt;/strong&gt;。以颜色的表示为例，二者之间的区别如下：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200415201105676.png&#34; style=&#34;zoom:30%&#34;&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;局部表示通常可以表示为&lt;strong&gt;one-hot向量&lt;/strong&gt;的形式(只有一个维度为1，其他维度为0)。局部表示具有很好的解释性，方便人工进行特征总结，并通过特征组合进行高效的特征工程。通过多种特征组合得到的表示向量通常是稀疏的二值向量，当用于线性模型时计算效率非常高。但局部表示有两个不足之处：(1) one-hot向量的维数很高，且无法扩展。如果有一种新的颜色，就需要增加一维来表示；(2) &lt;strong&gt;不同颜色之间的相似度为0&lt;/strong&gt;，这样丢失了所有语义信息。&lt;/p&gt;&#xA;&lt;p&gt;和局部表示相比，分布式表示的表示能力要比局部表示强很多。分布式表示的向量维度一般都比较低，我们只需要用一个三维的稠密向量(例如RGB)就可以表示所有颜色。并且分布式表示也很容易表示新的颜色名。此外，不同颜色之间的相似度也很容易计算。&lt;/p&gt;&#xA;&lt;p&gt;我们可以使用神经网络来&lt;strong&gt;将高维的局部表示空间映射到一个非常低维的分布式表示空间&lt;/strong&gt;。在这个低维空间中，每个特征不再是坐标轴上的点，而是分散在整个低维空间中。在机器学习中，这个过程也称为&lt;strong&gt;嵌入(embedding)&lt;/strong&gt;。嵌入通常指将一个度量空间中的一些对象映射到另一个低维的度量空间中，并尽可能保持不同对象之间的拓扑关系。比如自然语言中词的分布式表示，也经常叫做&lt;strong&gt;词嵌入&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200415201736468.png&#34; style=&#34;zoom:30%&#34;&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;h4 id=&#34;表示学习-1&#34;&gt;表示学习&lt;/h4&gt;&#xA;&lt;p&gt;要学习到一种好的高层语义表示(一般为分布式表示)，通常需要从底层特征开始，经过多步非线性转换才能得到。&lt;/p&gt;&#xA;&lt;p&gt;一个&lt;strong&gt;深层结构&lt;/strong&gt;的优点是可以&lt;strong&gt;增加特征的重用性&lt;/strong&gt;，从而&lt;strong&gt;指数级地增加表示能力&lt;/strong&gt;。因此，表示学习的关键是构建具有一定深度的多层次特征表示。&lt;/p&gt;&#xA;&lt;p&gt;在传统的机器学习中，也有很多有关特征学习的方法，比如主成分分析、线性判别分析、独立成分分析等。但是传统的特征学习一般是通过人为地设计一些准则，然后根据这些准则来选取有效的特征。&lt;strong&gt;特征的学习和最终预测模型的学习分开进行&lt;/strong&gt;，因此学习到的特征不一定可以提升最终模型的性能。&lt;/p&gt;&#xA;&lt;h3 id=&#34;深度学习&#34;&gt;深度学习&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;深度学习(deep learning, DL)&lt;/strong&gt; 通过学习算法来让模型自动学习出好的特征表示(从底层特征，到中层特征，再到高层特征)，从而最终提升预测模型的准确率。&lt;strong&gt;所谓“深度”是指原始数据进行非线性特征转换的次数&lt;/strong&gt;。如果把一个表示学习系统看作是一个有向图结构，深度也可以看作是从输入节点到输出节点所经过的最长路径的长度。&lt;/p&gt;&#xA;&lt;p&gt;深度学习是将原始的数据特征通过多步的特征转换得到一种更高层次、更抽象的特征表示，并进一步输入到预测函数得到最终结果。这些学习到的表示可以代替人工设计的特征，从而避免“特征工程”。&lt;/p&gt;&#xA;&lt;p&gt;和“浅层学习”不同，深度学习需要解决的关键问题是&lt;strong&gt;贡献度分配问题(credit assignment problem, CAP)&lt;/strong&gt;，即一个系统中不同的&lt;strong&gt;组件(components)&lt;/strong&gt; 或其参数对最终系统输出结果的贡献或影响。&lt;strong&gt;目前深度学习主要以深度神经网络模型及反向传播算法为基础&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;下图展示了机器学习与深度学习数据处理流程的不同：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200415202513840.png&#34; style=&#34;zoom:35%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200415202541853.png&#34; style=&#34;zoom:35%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;在一些复杂任务中，传统机器学习方法需要将一个任务的输入和输出之间人为地切割成很多子模块(或多个阶段)，每个子模块分开学习。比如一个自然语言理解任务，一般需要分词、词性标注、句法分析、语义分析、语义推理等步骤。这种学习方式有两个问题：一是&lt;strong&gt;每一个模块都需要单独优化&lt;/strong&gt;，并且其优化目标和任务总体目标并不能保证一致。二是&lt;strong&gt;错误传播&lt;/strong&gt;，即前一步的错误会对后续造成很大的影响。这样增加了机器学习方法在实际应用的难度。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;端到端学习(end-to-end learning)&lt;/strong&gt;，也称端到端训练，是指在学习过程中不进行分模块或分阶段进行训练，直接优化任务的总体目标。在端到端学习中，一般不需要明确地给出不同模块或阶段的功能，中间过程不需要人为干预。端到端学习的训练数据为“输入-输出”对的形式，无需提供其它额外信息。因此，端到端学习和深度学习一样，都是要解决贡献度分配问题。目前，大部分采用神经网络模型的深度学习可以看作是一种端到端的学习。&lt;/p&gt;&#xA;&lt;h3 id=&#34;神经网络&#34;&gt;神经网络&lt;/h3&gt;&#xA;&lt;p&gt;随着神经科学、认知科学的发展，我们逐渐知道人类的智能行为都和大脑活动有关。人类大脑是一个可以产生意识、思想和情感的器官。受到人脑神经系统的启发，早期的神经科学家构造了一种模仿人脑神经系统的数学模型，称为&lt;strong&gt;人工神经网络&lt;/strong&gt;，简称&lt;strong&gt;神经网络&lt;/strong&gt;。在机器学习领域，神经网络是指由很多人工神经元构成的网络结构模型，这些人工神经元之间的连接强度是可学习的参数。&lt;/p&gt;&#xA;&lt;h4 id=&#34;人脑神经网络&#34;&gt;人脑神经网络&lt;/h4&gt;&#xA;&lt;p&gt;人类大脑是人体最复杂的器官，由神经元、神经胶质细胞、神经干细胞和血管组成。其中，&lt;strong&gt;神经元(neuron)&lt;/strong&gt;，也叫&lt;strong&gt;神经细胞(nerve cell)&lt;/strong&gt;，是携带和传输信息的细胞，是人脑神经系统中最基本的单元。人脑神经系统是一个非常复杂的组织，包含近860亿个神经元，每个神经元有上千个突触和其它神经元相连接。这些神经元和它们之间的连接形成巨大的复杂网络，其中神经连接的总长度可达数千公里。&lt;strong&gt;我们人造的复杂网络，比如全球的计算机网络，和大脑神经网络相比要“简单”得多&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;早在 1904 年，生物学家就已经发现了神经元的结构。典型的神经元结构大致可分为细胞体和细胞突起。&lt;/p&gt;&#xA;&lt;p&gt;**细胞体(soma)**中的神经细胞膜上有各种受体和离子通道，胞膜的受体可与相应的化学物质神经递质结合，引起离子通透性及膜内外电位差发生改变，产生相应的生理活动：兴奋或抑制。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;细胞突起&lt;/strong&gt;是由细胞体延伸出来的细长部分，又可分为树突和轴突。**树突(dendrite)**可以接收刺激并将兴奋传入细胞体。每个神经元可以有一或多个树突。&lt;strong&gt;轴突(axons)&lt;/strong&gt; 可以把自身的兴奋状态从胞体传送到另一个神经元或其他组织。每个神经元只有一个轴突。&lt;/p&gt;&#xA;&lt;p&gt;神经元可以接收其它神经元的信息，也可以发送信息给其它神经元。神经元间没有物理连接，中间有20纳米左右的缝隙。神经元之间靠&lt;strong&gt;突触(synapse)&lt;strong&gt;进行互联来传递信息，形成一个神经网络，即&lt;/strong&gt;神经系统&lt;/strong&gt;。突触可以理解为神经元之间的链接“接口”，将一个神经元的兴奋状态传到另一个神经元。一个神经元可被视为一种只有两种状态的细胞：&lt;strong&gt;兴奋和抑制&lt;/strong&gt;。神经元的状态取决于从其它的神经细胞收到的输入信号量，及突触的强度(抑制或加强)。当信号量总和超过了某个阈值时，细胞体就会兴奋，产生电脉冲。电脉冲沿着轴突并通过突触传递到其它神经元。下图给出了一种典型的神经元结构。&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200416101819316.png&#34; style=&#34;zoom:25%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;一个人的智力不完全由遗传决定，大部分来自于生活经验。也就是说，人脑神经网络是一个具有学习能力的系统。在人脑神经网络中，每个神经元本身并不重要，重要的是神经元如何组成连接。不同神经元之间的突触有强有弱，其强度是可以通过学习(训练)来不断改变的，具有一定的可塑性。&lt;strong&gt;赫布理论(Hebbian theory)&lt;/strong&gt; 提出，如果两个神经元总是相关联地受到刺激，它们之间的突触强度增加。这样的学习方法被称为赫布型学习(Hebbian learning)。赫布认为人脑有两种记忆：&lt;strong&gt;长期记忆和短期记忆&lt;/strong&gt;。短期记忆持续时间不超过一分钟。如果一个经验重复足够的次数，此经验就可储存在长期记忆中。短期记忆转化为长期记忆的过程就称为凝固作用。人脑中的&lt;strong&gt;海马区&lt;/strong&gt;为大脑结构&lt;strong&gt;凝固作用的核心区域&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h4 id=&#34;人工神经网络&#34;&gt;人工神经网络&lt;/h4&gt;&#xA;&lt;p&gt;人工神经网络是为模拟人脑神经网络而设计的一种计算模型，它从结构、实现机理和功能上模拟人脑神经网络。人工神经网络与生物神经元类似，由多个节点(人工神经元)互相连接而成，可以对数据之间的复杂关系进行建模。不同节点之间的连接被赋予了不同的权重，&lt;strong&gt;每个权重代表了一个节点对另一个节点的影响大小&lt;/strong&gt;。每个节点代表一种特定函数，来自其他节点的信息经过其相应的权重综合计算，输入到一个&lt;strong&gt;激活函数&lt;/strong&gt;中并得到一个新的活性值(兴奋或抑制)。&lt;strong&gt;从系统观点看，人工神经元网络是由大量神经元通过丰富和完善的连接而构成的自适应非线性动态系统&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;虽然我们可以比较容易地构造一个人工神经网络，但是如何让人工神经网络具有学习能力并不是一件容易的事情。早期的神经网络模型并不具备学习能力。&lt;strong&gt;首个可学习的人工神经网络是赫布网络&lt;/strong&gt;，采用一种基于赫布规则的无监督学习方法。感知器是最早的具有机器学习思想的神经网络，但其学习方法无法扩展到多层的神经网络上。直到 1980 年左右，&lt;strong&gt;反向传播算法&lt;/strong&gt;才有效地解决了多层神 经网络的学习问题，并成为最为流行的神经网络学习算法。&lt;/p&gt;&#xA;&lt;p&gt;人工神经网络诞生之初并非用来解决机器学习问题。人工神经网络可以看作是一个通用的函数逼近器，两层的神经网络可以逼近任意的函数，因此人工神经网络可以看作一个可学习的函数，并应用到机器学习中。理论上，只要有足够的训练数据和神经元数量，人工神经网络就可以学到很多复杂的函数。人工神经网络模型的塑造任何函数的能力大小可以称为&lt;strong&gt;网络容量(network capacity)&lt;/strong&gt;，与可被储存在网络中的信息的复杂度以及数量相关。&lt;/p&gt;&#xA;&lt;h4 id=&#34;神经网络的而发展历史&#34;&gt;神经网络的而发展历史&lt;/h4&gt;&#xA;&lt;h5 id=&#34;第一阶段模型提出&#34;&gt;第一阶段：模型提出&lt;/h5&gt;&#xA;&lt;p&gt;第一个阶段为1943~1969年，是神经网络发展的第一个高潮期。在此期间，科学家们提出了许多神经元模型和学习规则，例如Alan Turing提出的&lt;strong&gt;B型图灵机&lt;/strong&gt;(1948)、Rosenblatt提出的&lt;strong&gt;感知机(perceptron)&lt;/strong&gt;(1958)等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>神经网络</title>
      <link>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl2-%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl2-%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/</guid>
      <description>&lt;p&gt;&lt;strong&gt;人工神经网络(artificial neural network, ANN)&lt;/strong&gt; 是指一系列受生物学和神经科学启发的数学模型. 这些模型主要是通过对人脑的神经元网络进行抽象，构建&lt;strong&gt;人工神经元&lt;/strong&gt;，并按照一定拓扑结构来建立人工神经元之间的连接，来模拟生物神经网络。在人工智能领域，人工神经网络也常常简称为&lt;strong&gt;神经网络(neural network, NN)&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;神经网络最早是作为一种主要的&lt;strong&gt;连接主义模型&lt;/strong&gt;。20世纪80年代中后期，最流行的一种连接主义模型是&lt;strong&gt;分布式并行处理(parallel distributed processing, PDP)模型&lt;/strong&gt;，其有3个主要特性：(1) 信息表示是分布式的(非局部的)；(2) 记忆和知识是存储在单元之间的连接上；(3)通过逐渐改变单元之间的连接强度来学习新的知识。&lt;/p&gt;&#xA;&lt;p&gt;连接主义的神经网络有着多种多样的网络结构以及学习方法，虽然早期模型强调模型的&lt;strong&gt;生物可解释性(biological plausibility)&lt;/strong&gt;，但后期更关注于&lt;strong&gt;对某种特定认知能力的模拟&lt;/strong&gt;，比如物体识别、语言理解等. 尤其在引入误差反向传播来改进其学习能力之后，神经网络也越来越多地应用在各种机器学习任务上。随着训练数据的增多以及(并行)计算能力的增强，神经网络在很多机器学习任务上已经取得了很大的突破，特别是在语音、图像等感知信号的处理任务上，神经网络表现出了卓越的学习能力。&lt;/p&gt;&#xA;&lt;p&gt;目前受到关注的是采用&lt;strong&gt;误差反向传播&lt;/strong&gt;来进行学习的神经网络，即作为&lt;strong&gt;一种机器学习模型&lt;/strong&gt;的神经网络。从机器学习的角度来看，神经网络一般可以看作是一个&lt;strong&gt;非线性模型&lt;/strong&gt;，其基本组成单元为&lt;strong&gt;具有非线性激活函数的神经元&lt;/strong&gt;，通过大量神经元之间的连接，使得神经网络成为一种&lt;strong&gt;高度非线性的模型&lt;/strong&gt;。神经元之间的&lt;strong&gt;连接权重&lt;/strong&gt;就是&lt;strong&gt;需要学习的参数&lt;/strong&gt;，可以在机器学习的&lt;strong&gt;框架&lt;/strong&gt;下通过&lt;strong&gt;梯度下降&lt;/strong&gt;方法来进行学习。&lt;/p&gt;&#xA;&lt;h3 id=&#34;神经网络的基本结构&#34;&gt;神经网络的基本结构&lt;/h3&gt;&#xA;&lt;p&gt;神经网络的基本组成单位是&lt;strong&gt;神经元(neuron)&lt;/strong&gt;，如下所示：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200428203202172.png&#34; style=&#34;zoom:35%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;$$&#xD;&#xA;\begin{aligned}&#xD;&#xA;z &amp;=\sum_{d=1}^{D} w_{d} x_{d}+b \\&#xD;&#xA;&amp;=\boldsymbol{w}^{\text T} \boldsymbol{x}+b&#xD;&#xA;\end{aligned}&#xD;&#xA;$$&lt;p&gt;&#xA;其中$\boldsymbol{w}=[w_{1} ; w_{2} ; \cdots ; w_{D}] \in \mathbb{R}^{D}$是$D$维的&lt;strong&gt;权重(weight)&lt;strong&gt;向量，$b\in \mathbb R$是&lt;/strong&gt;偏置(bias)&lt;/strong&gt;。净输入$z$在经过一个非线性函数$f$后，得到神经元的&lt;strong&gt;激活值(activation)&lt;/strong&gt;$a=f(z)$，其中非线性函数$f$称为&lt;strong&gt;激活函数&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;与&lt;strong&gt;感知机(perceptron)&lt;strong&gt;相比，神经元的激活函数通常是&lt;/strong&gt;连续可导的函数&lt;/strong&gt;，而感知机的激活函数仅仅是在$x=0$处不可导的阶跃函数，用于将输出值进行二分，不需要进行反向梯度计算。&lt;/p&gt;&#xA;&lt;p&gt;到目前为止，研究者已经发明了各种各样的神经网络结构。目前常用的神经网络结构有以下三种：&lt;/p&gt;&#xA;&lt;p&gt;(1) &lt;strong&gt;前馈网络&lt;/strong&gt;：前馈网络中各个神经元按接收信息的先后分为不同的组。每一组可以看作一个&lt;strong&gt;神经层&lt;/strong&gt;。每一层中的神经元接收前一层神经元的输出，并输出到下一层神经元。整个网络中的信息是朝一个方向传播，没有反向的信息传播，可以用一个有向无环路图表示。前馈网络包括&lt;strong&gt;全连接前馈网络&lt;/strong&gt;和&lt;strong&gt;卷积神经网络&lt;/strong&gt;等。前馈网络可以看作一个函数，通过简单非线性函数的多次复合，实现输入空间到输出空间的复杂映射。这种网络结构简单，易于实现。&lt;/p&gt;&#xA;&lt;p&gt;(2) &lt;strong&gt;记忆网络&lt;/strong&gt;：也称反馈网络，网络中的神经元不但可以接收其他神经元的信息，也可以接收自己的历史信息。和前馈网络相比，记忆网络中的神经元具有记忆功能，在不同的时刻具有不同的状态。记忆神经网络中的信息传播可以是单向或双向传递，因此可用一个&lt;strong&gt;有向循环图或无向图&lt;/strong&gt;来表示。记忆网络包括&lt;strong&gt;循环神经网络&lt;/strong&gt;、&lt;strong&gt;Hopfield网络&lt;/strong&gt;、&lt;strong&gt;玻尔兹曼机&lt;/strong&gt;、&lt;strong&gt;受限玻尔兹曼机&lt;/strong&gt;等。记忆网络可以看作一个程序，具有更强的计算和记忆能力。为了增强记忆网络的记忆容量，可以引入外部记忆单元和读写机制，用来保存一些网络的中间状态，称为&lt;strong&gt;记忆增强神经网络(memory augmented neural network, MANN)&lt;/strong&gt;，比如&lt;strong&gt;神经图灵机&lt;/strong&gt;和&lt;strong&gt;记忆网络&lt;/strong&gt;等。&lt;/p&gt;&#xA;&lt;p&gt;(3) &lt;strong&gt;图网络&lt;/strong&gt;：前馈网络和记忆网络的输入都可以表示为向量或向量序列。但实际应用中很多数据是图结构的数据，比如知识图谱、社交网络、分子网络等。前馈网络和记忆网络很难处理图结构的数据。图网络是定义在图结构数据上的神经网络。图中每个节点都由一个或一组神经元构成。节点之间的连接可以是有向的，也可以是无向的。每个节点可以收到来自相邻节点或自身的信息.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;图网络是前馈网络和记忆网络的泛化&lt;/strong&gt;，包含很多不同的实现方式，比如&lt;strong&gt;图卷积网络(graph convolutional network, GCN)&lt;/strong&gt;、&lt;strong&gt;图注意力网络(graph attention network, GAT)&lt;/strong&gt;、&lt;strong&gt;消息传递神经网络(message passing neural network, MPNN)&lt;/strong&gt; 等。&lt;/p&gt;&#xA;&lt;p&gt;三种网络结构示意图如下所示：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200428224849253.png&#34; style=&#34;zoom:30%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;h3 id=&#34;激活函数&#34;&gt;激活函数&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;激活函数(activation function)&lt;/strong&gt; 的作用是为神经网络的传播过程增添非线性因素。为了增强网络的表示能力，激活函数需要具备以下几点性质：&lt;/p&gt;</description>
    </item>
    <item>
      <title>卷积神经网络</title>
      <link>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl3-%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl3-%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/</guid>
      <description>&lt;p&gt;&lt;strong&gt;卷积神经网络(convolutional neural network, CNN)&lt;/strong&gt; 是一种具有局部连接、权重共享等特性的前馈神经网络。&lt;/p&gt;&#xA;&lt;p&gt;卷积神经网络最早是主要用来处理图像信息。在用全连接前馈网络来处理图像时，会存在参数太多、局部特征不变形等缺陷。卷积神经网络利用&lt;strong&gt;局部连接、权重共享以及汇聚&lt;/strong&gt;三大结构上的特性，使得数据具有一定程度上的平移、缩放和旋转不变性。和前馈神经网络相比，卷积神经网络的参数更少。&lt;/p&gt;&#xA;&lt;p&gt;卷积神经网络主要使用在图像和视频分析的各种任务(如图像分类、人脸识别、物体识别、图像分割等)上，其准确率一般也远远超出了其它的神经网络模型。近年来卷积神经网络也广泛地应用到自然语言处理、推荐系统等领域。&lt;/p&gt;&#xA;&lt;h3 id=&#34;卷积&#34;&gt;卷积&lt;/h3&gt;&#xA;&lt;h4 id=&#34;一维卷积&#34;&gt;一维卷积&lt;/h4&gt;&#xA;$$&#xD;&#xA;\begin{aligned}&#xD;&#xA;y_{t} &amp;=1 \times x_{t}+1 / 2 \times x_{t-1}+1 / 4 \times x_{t-2} \\&#xD;&#xA;&amp;=w_{1} \times x_{t}+w_{2} \times x_{t-1}+w_{3} \times x_{t-2} \\&#xD;&#xA;&amp;=\sum_{k=1}^{3} w_{k} \cdot x_{t-k+1}&#xD;&#xA;\end{aligned}&#xD;&#xA;$$$$&#xD;&#xA;y_{t}=\sum_{k=1}^{m} w_{k} \cdot x_{t-k+1}&#xD;&#xA;$$&lt;p&gt;&#xA;写作&lt;strong&gt;向量形式&lt;/strong&gt;：$\boldsymbol{y}=\boldsymbol{w} \otimes \boldsymbol{x}$，其中$\otimes$表示卷积运算。当滤波器$w_k=1/m,1\leqslant k \leqslant m$时，卷积相当于信号序列的简单&lt;strong&gt;移动平均(moving average, MA)&lt;/strong&gt;，窗口大小为$m$。&lt;/p&gt;&#xA;&lt;p&gt;一般情况下滤波器的长度$m$远小于信号序列的长度$n$。下图为一维卷积的示意图：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200508144946346.png&#34; style=&#34;zoom:30%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;h4 id=&#34;二维卷积&#34;&gt;二维卷积&lt;/h4&gt;&#xA;$$&#xD;&#xA;y_{i j}=\sum_{u=1}^{m} \sum_{v=1}^{n} w_{u v} \cdot x_{i-u+1, j-v+1}&#xD;&#xA;$$&lt;p&gt;&#xA;下图给出了二维卷积的示例：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200508145402520.png&#34; style=&#34;zoom:30%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;&lt;strong&gt;均值滤波(mean filter)&lt;/strong&gt; 就是当前位置的像素值设为滤波器窗口中所有像素的平均值，也就是$w_{uv}=1/mn$。&lt;/p&gt;&#xA;&lt;p&gt;在图像处理中，卷积经常作为&lt;strong&gt;特征提取&lt;/strong&gt;的有效方法。一幅图像在经过卷积操作后得到结果称为&lt;strong&gt;特征映射(feature map)&lt;/strong&gt;。下图给出在图像处理中几种常用的滤波器，以及其对应的特征映射。图中最上面的滤波器是常用的&lt;strong&gt;高斯滤波器&lt;/strong&gt;，可以用来对图像进行&lt;strong&gt;平滑去噪&lt;/strong&gt;；中间和最下面的滤波器可以用来&lt;strong&gt;提取边缘特征&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>循环神经网络</title>
      <link>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl4-%E5%BE%AA%E7%8E%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl4-%E5%BE%AA%E7%8E%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/</guid>
      <description>&lt;h3 id=&#34;序列数据和语言模型&#34;&gt;序列数据和语言模型&lt;/h3&gt;&#xA;&lt;p&gt;全连接神经网络和卷积神经网络只能单独处理一个个的输入，&lt;strong&gt;前一个输入和后一个输入是完全没有关系的&lt;/strong&gt;。但是，某些任务需要能够更好的处理序列的信息，即前面的输入和后面的输入是有关系的。比如，当我们在理解一句话意思时，孤立的理解这句话的每个词是不够的，我们需要处理这些词连接起来的整个序列；当我们处理视频的时候，我们也不能只单独的去分析每一帧，而要&lt;strong&gt;分析这些帧连接起来的整个序列&lt;/strong&gt;。这时，就需要用到深度学习领域中另一类非常重要神经网络：&lt;strong&gt;循环神经网络(recurrent neural network)&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;RNN是在自然语言处理领域中最先被用起来的，比如，RNN可以为语言模型来建模。例如我们可以和电脑玩一个游戏，我们写出一个句子前面的一些词，然后，让电脑帮我们写下接下来的一个词。比如下面这句：&lt;strong&gt;我昨天上学迟到了，老师批评了__&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;语言模型是对一种语言的特征进行建模，它有很多很多用处。比如在&lt;strong&gt;语音转文本(STT)&lt;strong&gt;的应用中，&lt;strong&gt;声学模型输出&lt;/strong&gt;的结果，往往是若干个可能的候选词，这时候就需要语言模型来从这些候选词中选择一个最可能的。当然，它同样也可以用在&lt;/strong&gt;图像到文本的识别中(OCR)&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;使用RNN之前，语言模型主要是采用&lt;strong&gt;N-gram语言模型&lt;/strong&gt;。N可以是一个自然数，它的含义是，假设一个词出现的概率只与前面N个词相关。N-gram模型的缺陷是，&lt;strong&gt;当处理任意长度的句子，N设为多少都不合适&lt;/strong&gt;；另外，&lt;strong&gt;模型的大小和N的关系是指数级的&lt;/strong&gt;，4-gram模型会占用海量的存储空间。&lt;/p&gt;&#xA;&lt;p&gt;与传统语言模型不同的是，循环神经网络理论上可以往前看(往后看)任意多个词。&lt;/p&gt;&#xA;&lt;h3 id=&#34;网络结构&#34;&gt;网络结构&lt;/h3&gt;&#xA;$$\boldsymbol x_{1:T}=(\boldsymbol{x}_{1}, \boldsymbol{x}_{2}, \ldots, \boldsymbol{x}_{t}, \cdots, \boldsymbol{x}_{T})$$$$&#xD;&#xA;\boldsymbol{h}_{t}=f(\boldsymbol{h}_{t-1}, \boldsymbol{x}_{t})&#xD;&#xA;$$&lt;p&gt;&#xA;其中$\boldsymbol h_0=0$(&lt;strong&gt;即RNN隐藏层的初始值为0&lt;/strong&gt;)，$f(·)$为一个&lt;strong&gt;非线性函数&lt;/strong&gt;，也可以是一个&lt;strong&gt;前馈网络&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200715160758686.png&#34; style=&#34;zoom:25%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;循环层的基础结构如上图所示。循环神经网络可以看成一个&lt;strong&gt;动力系统(dynamic system)&lt;/strong&gt;，指&lt;strong&gt;系统状态&lt;/strong&gt;按照一定的规律&lt;strong&gt;随时间变化&lt;/strong&gt;的系统。具体地讲，动力系统是使用一个函数来描述一个给定空间中所有点随时间的变化情况。因此，隐藏层的活性值$\boldsymbol h_t$在很多文献上也称为&lt;strong&gt;状态(state)&lt;strong&gt;或&lt;/strong&gt;隐状态(hidden state)&lt;/strong&gt;。&lt;strong&gt;理论上，循环神经网络可以近似任意的非线性动力系统&lt;/strong&gt;。&lt;/p&gt;&#xA;$$&#xD;&#xA;\begin{aligned}&#xD;&#xA;\boldsymbol{z}_{t}&amp;=U \boldsymbol{h}_{t-1}+W \boldsymbol{x}_{t}+\boldsymbol{b} \\&#xD;&#xA;\boldsymbol{h}_{t}&amp;=f\left(\boldsymbol{z}_{t}\right)&#xD;&#xA;\end{aligned}&#xD;&#xA;$$$$&#xD;&#xA;\boldsymbol{h}_{t}=f(U \boldsymbol{h}_{t-1}+W \boldsymbol{x}_{t}+\boldsymbol{b})&#xD;&#xA;$$$$&#xD;&#xA;\boldsymbol{y}_{t}=V \boldsymbol{h}_{t}&#xD;&#xA;$$&lt;p&gt;&#xA;其中$V$是隐含层与输出层之间的连接权重。如果我们把每个时刻的状态都看作是前馈神经网络的一层，循环神经网络可以看作是&lt;strong&gt;在时间维度上权值共享的神经网络&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200715161457977.png&#34; style=&#34;zoom:25%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;&lt;strong&gt;循环神经网络的通用近似定理&lt;/strong&gt;：一个有&lt;strong&gt;足够数量的sigmoid型隐藏神经元&lt;/strong&gt;的循环神经网络，可以以任意的准确率去近似任何一个非线性动力系统。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;循环神经网络的图灵完备性&lt;/strong&gt;：所有的&lt;strong&gt;图灵机&lt;/strong&gt;都可以被一个由使用sigmoid型激活函数的神经元构成的全连接循环网络来进行模拟。因此，一个完全连接的循环神经网络可以近似解决所有的可计算问题。&lt;/p&gt;&#xA;&lt;h3 id=&#34;循环神经网络的应用&#34;&gt;循环神经网络的应用&lt;/h3&gt;&#xA;&lt;p&gt;根据不同的任务特点，循环神经网络的应用可以分为如下几种模式：&lt;/p&gt;&#xA;&lt;p&gt;(1) &lt;strong&gt;序列到类别模式(文本分类、情感分析等)&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200715161712903.png&#34; style=&#34;zoom:25%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;(2) &lt;strong&gt;同步的序列到序列模式(序列标注等)&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200715161731143.png&#34; style=&#34;zoom:25%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;(3) &lt;strong&gt;异步的序列到序列模式(机器翻译、对话系统等)&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200715161812090.png&#34; style=&#34;zoom:25%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;h3 id=&#34;循环神经网络的训练&#34;&gt;循环神经网络的训练&lt;/h3&gt;&#xA;&lt;p&gt;循环神经网络的参数可以通过梯度下降方法来进行学习。&lt;/p&gt;&#xA;$$&#xD;&#xA;\mathcal{L}_{t}=\mathcal{L}(y_{t}, g(\boldsymbol{h}_{t}))&#xD;&#xA;$$$$&#xD;&#xA;\mathcal{L}=\sum_{t=1}^{T} \mathcal{L}_{t}&#xD;&#xA;$$$$&#xD;&#xA;\frac{\partial \mathcal{L}}{\partial U}=\sum_{t=1}^{T} \frac{\partial \mathcal{L}_{t}}{\partial U}&#xD;&#xA;$$&lt;p&gt;&#xA;即每个时刻损失$\mathcal L_t$对参数$U$的偏导数之和。&lt;/p&gt;</description>
    </item>
    <item>
      <title>神经网络的优化</title>
      <link>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl5-%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E7%9A%84%E4%BC%98%E5%8C%96/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl5-%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E7%9A%84%E4%BC%98%E5%8C%96/</guid>
      <description>&lt;h3 id=&#34;网络优化的难点&#34;&gt;网络优化的难点&lt;/h3&gt;&#xA;&lt;h4 id=&#34;网络结构多样性&#34;&gt;网络结构多样性&lt;/h4&gt;&#xA;&lt;p&gt;神经网络的种类非常多，比如卷积网络、循环网络等，其结构也非常不同。有些比较深，有些比较宽。不同参数在网络中的作用也有很大的差异，比如连接权重和偏置的不同，以及循环网络中循环连接上的权重和其它权重的不同。由于网络结构的多样性，我们很难找到一种通用的优化方法。&lt;strong&gt;不同的优化方法在不同网络结构上的差异也都比较大&lt;/strong&gt;。此外，网络的超参数一般也比较多，这也给优化带来很大的挑战。&lt;/p&gt;&#xA;&lt;h4 id=&#34;高维变量的非凸优化&#34;&gt;高维变量的非凸优化&lt;/h4&gt;&#xA;&lt;p&gt;低维空间的非凸优化问题主要是存在一些局部最优点。基于梯度下降的优化方法会陷入局部最优点，因此低维空间非凸优化的主要难点是如何选择初始化参数和逃离局部最优点。深度神经网络的参数非常多，其参数学习是在非常高维空间中的非凸优化问题，其挑战和在低维空间的非凸优化问题有所不同。在高维空间中，非凸优化的难点并不在于如何逃离局部最优点，而是如何逃离&lt;strong&gt;鞍点(saddle point)&lt;/strong&gt;。鞍点的叫法是因为其形状像马鞍。鞍点的梯度是0，但是在一些维度上是最高点，在另一些维度上是最低点。&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200613202435836.png&#34; style=&#34;zoom:25%;&#34; /&gt;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;在高维空间中，局部最优点要求&lt;strong&gt;在每一维度上都是最低点&lt;/strong&gt;，&lt;strong&gt;这种概率非常低&lt;/strong&gt;。假设网络有10,000维参数，一个点在某一维上是局部最低点的概率为$p$，那么在整个参数空间中，局部最优点的概率为$p^{10,000}$，这种可能性非常小。也就是说&lt;strong&gt;高维空间中，大部分梯度为0的点都是鞍点&lt;/strong&gt;。基于梯度下降的优化方法会&lt;strong&gt;在鞍点附近接近于停滞&lt;/strong&gt;，同样很难从这些鞍点中逃离。&lt;/p&gt;&#xA;&lt;p&gt;深度神经网络的参数非常多，并且冗余性很高，这使得每个参数对最终损失的影响都比较小，这导致了损失函数在局部最优点附近是一个平坦的区域，称为&lt;strong&gt;平坦最小值(flat minima)&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200613202647979.png&#34; style=&#34;zoom:30%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;目前，深度神经网络的参数学习主要是通过梯度下降法来寻找一组可以最小化结构风险的参数。在具体实现中，梯度下降法可以分为&lt;strong&gt;批量梯度下降、随机梯度下降以及小批量梯度下降&lt;/strong&gt;三种形式。除了在收敛效果和效率上的差异，这三种方法都存在一些共同的问题，比如&lt;strong&gt;如何改进优化算法、如何初始化参数、如何预处理数据等&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;优化算法&#34;&gt;优化算法&lt;/h3&gt;&#xA;&lt;h4 id=&#34;小批量梯度下降&#34;&gt;小批量梯度下降&lt;/h4&gt;&#xA;&lt;p&gt;在训练深度神经网络时，训练数据的规模通常都比较大。如果在梯度下降时，每次迭代都要计算整个训练数据上的梯度，这就需要比较多的计算资源。另外大规模训练集中的数据通常会非常冗余，也没有必要在整个训练集上计算梯度。因此，在训练深度神经网络时，经常使用&lt;strong&gt;小批量梯度下降法(mini-batch gradient descent)&lt;/strong&gt;，即&lt;strong&gt;仅在训练集中选择一个较小的子集来更新梯度&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;影响小批量梯度下降法的因素有：(1) 批量大小$K$；(2) 学习率$\alpha$；(3) 梯度估计。为了更有效地训练深度神经网络，在标准的小批量梯度下降法的基础上，也经常使用一些改进方法以加快优化速度，比如如何&lt;strong&gt;选择批量大小&lt;/strong&gt;、如何&lt;strong&gt;调整学习率&lt;/strong&gt;以及如何&lt;strong&gt;修正梯度估计&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h4 id=&#34;批量大小选择&#34;&gt;批量大小选择&lt;/h4&gt;&#xA;&lt;p&gt;在小批量梯度下降法中，&lt;strong&gt;批量大小(batch size)&lt;/strong&gt; 对网络优化的影响非常大。一般而言，&lt;strong&gt;批量大小不影响随机梯度的期望，但是会影响随机梯度的方差&lt;/strong&gt;。批量大小越大，随机梯度的&lt;strong&gt;方差越小&lt;/strong&gt;，引入的噪声也越小，训练也越稳定，因此可以设置&lt;strong&gt;较大的学习率&lt;/strong&gt;。批量大小较小时，需要设置较小的学习率，否则模型会&lt;strong&gt;不收敛&lt;/strong&gt;。学习率通常要随着批量大小的增大而相应地增大。一个简单有效的方法是&lt;strong&gt;线性缩放规则&lt;/strong&gt;：当批量大小增加$m$倍时，学习率也增加$m$倍。线性缩放规则往往在批量大小较小时适用，当批量大小非常大时，线性缩放会使训练不稳定。&lt;/p&gt;&#xA;&lt;p&gt;下图给出了从epoch(回合)和iteration(更新次数)的角度，批量大小对损失下降的影响：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200613203340367.png&#34; style=&#34;zoom:35%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200613203411932.png&#34; style=&#34;zoom:35%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;从epoch图可以看出，可以看出，&lt;strong&gt;批量样本数越小，适当小的批量大小会导致更快的收敛&lt;/strong&gt;；从iteration图可以看出，&lt;strong&gt;批量大小越大，下降效果越明显，并且下降曲线越平滑&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h4 id=&#34;学习率调整&#34;&gt;学习率调整&lt;/h4&gt;&#xA;&lt;p&gt;学习率是神经网络优化时的重要超参数。在梯度下降法中，学习率的取值非常关键，如果&lt;strong&gt;过大就不会收敛&lt;/strong&gt;，如果&lt;strong&gt;过小则收敛速度太慢&lt;/strong&gt;。常用的学习率调整方法包括&lt;strong&gt;学习率衰减、学习率预热、周期性学习率调整&lt;/strong&gt;以及一些&lt;strong&gt;自适应调整学习率的方法&lt;/strong&gt;，如&lt;strong&gt;AdaGrad、RMSprop、AdaDelta&lt;/strong&gt;等。自适应学习率方法可针对每个参数设置不同的学习率。&lt;/p&gt;&#xA;&lt;h5 id=&#34;学习率衰减&#34;&gt;学习率衰减&lt;/h5&gt;&#xA;&lt;p&gt;从经验上看，学习率在一开始要保持大些来保证收敛速度，在收敛到最优点附近时要小些以避免来回震荡。简单的学习率调整可通过&lt;strong&gt;学习率衰减(learning rate decay)&lt;strong&gt;来实现，也称为&lt;/strong&gt;学习率退火(learning rate annealing)&lt;/strong&gt;。不失一般性，衰减方式设置为&lt;strong&gt;按迭代次数进行衰减&lt;/strong&gt;。假设初始化学习率为$\alpha_0$，在第$t$次迭代时的学习率$\alpha_t$，衰减率一般用$\beta$表示。常见的衰减方法有以下几种：&lt;/p&gt;&#xA;&lt;p&gt;(1) &lt;strong&gt;分段常数衰减(piecewise constant decay)&lt;/strong&gt;：每经过$T_1,T_2,\cdots$次迭代将学习率衰减为原来的$\beta_1,\beta_2,\cdots$倍，其中$T_i和$$\beta_i$为根据经验设置的超参数。分段常数衰减也称为&lt;strong&gt;步衰减(step decay)&lt;/strong&gt;。&lt;/p&gt;&#xA;$$&#xD;&#xA;\alpha_{t}=\alpha_{0} \frac{1}{1+\beta \times t}&#xD;&#xA;$$$$&#xD;&#xA;\alpha_{t}=\alpha_{0} \beta^{t}&#xD;&#xA;$$$$&#xD;&#xA;\alpha_{t}=\alpha_{0} \exp (-\beta \times t)&#xD;&#xA;$$$$&#xD;&#xA;\alpha_{t}=\frac{1}{2} \alpha_{0}\left(1+\cos \left(\frac{t \pi}{T}\right)\right)&#xD;&#xA;$$&lt;p&gt;&#xA;下图给出了不同衰减方法的示例(假设&lt;strong&gt;初始学习率为1&lt;/strong&gt;)。&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200613204216218.png&#34; style=&#34;zoom:35%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;h5 id=&#34;学习率预热&#34;&gt;学习率预热&lt;/h5&gt;&#xA;&lt;p&gt;在小批量梯度下降法中，当批量大小的设置比较大时，通常需要比较大的学习率。但在刚开始训练时，由于参数是随机初始化的，梯度往往也比较大，再加上比较大的初始学习率，会使得训练不稳定。为了提高训练稳定性，我们可以&lt;strong&gt;在最初几轮迭代时，采用比较小的学习率&lt;/strong&gt;，等梯度下降到一定程度后再恢复到初始的学习率，这种方法称为&lt;strong&gt;学习率预热(learning rate warmup)&lt;/strong&gt;。&lt;/p&gt;&#xA;$$&#xD;&#xA;\alpha_{t}^{\prime}=\frac{t}{T^{\prime}} \alpha_{0}, \quad 1 \leq t \leq T^{\prime}&#xD;&#xA;$$&lt;p&gt;&#xA;&lt;strong&gt;当预热过程结束，再选择一种学习率衰减方法来逐渐降低学习率&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>自编码器</title>
      <link>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl6-%E8%87%AA%E7%BC%96%E7%A0%81%E5%99%A8/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl6-%E8%87%AA%E7%BC%96%E7%A0%81%E5%99%A8/</guid>
      <description>&lt;h3 id=&#34;自编码器&#34;&gt;自编码器&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;自编码器(auto-encoder, AE)&lt;/strong&gt; 是通过&lt;strong&gt;无监督&lt;/strong&gt;的方式来学习&lt;strong&gt;一组数据的有效编码(或表示)&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;假设有一组$d$维的样本$\boldsymbol{x}^{(n)} \in \mathbb{R}^{d}, 1 \leqslant n \leqslant N$，自编码器将这组数据映射到$p$维的&lt;strong&gt;特征空间&lt;/strong&gt;得到每个样本的编码$\boldsymbol{z}^{(n)} \in \mathbb{R}^{p}, 1 \leqslant n \leqslant N$，并且希望&lt;strong&gt;这组编码可以重构出原来的样本&lt;/strong&gt;。自编码器的结构可分为两部分：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;编码器(encoder)&lt;/strong&gt;：$f:\mathbb R^d \rightarrow \mathbb R^p$；&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;解码器(decoder)&lt;/strong&gt;：$g:\mathbb R^p \rightarrow \mathbb R^d$。&lt;/p&gt;&#xA;$$&#xD;&#xA;\begin{aligned}&#xD;&#xA;\mathcal{L} &amp;=\sum_{n=1}^{N}\|\boldsymbol{x}^{(n)}-g(f(\boldsymbol{x}^{(n)}))\|^{2} \\&#xD;&#xA;&amp;=\sum_{n=1}^{N}\|\boldsymbol{x}^{(n)}-f \circ g(\boldsymbol{x}^{(n)})\|^{2}&#xD;&#xA;\end{aligned}&#xD;&#xA;$$&lt;p&gt;&#xA;如果特征空间的维度$p$小于原始空间的维度$d$，自编码器相当于是一种降维或特征抽取方法。如果$p \geqslant d$，一定可以找到一组或多组解使得$f \circ g$为&lt;strong&gt;单位函数(identity function)&lt;/strong&gt;$I(x)=x$，并使得重构错误为0。然而，这样的解并没有太多的意义。但是，如果再加上一些附加的约束，就可以得到一些有意义的解，比如编码的稀疏性、取值范围，$f$和$g$的具体形式等。如果我们让编码只能取个$k$不同的值($k &amp;lt; N$)，那么自编码器就成为一个$k$类的&lt;strong&gt;聚类问题&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;最简单的自编码器是如下图所示的两层神经网络。输入层到隐藏层用来编码，隐藏层到输出层用来解码，层与层之间互相全连接。&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20200806104330514.png&#34; style=&#34;zoom:25%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;我们使用自编码器是为了得到有效的数据表示，因此在训练结束后，&lt;strong&gt;一般会去掉解码器，只保留编码器&lt;/strong&gt;。编码器的输出可以直接作为后续机器学习模型的输入。&lt;/p&gt;&#xA;&lt;h3 id=&#34;稀疏自编码器&#34;&gt;稀疏自编码器&lt;/h3&gt;&#xA;&lt;p&gt;自编码器除了可以学习低维编码之外，也能够学习&lt;strong&gt;高维的稀疏编码&lt;/strong&gt;。假设中间隐藏层$\boldsymbol z$的维度$p$大于输入样本$\boldsymbol x$的维度$d$，并且让$\boldsymbol z$尽量系数，这就是&lt;strong&gt;稀疏自编码器(sparse auto-encoder, SAE)&lt;/strong&gt;。稀疏自编码器的优点是有很高的可解释性，并同时进行了&lt;strong&gt;隐式的特征选择&lt;/strong&gt;。通过给自编码器中隐藏层单元$\boldsymbol z$加上稀疏性限制，自编码器可以学习到数据中一些有用的结构。给定$N$个训练样本${\boldsymbol{x}^{(n)}}_{n=1}^{N}$，稀疏自编码器的目标函数为：&lt;/p&gt;&#xA;$$&#xD;&#xA;\mathcal{L}=\sum_{n=1}^{N} \| \boldsymbol{x}^{(n)}-\boldsymbol{x}^{\prime (n)}\|^{2}+\eta \rho(Z)+\lambda\| W \|^{2}&#xD;&#xA;$$&lt;p&gt;&#xA;其中$Z=[\boldsymbol{z}^{(1)}, \cdots, \boldsymbol{z}^{(N)}]$表示所有训练样本的编码，$\rho(Z)$为稀疏性度量函数，$W$表示自编码器中的参数。$\rho(Z)$可以定义为一组训练样本中每一个神经元激活的概率。&lt;/p&gt;</description>
    </item>
    <item>
      <title>深度生成模型</title>
      <link>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl7-%E6%B7%B1%E5%BA%A6%E7%94%9F%E6%88%90%E6%A8%A1%E5%9E%8B/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl7-%E6%B7%B1%E5%BA%A6%E7%94%9F%E6%88%90%E6%A8%A1%E5%9E%8B/</guid>
      <description>&lt;h3 id=&#34;概率生成模型&#34;&gt;概率生成模型&lt;/h3&gt;&#xA;&lt;p&gt;概率生成模型，简称&lt;strong&gt;生成模型(generative model)&lt;/strong&gt;，是概率统计和机器学习中的一类重要模型，指一系列用于&lt;strong&gt;随机生成&lt;/strong&gt;可观测数据的模型。假设在一个连续的或离散的高维空间$\mathcal X$中，存在一个随机向量$\boldsymbol X$服从一个未知的数据分布$p_r(\boldsymbol x),\boldsymbol x \in \mathcal X$。生成模型是根据一些可观测的样本$\boldsymbol x^{(1)},\boldsymbol x^{(2)},\cdots,\boldsymbol x^{(N)}$来学习一个参数化的模型$p_\theta(\boldsymbol x)$来近似未知分布$p_r(\boldsymbol x)$，并可以用这个模型来生成一些样本，使得&lt;strong&gt;生成样本和真实样本尽可能地相似&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;自然情况下， 直接建模$p_r(\boldsymbol x)$比较困难。&lt;strong&gt;深度生成模型&lt;/strong&gt;就是利用&lt;strong&gt;深度神经网络可以近似任意函数&lt;/strong&gt;的能力来建模一个复杂的分布$p_r(\boldsymbol x)$。假设一个随机向量$\boldsymbol Z$服从一个简单的分布$p(\boldsymbol z),z \in \mathcal Z$(例如标准正态分布)，我们使用一个深度神经网络$g: \mathcal Z \rightarrow \mathcal X$，并使得$g(\boldsymbol z)$服从$p_r(\boldsymbol x)$。&lt;/p&gt;&#xA;&lt;p&gt;生成模型一般具有两个功能：&lt;strong&gt;密度估计&lt;/strong&gt;和&lt;strong&gt;样本生成&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;给定一组数据$\mathcal D={\boldsymbol x^{(i)}}, 1 \leqslant i \leqslant N$，假设它们都是独立地匆匆相同的概率密度函数为$p_r(\boldsymbol x)$的未知分布中产生的。**概率密度估计(probabilistic density estimation)**是根据数据集$\mathcal D$来估计其概率密度函数$p_\theta(\boldsymbol x)$。在机器学习中，概率密度估计是一种非常典型的无监督学习问题。如果要建模的分布包含隐变量(如高斯混合模型)，就需要利用EM算法来进行密度估计。&lt;/p&gt;&#xA;&lt;p&gt;生成样本就是给定义一个概率密度函数为$p_\theta(\boldsymbol x)$的分布，生成一些服从这个分布的样本，也称为采样。对于一个概率生成模型，在得到两个变量的局部条件概率$p_\theta(\boldsymbol z)$和$p_\theta(\boldsymbol x|\boldsymbol z)$之后，我们就可以生成数据$\boldsymbol x$。具体地，首先根据隐变量的先验分布$p_\theta(\boldsymbol z)$进行采样，得到样本$\boldsymbol z$，然后根据条件分布$p_\theta(\boldsymbol x|\boldsymbol z)$进行采样，得到$\boldsymbol x$。因此，在生成模型中，&lt;strong&gt;重点是估计条件分布&lt;/strong&gt;$p(\boldsymbol x|\boldsymbol z;\theta)$。&lt;/p&gt;&#xA;&lt;h3 id=&#34;变分自编码器&#34;&gt;变分自编码器&lt;/h3&gt;&#xA;&lt;p&gt;假设一个生成模型中包含隐变量，即部分变量不可观测，如下图所示，其中观测变量$\boldsymbol X$是一个高维空间$\mathcal X$中的随机向量，隐变量$\boldsymbol Z$是一个相对低维空间$\mathcal Z$中的随机向量。例如，对于手写数字识别任务，$\boldsymbol X$是数字矩阵(28*28维)，而$\boldsymbol Z$是数字的具体值(10维)。&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20211227111340078.png&#34; style=&#34;zoom:40%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;该生成模型的联合概率密度函数可以分解为：$p(\boldsymbol{x}, \boldsymbol{z} ; \theta)=p(\boldsymbol{x} | \boldsymbol{z} ; \theta) p(\boldsymbol{z} ; \theta)$。其中$p(\boldsymbol{z} ; \theta)$为隐变量$\boldsymbol z$先验分布的概率密度函数，$p(\boldsymbol{x} | \boldsymbol{z} ; \theta)$为已知$\boldsymbol z$时观测变量$\boldsymbol x$的条件概率密度函数，$\theta$表示两个密度函数的参数。一般情况下，我们可以假设这两个概率密度函数为某种参数化的分布族，例如正态分布，然后通过最大似然估计得到参数$\theta$。&lt;/p&gt;</description>
    </item>
    <item>
      <title>注意力机制与外部记忆</title>
      <link>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl8-%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6%E4%B8%8E%E5%A4%96%E9%83%A8%E8%AE%B0%E5%BF%86/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl8-%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6%E4%B8%8E%E5%A4%96%E9%83%A8%E8%AE%B0%E5%BF%86/</guid>
      <description>&lt;p&gt;根据通用近似定理，前馈网络和循环网络都有很强的能力。但由于优化算法和计算能力的限制，在实践中很难达到通用近似的能力。特别是在处理复杂任务时，比如需要处理大量的输入信息或者复杂的计算流程时，目前计算机的计算能力依然是限制神经网络发展的瓶颈。&lt;/p&gt;&#xA;&lt;p&gt;为了减少计算复杂度，通过部分借鉴生物神经网络的一些机制，我们引入了局部连接、权重共享以及汇聚操作来简化神经网络结构。虽然这些机制可以有效缓解模型的复杂度和表达能力之间的矛盾，但是我们依然希望&lt;strong&gt;在不过度增加模型复杂度(主要是模型参数)的情况下来提高模型的表达能力&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;神经网络中可以存储的信息量称为&lt;strong&gt;网络容量(network capacity)&lt;/strong&gt;。一般来讲，利用一组神经元来存储信息时，其存储容量和神经元的数量以及网络的复杂度成正比。如果要存储越多的信息，神经元数量就要越多或者网络要越复杂，进而导致神经网络的参数成倍地增加。&lt;/p&gt;&#xA;&lt;p&gt;人脑的生物神经网络同样存在网络容量问题，工作记忆大概只有几秒钟的时间，类似于循环神经网络中的隐状态。而人脑每个时刻接收的外界输入信息非常多，包括来自于视觉、听觉、触觉的各种各样的信息。单就视觉来说，眼睛每秒钟都会发送千万比特的信息给视觉神经系统。人脑在有限的资源下，并不能同时处理这些过载的输入信息。大脑神经系统有两个重要机制可以解决信息过载问题：&lt;strong&gt;注意力(attention)&lt;/strong&gt; 和&lt;strong&gt;记忆(memory)&lt;/strong&gt; 机制。注意力机制通过自上而下的信息选择机制来过滤掉大量的无关信息；记忆机制引入额外外部记忆，优化神经网络的记忆结构来提高神经网络存储信息的容量。&lt;/p&gt;&#xA;&lt;h3 id=&#34;注意力&#34;&gt;注意力&lt;/h3&gt;&#xA;&lt;h4 id=&#34;认知神经学中的注意力&#34;&gt;认知神经学中的注意力&lt;/h4&gt;&#xA;&lt;p&gt;注意力是一种人类不可或缺的复杂认知功能，指人可以在关注一些信息的同时忽略另一些信息的选择能力。在日常生活中，我们通过视觉、听觉、触觉等方式接收大量的感觉输入。但是人脑还能在这些外界的信息轰炸中有条不紊地工作，是因为人脑可以有意或无意地从这些大量输入信息中&lt;strong&gt;选择小部分的有用信息来重点处理&lt;/strong&gt;，并忽略其他信息。这种能力就叫做注意力。注意力可以作用在外部的刺激(听觉、视觉、味觉等)，也可以作用在内部的意识(思考、回忆等)。注意力一般分为两种：&lt;/p&gt;&#xA;&lt;p&gt;一种是&lt;strong&gt;自上而下的有意识的注意力&lt;/strong&gt;，称为&lt;strong&gt;聚焦式注意力(focus attention)&lt;/strong&gt;。聚焦式注意力是指有预定目的、依赖任务的，主动有意识地聚焦于某一对象的注意力。&lt;/p&gt;&#xA;&lt;p&gt;另一种是&lt;strong&gt;自下而上的无意识的注意力&lt;/strong&gt;，称为&lt;strong&gt;基于显著性的注意力(saliency based attention)&lt;/strong&gt;。基于显著性的注意力是由外界刺激驱动的注意，不需要主动干预，也和任务无关。&lt;strong&gt;如果一个对象的刺激信息不同于其周围信息，一种无意识的“赢者通吃”(winner-take-all)或者门控(gating)机制就可以把注意力转向这个对象&lt;/strong&gt;。不管这些注意力是有意还是无意，大部分的人脑活动都需要依赖注意力，比如记忆信息、阅读或思考等。&lt;/p&gt;&#xA;&lt;p&gt;一个和注意力有关的例子是&lt;strong&gt;鸡尾酒会效应&lt;/strong&gt;。当一个人在吵闹的鸡尾酒会上和朋友聊天时，尽管周围噪音干扰很多，他还是可以听到朋友的谈话内容，而&lt;strong&gt;忽略其他人的声音(聚焦式注意力)&lt;/strong&gt;。同时，如果未注意到的背景声中有重要的词(比如他的名字)，&lt;strong&gt;他会马上注意到(显著性注意力)&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;聚焦式注意力一般会随着环境、情景或任务的不同而选择不同的信息。比如当要从人群中寻找某个人时，我们会专注于每个人的&lt;strong&gt;脸部&lt;/strong&gt;；而当要统计人群的人数时，我们只需要专注于每个人的&lt;strong&gt;轮廓&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h4 id=&#34;人工神经网络中的注意力&#34;&gt;人工神经网络中的注意力&lt;/h4&gt;&#xA;&lt;p&gt;用$X = [\boldsymbol x_1, \cdots, \boldsymbol x_N]$表示$N$组输入信息，其中每个向量$\boldsymbol x_i$都表示一组输入信息。为了节省计算资源，不需要将所有信息都输入到神经网络，只需要从$X$中选择一些和任务相关的信息。&lt;strong&gt;注意力机制的计算可以分为两步：一是在所有输入信息上计算注意力分布，二是根据注意力分布来计算输入信息的加权平均&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;(1) 注意力分布&lt;/p&gt;&#xA;&lt;p&gt;为了从$N$个输入向量$X = [\boldsymbol x_1, \cdots, \boldsymbol x_N]$中选择出和某个特定任务相关的信息，我们需要引入一个&lt;strong&gt;和任务相关的表示&lt;/strong&gt;，称为&lt;strong&gt;查询向量(query vector)&lt;/strong&gt;，并通过一个&lt;strong&gt;打分函数&lt;/strong&gt;来计算&lt;strong&gt;每个输入向量和查询向量之间的相关性&lt;/strong&gt;。&lt;/p&gt;&#xA;$$&#xD;&#xA;\begin{aligned}&#xD;&#xA;\alpha_{i} &amp;=p(z=i | X, \boldsymbol{q}) \\&#xD;&#xA;&amp;=\operatorname{softmax}\left(s\left(\boldsymbol{x}_{i}, \boldsymbol{q}\right)\right) \\&#xD;&#xA;&amp;=\frac{\exp \left(s\left(\boldsymbol{x}_{i}, \boldsymbol{q}\right)\right)}{\sum_{j=1}^{N} \exp \left(s\left(\boldsymbol{x}_{j}, \boldsymbol{q}\right)\right)}&#xD;&#xA;\end{aligned}&#xD;&#xA;$$&lt;p&gt;&#xA;其中$\alpha_i$称为&lt;strong&gt;注意力分布(attention distribution)&lt;/strong&gt;，$s(\boldsymbol x_i,\boldsymbol q)$为注意力打分函数，可以使用以下几种方式来计算：&lt;/p&gt;&#xA;&lt;p&gt;加性模型：$s(\boldsymbol{x}&lt;em&gt;{i}, \boldsymbol{q})=\boldsymbol{v}^{\mathrm{T}} \tanh (W \boldsymbol{x}&lt;/em&gt;{i}+U \boldsymbol{q})$；&lt;/p&gt;&#xA;&lt;p&gt;点积模型：$s\left(\boldsymbol{x}&lt;em&gt;{i}, \boldsymbol{q}\right)=\boldsymbol{x}&lt;/em&gt;{i}^{\mathrm{T}} \boldsymbol{q}$；&lt;/p&gt;&#xA;&lt;p&gt;缩放点积模型：$s(\boldsymbol{x}&lt;em&gt;{i}, \boldsymbol{q})=\frac{\boldsymbol{x}&lt;/em&gt;{i}^{\mathrm{T}} \boldsymbol{q}}{\sqrt{d}}$；&lt;/p&gt;</description>
    </item>
    <item>
      <title>图神经网络</title>
      <link>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl9-%E5%9B%BE%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/3-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/dl9-%E5%9B%BE%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/</guid>
      <description>&lt;h3 id=&#34;图神经网络概述&#34;&gt;图神经网络概述&lt;/h3&gt;&#xA;&lt;p&gt;近年来，深度学习领域关于&lt;strong&gt;图神经网络(graph neural network, GNN)&lt;/strong&gt; 的研究热情日益高涨，图神经网络已经成为各大深度学习顶会的研究热点。GNN处理非结构化数据时的出色能力使其在网络数据分析、推荐系统、物理建模、自然语言处理和图上的组合优化问题方面都取得了新的突破。&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20211229201804200.png&#34; style=&#34;zoom:30%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;随着机器学习、深度学习的发展，语音、图像、自然语言处理逐渐取得了很大的突破，然而语音、图像、文本都是很简单的序列或者网格数据，是很结构化的数据，深度学习很善于处理该种类型的数据。然而，现实世界中并不是所有的事物都可以表示成一个序列或者一个网格，例如社交网络、知识图谱、论文引用网络等，也就是说很多事物都是非结构化的。非结构化的数据可以使用 &lt;strong&gt;图(graph)&lt;/strong&gt; 这种数据结构进行表示，其特点包括：&lt;/p&gt;&#xA;&lt;p&gt;(1) 图的大小是任意的，图的拓扑结构复杂，没有像图像一样的空间局部性；&lt;/p&gt;&#xA;&lt;p&gt;(2) 图没有固定的节点顺序，或者说没有一个参考节点；&lt;/p&gt;&#xA;&lt;p&gt;(3) 图经常是动态图，而且包含多模态的特征。&lt;/p&gt;&#xA;&lt;p&gt;图神经网络是对图进行表示，并将深度学习扩展使得能够建模问题和数据，以完成各类基于图的任务的神经网络结构。其所能够完成的常见任务包括结点分类、社区发现以及链接预测等。&lt;/p&gt;&#xA;&lt;h3 id=&#34;图神经网络中的矩阵&#34;&gt;图神经网络中的矩阵&lt;/h3&gt;&#xA;&lt;p&gt;以如下所示的图结构为例：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/3/image-20211229203152876.png&#34; style=&#34;zoom:40%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;一个图$G$的定义为$G=(V, E)$，其中$V$为结点集，结点数量$m = |V|$；$E$为边集，边数量$n = |E|$。通常用一些矩阵来刻画图结构：&lt;/p&gt;&#xA;$$&#xD;&#xA;\boldsymbol A=\left[\begin{array}{llllll}&#xD;&#xA;0 &amp; 1 &amp; 1 &amp; 1 &amp; 0 &amp; 0 \\&#xD;&#xA;1 &amp; 0 &amp; 1 &amp; 0 &amp; 0 &amp; 0 \\&#xD;&#xA;1 &amp; 1 &amp; 0 &amp; 0 &amp; 1 &amp; 1 \\&#xD;&#xA;1 &amp; 0 &amp; 0 &amp; 0 &amp; 0 &amp; 0 \\&#xD;&#xA;0 &amp; 0 &amp; 1 &amp; 0 &amp; 0 &amp; 1 \\&#xD;&#xA;0 &amp; 0 &amp; 1 &amp; 0 &amp; 1 &amp; 0&#xD;&#xA;\end{array}\right]&#xD;&#xA;$$$$&#xD;&#xA;\boldsymbol D=\left[\begin{array}{llllll}&#xD;&#xA;3 &amp; 0 &amp; 0 &amp; 0 &amp; 0 &amp; 0 \\&#xD;&#xA;0 &amp; 2 &amp; 0 &amp; 0 &amp; 0 &amp; 0 \\&#xD;&#xA;0 &amp; 0 &amp; 4 &amp; 0 &amp; 0 &amp; 0 \\&#xD;&#xA;0 &amp; 0 &amp; 0 &amp; 1 &amp; 0 &amp; 0 \\&#xD;&#xA;0 &amp; 0 &amp; 0 &amp; 0 &amp; 2 &amp; 0 \\&#xD;&#xA;0 &amp; 0 &amp; 0 &amp; 0 &amp; 0 &amp; 2&#xD;&#xA;\end{array}\right]&#xD;&#xA;$$$$&#xD;&#xA;\boldsymbol P=\left[\begin{array}{cccccc}&#xD;&#xA;0 &amp; \frac{1}{\sqrt{3} \cdot \sqrt{2}} &amp; \frac{1}{\sqrt{3} \cdot \sqrt{4}} &amp; \frac{1}{\sqrt{3} \cdot \sqrt{1}} &amp; 0 &amp; 0 \\&#xD;&#xA;\frac{1}{\sqrt{3} \cdot \sqrt{2}} &amp; 0 &amp; \frac{1}{\sqrt{2} \cdot \sqrt{4}} &amp; 0 &amp; 0 &amp; 0 \\&#xD;&#xA;\frac{1}{\sqrt{3} \cdot \sqrt{4}} &amp; \frac{1}{\sqrt{2} \cdot \sqrt{4}} &amp; 0 &amp; 0 &amp; \frac{1}{\sqrt{4} \cdot \sqrt{2}} &amp; \frac{1}{\sqrt{4} \cdot \sqrt{2}} \\&#xD;&#xA;\frac{1}{\sqrt{3} \cdot \sqrt{1}} &amp; 0 &amp; 0 &amp; 0 &amp; 0 &amp; 0 \\&#xD;&#xA;0 &amp; 0 &amp; 0 &amp; \frac{1}{\sqrt{4} \cdot \sqrt{2}} &amp; 0 &amp; \frac{1}{\sqrt{2} \cdot \sqrt{2}} \\&#xD;&#xA;0 &amp; 0 &amp; 0 &amp; \frac{1}{\sqrt{4} \cdot \sqrt{2}} &amp; \frac{1}{\sqrt{2} \cdot \sqrt{2}} &amp; 0&#xD;&#xA;\end{array}\right]&#xD;&#xA;$$$$&#xD;&#xA;\boldsymbol L=\left[\begin{array}{cccccc}&#xD;&#xA;1 &amp; \frac{-1}{\sqrt{3} \cdot \sqrt{2}} &amp; \frac{-1}{\sqrt{3} \cdot \sqrt{4}} &amp; \frac{-1}{\sqrt{3} \cdot \sqrt{1}} &amp; 0 &amp; 0 \\&#xD;&#xA;\frac{-1}{\sqrt{3} \cdot \sqrt{2}} &amp; 1 &amp; \frac{-1}{\sqrt{2} \cdot \sqrt{4}} &amp; 0 &amp; 0 &amp; 0 \\&#xD;&#xA;\frac{-1}{\sqrt{3} \cdot \sqrt{4}} &amp; \frac{-1}{\sqrt{2} \cdot \sqrt{4}} &amp; 1 &amp; 0 &amp; \frac{-1}{\sqrt{4} \cdot \sqrt{2}} &amp; \frac{-1}{\sqrt{4} \cdot \sqrt{2}} \\&#xD;&#xA;\frac{-1}{\sqrt{3} \cdot \sqrt{1}} &amp; 0 &amp; 0 &amp; 1 &amp; 0 &amp; 0 \\&#xD;&#xA;0 &amp; 0 &amp; 0 &amp; \frac{-1}{\sqrt{4} \cdot \sqrt{2}} &amp; 1 &amp; \frac{-1}{\sqrt{2} \cdot \sqrt{2}} \\&#xD;&#xA;0 &amp; 0 &amp; 0 &amp; \frac{-1}{\sqrt{4} \cdot \sqrt{2}} &amp; \frac{-1}{\sqrt{2} \cdot \sqrt{2}} &amp; 1&#xD;&#xA;\end{array}\right]&#xD;&#xA;$$&lt;p&gt;&#xA;(5) &lt;strong&gt;结点特征矩阵&lt;/strong&gt;$\boldsymbol X \in \mathbb R^{n \times f}$，其中$f$为特征维数：GNN中每个结点通常有一个特征，而结点特征矩阵便用于记录每个结点的特征。为简便起见，下图中用one-hot向量作为每个结点的特征向量。通常会将结点特征矩阵和图结构矩阵融合进行学习。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
