9 前向NN
发布日期:2021-06-29 18:40:46 浏览次数:2 分类:技术文章

本文共 7747 字,大约阅读时间需要 25 分钟。

文章目录

  • 为拟合某函数 f f f
    • 即定义映射 y = f ( x ; θ ) y=f(x;\theta) y=f(x;θ)
    • 将输入 x x x转化为某种预测的输出 y y y
    • 并同时学习网络参数 θ \theta θ
    • 使模型得到最优函数近似

  • 深度前馈网络由多个函数复合在一起表示
    • 该模型与ー个有向无环图关联
  • “链式结构” f ( x ) = f ( 3 ) ( f ( 2 ) ( f ( 1 ) ( x ) ) ) f(x)=f^{(3)}(f^{(2)}({f^{(1)}(x)})) f(x)=f(3)(f(2)(f(1)(x)))
  • 链长为网络模型“深度”
  • 设真实函数为 f ∗ ( x ) f^{*}(x) f(x),在神经网络过程中
    • 试图令 f ( x ) f(x) f(x)拟合 f ∗ ( x ) f^*(x) f(x),
    • 训练数据则提供在不同训练点上取值的 f ∗ ( x ) f^*(x) f(x)的近似实例(可能含噪声)
    • 即每样本 x x x伴随一个标签 y ≈ f ∗ ( x ) y\approx f^*(x) yf(x),
      • 指明输出层必须产生接近标签的值
  • 网络学习算法则需決定如何用中间的“隐藏层”来实现最优近似

  • 深度前馈网络是一类网络模型
    • 多层感知机、自编码器、限制玻尔兹曼机,
    • 及卷积神经网络

1 多层感知机与布尔函数

场景描述

  • 大脑皮层的感知与计算功能是分层实现
  • 光信号进入大脑皮层V1区,
    • 初级视皮层,
  • 之后通过V2层和V4层,即纹外皮层,
    • 进入下颞叶参与物体识别
  • 深度神经网络除模拟人脑功能的多层结构
    • 最大优势在于能以紧凑、简洁的方式
      • 来表达比浅层网络更复杂的函数集合
      • (简洁”:隐层单元数目与输入单元数目呈多项式)
  • 每节点都可与/或/非
    • 咋构造一个MLP实现
    • n n n输入比特的奇偶校验码(任意布尔函数)?

多层感知机表示异或时最少要几个隐层(二元输入)?

  • 零个隐层(等同于逻辑回归)能否表示异或。
  • 逻辑回归公式
    Z = s i g m o i d ( A X + B Y + C ) (9.1) Z=sigmoid(AX+BY+C)\tag{9.1} Z=sigmoid(AX+BY+C)(9.1)
  • Sigmoid单増
  • Y=0时,
    • 将X从0变到1将使输出Z也从0变为1
    • 说明需设A为正
  • 逻辑回归(不带隐层的感知机)无法精确学习出异或

  • 通用近似定理:
    • 一个前馈神经网络
    • 如果有线性输出层和
    • 至少一层具有任何一种“挤压”性质的激活函数的隐藏层
    • 当给予网络足够数量的隐藏单元时
    • 可任意精度近似任何
      • 从一个有限维空间到另一个有限维空间的波菜尔可测函数
  • 常用的激活函数和目标函数是
    • 通用近似定理适用的一个子集,
    • 因此MLP的表达能力强
    • 关键是否能学习到对应此表达的参数
  • 这里设计参数以说明含一个隐含层的多层感知机就可异或,图9.1
  • 等同于计算 H 1 = X + Y − 1 H_1=X+Y-1 H1=X+Y1,再用ReLU,如表9.2。
  • 第一个隐藏单元在X和Y均为1时激活
  • 第二个隐藏单元在X和Y均为0时激活,
  • 最后将两个隐藏单元的输出
    • 做线性变换即可,表9.4

如果只一个隐层,需多少隐节点能实现含n元输入的任意布尔函数?

  • n元输入的任意布尔函数可唯一表示为析取范式
  • (Disjunctive Normal Form)
    • (由有限个简单合取式构成的析取式)
  • 由如图9.2表示

