Python 全栈体系【四阶】(十六)

第五章 深度学习

请添加图片描述

一、基本理论

2. 深度神经网络结构

2.1 感知机
2.1.1 生物神经元

感知机(Perceptron),又称人工神经元(Artificial neuron),它是生物神经元在计算机中的模拟。下图是一个生物神经元示意图:
请添加图片描述

2.1.2 生物神经网络

更多的生物神经元相互连接,形成复杂的神经网络。人类神经元数量在 1011 数量级。
请添加图片描述

2.1.3 什么是感知机

感知机(Perceptron),又称神经元(Neuron,对生物神经元进行了模仿)是神经网络(深度学习)的起源算法,1958 年由康奈尔大学心理学教授弗兰克·罗森布拉特(Frank Rosenblatt)提出,它可以接收多个输入信号,产生一个输出信号。

请添加图片描述

2.1.4 感知机的功能

作为分类器/回归器,解决线性分类(逻辑和、逻辑或)、回归问题

  • 神经元作为回归器 / 分类器
    请添加图片描述
  • 逻辑和(线性分类)
    请添加图片描述
  • 逻辑或(线性分类)
    请添加图片描述

组成神经网络

2.1.5 如何实现感知机

实现逻辑和

在这里插入图片描述

实现逻辑或

在这里插入图片描述

2.1.6 感知机的局限

感知机的局限在于无法处理“异或”问题(非线性问题)
请添加图片描述

2.1.7 多层感知机

1975 年,感知机的“异或”难题才被理论界彻底解决,即通过多个感知机组合来解决该问题,这种模型也叫多层感知机(Multi-Layer Perceptron,MLP)。如下图所示,神经元节点阈值均设置为 0.5
请添加图片描述

多层感知机解决异或门实现

在这里插入图片描述

2.2 神经网络
2.2.1 什么是神经网络

感知机由于结构简单,完成的功能十分有限。可以将若干个感知机连在一起,形成一个级联网络结构,这个结构称为“多层前馈神经网络”(Multi-layer Feedforward Neural Networks)。所谓“前馈”是指将前一层的输出作为后一层的输入的逻辑结构。每一层神经元仅与下一层的神经元全连接。但在同一层之内,神经元彼此不连接,而且跨层之间的神经元,彼此也不相连。

在这里插入图片描述

2.2.2 神经网络的功能

1989 年,奥地利学者库尔特·霍尼克(Kurt Hornik)等人发表论文证明,对于任意复杂度的连续波莱尔可测函数(Borel Measurable Function)f,仅仅需要一个隐含层,只要这个隐含层包括足够多的神经元,前馈神经网络使用挤压函数(Squashing Function)作为激活函数,就可以以任意精度来近似模拟 f。如果想增加 f 的近似精度,单纯依靠增加神经元的数目即可实现。

这个定理也被称为通用近似定理(Universal Approximation Theorem),该定理表明,前馈神经网在理论上可近似解决任何问题。

2.2.3 通用近似定理几何解释

现有目标函数 f ( x ) = x 3 + x 2 − x − 1 f(x) = x^3 + x^2 - x - 1 f(x)=x3+x2x1,可以使用 6 个神经元进行模拟:
在这里插入图片描述
请添加图片描述
请添加图片描述

2.2.4 神经网络为什么要足够深

其实,神经网络的结构还有另外一个“进化”方向,那就是朝着“纵深”方向发展,也就是说,减少单层的神经元数量,而增加神经网络的层数,也就是“深”而“瘦”的网络模型。

微软研究院的科研人员就以上两类网络性能展开了实验,实验结果表明:增加网络的层数会显著提升神经网络系统的学习性能。

在这里插入图片描述

2.2.5 多层神经网络计算公式

神经网络涉及很多层权重,每一层又由多个权重组成,符号表示规则如下所示:
在这里插入图片描述
以下是一个多层神经网络及其计算公式:
请添加图片描述

2.3 激活函数
2.3.1 什么是激活函数

