• 04.1、多层感知机


    04.1、多层感知机

    一套完整流程:

    • 处理数据
    • 输出转换为有效地概率分布
    • 损失函数
    • 最小化模型参数

    4.1.1 隐藏层

    4.1.1.1. 线性模型可能会出错
    • 线性意味着单调假设:
      任何特征的增大都会导致模型输出的增大(如果对应的权重为正), 或者导致模型输出的减小(如果对应的权重为负)。
    • 很容易找出违反单调性的例子
    • 简单来说,对于一些情况,线性模型的无法进行合理的表示
    4.1.1.2. 在网络中加入隐藏层
    • 在网络中加入一个或多个隐藏层来克服线性模型的限制,使其能处理更普遍的函数关系类型。
    • 最简单的方法是将许多全连接层堆叠在一起

    多层感知机(multilayer perceptron),通常缩写为MLP。 下面,我们以图的方式描述了多层感知机。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6KYU9ePp-1662646637380)(https://zh.d2l.ai/_images/mlp.svg)]

    • 这个多层感知机有4个输入,3个输出,其隐藏层包含5个隐藏单元。
    • 输入层不涉及任何计算,因此使用此网络产生输出只需要实现隐藏层和输出层的计算。 因此,这个多层感知机中的层数为2。
    • 注意,这两个层都是全连接的。
    • 每个输入都会影响隐藏层中的每个神经元, 而隐藏层中的每个神经元又会影响输出层中的每个神经元。
    4.1.1.3. 从线性到非线性

    需要激活函数,将线性转变为非线性

    4.1.1.4. 通用近似定理
    • 多层感知机可以通过隐藏神经元,捕捉到输入之间复杂的相互作用, 这些神经元依赖于每个输入的值
    • 在一对输入上进行基本逻辑操作,多层感知机是通用近似器
    • 虽然一个单隐层网络能学习任何函数, 但并不意味着我们应该尝试使用单隐藏层网络来解决所有问题

    4.1.2. 激活函数

    激活函数(activation function)通过计算加权和并加上偏置来确定神经元是否应该被激活,
    它们将输入信号转换为输出的可微运算。 大多数激活函数都是非线性的。
    由于激活函数是深度学习的基础,下面简要介绍一些常见的激活函数。

    %matplotlib inline
    import torch
    from d2l import torch as d2l
    
    • 1
    • 2
    • 3
    4.1.2.1. ReLU函数

    修正线性单元(Rectified linear unit,ReLU), 因为它实现简单,同时在各种预测任务中表现良好。

    x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True)
    y = torch.relu(x)
    d2l.plot(x.detach(), y.detach(), 'x', 'relu(x)', figsize=(5, 2.5))
    
    # 导数
    y.backward(torch.ones_like(x), retain_graph=True)
    d2l.plot(x.detach(), x.grad, 'x', 'grad of relu', figsize=(5, 2.5))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    4.1.2.2. sigmoid函数

    sigmoid函数将输入变换为区间(0, 1)上的输出。
    因此,sigmoid通常称为挤压函数(squashing function): 它将范围(-inf, inf)中的任意输入压缩到区间(0, 1)中的某个值

    y = torch.sigmoid(x)
    d2l.plot(x.detach(), y.detach(), 'x', 'sigmoid(x)', figsize=(5, 2.5))  
    
    # 导数图像
    # 清除以前的梯度
    x.grad.data.zero_()
    y.backward(torch.ones_like(x),retain_graph=True)
    d2l.plot(x.detach(), x.grad, 'x', 'grad of sigmoid', figsize=(5, 2.5))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    4.1.2.3. tanh函数

    与sigmoid函数类似, tanh(双曲正切)函数也能将其输入压缩转换到区间(-1, 1)上。

    y = torch.tanh(x)
    d2l.plot(x.detach(), y.detach(), 'x', 'tanh(x)', figsize=(5, 2.5))
    
    # 导数图像
    # 清除以前的梯度
    x.grad.data.zero_()
    y.backward(torch.ones_like(x),retain_graph=True)
    d2l.plot(x.detach(), x.grad, 'x', 'grad of tanh', figsize=(5, 2.5))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4.1.3. 小结

    • 多层感知机在输出层和输入层之间增加一个或多个全连接隐藏层,并通过激活函数转换隐藏层的输出。

    • 常用的激活函数包括ReLU函数、sigmoid函数和tanh函数。

  • 相关阅读:
    2022-08-24 AndroidR 实现长按按键打开一个app或者打开app的某个界面
    ​ISP算法及架构分析介绍
    【Token】JWT使用Token进行登录
    【计算机视觉】不来试试图片轮廓提取?
    Linux
    敏感词在线检测-敏感词在线检测工具
    java毕业设计校园课室资源预约系统设计与实现mybatis+源码+调试部署+系统+数据库+lw
    Java服务假死后续之内存溢出
    Linux和本地Windows如何互传文件(sz和rz指令)
    JVS开源底座与核心引擎的全方位探索,助力IT智能、高效、便捷的进化
  • 原文地址:https://blog.csdn.net/weixin_45063703/article/details/126773325