首页 > 其他分享 >神经网络与深度学习(二):前馈神经网络

神经网络与深度学习(二):前馈神经网络

时间:2022-11-07 21:37:28浏览次数:82  
标签:right frac 函数 boldsymbol 前馈 神经网络 深度 partial left

神经元

激活函数的性质

  • 连续并可导(允许少数点上不可导)的非线性函数。
    • ​ 可导的激活函数可以直接利用数值优化的方法来学习网络参数。
  • 激活函数及其导函数要尽可能的简单
    • ​ 有利于提高网络计算效率。
  • 激活函数的导函数的值域要在一个合适的区间内
    • ​ 不能太大也不能太小,否则会影响训练的效率和稳定性。
  • 单调递增

常用的激活函数

image-20221107191954701

复合函数=S型函数+斜坡函数

S型函数

Logistic函数

\[\sigma ( x ) = \frac { 1 } { 1 + e x p ( - x ) } \]

\[\left. \begin{array} { l } { tan h ( x ) = \frac { e x p ( x ) - e x p ( - x ) } { e x p ( x ) + e x p ( - x ) } } \\ { tan h ( x ) = 2 \sigma ( 2 x ) - 1 } \end{array} \right. \]

性质:

  • 饱和函数
  • Tanh函数是零中心化的,而logistic函数的输出恒大于0

斜坡函数

\[Relu(x)=max(0,x) \]

  • 计算上更加高效
  • 生物学合理性
    • 单侧抑制、宽兴奋边界
  • 在一定程度上缓解梯度消失问题

死亡ReLU问题(Dying ReLU Problem)

\[\begin{array}{l} LeakyReLU(x)=\left\{\begin{array}{ll} x& \text { if } x>0 \\ \gamma x & \text { if } x \leq 0 \end{array}\right.\\ =\max (0, x)+\gamma \min (0, x) \end{array} \]

近似的零中心化的非线性函数

\[\begin{aligned} \mathrm{ELU}(x) &=\left\{\begin{array}{ll} x & \text { if } x>0 \\ \gamma(\exp (x)-1) & \text { if } x \leq 0 \end{array}\right.\\ &=\max (0, x)+\min (0, \gamma(\exp (x)-1)) \end{aligned} \]

Rectifier函数的平滑版本

\[\operatorname{Softplus}(x)=\log (1+\exp (x)) \]

复合函数

Swish函数:一种自门控(Self-Gated)激活函数

\[swish(x)=x\sigma(\beta x) \]

高斯误差线性单元(Gaussian Error Linear Unit,GELU)

\[GELU(x)=xP(X\le x) \]

image-20221107193345779

神经网络

人工神经网络主要由大量的神经元以及它们之间的有向连接构成。因此考虑三方面:

  • 神经元的激活规则
    • ​ 主要是指神经元输入到输出之间的映射关系,一般为非线性函数。
  • 网络的拓扑结构
    • ​ 不同神经元之间的连接关系。
  • 学习算法
    • ​ 通过训练数据来学习神经网络的参数。

网络结构

人工神经网络由神经元模型构成,这种由许多神经元组成的信息处理网络具有并行分布结构。

image-20221107193700166

神经网络是一种主要的连接主义模型

​ 20世纪80年代后期,最流行的一种连接主义模型是分布式并行处理(Parallel Distributed Processing,PDP)网络,其有3个主要特性:

  1. 信息表示是分布式的(非局部的);
  2. 记忆和知识是存储在单元之间的连接上;
  3. 通过逐渐改变单元之间的连接强度来学习新的知识。

引入误差反向传播来改进其学习能力之后,神经网络也越来越多地应用在各种机器学习任务上。

前馈神经网络

全连接神经网络、多层感知器

  • 各神经元分别属于不同的层,层内无连接。
  • 相邻两层之间的神经元全部两两连接。
  • 整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示。
image-20221107194139768

给定一个前馈神经网络,用下面的记号来描述这样网络:

image-20221107194301313

信息传递过程

前馈神经网络通过下面公式进行信息传播。

\[\begin{aligned} z^{(l)} &=\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)} \\ \boldsymbol{a}^{(l)} &=f_{l}\left(\boldsymbol{z}^{(l)}\right) \end{aligned} \]

\[\boldsymbol{a}^{(l)}=f_{l}\left(\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)}\right) \]

前馈计算:

image-20221107195019787

应用到机器学习

