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


深度学习是机器学习的一个子领域,它试图模拟人脑的工作原理,通过训练大量数据来自动学习数据的内在规律和表示层次。深度学习是一种特殊的机器学习,它使用多层神经网络来学习数据的分布式表示。

深度学习的主要优点是能够处理大量的非结构化数据,如图像、音频和文本,这使得它在许多领域都有广泛的应用,如计算机视觉、自然语言处理、语音识别和推荐系统等。

深度学习的核心是深度神经网络,这是一种包含多个隐藏层的神经网络。每个隐藏层都可以学习到数据的更高层次的抽象表示。通过这种方式,深度学习模型可以学习到数据的复杂结构和模式,从而实现更精确的预测和分类。

深度学习的训练过程通常需要大量的计算资源和数据,因此通常需要使用GPU或TPU等专门的硬件设备。此外,深度学习模型的训练也需要复杂的优化算法和大量的调参工作。

一、神经元

在深度学习中,神经元是构成神经网络的基本单元,它受到人脑神经元的启发而设计。每个神经元接收来自其他神经元的信号(输入),对这些信号进行处理,然后产生一个输出信号,这个输出信号可能会作为输入传递给其他神经元。

下面是一些关于神经元的重要概念:

输入和输出: 神经元具有多个输入和一个输出。每个输入都有一个关联的权重,这些权重表示相应输入的重要性或影响力。

权重和偏置: 权重决定了输入对神经元的影响程度,而偏置则是一个额外的输入值,它通常被设置为1,允许网络适应数据中的均值偏移。

激活函数: 神经元通常会应用一个非线性激活函数于加权输入之和(加上偏置)。激活函数引入非线性特性,使得神经网络能够学习和模拟复杂的模式和关系。

加权和: 所有输入乘以它们的权重后求和,再加上偏置项,形成所谓的“加权和”。

输出: 加权和通过激活函数处理后的结果成为神经元的最终输出。

连接: 神经元之间的连接通过权重来体现,这些连接可以是前向的(即从一个层到下一个层),也可以是侧向的或者反向的(如在循环神经网络中)。

多层结构: 在深度神经网络中,许多这样的神经元被组织成层,信息在这些层之间传递,每一层的神经元学习不同层次的数据抽象。

学习与适应: 通过训练过程,网络会调整神经元之间的连接权重,以最小化预测错误或代价函数,这通常通过反向传播算法实现。

参数: 神经元权重和偏置统称为网络参数,它们在训练过程中被优化。

适应性: 神经元可以根据不同的数据进行学习和自我调整,这是深度学习能够适应各种任务的关键。
在深度学习中,神经元是处理信息和学习特征的基本单位,其设计受到了生物神经元的启发,但进行了简化和抽象以便在计算机上高效运行。

二、线性回归

在深度学习中,线性回归本质上和传统统计学中的线性回归是一致的。它依然是一种用来建立输入特征(自变量)和输出(因变量)之间线性关系的模型。不过,在深度学习的背景下,线性回归可能会被用作更复杂模型的一个组成部分,或者作为对比基准来展示更复杂模型的效能。

以下是一些与深度学习相关的线性回归应用场景:

神经网络的最后一层: 在一些浅层的神经网络架构中,线性回归可以被用作网络的最后一层,用于生成最终的预测输出。例如,在一个用于房价预测的网络中,最后一层可能是一个简单的线性回归层,它将前一层的非线性变换映射到最终的房价估计。

序列模型中的线性部分: 在处理时间序列数据时,深度学习模型可能包含线性和非线性组件的组合。在这种情况下,线性回归可以作为模型中的一个线性组件,帮助捕捉数据的线性趋势。

嵌入层的输出: 在某些深度学习应用中,如推荐系统或自然语言处理,线性回归可用于分析通过嵌入层得到的密集向量表示。

预训练和迁移学习: 在迁移学习中,一个模型(例如,在一个大型数据集上预训练的神经网络)的一部分可能会被用作特征提取器,而另一部分则可能是一个简单的线性回归模型,用于在新任务上进行预测。

正则化和解码器网络: 自编码器或其他类型的解码器网络在最后一阶段可能会使用线性回归层来进行重建,尤其是在处理连续数值型数据时。