3多层感知机的反向传播算法

场景描述

  • l l l层的输入 x ( l ) x^{(l)} x(l),输出为 a ( l ) a^{(l)} a(l)
  • 每一层先用输入 x ( l ) x^{(l)} x(l)和偏置 b ( l ) b^{(l)} b(l)计算仿射变换

z ( l ) = W ( l ) x ( l ) + b ( l ) z^{(l)}=W^{(l)}x^{(l)}+b^{(l)} z(l)=W(l)x(l)+b(l)

  • 然后激活函数 f f f作用 z ( l ) z^{(l)} z(l),得 a ( l ) = L W , b ( x ( l ) ) = f ( z ( l ) ) a^{(l)}=\mathcal{L}_{W,b}(x^{(l)})=f(z^{(l)}) a(l)=LW,b(x(l))=f(z(l))

  • a ( l ) a^{(l)} a(l)直接作为下一层的输入,即 x ( l + 1 ) x^{(l+1)} x(l+1)

  • x ( l ) x^{(l)} x(l) m m m

  • z ( l ) z^{(l)} z(l) a ( l ) a^{(l)} a(l)为n维

    • W ( l ) W^{(l)} W(l) m × n m\times n m×n维矩阵

上面明显有错误!

  • z i ( l ) z_i^{(l)} zi(l), a i ( l ) a_i^{(l)} ai(l), W i j ( l ) W_{ij}^{(l)} Wij(l)表其中元素

l − 1 l-1 l1层有 m l − 1 m_{l-1} ml1个神经元!

  • 网络训练中,前向传播产生一个标量损失函数
  • BP则将损失函数的信息沿网络层向后传播用以计算梯度
    • 达到优化网络参数
  • 反向传播是神经网络中非常重要,
    • 从业者需要对反向传播算法熟悉掌握并灵活应用

多层感知机的平方误差和交叉熵损失函数

  • 样本集合 { ( x ( m ) , y ( m ) ) } \{(x^{(m)},y^{(m)})\} {
    (x(m),y(m))}
  • 第一项平方误差项,
  • 第二项为L2正则化项,
    • 功能上可称作权重衰减项,
    • 减小权重的幅度,防止过拟合。
  • λ λ λ为权重衰减参数,
    • 控制损失函数中两项的相对权重

  • 二分类场景为例,交叉熵损失函数
  • 正则项与上式是相同
  • 第一项衡量了预测 o ( i ) o^{(i)} o(i)与真实类別 y ( i ) y^{(i)} y(i)之间的交叉熵
  • y ( i ) y^{(i)} y(i) o ( i ) o^{(i)} o(i)相等时,熵最大,损失函数最小

  • 多分类场景中,类似地写出相应的损失函数

在这里插入图片描述

  • o k ( i ) o_k^{(i)} ok(i)代表第 i i i样本的预测属于类别 k k k的概率
  • y k ( i ) y_k^{(i)} yk(i)为实际的概率
    • i i i个样本的真实类别为 k k k,则 y k ( i ) = 1 y_k^{(i)}=1 yk(i)=1,否则0

2 问题1中定义的损失函数,推导各层参数更新的梯度

  • ( l ) (l) (l)层的参数为 W ( l ) W^{(l)} W(l) b ( l ) b^{(l)} b(l)
  • 每一层的线性变换为 z ( l ) = W ( l ) x ( l ) + b ( l ) z^{(l)}=W^{(l)}x^{(l)}+b^{(l)} z(l)=W(l)x(l)+b(l)
  • 输出为 a ( l ) = f ( z ( l ) ) a^{(l)}=f(z^{(l)}) a(l)=f(z(l))
    • f为Sigmoid、Tanh、ReLU等)
  • a ( l ) a^{(l)} a(l)直接作为下ー层的输入
    • x ( l + 1 ) = a ( l ) x^{(l+1)}=a^{(l)} x(l+1)=a(l)

  • 可用批量梯度下降法来优化网络参数。
  • 梯度下降法中每次迭代对参数W(网络连接权重)和b(偏置)更新
  • α \alpha α控制每次迭代中梯度变化幅度。

  • 问题的核心为求解那两个
  • 为得到递推公式
  • 还需计算损失函数对隐含层的偏导