神经网络可以作为一个“万能”函数来使用,可以用来进行复杂的特征转换,或逼近一个复杂的条件分布。

\[\hat{y}=g(\phi(\boldsymbol{x}) ; \theta) \]

image-20221107195727314

深层前馈神经网络

image-20221107195922056

参数学习

对于多分类问题

如果使用Softmax回归分类器,相当于网络最后一层设置C个神经元,其输出经过Softmax函数进行归一化后可以作为每个类的条件概率。

\[\hat{\boldsymbol{y}}=\operatorname{softmax}\left(z^{(L)}\right) \]

采用交叉熵损失函数,对于样本(X,y),其损失函数为

\[\mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})=-\boldsymbol{y}^{\top} \log \hat{\boldsymbol{y}} \]

给定训练集为 $D=\left{\left(\boldsymbol{x}^{(n)}, y{(n)}\right)\right}_{n=1}{N} $, 将每个样本 $ \boldsymbol{x}^{(n)} $ 输入 给前馈神经网络, 得到网络输出为$ \hat{y}^{(n)} $, 其在数据集 \(\mathrm{D}\) 上的 结构化风险函数为:

\[\mathcal{R}(\boldsymbol{W}, \boldsymbol{b})=\frac{1}{N} \sum_{n=1}^{N} \mathcal{L}\left(\boldsymbol{y}^{(n)}, \hat{\boldsymbol{y}}^{(n)}\right)+\frac{1}{2} \lambda\|\boldsymbol{W}\|_{F}^{2} \]

Frobenius范数

\[\|\boldsymbol{W}\|_{F}^{2}=\sum_{l=1}^{L} \sum_{i=1}^{M_{l}} \sum_{j=1}^{M_{l-1}}\left(w_{i j}^{(l)}\right)^{2} \]

梯度下降

计算

\[\frac{\partial \mathcal{R}(\boldsymbol{W}, \boldsymbol{b})}{\partial \boldsymbol{W}^{(t)}} \]

\(和\)

\[\frac{\partial \mathcal{R}(\boldsymbol{W}, \boldsymbol{b})}{\partial \boldsymbol{b}^{(t)}} \]

如何计算梯度?

神经网络为一个复杂的复合函数

链式法则?

\[y=f^{5}\left(f^{4}\left(f^{3}\left(f^{2}\left(f^{1}(x)\right)\right)\right)\right) \rightarrow \frac{\partial y}{\partial x}=\frac{\partial f^{1}}{\partial \mathrm{x}} \frac{\partial f^{2}}{\partial f^{1}} \frac{\partial f^{3}}{\partial f^{2}} \frac{\partial f^{4}}{\partial f^{3}} \frac{\partial f^{5}}{\partial f^{4}} \]

反向传播算法

​ 根据前馈网络的特点而设计的高效方法

一个更加通用的计算方法

​ 自动微分(Automatic Differentiation,AD)

反向传播算法

矩阵微积分

  • 矩阵微积分(Matrix Calculus)是多元微积分的一种表达方式,即使用矩阵和向量来表示因变量每个成分关于自变量每个成分的偏导数。

  • 分母布局

    • 标量关于向量的偏导数

    \[\frac{\partial y}{\partial x}=\left[\frac{\partial y}{\partial x_{1}}, \cdots, \frac{\partial y}{\partial x_{M}}\right]^{\top} \in \mathbb{R}^{M \times 1} \]

    • 向量关于向量的偏导数

    \[\frac{\partial f(\boldsymbol{x})}{\partial \boldsymbol{x}}=\left[\begin{array}{ccc} \frac{\partial y_{1}}{\partial x_{1}} & \cdots & \frac{\partial y_{N}}{\partial x_{1}} \\ \vdots & \ddots & \vdots \\ \frac{\partial y_{1}}{\partial x_{M}} & \cdots & \frac{\partial y_{N}}{\partial x_{M}} \end{array}\right] \in \mathbb{R}^{M \times N} \]

    image-20221107202932002
image-20221107203321837 image-20221107203821827 image-20221107203952655

使用反向传播算法的随机梯度下降训练过程

image-20221107204130058

自动梯度计算

计算图与自动微分

自动微分是利用链式法则来自动计算一个复合函数的梯度。

\[f(x ; w, b)=\frac{1}{\exp (-(w x+b))+1} \]

计算图

image-20221107204404304

自动微分

反向模式和反向传播的计算梯度的方式相同,通常使用反向模式

image-20221107205216477

