专栏首页拇指笔记【动手学深度学习笔记】之多层感知机(MLP)

【动手学深度学习笔记】之多层感知机(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回归模型相结合。


本文分享自微信公众号 - 拇指笔记(shuzhi990),作者:拇指笔记

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【数学建模】之Matlab实现BP神经网络

    trainning:用来训练的数据。 validtion:测量网络泛化的数据(泛化停止改善时停止训练) testing:用来测试神经网络的数据。

    树枝990
  • 【Python爬虫】写一个爬取中国天气网的终端版天气预报爬虫

    前几篇文章介绍了爬取静态网站的主要方法。今天写一个小项目实践一下。本项目可以在终端窗口查询全国3400多个区县的当天天气信息和近七天天气信息。

    树枝990
  • 【动手学深度学习笔记】之Pytorch实现线性回归

    Pytorch提供了大量预定义的层,使用框架时,主要是需要关注使用哪些层来构造模型。

    树枝990
  • jupyter 使用Pillow包显示图像时inline显示方式

    可以使用matplotlab.pyplot【显示图片工具】 和 Pillow【图片处理工具】 结合使用

    砸漏
  • 干货 | 画论文折线图、曲线图?几个代码模板轻松搞定!

    这几天在搞论文图,唉说实话抠图这种东西真能逼死人。坐在电脑前抠上一天越看越丑,最后把自己丑哭了……

    短短的路走走停停
  • 机器学习:Python测试线性可分性的方法

    ? 线性和非线性分类 两个子集是线性可分的,如果存在一个超平面将每组的元素的所有元素的一组驻留在另一侧的超平面其他设置。我们可以描述它在2D绘图中通过分离线,...

    AiTechYun
  • Matplotlib入门

    标题中的英文首字母大写比较规范,但在python实际使用中均为小写。 2018年7月30日笔记 作者的集成开发环境是jupyter,Python版本为3.6...

    潇洒坤
  • matplotlib: 绘制平面图/表格

    JNingWei
  • Python数据分析之Matplotlib(2)

    自己的状态已经调整过来了,今天恢复更新,之前的赠书活动仍然有效,在文末可以点击传送门,大家积极参与。今天介绍的是三剑客之一Matplotlib折线图的相关。

    PM小王
  • Python 绘图包 Matplotlib Pyplot 教程

    matplotlib.pyplot 是命令风格函数的集合,使 Matplotlib 像 MATLAB 一样工作。每个 Pyplot 函数对图形做一些修改,例如:...

    用户7886150

扫码关注云+社区

领取腾讯云代金券