在这里插入图片描述

  • z i ( l ) z_i^{(l)} zi(l)不就是第 l l l层第 i i i个节点的加权和马
    • 已经包含偏置啦哈哈哈
  • S l + 1 S_{l+1} Sl+1 l + 1 l+1 l+1层的节点数

在这里插入图片描述

上面应该是

∂ z j ( l + 1 ) ∂ z i ( l ) = ∂ ( W i j ( l + 1 ) x i ( l + 1 ) + b j ( l + 1 ) ) ∂ z i ( l ) (9.17) \frac{\partial{z_j^{(l+1)}}}{\partial{z_i^{(l)}}}=\tag{9.17}\frac{\partial{(W_{ij}^{(l+1)}x_i^{(l+1)}+b_j^{(l+1)})}}{\partial{z_i^{(l)}}} zi(l)zj(l+1)=zi(l)(Wij(l+1)xi(l+1)+bj(l+1))(9.17)

  • 9.17可写为

x i ( l + 1 ) = a i ( l + 1 ) = f ( z i ( l ) ) x_i^{(l+1)}=a_i^{(l+1)}=f(z_i^{(l)}) xi(l+1)=ai(l+1)=f(zi(l))

  • 看作损失函数在第 l l l层第 i i i个节点产生的残差量
  • 记为 δ i ( l ) \delta_i^{(l)} δi(l),

这样的即使我很开心!解释地太好了!注意这里的 z i l z_i^{l} zil是第 l l l层的第 i i i个神经元的未激活之前的值!

  • 递推公式

δ i ( l ) = ∑ j = 1 s l + 1 ( W i j ( l ) δ j ( l + 1 ) ) f ′ ( z i ( l ) ) (9.19) \delta_i^{(l)}=\sum_{j=1}^{s_{l+1}}\left(W_{ij}^{(l)}\delta_j^{(l+1)}\right)f'(z_i^{(l)})\tag{9.19} δi(l)=j=1sl+1(Wij(l)δj(l+1))f(zi(l))(9.19)

  • 损失对参数函数梯度可写为

我严重怀疑:9.21的左边两坨是接在9.20上面的

我严重怀疑:9.21的右边应该写错了!应该是 ∂ ∂ b i ( l ) J = δ i ( l ) \frac{\partial{}}{\partial{b_i^{(l)}}} J=\delta_i^{(l)} bi(l)J=δi(l)

  • 下针对两种不同的损失函数计算最后一层的残差 δ ( L ) \delta^{(L)} δ(L)
  • 其他层的残差 δ ( L − 1 ) , . . . , δ ( 1 ) \delta^{(L-1)},...,\delta^{(1)} δ(L1),...,δ(1)可根据上面得到的递推公式计算。

为啥不说出来是第几层的哪个神经元呢?

  • 为简化起见,忽略Batch样本集合和正则化项的影响,
  • 重点关注这两种损失函数产生的梯度。

注意:上面的 y y y是个向量!同样 z ( L ) z^{(L)} z(L)也是向量!

4神经网络训练技巧

  • 大规模神经网络的训练过程中,常常面临“过拟合”的问题,即当参数
    数目过于庞大而相应的训练数据短缺时,模型在训练集上损失值很小,但在测试集上损失较大,泛化能力很差。
  • 解決“过拟合”的方法有很多,
  • Data Augmentation、
  • 参数范数惩罚/正则化( Regularization)、
  • 模型集成(Mode Ensemble)等;
  • Dropout是模型集成方法中最高效与常用的技巧。
  • 深度神经网络的训练中涉及诸多手调参数,
  • 如学习率、权重衰减系数、 Dropout比例等,这些参数的选择会显著影响模型最终的训练效果。
  • 批量归一化( Batch Normalization,BN)有效规避了这些复杂参数对网络训练产生的影响,加速训练收敛也提升了网络的泛化能力。