如果函数和参数之间有多条路径,可以将这多条路径上的导数再进行相加,得到最终的梯度。

反向传播算法(自动微分的反向模式)

前馈神经网络的训练过程可以分为以下三步

  1. 前向计算每一层的状态和激活值,直到最后一层
  2. 反向计算每一层的参数的偏导数
  3. 更新参数

静态计算图和动态计算图

  • 静态计算图是在编译时构建计算图,计算图构建好之后在程序运行时不能改变。
    Theano和Tensorflow
  • 动态计算图是在程序运行时动态构建。
    DyNet,Chainer和PyTorch

两种构建方式各有优缺点

  • 静态计算图在构建时可以进行优化,并行能力强,但灵活性比较差低。
  • 动态计算图则不容易优化,当不同输入的网络结构不一致时,难以并行计算,但是灵活性比较高。

Keras

深度学习的三个步骤

  1. 定义网络
  2. 损失函数
  3. 优化

优化问题

非凸优化问题

\[y = \sigma( w _ { 2 } \sigma ( w _ { 1 } x ) ) \]

image-20221107211416590

梯度消失问题(Vanishing Gradient Problem)

image-20221107211731977

难点

  • 非凸优化问题:即存在局部最优而非全局最优解,影响迭代
  • 梯度消失问题,下层参数比较难调
  • 参数过多,影响训练
    • ​ 参数解释起来比较困难

需求

  • 计算资源要大
  • 数据要多
  • 算法效率要好:即收敛快

课程视频传送门:https://www.bilibili.com/video/BV1P3411u7c1?p=30

原创作者:孤飞-博客园
原文链接:https://www.cnblogs.com/ranxi169/p/16867528.html

标签:right,frac,函数,boldsymbol,前馈,神经网络,深度,partial,left
From: https://www.cnblogs.com/ranxi169/p/16867528.html

相关文章

  • 关于入门深度学习mnist数据集前向计算的记录
    importosimportlraslrimporttensorflowastffrompyspark.sql.functionsimportstddevfromtensorflow.kerasimportdatasetsos.environ['TF_CPP_MIN_LOG_LEVEL']=......
  • 4.深度学习(1) --神经网络编程入门
    前言目前深度学习、AI研究很火爆,它们依赖的最底层就是简单的神经网络,本文将介绍神经网络基础,了解基本的神经网络原理,同时给出样例参考,该样例可以推广到其他的分类、回归问题......
  • 源码级深度理解 Java SPI
    作者:vivo互联网服务器团队-ZhangPengSPI是一种用于动态加载服务的机制。它的核心思想就是解耦,属于典型的微内核架构模式。SPI在Java世界应用非常广泛,如:Dubbo、Sp......
  • 〖TensorFlow2.0笔记22〗使用Numpy在MNIST数据集上实现3层BP神经网络!
    使用Numpy在MNIST数据集上实现3层BP神经网络!本文章是TensorFlow2.0学习笔记系列,欢迎关注该,专栏链接:​​TensorFlow2.0学习笔记​​,文章会持续更细,多希望大家点赞收藏......
  • React生命周期深度完全解读
    在React中,对于每一次由状态改变导致页面视图的改变,都会经历两个阶段:render阶段、commit阶段。只有class组件才有生命周期,因为class组件会创建对应的实例,而函数组......
  • 人工智能、机器学习和深度学习有什么区别?
    在大数据时代,人们往往被人工智能(AI)、机器学习(ML)、深度学习(DL)这一些热词轰炸。但不少人对这些词汇的含义以及之间的关系比较模糊,甚至混为一谈。本章作为人工智能的第一章节......
  • 深度学习基础课:全连接层的梯度检查
    大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序线上课程资料:本节课录像回放1加QQ群,获......
  • 第2期 分布迁移下的深度学习时间序列异常检测方法探究 2021-09-22
    2021-09-22      Gartner曲线:https://baijiahao.baidu.com/s?id=1741660322658337733&wfr=spider&for=pc      source domainA中是......
  • 深度学习添加噪声
    importskimageimportosfromskimageimportioimportrandomdefaddPoissonNoise(s):var=random.uniform(0.01,0.2)origin=skimage.io.imread(s)......
  • 套汇问题 Python实现,算法设计,DFS深度遍历
    #P67#套汇问题可以理解为一个有向图找出环的问题,#要想有盈利,需要所有的汇率乘积大于1#在贪心条件下,找到一个环路径上的乘积大于1就有套汇的可能性"""#输入一......