内容简介:在这浮躁的社会沉静,用心记录,用心学习!
“
给定一组神经元,我们可以以神经元为节点来构建一个网络。不同的神经网络模型有着不同网络连接的拓扑结构。一种比较直接的拓扑结构是前馈网络。前馈神经网络(Feedforward Neural Network,FNN)是最早发明的简单人工神经网络。
”
给定一组神经元,我们可以以神经元为节点来构建一个网络。不同的神经网络模型有着不同网络连接的拓扑结构。一种比较直接的拓扑结构是前馈网络。前馈神经网络(Feedforward Neural Network,FNN)是最早发明的简单人工神经网络。
介绍
在前馈神经网络中,不同的神经元属于不同的层,每一层的神经元可以接受到前一层的神经元信号,并产生信号输出到下一层。第0层叫做输入层,最后一层叫做输出层,中间的叫做隐藏层,整个网络中无反馈,信号从输入层到输出层单向传播,可用一个有用无环图表示。
前馈神经网络也成为多层感知器(Mutlti-Layer Perceptron,MLP)。但是多层感知器的叫法并不准确,因为前馈神经网络其实是由多层Logistic回归模型(连续的非线性模型)组成,而不是有多层感知器模型(非连续的非线性模型)组成。
下图为简单的前馈神经网络图:
神经网络中涉及的多个概念:
-
L:表示神经网络的层数
-
m^l:表示第 l 层神经元个数
-
f_l(.):表示第 l 层神经元的激活函数
-
W^l:表示第 l-1 层到第 l 层的权重矩阵
-
b^l:表示第 l-1 层到第 l 层的偏置
-
z^l:表示第 l 层神经元的净输入(净活性值)
-
a^l:表示第l层的神经元输出(活性值)
神经网络的信息传播公式如下(公式1-1)
公式1-1也可以合并写为(公式1-2):
或者(公式1-3)
这样神经网络可以通过逐层的信息传递,得到网络最后的输出a^L。整个网络可以看做一个符合函数
将向量x作为第一层的输入a^0,将第 l 层的输入a^0,将第L层的输出a^L 作为整个函数的输出。
其中W, b表示网络中所有层的连接权重和偏置。
参数学习
如果采用交叉熵损失函数,对于样本(x,y),其损失函数为(公式1-4):
其中 y 属于{0,1}^T为标签y对应的one-hot向量。
给定训练集D={(x^n,y^n)}, N >= n >=0,将每个样本x^n输入给前馈神经网络,得到网络输出为y^n,其在数据集D上的结构化风险函数为(公式1-5):
其中W和b分别表示网络中所有的权重矩阵和偏置向量, (||W|| F)^2是正则化项,用来防止过拟合,lambda是为正数的超参数,lambda越大,W越接近于0。这里的(||W||_F)^2一般使用Frobenius范数:
有了学习准则和训练样本,网络参数可以通过梯度下降法来进行学习。在梯度下降方法的每次迭代过程中,第l层的参数 W^l 和 b^l 参数更新方式为(公式1-6):
其中alpha为学习参数。
梯度下降法需要计算损失函数对参数的偏导数,如果通过链式法则逐一对每个参数进行求偏导效率比较低。在神经网络的训练中经常使用反向传播算法来高效的计算梯度。
反向传播算法
基于误差的反向传播算法(backpropagation,BP)的前馈神经网络训练过程可以分为以下三步:
-
前馈计算每一层的净输入z^l 和激活值 a^l,直到最后一层
-
反向传播计算每一层的误差项
-
计算每一层参数的偏导数,并更新参数
其具体训练过程如下:
自动梯度计算
神经网络中的参数主要是通过梯度下降来进行优化的。当确定了风险函数及网络结构后,我们就可以手动用链式法则来计算风险函数对每个参数的梯度,并用代码进行实现。
目前几乎所有的深度学习框架都包含了自动梯度计算的功能,在使用框架进行神经网络开发时,我们只需要考虑网络的结构并用代码实现,其梯度可以自动进行计算,无需人工干预,这样开发效率就大大提高了。
自动梯度计算方法分为以下三种:
数值微分
数值微分(Numerical Differentiation)是用数值方法计算函数f(x)的导数。函数f(x)的点x的导数定义为:
要计算f(x)在点x的导数,可以对x加上一个很少的非零扰动,然后通过上述定义来直接计算函数f(x)的梯度。数值微分方法非常容易实现,但找到一个合适扰动非常难,如果扰动过小会引起数值计算问题,比如 舍入误差 ;如果扰动过大,会增加 截断误差 ,使得导数计算不准确,因此数值微分的实用性比较差,在实际应用中,常用以下公式来计算梯度可以减少截断误差。
-
舍入误差:是指数值计算中由于数字舍入造成的近似值和精确值之间的差异,比如用浮点数来表示实数。
-
截断误差:数学模型的理论解与数值计算问题的精确解之间的误差
符号微分
符号微分(Symbolic Differentiation)是一种基于符号计算的自动求导方法。符号计算,也叫代数计算,是指用计算机来处理带有变量的数学表达式。
符号计算的输入和输出都是数学表达式的化简、因式分解、微分、积分、解代数方程、求解常微分方程等运算。
比如数学表达式的化简
-
输入:3x-x+2x+1
-
输出:4x+1
符号计算一般来讲是对输入的表达式,通过迭代或递归使用一些事先定义的规则进行转换。当转换结果不能再继续使用变换规则时,便停止计算。
自动微分
自动微分(Automatic Differentiation,AD)是一种可以对一个(程序)函数进行计算导数的方法。符号微分的处理对象是数学表达式,而自动微分的处理对象是一个函数或一段程序。而自动微分可以直接在原始程序代码进行微分。自动微分的基本原理是所有的数值计算可以分解为一些基本操作,包含+,−,×, / 和一些初等函数exp, log, sin, cos 等。
自动微分也是利用链式法则来自动计算一个复合函数的梯度。我们以一个神经网络中常见的复合函数的例子来说明自动微分的过程。为了简单起见,令复合函数f(x;w, b) 为
其中x 为输入标量,w和b 分别为权重和偏置参数。
复合函数f(x;w,b) 可以拆解为:
继而就可以通过链式求导法则进行复合函数求导。
在这浮躁的社会沉静,用心记录,用心学习!
关于【数据与算法联盟】
专注于推荐系统,深度学习,机器学习,数据挖掘,云计算,人工智能,架构和编程等技术干货的分享和探讨,偶尔会推送一些福利,文字,摄影和游记,扫码关注,不再孤单。
更多干货,扫码关注
热
相关文章
线性模型篇之Logistic Regression数学公式推导
基于线性回归看偏差-方差分解(Bias-Variance Decomposition)
欢迎投稿,凡是投稿一经录用者,赠送技术图书和相关学习资料
国内各大互联网公司,可内推
关注公众号,加小编微信,拉你进
【 数据与算法交流群 】
你点的每个 “在 看” ,我都认真当成了喜欢
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 神经网络 – 序列预测LSTM神经网络落后
- 神经网络历史以及浅析神经网络与感知机
- 【神经网络】11行Python代码实现的神经网络
- 常见的五种神经网络(三):循环神经网络(上篇)
- 常见的五种神经网络(三):循环神经网络(中篇)
- 聊聊从脑神经到神经网络
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python编程无师自通
[美] 科里·奥尔索夫(Cory Althoff) / 宋秉金 / 人民邮电出版社 / 2019-1-1 / 59
畅销Python编程类入门书,美国亚马逊Kindle编程类排行榜榜一。 作者从文科毕业,通过自学编程转行为专业程序员,在硅谷工作多年后成功技术创业。本书不仅教读者如何使用Python语言编程,还会介绍其他书中所忽略的、编程初学者应该了解并掌握的其他所有知识点。 本书作者是一名自学成才的程序员,经过一年的自学,掌握了编程技能并在eBay找到了一份软件工程师的工作。本书是作者结合个人经验写......一起来看看 《Python编程无师自通》 这本书的介绍吧!