IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 自学神经网络系列 —— 8 前馈神经网络 -> 正文阅读

[人工智能]自学神经网络系列 —— 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=Wiai?1+biai=sigmoid(zi)?

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

    • 前一隐藏层输出/输入层输入: a i ? 1 a^{i-1} ai?1
    • 隐藏层输入/输入层输出: z i = W i a i ? 1 + b i z^{i}=W^{i}a^{i-1}+b^{i} zi=Wiai?1+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)=N1?n=1N?L(yn,y^?n)+λWF2?WF2?=lL?iMl??jMl?1??wij2?

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} ?Wl?R(W,b)?=N1?n=1N??Wl?L(yn,y^?n)?+λWl?bl?R(W,b)?=N1?n=1N??bl?L(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 } ?Wijl??L(yn,y^?n)?=?zl?L(yn,y^?n)??Wijl??zl??bl?L(yn,y^?n)?=?zl?L(yn,y^?n)??bl?zl?

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

    • ? L ( y n , y ^ n ) ? z l {\partial L(y^n,\hat y^n) \over \partial z^l } ?zl?L(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 } ?Wijl??zl??bl?zl?类似感知机算法,梯度求法类似。

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

  • 误差反向传播迭代公式

δ ( 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)=?zl?L(yn,y^?n)?=?zl+1?L(yn,y^?n)??al?zl+1??zl?al?=δ(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 深度学习中的非凸优化

  • 深度学习中的损失函数一般都是非凸的,神经网络的损失函数为什么是非凸的?
  • 非凸优化
    • 目标函数不是凸函数
    • 可行集不是凸集
    • 大量局部最优解,局部最优解不一定是全局最优解
    • 一般使用梯度下降法求解
  • 非凸优化求解思路
    • 凸松弛:拉格朗日对偶法:修改目标函数(凸函数)和约束条件(凸集)
    • 非凸投影梯度下降:推荐系统中的矩阵分解
    • 交替优化:在ALS算法中,虽然目标函数是非凸函数,但是在某一分量方向可能是凸函数
    • EM算法等
  • 神经网络优化问题
    • 高维存在大量鞍点,不容易陷入局部最优
    • 为了保证泛化能力,防止过拟合,不一定非得求解全局最小值
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:05:31  更:2022-02-16 13:06:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 20:25:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码