MXNET:多层神经网络
多层感知机(multilayer perceptron,简称MLP)是最基础的深度学习模型。
多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。隐藏层位于输入层和输出层之间。隐藏层中的神经元和输入层中各个输入完全连接,输出层中的神经元和隐藏层中的各个神经元也完全连接。因此,多层感知机中的隐藏层和输出层都是全连接层。
仿射变换
在描述隐藏层的计算之前,我们看看多层感知机输出层是怎么计算的。输出层的输入是隐藏层的输出,通常我们将隐藏层的输出称为隐藏层变量或隐藏变量。
给定一个小批量样本,其批量大小为n,输入个数为x,输出个数为y。假设多层感知机只有一个隐藏层,其中隐藏单元个数为h,隐藏变量\(\boldsymbol{H} \in \mathbb{R}^{n \times h}\)。假设输出层的权重和偏差参数分别为\(\boldsymbol{W}_o \in \mathbb{R}^{h \times y}, \boldsymbol{b}_o \in \mathbb{R}^{1 \times y}\),多层感知机输出
\]
实际上,多层感知机的输出\(\boldsymbol{O}\)是对上一层的输出\(\boldsymbol{H}\)的仿射变换(affine
transformation)。它包括一次通过乘以权重参数的线性变换和一次通过加上偏差参数的平移。
那么,如果隐藏层也只对输入做仿射变换会怎么样呢?设单个样本的特征为\(\boldsymbol{x} \in \mathbb{R}^{1 \times x}\),隐藏层的权重参数和偏差参数分别为\(\boldsymbol{W}_h \in \mathbb{R}^{x \times h}, \boldsymbol{b}_h \in \mathbb{R}^{1 \times h}\)。假设
\]
联立两式可得\(\boldsymbol{o} = \boldsymbol{x} \boldsymbol{W}_h \boldsymbol{W}_o + \boldsymbol{b}_h \boldsymbol{W}_o + \boldsymbol{b}_o\):它等价于单层神经网络的输出\(\boldsymbol{o} = \boldsymbol{x} \boldsymbol{W}^\prime + \boldsymbol{b}^\prime\),其中\(\boldsymbol{W}^\prime = \boldsymbol{W}_h \boldsymbol{W}_o, \boldsymbol{b}^\prime = \boldsymbol{b}_h \boldsymbol{W}_o + \boldsymbol{b}_o\)。因此,仅使用仿射变换的隐藏层使多层感知机与前面介绍的单层神经网络没什么区别。
激活函数
由上面的例子可以看出,我们必须在隐藏层中使用其他变换,例如添加非线性变换,这样才能使多层感知机变得有意义。我们将这些非线性变换称为激活函数(activation function)。激活函数能对任意形状的输入按元素操作且不改变输入的形状。
ReLU函数
ReLU(rectified linear unit)函数提供了一个很简单的非线性变换。给定元素x,该函数的输出是\(\text{relu}(x) = \max(x, 0)\),ReLU函数只保留正数元素,并将负数元素清零。
Sigmoid函数
Sigmoid函数可以将元素的值变换到0和1之间:\(\text{sigmoid}(x) = \frac{1}{1 + \exp(-x)}\),我们会在后面“循环神经网络”一章中介绍如何利用sigmoid函数值域在0到1之间这一特性来控制信息在神经网络中的流动。
Tanh函数
Tanh(双曲正切)函数可以将元素的值变换到-1和1之间:\(\text{tanh}(x) = \frac{1 - \exp(-2x)}{1 + \exp(-2x)}\)。当元素值接近0时,tanh函数接近线性变换。值得一提的是,它的形状和sigmoid函数很像,且当元素在实数域上均匀分布时,tanh函数值的均值为0。
from mxnet import ndarray as nd
X = nd.array([[[0,1], [-2,3], [4,-5]], [[6,-7], [8,-9], [10,-11]]])
print X.relu(), X.sigmoid(), X.tanh()
多层感知机
现在,可以给出多层感知机的矢量计算表达式了。
\boldsymbol{O} = \boldsymbol{H} \boldsymbol{W}_o + \boldsymbol{b}_o,\end{split}\]
在分类问题中,我们可以对输出O做Softmax运算,并使用Softmax回归中的交叉熵损失函数。 在回归问题中,我们将输出层的输出个数设为1,并将输出O直接提供给线性回归中使用的平方损失函数。
我们可以添加更多的隐藏层来构造更深的模型。需要指出的是,多层感知机的层数和各隐藏层中隐藏单元个数都是超参数。
随机初始化模型参数
在神经网络中,我们需要随机初始化模型参数。
MXNet的默认随机初始化,我们使用net.initialize(init.Normal(sigma=0.01))令模型net的权重参数采用正态分布的随机初始化方式。如果不指定初始化方法,例如net.initialize(),我们将使用MXNet的默认随机初始化方法。在默认条件下的初始化时,权重参数每个元素随机采样于-0.07到0.07之间的均匀分布,偏差参数全部元素清零。
Xavier随机初始化
还有一种比较常用的随机初始化方法叫做Xavier随机初始化,假设某全连接层的输入个数为:math:a,输出个数为b,Xavier随机初始化将该层权重参数的每个元素随机采样于均匀分布
\]
它的设计主要考虑到,模型参数初始化后,每层输出的方差不该被该层输入个数所影响,且每层梯度的方差不该被该层输出个数所影响。这两点与我们之后将要介绍的正向传播和反向传播有关。
MXNET:多层神经网络的更多相关文章
- 多层神经网络BP算法 原理及推导
首先什么是人工神经网络?简单来说就是将单个感知器作为一个神经网络节点,然后用此类节点组成一个层次网络结构,我们称此网络即为人工神经网络(本人自己的理解).当网络的层次大于等于3层(输入层+隐藏层(大于 ...
- TensorFlow 训练MNIST数据集(2)—— 多层神经网络
在我的上一篇随笔中,采用了单层神经网络来对MNIST进行训练,在测试集中只有约90%的正确率.这次换一种神经网络(多层神经网络)来进行训练和测试. 1.获取MNIST数据 MNIST数据集只要一行代码 ...
- 用Tensorflow实现多层神经网络
用Tensorflow实现多层神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Tensorflow机器学习实战指南 源代码请点击下方链接欢迎加星 ReLU激活函数/L1范数 ...
- Spark2.0机器学习系列之7: MLPC(多层神经网络)
Spark2.0 MLPC(多层神经网络分类器)算法概述 MultilayerPerceptronClassifier(MLPC)这是一个基于前馈神经网络的分类器,它是一种在输入层与输出层之间含有一层 ...
- ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)
ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程) ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在dee ...
- MLP(多层神经网络)介绍
写在前面的 接触神经网络(ANN)的时间很长了,以前也只是学了学原理,做过一个BPN的练习,没有系统的总结过,最近看Torch的源码,对MLP有了更多的了解,写写自己学到的东西吧,算是做了一次总结! ...
- 学习笔记TF011:多层神经网络
线性回归.对数几率回归模型,本质上是单个神经元.计算输入特征加权和.偏置视为每个样本输入特征为1权重,计算特征线性组合.激活(传递)函数 计算输出.线性回归,恒等式(值不变).对数几率回归,sigmo ...
- mxnet卷积神经网络训练MNIST数据集测试
mxnet框架下超全手写字体识别—从数据预处理到网络的训练—模型及日志的保存 import numpy as np import mxnet as mx import logging logging. ...
- 简单多层神经网络实现异或XOR
最近在看<Neural Network Design_Hagan> 然后想自己实现一个XOR 的网络. 由于单层神经网络不能将异或的判定分为两类. 根据 a^b=(a&~b)|(~ ...
随机推荐
- windows下redis安装和配置
windows下redis安装和配置 redis介绍 Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. Redis有三个主要特点,使它优越于其它键值数 ...
- 图片裁切展示css
.wen_photo{ overflow:hidden;}.wen_photo img{ margin:0; padding:0; width:100%; height: 100%; object-f ...
- [CodeVS4438]YJQ Runs Upstairs
[CodeVS4438]YJQ Runs Upstairs 题目大意: 一个\(n(n\le50)\)个点\(m(m\le300)\)条边的DAG,保证从\(1\)到\(n\)的所有路径经过边数均小于 ...
- 走进java
Java 技术体系 1.java技术语言 2.各种硬件平台上的java虚拟机 3.Class文件格式 4.Java API类库 5.来自商业机构和开源社区的第三方Java类库 我们把Java程序设计语 ...
- maven的pom.xml配置文件中常用的配置标签解析(2018-03-13)
来自:https://www.cnblogs.com/Nick-Hu/p/7288198.html 拿过来记录下 <project xmlns="http://maven.apache ...
- PAT-A1135. Is It A Red-Black Tree (30)
已知先序序列,判断对应的二叉排序树是否为红黑树.序列中负数表示红色结点,正数表示黑色结点.该序列负数取绝对值后再排序得到的是中序序列.根据红黑树的性质判断它是否符合红黑树的要求.考察了根据先序序列和中 ...
- reac-native环境搭建
转载链接:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/react-native%E7%8E%AF%E5%A2%83%E6%90% ...
- AngularJS中的ng-controller是什么东东
在AngularJS中,ng-controller是最常用的directive.比如: var app = angular.module("app",[]); app.contro ...
- Java Comparator字符排序(数字、字母、中文混合排序)
Java.lang.Character类 复习一下 这是修正前的排序效果: 这是修正后的排序效果: 完整示例: 以下是排序的部份代码(非全部代码:拼音首字母算法不在其中) import java.ut ...
- Go语言之高级篇beego框架之view
1.基本语法 go统一使用了{{ 和 }}作为左右标签,没有其它的标签符号. 如果你想要修改为其它符号,可以修改配置文件. 使用.来访问当前位置的上下文 使用$来引用当前模板根级的上下文 2.使用方法 ...