自学神经网络系列 —— 8 前馈神经网络


阅读文章之前需要了解的内容见 前馈神经网络前置知识这篇文章,主要包括感知机算法、激活函数等知识,下面主要介绍前馈神经网络的内容,主要有:

  • 8.1 前馈神经网络结构
  • 8.2 神经网络参数的学习
  • 8.3 误差反向传播算法
  • 8.4 tensorflow中自动梯度计算原理
  • 8.5 机器学习或者深度学习中的非凸优化是如何求解的

1 前馈神经网络结构

1.1 网络结构

  • 前馈神经网络算是神经网络模型一般化的结构,所有神经元之间全部连接,又称全连接神经网络,结构如下:由一个输入层、多个隐藏层和一个输出层构成。
    1
图1 全连接神经网络(《神经网络与深度学习》(邱锡鹏))
  • 神经网络中的层都由多个神经元组成
    • 输入层神经元是数值型特征如x = (x1,x2,x3,x4)构成,
    • 隐藏层神经元是激活函数
    • 输出层神经元是线性函数(回归)、sigmoid函数(二分类)或softmax函数(多分类)
    • 神经元之间的连线(边)代表权重,指向同一个神经元的边进行线性组合,再通过神经元输出。

1.2 网络模型

  • 前馈神经网络模型以下式进行前向传播:
    { z i = W i a i − 1 + b i a i = s i g m o i d ( z i ) \begin{cases} z^{i}=W^{i}a^{i-1}+b^{i} \\ a^{i}=sigmoid(z^{i} ) \end{cases} {zi=Wiai1+biai=sigmoid(zi)

  • 令 a 0 = x 令a^{0}=x a0=x, 以第i层为视角,对于连接的任意两个神经元:

    • 前一隐藏层输出/输入层输入: a i − 1 a^{i-1} ai1
    • 隐藏层输入/输入层输出: z i = W i a i − 1 + b i z^{i}=W^{i}a^{i-1}+b^{i} zi=Wiai1+bi
    • 隐藏层输出: a i = s i g m o i d ( z i ) a^{i}=sigmoid(z^{i}) ai=sigmoid(zi)
    • 不断迭代直到满足模型结构
  • 通用近似定理:常见的连续非线性函数都可以用前馈神经网络来近似。

  • 深度学习以神经网络模型为主,神经网络模型可以看作一个复杂的高阶的非线性函数。

  • 机器学习以简单模型为主,人工特征工程非常重要,在模型中起决定性作用。然而,手动特征需要耗费大量时间设计和验证,且容易造成信息损失,因此引入神经网络自动学习特征表达方式。

2 前馈神经网络参数的学习

  • 参数学习方法:类似机器学习,神经网络参数的学习也是以损失函数最小化为目标,最优化方法使用常见的梯度下降。

2.1 目标函数

R ( W , b ) = 1 N ∑ n = 1 N L ( y n , y ^ n ) + λ ∣ ∣ W ∣ ∣ F 2 其 中 ∣ ∣ W ∣ ∣ F 2 = ∑ l L ∑ i M l ∑ j M l − 1 w i j 2 R(W,b) ={1\over N}\sum_{n=1}^NL(y^n,\hat y^n)+\lambda||W||_F^2 \\ 其中||W||_F^2 = \sum_l^L\sum_i^{M_l}\sum_j^{M_{l-1}}{w_{ij}^2} R(W,b)=N1n=1NL(yn,y^n)+λWF2WF2=lLiMljMl1wij2

2.2 梯度下降

  • 最终输出的 y ^ \hat y y^与y构造的损失函数对第 l l l层参数(更新) W l 、 b l W^l 、b^l Wlbl求梯度有:
    ∂ R ( W , b ) ∂ W l = 1 N ∑ n = 1 N ∂ L ( y n , y ^ n ) ∂ W l + λ W l ∂ R ( W , b ) ∂ b l = 1 N ∑ n = 1 N ∂ L ( y n , y ^ n ) ∂ b l {\partial R(W,b) \over \partial W^l} = {1\over N}\sum_{n=1}^N{\partial L(y^n,\hat y^n) \over \partial W^l} + \lambda W^l \\ {\partial R(W,b) \over \partial b^l} = {1\over N}\sum_{n=1}^N{\partial L(y^n,\hat y^n) \over \partial b^l} WlR(W,b)=N1n=1NWlL(yn,y^n)+λWlblR(W,b)=N1n=1NblL(yn,y^n)
  • 每一层参数的求解都需要用到整个训练集,神经网络通常使用随机梯度下降法进行单样本的参数更新或者min-batch梯度下降法进行批量样本的参数更新。
  • 通过计算参数的梯度表达式对参数进行更新效率较低,神经网络通常使用误差反向传播算法实现梯度的高效计算。

3 误差反向传播算法

  • 链式法则:

∂ L ( y n , y ^ n ) ∂ W i j l = ∂ L ( y n , y ^ n ) ∂ z l ∂ z l ∂ W i j l ∂ L ( y n , y ^ n ) ∂ b l = ∂ L ( y n , y ^ n ) ∂ z l ∂ z l ∂ b l {\partial L(y^n,\hat y^n) \over \partial W_{ij}^l } = {\partial L(y^n,\hat y^n) \over \partial z^l } {\partial z^l \over \partial W_{ij}^l } \\ {\partial L(y^n,\hat y^n) \over \partial b^l } = {\partial L(y^n,\hat y^n) \over \partial z^l } {\partial z^l \over \partial b^l } WijlL(yn,y^n)=zlL(yn,y^n)WijlzlblL(yn,y^n)=zlL(yn,y^n)blzl

  • 因式分析
    • ∂ L ( y n , y ^ n ) ∂ z l {\partial L(y^n,\hat y^n) \over \partial z^l } zlL(yn,y^n)是重复项,所以只需要计算三项即可:

    • ∂ L ( y n , y ^ n ) ∂ z l {\partial L(y^n,\hat y^n) \over \partial z^l } zlL(yn,y^n) 是损失函数对第 l l l层线性组合的导数,最后通过神经元传导,反映了第 l l l层及其以后神经元对损失函数的影响大小,由于包含损失函数被称作误差项。

    • ∂ z l ∂ W i j l 、 ∂ z l ∂ b l {\partial z^l \over \partial W_{ij}^l } 、 {\partial z^l \over \partial b^l } Wijlzlblzl类似感知机算法,梯度求法类似。

    • 主要困难是对误差项的求解:反向传播算法

  • 误差反向传播迭代公式

δ ( l ) = ∂ L ( y n , y ^ n ) ∂ z l = ∂ L ( y n , y ^ n ) ∂ z l + 1 ∂ z l + 1 ∂ a l ∂ a l ∂ z l = δ ( l + 1 ) W l + 1 s i g m o i d ′ ( z l ) \delta(l) = {\partial L(y^n,\hat y^n) \over \partial z^l } ={\partial L(y^n,\hat y^n) \over \partial z^{l+1} } {\partial z^{l+1} \over \partial a^l} {\partial a^l \over \partial z^l} = \delta(l+1)W^{l+1}sigmoid'(z^l) δ(l)=zlL(yn,y^n)=zl+1L(yn,y^n)alzl+1zlal=δ(l+1)Wl+1sigmoid(zl)

  • 误差项可以通过迭代求解,其他几项都比较容易计算

  • 误差反向传播算法

    • 前馈计算每一层的线性输出 z l z^l zl和非线性输出 a l a^l al
    • 对于最后一层当作单层感知机计算误差项(容易计算)、梯度、更新参数
    • 接下来根据迭代公式依次反向传播计算每一层的误差项
    • 计算每一层感知机的梯度并更新参数

4 tensorflow中自动梯度计算原理

  • 计算图:tensorflow中利用计算图这样的数据结构实现梯度的自动计算
  • 计算图基本概念:
    1
图2 计算图(《神经网络与深度学习》(邱锡鹏))
  • 计算图将复杂计算过程进行分解,利用中间节点⭕表示运算操作,将中间计算结果放在节点⭕的箭头(边)上,其他指向中间节点⭕的为叶节点代表常量或者变量。

    • 计算图支持局部计算,即将中间结果进行运算,所以在导数计算过程中可以通过保留中间结果,进行局部导数的计算,然后传递给下一层
    • 计算图从左往右看是神经网络的正向传播公式,所以可以从计算图来看误差反向传播,即计算图从右往左看。
    • 计算图中关于加法的局部导数是1;关于乘法的局部导数为另一个因式;
  • 前向模式利用链式法则计算梯度的中间结果需要对W的每一维进行计算,反向模式利用链式法则计算梯度的中间过程只涉及Z的每一维度计算。因此当输出维度远小于输入维度时应该使用反向传播算法。

  • tensorflow中计算图分为静态计算图、动态计算图以及Autograph

    • 静态计算图: 首先先使用TensorFlow的定义各种算子创建完整计算图,然后再开启一个会话Session,显式执行计算图。一旦定义,不能再改变。
    • 动态计算图:每次使用算子,该算子就会自动加入默认计算图中,不需要开始session,直接执行即可得到结果。方便调试,可以改变。
    • Autograph:可以使用@tf.function装饰器将定义好的Python函数转换成对应TensorFlow静态计算图构建代码。

5 深度学习中的非凸优化

  • 深度学习中的损失函数一般都是非凸的,神经网络的损失函数为什么是非凸的?
  • 非凸优化
    • 目标函数不是凸函数
    • 可行集不是凸集:Lasso\稀疏矩阵分解都属于这类
    • 大量局部最优解,局部最优解不一定是全局最优解
    • 一般使用梯度下降法求解
  • 非凸优化求解思路
    • 凸松弛:拉格朗日对偶法修改目标函数(凸函数)和约束条件(凸集)
    • 非凸投影梯度下降:Lasso/推荐系统中的矩阵分解,将稀疏矩阵投影到低秩矩阵,秩条件形成非凸集。梯度下降、投影更新、梯度下降、投影更新…
    • 交替优化:在ALS算法中,虽然目标函数是非凸函数,但是在某一分量方向可能是凸函数
    • EM算法等
    • 算法可参考:Non-convex Optimization for Machine Learning
  • 神经网络优化问题
    • 高维存在大量鞍点,不容易陷入局部最优
    • 为了保证泛化能力,防止过拟合,不一定非得求解全局最小值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值