损失函数: 在深度神经网络中,通常使用平方差损失(即线性回归常用的损失函数)来计算网络预测值和真实值之间的差异。

模型比较: 在评估一个复杂的深度学习模型时,研究人员可能会使用线性回归作为基线模型来展示深度学习模型在特定任务上的优越性。

三、激励函数

在深度学习中,激励函数(也称为激活函数或非线性激活函数)是添加到神经网络中的神经元的一个数学函数。它用于决定一个神经元是否应该被激活,即在给定的输入下是否应该触发输出信号。激励函数为神经网络引入非线性特性,使得网络能够学习和模拟复杂的数据模式和关系。

以下是一些常用的激励函数及其特点:

Sigmoid 函数:
在这里插入图片描述

Sigmoid 函数将输入的任何值映射到介于 0 和 1 之间的输出,呈S形曲线。这个函数常用于二分类问题的输出层,因为它可以表示概率。然而,sigmoid 函数在输入值非常大或非常小的时候会出现梯度消失的问题。
在这里插入图片描述

Tanh (双曲正切) 函数:
在这里插入图片描述

Tanh 函数类似于 sigmoid 函数,不过它的输出范围是 -1 到 1。它在零周围更陡峭,因此对于某些问题可能效果稍好。但是,同样也可能遇到梯度消失的问题。
在这里插入图片描述

ReLU (修正线性单元) 函数:
在这里插入图片描述

ReLU 函数在输入值小于0时输出为0,大于0时输出与输入值相等。ReLU 函数解决了梯度消失问题,计算速度快,因此在隐藏层中得到了广泛应用。但是它有一个被称为“死亡ReLU”的问题,即一旦神经元变为非激活状态,可能永远不会恢复。
在这里插入图片描述

Leaky ReLU 函数: 为了解决死亡ReLU问题,Leaky ReLU 允许小于0的输入产生一个非零的负斜率输出。这保证了即使神经元未激活,仍会有一个较小的梯度流过。

ELU (指数线性单元) 函数: ELU 函数在输入小于0时具有负指数增长,而在输入大于0时则与输入值相等。ELU 旨在进一步减轻梯度消失和死亡ReLU的问题。

Swish 函数: Swish 是一种较为新型的激活函数,它尝试通过自动门控机制来模仿神经元的行为。Swish 函数在某些情况下可以表现得比ReLU更好。

Softmax 函数: 在多分类问题中,Softmax 函数通常用于输出层,它可以将一组输入映射为概率分布。Softmax 确保所有类别的概率和为1,适用于互斥的分类问题。

四、神经网络

在深度学习中,神经网络指的是由多个层级的节点或“神经元”组成的模型,这些节点通过加权连接进行信息传递和处理。每个连接上的权重代表其传递信息的能力,这些权重在训练过程中不断调整以学习数据中的规律和模式。

深度学习中的神经网络通常包含以下元素:

输入层: 负责接收原始数据输入。
隐藏层: 一个或多个隐藏层处于输入层和输出层之间,用于特征提取和数据处理。
输出层: 产生最终结果或预测。
激活函数: 非线性激活函数使网络能够学习和模拟复杂的数据关系。
损失函数: 用于衡量网络预测与真实标签之间的差距。
优化器: 负责调整网络权重以最小化损失函数。
前向传播: 数据通过网络从输入到输出的传播过程。
反向传播: 基于梯度下降算法,更新网络权重以减小损失。
参数(权重和偏置): 网络在训练过程中学习和优化的变量。
在深度学习的背景下,"深度"一词指的是网络结构中隐藏层的数量。传统的机器学习算法通常只包含有限的隐藏层,而深度学习模型可能包含数十、数百甚至数千个隐藏层,这使得它们能够捕捉到数据中更加细微和复杂的特征。

随着计算能力的提高以及大量数据的可用性增加,深度学习已经推动了许多领域的发展,包括计算机视觉、语音识别、自然语言处理、强化学习等。常见的深度学习神经网络架构包括卷积神经网络(CNNs)、循环神经网络(RNNs)、长短期记忆网络(LSTMs)、生成对抗网络(GANs)以及变换器网络(Transformers)。

五、网络训练