神经网络训练时是否可以将全部参数初始化为0?

  • 考虑全连接的深度神经网络,同一层中的任意神经元都是同构的
    它们拥有相同的输入和输出,如果再将参数全部初始化为同样的值,那
    么无论前向传播还是反向传播的取值都是完全相同的。
  • 学习过程将永远无法打破这种对称性,最终同一网络层中的各个参数仍然是相同的
  • 因此,要随机地初始化神经网络参数的值,以打破这种对称性。
  • 可初始化参数为取值范围 ( − 1 d , 1 d ) (-\frac{1}{\sqrt{d}},\frac{1}{\sqrt{d}}) (d 1,d 1)的均匀分布,
  • d是一个神经元接受的输入维度。
  • 偏置可以被简单地设为0,并不会导致参数对称的问题。

我觉得他说的非常对,如果都是初始化成零的话,每个结点的确是同质的!那么他们这个对称的就无法打破这个对衬性,我觉得这个说的非常正确。

为什么 Dropout可以抑制过拟合?它的工作原理和实现?

  • 以一定概率随机“临时丢弃”一部分神经元节点。

这个临时的词用得好!

  • Dropout作用于每份小批量训练数据
    • 其随机丢弃部分神经元的机制
    • 相当于每次迭代都在训练不同结构的神经网络
  • 类比于Bagging,
    • Dropout可被认为是种实用的大规模深度神经网络的模型集成算法
  • 传统意义上的Bagging涉及多个模型的同时训练与测试评估,
    • 当网络与参数规模庞大时,
    • 这种集成方式需要消耗大量的运算时间与空间。
  • Dropout在小批量级别上的操作,
    • 提供一种轻量级Bagging集成近似,
    • 能实现指数级数量神经网络的训练与评测測

  • 要求某个神经元节点激活值以概率P被“丢弃”,
  • 即该神经元暂时停止工作,图9.12
  • 对包含 N N N个神经元节点的网络,在 DropoutF的作用下可看作为 2 N 2^N 2N个模型集成。
  • 2 N 2^N 2N个模型可认为是原始网络的子网络,它们共享部分权值,
    • 并有相同网络层数,而模型整体参数数目不变,这就大大简化运算。
  • 对任意神经元,
    • 每次训练中都与一组随机挑选的不同的神经元集合共同优化,
    • 这个过程会减弱全体神经元之间的联合适应性
  • 减少过拟合的风险,增强泛化能力。

  • 用Dropout包括训练和预测两阶段。
  • 训练阶段中,每个神经元节点需増加一个概率系数,如图9.13。
  • 训练阶段又分前向传播和反向传播两步骤。
  • 原始网络对应的前向传播公式为
  • 应用 Dropout之后,前向传播公式变为

5 深度CNN

场景描述

  • CNN特点
    • 每层神经元节点只响应前一层局部区域范围内的神经元
    • (全连接网络中每个神经元节点响应前一层的全部)
  • DCNN
    • 通常由若干巻积层叠加若干全连接层组成,
    • 中间也包含各种非线性操作及池化操作
  • 卷积神经网络同样可用反向传播算法训练,
    • 卷积操作的参数共享特性使要优化的参数数目大大缩减,
    • 提高模型的训练效率以及可扩展性。
  • 卷积运算主要用于处理类网格结构的数据,
    • 对于时间序列及图像数据的分析与识别具有优势

  • 图9.14是CNN的一个经典结构示意图。
  • Lecun Yani在98年提出的卷积神经网络结构
  • 输入在经历几次卷积和池化层的重复操作之后
    • 接入几个全连通层并输出预测结果,
    • 已成功应用于手写体识别

卷积操作的本质:稀疏交互和参数共享,这两种特性及其作用。

6深度残差网络

