【动手学深度学习笔记】之多层感知机(MLP)
时间:2022-07-23
本文章向大家介绍【动手学深度学习笔记】之多层感知机(MLP),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 多层感知机
本节将以多层感知机为例,介绍多层神经网络的概念。
1.1 隐藏层
下图为一个多层感知机的神经网络图。
多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。如图所示的隐藏层一共有5个隐藏单元。由于输入层不涉及计算,因此这个多层感知机的层数为2。如图所示的多层感知机中的隐藏层和输出层都是全连接层。
对于一个只有一个隐藏层且隐藏单元个数为h的多层感知机,记它的输出为H。因为这个多层感知机中的隐藏层和输出层都是全连接层,所以可以设:隐藏层的权重参数和偏差参数分别为和,输出层的权重参数和偏差参数分别为和
由此我们可以得到单隐藏层神经网络输入、隐藏层输出和输出之间的关系
将两个式子联立起来,得到输入与输出之间的关系。
由上式不难看出,这样的神经网络虽然引入了(一个或多个)隐藏层,却依然等价于一个单层神经网络。引起该问题的根源是全连接层,全连接层只是对数据进行仿射变换,而多个仿射变换叠加仍然为一个仿射变换。为了解决这样的问题,引入了非线性变换,即激活函数。
1.2 激活函数
非线性函数是指对隐藏变量使用暗元素运算的非线性函数进行变换,然后再做为下一个全连接层输入。这个非线性函数叫做激活函数。
下面介绍几种常用的激活函数。
1.2.1 ReLU函数(线性整流函数)
ReLU函数
- 功能:ReLU函数只保留正数元素,并将负数元素清零。
- 定义:
- 函数图像和导数图像:
- 绘制程序
%matplotlib inlineimport torchimport numpy as npimport matplotlib.pylab as plt
x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True)y = x.relu()
y.sum().backward()z = x.grad
x = x.detach().numpy()y = y.detach().numpy()plt.ylim(ymin=-1,ymax=7)plt.plot(x, y)plt.xlabel('x')plt.ylabel('ReLU(x)')
plt.figure(2)
plt.ylim(ymin=-0.05,ymax=1.05)plt.xlim(xmin=-8,xmax=8)plt.plot(x,z)plt.xlabel('x')plt.ylabel('grad of ReLU(x)')
1.2.2 sigmoid函数(S型函数)
sigmoid函数
- 功能:sigmoid函数可以将元素的值变换到0和1之间。
- 定义:
- 函数图像和导数图像:
- 绘制程序
%matplotlib inlineimport torchimport numpy as npimport matplotlib.pylab as plt
x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True)y = x.sigmoid()
y.sum().backward()z = x.grad
x = x.detach().numpy()y = y.detach().numpy()plt.ylim(ymin=-0.1,ymax=1.1)plt.plot(x, y)plt.xlabel('x')plt.ylabel('sigmoid(x)')
plt.figure(2)plt.ylim(ymin=-0.05,ymax=0.3)plt.xlim(xmin=-8,xmax=8)plt.plot(x,z)plt.xlabel('x')plt.ylabel('grad of sigmoid(x)')
1.2.3 tanh函数(双曲正切函数)
tanh函数
- 功能:可以将元素的值变换到-1和1之间
- 定义:
- 函数图像和导数图像
- 绘制程序
%matplotlib inlineimport torchimport numpy as npimport matplotlib.pylab as plt
x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True)y = x.tanh()
y.sum().backward()z = x.grad
x = x.detach().numpy()y = y.detach().numpy()plt.ylim(ymin=-1.1,ymax=1.1)plt.plot(x, y)plt.xlabel('x')plt.ylabel('tanh(x)')
plt.figure(2)plt.ylim(ymin=-0.05,ymax=1.1)plt.xlim(xmin=-8,xmax=8)plt.plot(x,z)plt.xlabel('x')plt.ylabel('grad of tanh(x)')
1.3 多层感知机(MLP)
多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换 。多层感知机的层数和各隐藏层中隐藏单元个数都是超参数。
式中表示激活函数,通过对输出层进行操作,我们可以将多层感知机和之前的线性回归模型及softmax回归模型相结合。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法