在神经网络中,将输入信号的总和转换为输出信号的函数被称为激活函数(activation function)。
请添加图片描述

2.3.2 为什么使用激活函数

激活函数将多层感知机输出转换为非线性,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

如果一个多层网络,使用连续函数作为激活函数的多层网络,称之为“神经网络”,否则称为“多层感知机”。所以,激活函数是区别多层感知机和神经网络的依据。

2.3.3 常见激活函数

阶跃函数

  • 阶跃函数(Step Function)是一种特殊的连续时间函数,是一个从 0 跳变到 1 的过程,函数形式与图像:
    请添加图片描述

sigmoid 函数

  • sigmoid 函数也叫 Logistic 函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类,表达式: σ ( x ) = 1 / ( 1 + e − x ) σ(x) = 1 / (1 + e^{-x}) σ(x)=1/(1+ex)
    在这里插入图片描述

  • 优点:平滑、易于求导

  • 缺点:激活函数计算量大,反向传播求误差梯度时,求导涉及除法;反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练

tanh 双曲正切函数
请添加图片描述

  • 优点:平滑、易于求导;输出均值为 0,收敛速度要比 sigmoid 快,从而可以减少迭代次数
  • 缺点:梯度消失
  • 用途:常用于 NLP 中

ReLU(Rectified Linear Units,修正线性单元)
请添加图片描述

  • 优点:

    • 更加有效率的梯度下降以及反向传播,避免了梯度爆炸和梯度消失问题
    • 计算过程简单
  • 缺点:小于等于 0 的部分梯度为 0

  • 用途:常用于图像

Softmax

  • Softmax 函数定义如下,其中 V i V_i Vi 是分类器前级输出单元的输出。i 表示类别索引,总的类别个数为 C。 S i S_i Si 表示的是当前元素的指数与所有元素指数和的比值。通过Softmax 函数就可以将多分类的输出数值转化为相对概率,而这些值的累和为 1,常用于神经网络输出层。表达式:
    在这里插入图片描述 请添加图片描述
2.3.4 案例:实现常见激活函数

请添加图片描述

2.4 小结

感知机

  • 接收多个输入信号,产生一个输出信号,无法解决异或问题

多层感知机

  • 将多个感知机组合

多层前馈网络

  • 若干个感知机组合成若干层的网络,上一层输出作为下一层输入

激活函数

  • 将计算结果转换为输出的值,包括阶跃函数、sigmoid、tanh、ReLU
  • 14
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python全栈开发是指使用Python语言进行前后端开发的技术栈。Python作为一门简洁、易学、功能强大的编程语言,具有广泛的应用领域和良好的生态系统,因此在全栈开发中也有着广阔的前景。 Python全栈开发可以涵盖以下几个方面: 1. 前端开发Python可以使用各种框架(如Django、Flask、Tornado等)进行前端开发,构建用户友好的网页界面和交互体验。 2. 后端开发Python在后端开发方面有着丰富的库和框架支持,如Django、Flask、Pyramid等,可以用于构建高性能、可扩展的Web应用程序和API。 3. 数据库管理:Python提供了多种数据库连接库和ORM框架,如SQLAlchemy、Django ORM等,可以方便地进行数据库操作和管理。 4. 服务器管理:Python可以通过各种工具和库来进行服务器管理和自动化部署,如Fabric、Ansible等,提高开发效率和系统稳定性。 5. 数据分析与科学计算:Python拥有强大的数据分析和科学计算库,如NumPy、Pandas、Matplotlib等,可以进行数据处理、可视化和机器学习等任务。 Python全栈开发的前景非常广阔。随着互联网的快速发展,Web应用程序的需求不断增加,对全栈开发人员的需求也在增加。而Python作为一门易学易用的语言,具有丰富的库和框架支持,使得开发人员可以更快速地构建高质量的应用程序。此外,Python在数据分析和人工智能领域也有着广泛的应用,这为全栈开发人员提供了更多的发展机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬小帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值