深度学习网络框架
2021-02-22 13:41:52 4 举报
AI智能生成
深度学习的定义、分支、训练方法、模型结构汇总
作者其他创作
大纲/内容
学习结构
多隐层的多层感知器
定义
通过<b>组合低层特征</b>形成更加抽象的高层,表示属性<b>类别或特征</b>,以发现数据的分布式特征表示
深度学习可通过学习一种<b>深层非线性</b>网络结构,<b>实现复杂函数逼近</b>,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。<br>(多层的好处是可以用较少的参数表示复杂的函数,通常有5层、6层,甚至10多层的隐层节点)<br>
步骤
Step 1: 定义神经网络(Neural Network)
Step 2: 对函数进行优化(goodness of function)
Step 3: 选择最好的函数(pick the best function)
训练过程
1、每次<b>训练</b>一层网络
2、当所有层训练完后,使用<b><font color="#55beed">wake-sleep</font></b>算法进行<font color="#0076b3">调优</font>。调整所有的权重。<br><b><font color="#31a8e0">向上的权重用于“认知”,向下的权重用于“生成</font>”</b>。让认知和生成达成一致,<br>也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。<br>
<b><font color="#0076b3">wake阶段</font></b>:认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(<b>结点状态</b>),<br>并且使用<b><font color="#31a8e0">梯度下降</font></b>修改层间的下行权重(生成权重)。
<b><font color="#0076b3">sleep阶段</font></b>:生成过程,通过顶层表示(醒时学得的概念)和向下权重,<b>生成底层的状态</b>,同时修改层间向上的权重。
具体过程
1)<b><font color="#0076b3">自下上升非监督学习</font></b>(就是从底层开始,一层一层的往顶层训练),和传统神经网络区别最大的部分(这个过程可以看作是feature learning过程
2)<font color="#0076b3"><b>自顶向下的监督学习</b></font>(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):
训练方法
<font color="#fdb813"><b>梯度下降法<font color="#000000">(</font></b><font color="#000000">gradient descent)</font></font>学习<b><font color="#31a8e0">权重(weights)</font></b>和<font color="#31a8e0"><b>偏置(biases)</b></font>:<br>重复计算梯度∇C,然后沿着梯度的反方向运动
<b><font color="#fdb813">反向传播算法</font></b> <b><font color="#fdb813">BP </font></b>(backpropagation)快速计算梯度的算法
<b>损失函数/代价函数</b>,衡量我们当前取得的结果距离目标结果的好坏程度。<br>损失函数值越小,说明实际输出和预期输出的差值就越小,也就说明我们构建的模型越好。<br>
0-1损失函数
绝对损失函数
平方损失函数
误差逆传播算法 <font color="#f15a23"><font color="#000000">Error Backpropagation</font></font><font color="#000000"><b>:</b>“从后至前”的训练参数方法</font>
<b>逐层初始化</b>:“从前至后”的逐层训练方法
模型
多层前馈神经网络<br>(multi-layer feedforward neural networks)
每一层神经元仅仅与下一层的神经元全连接。而在同一层,神经元彼此不连接,而且跨层的神经元,彼此间也不相连。
输入层神经元主要用于接收外加的输入信息
隐含层和输出层中,都有内置的<b><font color="#0076b3">激活函数</font></b>,可对输入信号进行加工处理,最终的结果,由输出层“呈现”出来。
总结:神经网络的学习过程,就是通过根据训练数据,来调整神经元之间的连接权值(connection weight)以及每个功能神经元的<b>输出阈值</b>。<br>换言之,神经网络需要学习的东西,就蕴含在<b>连接权值和阈值</b>之中。
激活函数
数据经过经过函数运算后<b>由激活函数映射输出</b>。如果没有激活函数,多次线性运算的堆叠仍然是一个线性运算
神经元的工作模型存在“激活(1)”和“抑制(0)”等两种状态的跳变,那么理想型的激活函数就应该是阶跃函数,<br>但这种函数具有不光滑、不连续等众多不“友好”的特性。
每一个输入都有自己的权重,权重和输入的值相乘,然后加上一个<b><font color="#0076b3">偏置b</font></b>之后在经过一个函数f得到输出y,这个f就是激活函数。
性质
不会饱和
均值为零
容易计算
常用的激活函数
sigmoid
输入一个实值,输出一个 0 至 1 间的值。
两侧尾端会有饱和现象,这会使导数在这些区域接近零,从而阻碍网络的训练。
tanh(双曲正切函数)
输入一个实值,输出一个 [-1,1] 间的值
两侧尾端会有饱和现象,这会使导数在这些区域接近零,从而阻碍网络的训练。
ReLU 代表修正线性单元
输出一个实值,并设定 0 的<b>阈值</b>(函数会将负值变为零)
输出均值不为零,这会影响网络的训练。
自动编码器:是一种尽可能复现输入信号的神经网络,捕捉可以代表输入数据的最重要的因素
1)给定无标签数据,用非监督学习学习特征:
2)通过编码器产生特征,然后训练下一层。这样逐层训练:<br>将第一层输出的code当成第二层的输入信号,同样<b>最小化重构误差(</b>调整encoder和decoder的参数<b>)</b>,<br>就会得到第二层的参数,并且得到第二层输入的code,也就是原输入信息的第二个表达了。<br>
3)有监督微调:将最后层的特征code输入到最后的分类器,然后<br>通过标准的多层神经网络的监督训练方法(<b>梯度下降法</b>)去训练。
只调整分类器
通过有标签样本,微调整个系统
稀疏自动编码器:在<u>自动编码器</u>的基础上加上L1的Regularity限制<br>(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0)
限制每次得到的表达code尽量稀疏。因为稀疏的表达往往比其他的表达要有效
降噪自动编码器 <b>DA</b>,在<u>自动编码器</u>的基础上,训练数据加入噪声
编码器要去学习输入信号的更加鲁棒的表达,这也是它的<b>泛化能力</b>比一般编码器强的原因。
限制波尔兹曼机 <b>RBM</b>
假设有一个二部图,每一层的节点之间没有链接,一层是<b>可视层</b>,即输入数据层(v),一层是<b>隐藏层</b>(h),<br>如果假设所有的节点都是随机二值变量节点(只能取0或者1值),同时假设全概率分布p(v,h)满足波尔兹曼分布
当输入v的时候,通过p(h|v) 可得到隐藏层h,而得到隐藏层h之后,通过p(v|h)<br>又能得到可视层,调整参数使隐藏层得到的可视层v1与原来的可视层v一样
深信度网络,<b>DBNs</b>是一个概率生成模型,是建立一个观察数据和标签之间的联合分布
由多个限制<b><font color="#0076b3">玻尔兹曼机层</font></b>组成,网络被“限制”为一个可视层和一个隐层,层间存在连接,但层内的单元间不存在连接
隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。
指定某些特征神经元的值,然后进行“反向运行”,产生输入激活的值。
生成式模型更像人类的大脑:不仅可以读数字,还能够写出数字
DBN 可以<b>进行无监督和半监督的学习</b>
一个DBN的连接是通过<u>自顶向下</u>的生成权值来指导确定的
卷积DBNs (CDBNs)<br>Convolutional Deep Belief Networks
堆叠自动编码器,它是通过用<b><font color="#0076b3">堆叠自动编码器</font></b>来替换传统DBNs里面的RBMs
卷积神经网络 <b><font color="#f15a23">CNN </font></b>Convolutional Neural Networks<br>适用于语音分析和图像识别
局部感受野,隐藏神经元对应的输入神经元的一个小区域。<br>在一个卷积网络中,把输入看作是一个的方形排列的神经元<br>
共享权重和偏置,每个隐藏神经元使用相同的权重和偏置。<br>意味着隐藏层的所有神经元检测完全相同的特征,只是在输入图像的不同位置。<br>
特征映射:从输入层到隐藏层的映射
共享权重:定义特征映射的权重
混合层,通常紧接着在卷积层之后使用,简化从卷积层输出的信息
最大值混合,输出其输入区域的最大激活值,如在2*2区域对应一个最大激活值
L2 混合,是一种凝缩从卷积层输出的信息的方式,取2*2区域中激活值的平方和的平方根,而不是最大激活值。
全连接层,网络中最后连接的层,将最大值混合层的每一个神经元连接到每一个输出神经元。
循环神经网络(<b><font color="#000000">RNN</font></b>)
是某种体现出了随时间动态变化的特性的神经网络
允许网络中的元素能够以动态方式不断地变化
隐藏神经元的行为不是完全由前一层的隐藏神经元,而是同样受制于更早的层上的神经元的激活值。
可以使用<b>梯度下降</b>和 <b>BP </b>的直接的修改来训练 RNN。
其他一些在前馈神经网络中的想法,如<b>正规化技术</b>,<b>卷积</b>和<b>代价函数</b>等都在 RNN 中非常有效
长短期记忆单元(Long short-term memory units,LSTMs),解决不稳定梯度的问题。
机器学习
模型:深度神经网络(<font color="#f15a23">DNN</font>,Deep Neural Networks)
三类
<b>监督学习</b>(Supervised Learning):是“分类(classification)”的代名词。<br>它从<b><font color="#f15a23">有标签</font></b>的训练数据中学习,然后给定某个新数据,预测它的标签(given data, predict labels)。
<b>非监督学习</b>(Unsupervised Learning):就是“聚类(cluster)”的近义词。<br><font color="#f15a23"><b>非标签</b></font>的数据,一旦我们归纳出“类”或“群”的特征,如果再要来一个新数据,<br>我们就根据它距离哪个“类”或“群”较近,就“预测”它属于哪个“类”或“群”,从而完成新数据的“分类”或“分群”功能。<br>
<b>半监督学习</b>(Semi-supervised Learning):既用到了标签数据,又用到了非标签数据<br>函数 f:X→Y 可以准确地对未标识的数据xi预测其标记yi<br>
步骤
(1) 如何找一系列函数来实现预期的功能,这是<b>建模问题</b>;
(2) 如何找出一组合理的评价标准,来评估函数的好坏,这是<b>评价问题</b>;
(3) 如何快速找到性能最佳的函数,这是<b>优化问题</b>(比如说,机器学习中梯度下降法)
人工智能
两大主流
符号主义:自顶向下设计规则,然后通过各种推理,逐步解决问题。
多层感知机:“有监督”的学习<br>(multi-layer perceptrons,<b>MLP</b>)
由两层神经元构成的网络结构,它在输入层接收外界的输入,通过激活函数(含阈值)的变换,把信号传送至输出层,<br>因此它也称之为“阈值逻辑单元(threshold logic unit)”。
多层感知器也可以<b>学习非线性函数</b>。多层感知机的最后一层全连接层实质上是一个线性分类器,<br>而其他部分则是为这个线性分类器学习一个合适的数据表示,使倒数第二层的特征线性可分。
梯度
在单变量的实值函数中,梯度就可以简单地理解为只是导数,或者说对于一个线性函数而言,梯度就是线的斜率
在向量微积分中,标量场的梯度其实是一个<b>向量场</b>(vector field)。对于特定函数的某个特定点,它的梯度就表示从该点出发,该<b>函数值增长最为迅猛的方向</b>(direction of greatest increase of a function)。
应用
快速找到多维变量函数的极(大/小)值
连接主义:试图编写一个<b>通用模型</b>,然后通过数据训练,不断改善模型中的参数,直到输出的结果符合预期。<br>连接主义认为,人的思维就是某些神经元的组合。因此,可以在网络层次上模拟人的认知功能,用人脑的并行处理模式,<br>来表征认知过程。这种受神经科学的启发的网络,被称之<b><font color="#f15a23">人工神经网络</font></b>(Artificial Neural Network,简称<b><font color="#f15a23">ANN</font></b>)。<br>人工神经网络可以在理论上证明:<b>只需一个包含足够多神经元的<font color="#0076b3">隐藏层</font>,<font color="#0076b3">多层前馈网络</font>能以任意进度逼近任意复杂度的连续函数。</b><br>
0 条评论
下一页