深度学习笔记

参考文档:https://github.com/Elvin-Ma/deep_learning_theory

从感知机到神经网络

相关概念

人工智能是什么

image.png

深度学习与人工智能的关系

image.png

深度学习的概念

深度学习(deep learning)是机器学习的分支,是一种以人工神经网络为架构,对资料进行表征学习的算法。

在机器学习中,特征学习(feature learning)或表征学习(representation learning)[1]是学习一个特征的技术的集合:将原始数据转换成为能够被机器学习来有效开发的一种形式。它避免了手动提取特征的麻烦,允许计算机学习使用特征的同时,也学习如何提取特征:学习如何学习。

深度学习旨在通过构建和训练多层神经网络来实现人工智能任务。它模拟了人脑神经元之间的相互连接和信息传递方式,通过学习大量数据来提取特征和模式,并用于分类、识别、预测和决策等任务。

什么是人工神经网络

人工神经网络(artificial neural network,ANNs)简称神经网络(neural network,NNs)或类神经网络,在机器学习和认知科学领域,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。

神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统,通俗地讲就是具备学习功能。

现代神经网络是一种非线性统计性数据建模工具,神经网络通常是通过一个基于数学统计学类型的学习方法(learning method)得以优化,所以也是数学统计学方法的一种实际应用,通过统计学的标准数学方法我们能够得到大量的可以用函数来表达的局部结构空间,另一方面在人工智能学的人工感知领域,我们通过数学统计学的应用可以来做人工感知方面的决定问题(也就是说通过统计学的方法,人工神经网络能够类似人一样具有简单的决定能力和简单的判断能力),这种方法比起正式的逻辑学推理演算更具有优势。

前馈神经网络的概念

深度前馈网络(deep feedforward network), 也叫作前馈神经网络(feedforward neural network)或者多层感知机(multilayer perceptron, MLP), 是典型的深度学习模型。

神经元模型

image.png

1943 年,[McCulloch and Pitts, 1943] 将神经元抽象为数学概念上的的简单模型,这就是一直沿用至今的 M-P 神经元模型:

image.png

在这个模型中, 神经元接收到来自 n 个其他神经元传递过来的输入信号, 这些输入信号通过带权重的连接(onnection)进行传递,神经元接收到的总输入值(sum)将与神经元的阀值进行比较,然后通过激活函数(activation function) 处理以产生神经元的输出。

经典激活函数

最初的激活函数是下图左所示的阶跃函数,它将输入值映射为输出值 0 或 1, 显然 "1" 对应于神经元兴奋, "0" 对应于神经元抑制. 然而,阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数(注释:目前已经有很多更好的激活函数)。 典型的Sigmoid 函数如图下图右所示, 它把可能在较大范围内变化的输入值挤压到(0,1) 输出值范围内,因此有时也称为"挤压函数(squashing function)"。

image.png

从神经元到感知机

image.png

感知机(perceptron)是由两层神经元组成的结构,输入层用于接受外界输入信号,输出层(也被称为是感知机的功能层)就是M-P神经元,亦称“阈值逻辑单元”(threshold logic unit)。

image.png

从感知机到深度神经网络

我们可以通过在网络中加入一个或多个隐藏层来克服线性模型的限制, 使其能处理更普遍的函数关系类型。 要做到这一点,最简单的方法是将许多全连接层堆叠在一起。 每一层都输出到上面的层,直到生成最后的输出。 我们可以把前L−1层看作表示,把最后一层看作线性预测器。 这种架构通常称为多层感知机(multilayer perceptron),通常缩写为MLP。

更一般的,常见的神经网络是形如下图所示的层级结构,每层神经元与下层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接. 这样的神经网络结构通常称为多层前馈神经网络(multi-layer feedforward neural network)

习惯上,我们通常将 Layer 大于两层的 MLP 或 MultiLayer feedforward neural network 简称为深度神经网络,其典型结构如下图所示:

image.png

为何要用深度神经网络?

理论和实践都反复证明,随着隐层的增加,模型的表征能力也会增加,可以解决的问题也更加广泛

image.png

随着隐层层数的增多,凸域将可以形成任意的形状,因此可以解决任何复杂的分类问题。实际上,Kolmogorov理论指出:双隐层感知器就足以解决任何复杂的分类问题。于是我们可以得出这样的结论:神经网络通过将线性分类器进行组合叠加,能够较好地进行非线性分类

image.png

深度神经网络解决问题案例

假设深度学习要处理的信息是“水流”,而处理数据的深度学习网络是一个由管道和阀门组成的巨大水管网络。网络的入口是若干管道开口,网络的出口也是若干管道开口。这个水管网络有许多层,每一层由许多个可以控制水流流向与流量的调节阀。根据不同任务的需要,水管网络的层数、每层的调节阀数量可以有不同的变化组合。对复杂任务来说,调节阀的总数可以成千上万甚至更多。水管网络中,每一层的每个调节阀都通过水管与下一层的所有调节阀连接起来,组成一个从前到后,逐层完全连通的水流系统。

深度神经网络识别汉字

image.png

前馈神经网络计算流程

第一层计算

image.png

第二层计算

image.png

第三层计算

image.png

深度学习与传统机器学习

相同点

在概念、数据准备和预处理方面,两者是很相似的,他们都可能对数据进行一些操作:

不同点

image-20251110223350714

深度学习的典型算法

2017 年 出现了 Transfomer 模型,取得了重大成功,深度学习的众多项任务都开始应用 Transfomer 算法。

反向传播

神经网络训练流程概述

当我们使用前馈神经网络(feedforward neural network)接收输入 x 并产生输出 y 的时候,信息通过网络向前流动。输入 x 提供初始信息,然后传播到每一层的隐藏单元,最终产生输出 y ,这被称为前向传播

在训练过程中,前向传播可以持续向前直到它产生一个 标量 的损失函数 J(θ)

反向传播(back propagation)算法经常简称为backprop,允许来自代价函数的信息通过网络向后流动,以便计算梯度。

反向传播不会更新参数,但是能求得每个参数的梯度值,然后根据梯度值来更新参数

梯度下降算法简述

多元函数 f 的梯度定义为

gradf=(fx,fy)=f

函数 f 沿梯度方向上升最快,函数 f 沿负梯度方向下降最快

梯度下降算法的基本过程:

  1. 初始化(定义)学习率 ε 和初始参数 W
  2. while
    • {x1,,xm} 小批量样本
    • {y1,,ym} 对应的 Label
    • g^=1mθiL(f(xi,θ),y(i)) 计算平均梯度
      • g^ 表示模型的参数 θ 的梯度,通常是一个向量,表示损失函数关于 θ 的偏导数
      • m 表示训练样本的总数
      • L(f(xi,θ),y(i)) 表示损失函数,是模型预测结果与实际标签之间的误差,这里 f(xi,θ) 是模型在输入样本 xi 下预测的结果,而 y(i) 是样本 xi 的实际标签
    • θ=θεg^ 更新参数

Pytorch 安装

PyTorch 是一个 Python 包,它提供了两个高级功能:

  1. 利用强大的 GPU 加速进行张量计算(例如 NumPy)。
  2. 基于磁带式自动微分系统的深度神经网络

Pytorch GitHub 仓库

pytorch 官网

image.png

使用 pip 安装