在深度学习中,网络训练指的是使用数据和算法自动调整神经网络参数(即权重和偏置)的过程,以便网络能够学习从输入数据到期望输出的映射。这个过程通常涉及以下步骤:

前向传播: 将训练数据输入网络,并通过每层的加权连接传递信号,最终在输出层产生预测结果。

计算损失: 利用损失函数或目标函数来衡量网络输出与真实标签之间的差异。常见的损失函数包括均方误差(MSE)、交叉熵损失、Hinge损失等。

反向传播: 根据损失函数计算出相对于每个参数的梯度,然后通过链式法则将这些梯度反向传播回网络的各层。这一步骤是通过网络传播误差,并找出哪些权重对误差贡献最大。

更新参数: 使用优化算法(如梯度下降、随机梯度下降、Adam等)来调整网络中的权重和偏置。这些算法旨在沿梯度下降方向更新参数以减小损失。

迭代过程: 整个训练过程会反复进行多次(称为训练轮次或时代Epochs),直到网络性能达到某个满意的水平或者不再显著改善,或者达到了预设的训练次数。

验证和测试: 为了评估模型的泛化能力,会在独立的验证集上测试模型的性能,并根据需要调整模型的参数或结构。最终还会在一个测试集上进行最终评估。

网络训练的目的是找到一组参数,使得当新数据输入到网络时,可以准确地进行预测或分类。这涉及到在过拟合(模型在训练数据上表现良好但在新数据上表现差)和欠拟合(模型无法在训练数据上获得足够好的性能)之间找到平衡。

训练深度神经网络是一个复杂的过程,需要合理地设置很多超参数,比如学习率、批量大小、优化器类型、正则化项等。此外,还需要注意数据预处理、特征提取、以及避免训练过程中的问题,如梯度消失或梯度爆炸等。

六、深度学习的优势

自动特征提取: 深度神经网络能够自动从数据中学习并提取有用的特征,这减少了对手工特征工程的需求。

处理复杂数据结构: 深度学习特别擅长处理非结构化数据,如图像、声音和文本,它可以捕捉到这些数据类型中的复杂关系和模式。

提升性能: 在诸如图像识别、语音识别、自然语言处理等任务中,深度学习模型通常能够超越传统的机器学习方法,提供更高的准确率。

可扩展性: 随着数据量的增加,深度学习模型往往能够持续提高其性能,这与传统的机器学习算法不同,后者可能不会因更多的数据而受益。

多模态学习: 深度学习允许联合处理不同类型的数据(例如图像和文本),这使得跨多个模态的数据融合变得可能。

端到端学习: 深度学习支持端到端的学习方法,可以直接从原始输入数据到最终输出进行建模,省去了中间步骤。

强大的表达能力: 具有大量参数的深度神经网络可以表示非常复杂的函数,这使得它们可以近似许多复杂的数据分布。

最近更新

  1. TCP协议是安全的吗?

    2024-04-05 15:34:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-05 15:34:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-05 15:34:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-05 15:34:06       20 阅读

热门阅读

  1. @RequestBody与@RequestParam的区别

    2024-04-05 15:34:06       14 阅读
  2. EasyPOI导出动态表头

    2024-04-05 15:34:06       11 阅读
  3. Springboot集成hanlp快速入门demo

    2024-04-05 15:34:06       16 阅读
  4. 题目 1752: 对称矩阵

    2024-04-05 15:34:06       17 阅读
  5. Spring Boot集成Spring Retry快速入门Demo

    2024-04-05 15:34:06       13 阅读
  6. 深入理解nginx mp4流媒体模块[下下]

    2024-04-05 15:34:06       16 阅读
  7. Day.21

    2024-04-05 15:34:06       11 阅读
  8. 教你如何在 WebView 中实现优雅的后退键处理

    2024-04-05 15:34:06       15 阅读
  9. C# 委托与事件 深入

    2024-04-05 15:34:06       14 阅读
  10. 金融科技包含领域

    2024-04-05 15:34:06       15 阅读
  11. [环境配置]conda 64位安装32位python

    2024-04-05 15:34:06       16 阅读
  12. LeetCode的使用方法

    2024-04-05 15:34:06       11 阅读