• 《白话强化学习与python》笔记——第六章深度学习(二)


    1、卷积神经网络

    卷积神经网络(Convolutional Neural Network, CNN)是一种深度学习模型,特别设计用来处理具有网格结构的数据,如图像(2D网格)和时间序列数据(1D网格)。CNN在图像和视频识别、图像分类、物体检测以及一系列计算机视觉任务中取得了巨大成功。

    CNN的主要特点包括:

    局部感受野: CNN的神经元只对输入数据的一个局部区域进行感知,这模仿了生物视觉系统中的感受野概念。这意味着网络中的每个神经元仅与前一层的一个小区域相连接。

    权值共享: 在同一层中的神经元共享相同的权重和偏置,这使得网络能够学习到可以在数据中任何地方检测到的特征。

    卷积层: 这是CNN的核心组成部分,它使用一个小型的权重矩阵(称为卷积核或滤波器)来扫描整个输入体积并生成特征图(feature map),特征图表示特定特征的存在情况。

    池化层: 通常跟随在卷积层之后,池化层的目的是降低特征图的空间维度(长和宽),从而减少参数数量和计算量,并且帮助防止过拟合。常用的池化操作有最大池化和平均池化。

    激活函数: CNN使用非线性激活函数,如ReLU(修正线性单元)或sigmoid/tanh,以引入非线性特性,使得网络可以捕捉复杂的模式。

    全连接层: 在多个卷积和池化层之后,通常会有一个或多个全连接层,其作用是实现高级推理和分类。

    数据适应性: CNN通过训练过程自动适应数据,学习空间层级的特征,无需人工干预。

    平移不变性: 由于权值共享和池化操作,CNN对输入数据的平移具有一定程度的不变性,即无论特征出现在输入的哪个位置,都能被正确识别。

    强大的特征提取能力: CNN能够从原始像素数据中提取复杂的特征,例如边缘、角点、纹理等,并逐层构建更高层次的语义信息。

    (1)卷积神经网络的结构

    卷积神经网络(CNN)的结构主要由一系列不同功能的层组成,每一层都负责特定的数据处理任务。一个典型的CNN结构包括以下几种类型的层:

    输入层: 这是网络的起始点,负责接收原始数据,通常是图像的像素值。

    卷积层: 在输入层之后通常会有一个或多个卷积层。每个卷积层由若干卷积核(或滤波器)组成,它们在输入数据上以滑动窗口的方式移动,计算局部区域的加权和,生成特征图(feature map)。每个特征图专注于从输入数据中提取一种类型的特征(如边缘、角点等)。

    激活层: 卷积层的输出会传递到一个非线性激活函数,如ReLU(Rectified Linear Unit)、sigmoid或tanh。激活层增加了网络对输入数据的非线性建模能力。

    池化层: 池化层跟在激活层之后,目的是减小特征图的空间尺寸(宽度和高度),从而减少参数数量和计算量,同时提高特征的鲁棒性。常用的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling)。

    全连接层: 在一系列的卷积和池化层之后,通常会有若干个全连接层。这些层中的神经元与前一层的所有激活值相连接,可以捕捉更高级的语义信息,并最终执行分类或其他任务。

    输出层: 最后一层通常是输出层,对于分类任务,通常使用Softmax激活函数来输出概率分布;对于回归任务,则可能使用线性激活函数。

    除了上述基本层,CNN还可能包含其他类型的层,如:

    归一化层 (如批量归一化Batch Normalization):用于加速训练过程,减少梯度消失/爆炸问题。
    丢弃层(Dropout): 在训练过程中随机丢弃一部分神经元的输出,以防止过拟合。
    高级池化层: 如空间金字塔池化(Spatial Pyramid Pooling, SPP)或RoI池化(Region of Interest Pooling),用于调整特征图的尺寸。
    数据增强层: 在训练阶段对输入数据进行实时增强,比如旋转、缩放、剪切等,以增加模型的泛化能力。
    整个CNN通过这些层的组合形成了一个复杂的函数,能够从原始数据中学习到有用的特征,并进行分类、检测、分割等任务。训练CNN涉及前向传播和反向传播过程,以及权重更新,这通常需要大量的计算资源和标注数据。

    (2)卷积核的结构

    卷积核(也称为滤波器或特征检测器)是卷积神经网络(CNN)中的核心组成部分,它决定了网络能够从输入数据中提取哪些特征。卷积核的结构通常包括以下特点:

    权重矩阵: 卷积核实际上是一个较小的权重矩阵,其尺寸远小于输入数据的尺寸。这个权重矩阵在训练过程中被优化,以便于提取有用的特征。

    尺寸: 卷积核的大小可以是任意的,但通常是正方形。常见的大小包括1x1、3x3、5x5等。选择小的卷积核(如3x3)可以在保持参数数量相对较少的同时,有效地提取空间特征。

    深度: 卷积核的深度与输入数据的深度相匹配。例如,对于彩色图像,深度为3(对应于红、绿、蓝三个颜色通道)。这允许每个卷积核在不同的输入通道上有不同的权重,从而可以提取跨通道的特征组合。

    偏置项:除了权重之外,每个卷积核还有一个偏置项。当卷积操作应用于输入数据时,偏置项会被加到结果上。

    步长:在应用卷积核时,可以选择不同的步长(stride),即卷积核移动的间距。步长决定了输出特征图(feature map)的尺寸。步长越大,输出的尺寸越小。

    填充:有时在输入数据周围添加额外的边界(padding),目的是控制输出特征图的尺寸或者增加模型的容量。

    多通道/多卷积核:在一个卷积层中通常会使用多个卷积核,每个卷积核都会生成一个单独的特征图。这意味着一个卷积层会输出多个特征图,它们堆叠在一起形成了一个特征体积。每个特征图专注于从输入中提取一种特定的特征或特征组合。

    2、循环神经网络

    循环神经网络(Recurrent Neural Network, RNN)是一种专门用来处理序列数据的神经网络。与传统的神经网络不同,RNN能够利用内部的状态(记忆)来处理序列中的每一个元素,并把前面的信息传递到后续的计算中。这种结构使得RNN特别适合于处理自然语言、时间序列数据、文本、语音等类型的数据。

    (1)长短期记忆网络(LSTM)

    长短期记忆网络(Long Short-Term Memory, LSTM)是一种特殊类型的循环神经网络(RNN),专门设计来解决标准RNN在处理长期依赖问题时的梯度消失或梯度爆炸问题。LSTEM由Hochreiter和Schmidhuber在1997年提出,并在之后的研究中得到了广泛的使用和改进。

    LSTM的核心思想是在传统的RNN结构中引入了一个复杂的单元称为“记忆块”(memory block),该记忆块包含三个主要部分:输入门(input gate)、遗忘门(forget gate)和输出门(output gate)。这些门控机制允许网络在必要时记住信息,或者忘记无关的信息,从而有效地学习长序列中的模式和依赖关系。

    LSTM的关键特性包括:

    门控机制:输入门、遗忘门和输出门控制信息的流动。输入门决定哪些新信息会被存储到细胞状态(cell state)中,遗忘门决定哪些旧状态会被遗忘,而输出门则控制哪些状态会输出给下一个时间步。

    细胞状态:这是贯穿整个链条的核心部分,它携带着关于长期状态的信息并且有一个线性的流动方式,避免了梯度消失的问题。

    可学习的遗忘:与传统的RNN不同,LSTM有能力通过遗忘门丢弃或减弱无关的旧信息,这有助于网络更好地处理时序数据中的长期依赖。

    参数共享:与所有RNN一样,LSTM在不同时间步上使用相同的权重,减少了模型参数数量并提高了训练效率。

    灵活的时间动态行为:由于其复杂的内部结构,LSTM能够捕捉复杂的时间动态特性,这对于许多序列预测任务来说是非常有价值的。

    解决长期依赖问题:通过上述机制,LSTM可以有效捕捉长距离的时间依赖关系,这对于自然语言处理、语音识别等任务至关重要。

    网络结构

    一个LSTM 网络通常由一层或者两层LSTM单元组成,每一层中的单元可以首尾相接,在时序列上,输入可以从前向后传递。
    在这里插入图片描述
    在这里插入图片描述

    长短期记忆网络(LSTM)的网络结构设计用于有效地传递和存储长期依赖关系。其关键组件是所谓的“LSTM单元”,它通过精心设计的“门”结构来控制信息的流动和存储。一个标准的LSTM单元包含以下部分:

    输入门(Input Gate): 决定哪些新信息会被加入到细胞状态(cell state)中。输入门由两部分组成:一是sigmoid激活函数,其输出在0到1之间,决定了哪些信息可以通过;二是tanh激活函数,生成候选值,这些值可能会被添加到细胞状态中。

    遗忘门(Forget Gate): 确定哪些旧信息会被从细胞状态中丢弃。这也是一个sigmoid激活函数,其输出为每个细胞状态分量一个介于0到1之间的值,其中0表示“完全丢弃”,1表示“完全保留”。
    在这里插入图片描述

    细胞状态(Cell State): 这是贯穿整个链条的核心部分,携带着关于长期状态的信息并且有一个线性的流动方式,避免了梯度消失的问题。细胞状态的更新包括加上输入门筛选后的新信息并丢弃遗忘门决定丢弃的旧信息。

    输出门(Output Gate): 确定下一个隐藏状态应该输出什么。首先,一个sigmoid层决定细胞状态的哪些部分会影响下一个隐藏状态。然后,通过tanh激活函数将细胞状态进行变换(使得输出在-1到1之间),并乘以sigmoid层的输出,从而只有相关的信息会流出。

    隐藏状态(Hidden State): 基于输出门的输出,隐藏状态携带了到目前为止序列中的信息,并传递给下一个时间步的LSTM单元或作为当前时间步的输出。

    在数学上,这些操作可以表示为一系列公式,描述了如何根据当前的输入、前一个时间步的隐藏状态以及细胞状态来计算当前时间步的隐藏状态和细胞状态。

    LSTM通常按顺序堆叠在一起形成层,而多个这样的层可以组成一个深度LSTM网络。在实际应用中,这种深度结构允许模型捕捉更复杂的模式和长期依赖。

    LSTM的设计使其非常适合于处理自然语言、语音识别、机器翻译等涉及序列数据的任务。通过调整门控机制,LSTM能够记住长期的历史信息并在必要时利用它,这使其在许多任务中都取得了显著的成功。

  • 相关阅读:
    Redis 中新的三种数据类型
    面试-synchronized(java5以前唯一)和ReentrantLock的区别
    GoLong的学习之路(二十一)进阶,语法之并发(go最重要的特点)(协程的主要用法)
    Logstash8.4在Linux系统上的安装以及配置Tomcat日志(ELK安装part2)
    运筹学概述
    LeetCode 面试题 04.01. 节点间通路
    新零售SaaS架构:中央库存系统架构设计
    OpenGL之纹理映射
    案例分析篇03:一篇文章搞定软考设计模式考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)
    【leetcode】【2022/9/16】850. 矩形面积 II
  • 原文地址:https://blog.csdn.net/weixin_52326703/article/details/137382262