场景描述

  • 数据规模增加,使有可能训练更大容量的模型,不断地提升模型的表示能力和精度
  • 深度神经网络的层数决定模型容量,
    • 层数的加深,优化函数陷入局部最优
  • 随着网络层增加,梯度消失更严重,
    • 梯度在反向传播时会逐渐衰减
    • 特别是Sigmoid激活函数,使远离输出层(即接近输入层)的网络层不能够得到有效的学习,影响模型泛化
  • 过去十几年间尝试了许多方法
    • 改进训练算法、正则化、设计特殊的网络结构
  • Resnet是有效的网络结构改进,极大提高可以有效训练的深度神经网络层数
  • Resnet在 Imagenet和 Alphago Zero的应用中都取得非常好效果
  • 15年时,用Resnet训练的模型已达152,且相较往年取得很大提升
  • 如今可用深度残差网络训练拥有成百上干层的模型

Resnet的提出背景和核心理论?

  • 深层的神经网络训练中的梯度消失
  • L层的深度神经网络,在上面加入一层得到的L+1层深度神经网络的效果应该至少不会比L层的差
  • 简单地设最后一层为前一层的拷贝(用一个恒等映射即可),且其他层维持原来参数
  • 反向传播时,很难找到这种形式解。
  • 实验发现,层数更深的神经网络反而会更大训练误差。
  • CIFAR-10上的一个结果如图9.22,
  • 56层比20层的网络训练误差大
  • 很大程度上归结于梯度消失

  • 为解释梯度消失问题如何产生
  • 3节推导出的误差传播公式

z i ( l ) z^{(l)}_i zi(l)就是==!上面写错了!

  • 再展开一层
  • 误差传播可写成参数 W i j ( l ) W_{ij}^{(l)} Wij(l) W j k ( l + 1 ) W_{jk}^{(l+1)} Wjk(l+1)
  • 及导数 f ′ ( z j ( l + 1 ) ) f'(z_j^{(l+1)}) f(zj(l+1)) f ′ ( z j ( l ) ) f'(z_j^{(l)}) f(zj(l))连乘
  • 当误差由第 L L L层( δ i ( L ) \delta_i^{(L)} δi(L))
    • 传到除输入以外第一隐层( δ i ( 1 ) \delta_i^{(1)} δi(1))时,
    • 会涉及非常多参数和导数连乘,
    • 这时误差很容易消失或膨胀,影响对该层参数正确学习。
  • 因此深度神经网络的拟合和泛化能力较差
    • 有时甚至不如浅层

  • Resnet调整网络结构
  • 先考虑两层网络(9.23(a)),输入 x x x经两个网络层的变换得到H(x)
  • 反向传播时,梯度涉及两层参数的交叉相乘,
    • 可能在离输入近的网络层中产生梯度消失
  • Resnet:
    • 既然离输入近的神经网络层难训练,那可将它短接到更靠近输出的层,如图(b)
    • 输入 x x x经两个神经网络的变换得 F ( x ) F(x) F(x),同时也短接到两层之后,最后这个包含两层的神经网络模块输出 H ( x ) = F ( x ) + x H(x)=F(x)+x H(x)=F(x)+x
  • 这样, F ( x ) F(x) F(x)被设计为只需要拟合输入 x x x与目标输出 H ~ ( x ) \tilde{H}(x) H~(x)的残差 H ~ ( x ) − x \tilde{H}(x)-x H~(x)x
  • 如果某一层输出已较好的拟合了期望结果
    • 那多加入层不会使得模型变得更差,因为该层的输出将直接被短接到两层之后,相当于直接学习了一个恒等映射,而跳过的两层只需要拟合上层输出和目标之间的残差即可

  • Resnet可有效改善深层的神经网络学习问题,使训练更深的网络成可能
  • 图9.24(a)展示传统神经网络的结果,
    • 随着模型结构的加深训练误差反而上升;
  • 而图9.24(b)是Resnet的实验结果,随着模型结构的加深,训练误差逐渐降低,并且优于相同层数的传统的神经网络。

转载地址:https://cyj666.blog.csdn.net/article/details/104841724 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:4 朴素贝叶斯法
下一篇:3经典算法

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月26日 20时14分15秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章