跳转至

Neural Network

约 8537 个字 22 行代码 预计阅读时间 43 分钟

feature transforms

  • 从 Geometric 几何视角分析:线性分类器是在画高维超平面,将这个高维的欧几里得空间分割成两块

  • 从视觉角度 Vision Viewpoint 分析,我们认为线性分类器只为每个类别学习一个模板,因此它们无法代表同一对象类别的多种模式。

模板是一种用于表示目标对象特征的数据结构,可以采用多种形式。在模板匹配和模板学习任务中,模板被用来在输入数据中搜索和识别目标对象

image-20240820120536280

linear classifier 的局限性:只能处理线性可分的数据

  • 线性分类器只能通过一条直线(或高维空间中的一个超平面)将数据分割开。因此,对于线性不可分的数据(即不能用一条直线或一个超平面分隔的类),它们的表现往往较差。 比如,XOR 问题中,两个类的数据点无法用一条直线分开,线性分类器对此无能为力。

解决方法:

  • 对于某些线性不可分的数据集,我们可以提出一种 特征变换 的方式 (feature transform),将这些数据映射到特征空间去进行分类,或者说找到一种合适分类的映射方式来完成分类任务,这样就可以克服线性分类器的一些缺点;在这里我们是在特征空间中训练分类器

image-20240820121321056

这就是一个 将笛卡尔坐标系变换到极坐标系(polar coordinate)下的例子,原本在笛卡尔坐标系下线性不可分的数据集,在极坐标系下线性可分了,也就是说我们可以在特征空间下构建线性分类器

特征变换的 核心思想 是将原始输入特征映射到一个 更高维度的特征空间,使得在该空间中,原本线性不可分的数据变得线性可分。通过特征变换,线性分类器在新特征空间中就可以使用 线性决策边界 来分割数据,从而克服线性不可分的问题。

你提出的解决方法非常关键。特征变换(Feature Transform)确实是解决线性分类器局限性的一种有效方法。以下是对这一方法的详细解释和扩展:

特征变换(Feature Transform)

特征变换的核心思想是将原始输入特征映射到一个更高维度的特征空间,使得在该空间中,原本线性不可分的数据变得线性可分。通过特征变换,线性分类器在新特征空间中就可以使用线性决策边界来分割数据,从而克服线性不可分的问题。

  1. 设计特征映射函数

  2. 选择或设计一个特征映射函数 \(\phi(x)\),将原始输入特征 \(\textbf{x}\) 映射到一个高维空间 \(\mathbf{z} = \phi(\mathbf{x})\)。例如:

    • 对于二次特征变换,$\phi(\mathbf{x}) $ 可以将输入 \(\mathbf{x} = [x_1, x_2]\) 映射为 \(\mathbf{z} = [x_1, x_2, x_1^2, x_2^2, x_1x_2]\)
  3. 在特征空间中训练线性分类器

  4. 在新的特征空间中训练线性分类器,如线性支持向量机、线性回归分类器等。由于数据在高维空间中可能变得线性可分,线性分类器可以在此空间中找到合适的决策边界。

  5. 核方法的应用

  6. 为了避免显式计算高维特征,核方法通过计算原始特征空间中的点积直接得到特征空间中的点积,从而大幅提高计算效率。例如,支持向量机(SVM)中使用的高斯核(RBF 核)和多项式核等,就是这种思想的具体实现。

Color Histogram & Histogram of Oriented Gradients

定向梯度直方图(Histogram of Oriented Gradients, HOG)和颜色直方图(Color Histogram)是两种常用的图像特征提取方法,它们在图像处理中具有不同的优势。

10

颜色直方图通过将图像中的颜色空间的 RGB 光 谱进行分解与统计,统计图像中 每种颜色出现的频率来描述图像的颜色分布,这种方式丢弃了图像中的空间信息,只关心图像中的颜色分布,更具有 空间不变性,通常用于图像检索和分类。颜色直方图的优点在于它对图像的旋转、平移和尺度变化具有鲁棒性,因为它不依赖于图像中的空间布局。

image-20240820122519369

HOG 特征通过统计图像局部区域内的梯度方向分布来描述图像的形状和纹理信息,特别适合捕捉物体的边缘和轮廓。与颜色直方图相反,抛弃颜色信息,保留空间信息。

形状与边缘检测:HOG 特别擅长捕捉物体的形状和轮廓信息,对光照和局部对比度具有较好的鲁棒性。

方向不变性:由于梯度方向的统计,HOG 在捕捉相同形状但方向不同的物体时表现良好。

Bag-of-Words Data-Driven

视觉词袋模型(Visual Bag-of-Words, BoW)是一种经典的图像特征表示方法,它将原本用于文本处理的词袋模型(Bag-of-Words, BoW)思想引入到计算机视觉中。通过将图像描述为一组“视觉词”的出现频率,这种方法能够有效地捕捉图像的局部特征,并在分类和检索任务中表现良好。

随机补丁提取

  • 从训练图像中提取大量不同比例和大小的随机补丁(patches),这些补丁可以包含不同的纹理、边缘和颜色信息。

特征描述与聚类

  • 对每个补丁进行特征描述,如使用 SIFT(Scale-Invariant Feature Transform)或 SURF(Speeded-Up Robust Features)等方法,提取关键点的局部特征向量。
  • 对这些特征向量进行聚类分析(通常使用 K-means 聚类),将其归为 KKK 个簇。每个簇的中心就代表一个“视觉词”。

构建视觉词代码本

  • 通过聚类得到的 K 个 视觉词 Visual Word 形成了所谓的“代码本”(codebook),也被称为“视觉词典”(visual vocabulary)。这个代码本类似于文本中的词汇表,用来描述训练集中常见的视觉特征。

图像编码

  • 对于每个新图像,用代码本中的视觉词对其进行编码。具体做法是,将图像中的局部特征映射到最近的视觉词,并统计每个视觉词在图像中出现的频率,形成一个视觉词直方图。

分类与检索

  • 生成的视觉词直方图向量作为图像的特征表示,接下来可以输入到分类器(如支持向量机 SVM)中进行训练和分类,或用于图像检索。

16

鲁棒性:视觉词袋模型对图像的旋转、缩放、光照变化具有较好的鲁棒性,因为它依赖于局部特征而非整体图像。

可扩展性:代码本的大小 K 可以调节,适应不同规模的数据集和应用场景。

可组合性:视觉词袋模型可以与其他特征提取器和分类器组合,提升分类性能。

image-20240820220723657

在左侧接收图像的原始像素,右侧进行predict分类的分数或者概率,在训练的过程中,并不仅仅调整最后一层的参数,而是整个系统的参数,maximize the performance of classification

  • feature extractor 特征提取器

特征提取器的作用是从原始图像数据中提取出能够表征图像内容的关键特征。这些特征通常是高维的、经过处理的向量,它们携带了图像的重要信息,同时丢弃了不必要的细节和噪声。特征提取器的效果直接影响后续模型的分类或识别性能。

手工设计的特征

  • SIFT(Scale-Invariant Feature Transform):提取尺度不变的关键点,适用于各种尺度和旋转的图像。
  • HOG(Histogram of Oriented Gradients):基于梯度方向分布,捕捉物体的边缘和形状。
  • 颜色直方图:描述图像中的颜色分布,常用于图像检索。

数据驱动的特征

  • 卷积神经网络(CNN):通过多层卷积层自动学习图像的高层次特征,是当前最流行的特征提取方法。
  • 视觉词袋模型(BoW):将局部特征聚类成视觉词典,用视觉词的直方图表示图像。
  • learnable model 可学习模型

可学习模型是指通过数据驱动的方式调整其内部参数,以优化目标函数的模型。可学习模型的输入通常是特征提取器生成的特征向量,输出则是预测结果,如图像分类、物体检测或图像分割等任务的结果。

  • 支持向量机(SVM):线性或非线性模型,用于二分类或多分类任务,擅长处理高维数据。

  • k-近邻(k-NN):基于距离度量的方法,适用于简单分类任务。

  • 神经网络

  • 多层感知器(MLP):传统的全连接神经网络,适合处理经过特征提取的低维数据。

  • 卷积神经网络(CNN):用于直接处理图像数据,结合特征提取与分类功能。

神经网络概述

神经网络是一种能够学习复杂映射关系的算法,通过多层非线性变换,将输入数据映射到输出类别。与线性分类器相比,神经网络引入了激活函数,使得模型能够拟合更加复杂的非线性数据。

在线性分类一节中,在给出图像的情况下,是使用 \(f = Wx\) 来计算不同视觉类别的评分,其中 \(W\) 是一个矩阵,\(x\) 是一个输入列向量,它包含了图像的全部像素数据。在使用数据库 CIFAR-10 的案例中,\(x\) 是一个 [\(3072 \times 1\)] 的列向量,\(W\) 是一个 [\(10\times 3072\)] 的矩阵,所以输出的评分是一个包含 10 个分类评分的向量。

两层神经网络的结构与计算

EECS498_L5_25

image-20240820223539799

神经网络与线性分类器的主要区别在于它引入了 隐藏层和非线性激活函数。这 个非线性部分打破了线性模型的局限,使得网络可以处理复杂的非线性问题。

神经网络的计算公式是 \(s = W_2max(0, W_1x)\)

\[ f = W_2\max(0, W_1x)\\ W_2\in \mathbb{R}^{C\times H}\quad W_1\in \mathbb{R}^{H\times D}\quad x\in \mathbb{R}^{D} \]
  • x 是输入向量(图像像素)
  • \(W_1\) 是第一层权重矩阵,将输入向量映射到隐藏层
  • \(max(0,W_1x)\) 是激活函数 ReLU 的应用,它将负值置为零,保留正值
  • \(W_2\) 是第二层的权重矩阵,将隐藏层输出映射到最终分类评分。

举个例子来说,\(W_1\) 可以是一个 [\(100 \times 3072\)] 的矩阵,其作用是将输入从 3072 维的像素空间映射到 100 维的隐藏层。函数 \(max(0,-)\) 是非线性的,它会作用到每个元素。激活函数 ReLU 的输出为一个 100 维的向量。\(W_2\) 的维度为 [\(10 \times 100\)],将 100 维向量映射到 10 个分类评分。网络的参数 \(W_1\)\(W_2\) 是通过梯度下降优化的。梯度通过反向传播计算,反向传播利用链式法则逐层计算每个参数的梯度,从而更新它们,以最小化损失函数。

注意非线性函数在计算上是至关重要的,如果略去这一步,那么两个矩阵将会合二为一,对于分类的评分计算将重新变成关于输入的线性函数。这个非线性函数就是改变的关键点

如果没有激活函数,\(f = W_2max(0,W_1x)\)将变为\(s =W_2W_1x\),本质上依然是一个线性分类器

一个三层的神经网络可以类比地看做 \(s = W_3max(0, W_2max(0, W_1x)\)

  • 输入层\(x\) 是输入向量,通常表示为一个列向量,包含原始数据特征(例如图像的像素值)。
  • 第一层权重:矩阵 \(W_1\) 将输入向量 \(x\) 映射到第一层隐藏单元。假设 \(W_1\) 的维度为 [\(H_1 \times D\)],其中 \(D\) 是输入向量的维度, \(H_1\) 是第一隐藏层的维度。
  • 第一层激活:经过 \(W_1\) 变换后,应用 ReLU 激活函数 \(\max(0, W_1x)\) ,引入非线性。此时,输出为一个 \(H_1\) 维的向量。
  • 第二层权重:矩阵 \(W_2\) 将第一层的输出映射到第二层隐藏单元,维度为 [\(H_2 \times H_1\)],其中 \(H_2\) 是第二隐藏层的维度。
  • 第二层激活:再次应用 ReLU 函数,得到第二层的激活输出 \(\max(0, W_2 \max(0, W_1x))\) ,此时输出为一个 \(H_2\) 维的向量。
  • 第三层权重:矩阵 W_3 将第二层的输出映射到最终的分类评分,维度为 [\(C \times H_2\)],其中 \(C\) 是分类类别的数量。

隐层的尺寸( H_1, H_2 等)是超参数,决定了网络的表达能力和计算复杂度。隐层尺寸越大,网络的拟合能力越强,但也可能更容易过拟合。此外,增加层数和每层的神经元数量还会显著增加计算资源的需求。

当然我们也可以使用这种图形化的形式来表示神经网络,因为其中的每个部分都相互连接,所以也被称为全连接神经网络 Fully-connected neural network,通常也被称为multi-layer-perceptron 多层感知机

image-20240820223747416

输入的向量 x,全部参与影响隐藏层的向量 h,向量 h,全部元素参与影响输出的向量 s

image-20240820224628917

神经网络如何解决一个 class 具有多个 mode 的问题(线性分类器只适用于一个模板,所以对于马的头朝向左边和马的头朝向右边,无法区分。)

  • W1 的作用是从原始输入数据中提取初级特征。例如,对于图像数据,\(W_1\) 可以检测到图像中的基本边缘、纹理或局部模式。这个过程可以理解为将图像从像素空间转换到一个更高维的特征空间。

在你提到的马的例子中,\(W_1\) 可以捕捉到“马头的轮廓”或“马的腿”的特征,无论它们朝向哪个方向。

  • W2 的作用是将第一层的初级特征组合成更加复杂的模式。例如,它可以将“马的头”和“马的腿”组合在一起,形成整体的“马”的概念。这个组合过程使得模型能够捕捉更高层次的语义信息。

在马的例子中,\(W_2\) 可以学会识别“马”的整体形象,无论它的头是朝左还是朝右。

神经网络的优越性:

多层特征提取

  • 神经网络的多层结构允许它逐层提取和组合特征。第一层可以识别局部的基本特征(如边缘或方向),而后续层将这些基本特征组合成更复杂的模式(如整体形状)。

非线性变换

  • 每一层之间的非线性激活函数(如 ReLU)使得模型可以处理复杂的非线性模式。这意味着即使马的头部位置不同,网络仍然可以通过学习不同的激活模式来识别出它是同一匹马。

平移和旋转不变性

  • 通过训练,网络可以学会识别出图像中相同的对象,即使它们经历了旋转、缩放或镜像等变换。比如,第一层可以检测到马的头部边缘,而无论它朝向哪个方向,第二层通过组合这些特征,仍然可以正确地识别为“马”。

神经网络的几何解释

面对一个线性可分的数据集,线性分类器的功能就是找到一个或者多个超平面,可以对不同的数据进行分割,但是存在某些线性不可分的数据集,这个时候,就无法使用超平面进行分割了,或者说找不到一种线性方式进行分割,比如说下面的数据集

EECS498_L5_56

我们发现,找不到一个合适的变换矩阵 \(W\) 来分割这个数据集,所以就需要找到一种非线性方式来分割,也就是激活函数的方式,这样就可以完成某些无法线性分割的数据集的分割,比如说下面这种方式,就是使用 ReLu 函数进行特征变换,ReLU(z)=max(0,z) 它将输入的负值变为 0,正值保持不变。这种非线性变换能够改变数据的几何结构,使得原本线性不可分的数据在变换后的空间中变得可分。

EECS498_L5_61

原始的 A 象限,沿着 h1 和 h2 方向,数值都在增大,对应变换坐标后的第一象限。同理对于 B 象限,沿着 h1 方向值减小,沿着 h2 方向值增大,对应坐标变换之后的第二象限

在这个例子中,数据点被映射到新空间的不同象限和坐标轴上,从而可以通过线性超平面进行分割。

EECS498_L5_65

通过组合多个层和非线性激活函数,神经网络能够在高维空间中形成复杂的决策边界。这使得它可以处理各种复杂的分类问题。第一张图展示了一个神经网络如何处理非线性数据集。通过多层网络和非线性激活函数(如 ReLU、tanh 等),神经网络可以学习复杂的决策边界。这使得它能够很好地将数据分割为不同的类别,即使这些类别无法通过简单的线性分割来区分。

image-20240821165430447

第二张图强调了使用正则化参数来防止过拟合。正则化通过增加损失函数中的惩罚项来抑制权重的过度增长,避免模型对训练数据的过度拟合。通过增大正则化参数(如 L2 正则化中的 \(\lambda\)),而不是减小隐藏层的维数,模型能够保持其复杂度,同时降低过拟合的风险。

image-20240821165635675

image-20240821172134190

image-20240821172410082

Universal Approximation Theorem 是神经网络理论中的一个重要结果,它阐明了神经网络的强大表达能力。该定理表明,只要有足够的隐藏层神经元,带有非线性激活函数的前馈神经网络可以逼近任何连续函数,且误差可以任意小。这意味着神经网络理论上可以学习并表示任何复杂的函数映射,无论是分类任务还是回归任务。

收敛性:定理保证了存在一个网络可以逼近目标函数,但不保证实际训练时一定能找到这一最优网络。

计算代价:需要足够多的神经元,但实际计算资源有限,过多的神经元可能导致计算复杂性和训练时间增加。

过拟合风险:隐藏层神经元数量太多时,可能导致模型记住训练数据而失去泛化能力。

convex function

一个函数 f(x) 被称为凸函数,如果对于任意的两个点 \(x_1\)\(x_2\) 以及 \(t \in [0, 1]\) ,以下不等式成立:

\[ f(tx_1 + (1 - t)x_2) \leq t f(x_1) + (1 - t) f(x_2) \]

这意味着连接函数图像中任意两点的直线总是位于函数图像的上方或与其重合。换句话说,凸函数的图像总是呈现“碗”形(开口向上),没有局部凹陷或波峰。

凸函数的特性

  1. 全局最优性:对于凸函数,任意的局部最小值都是全局最小值。这是凸函数最重要的特性之一,极大地简化了优化问题的求解。

  2. 凸集与函数的关系:如果 \(f(x)\) 是凸的,那么它的下超水平集(即 \(\{x : f(x) \leq c\}\)是凸集。

  3. 一阶条件:如果 \( f(x) \) 在某个区间内可微且是凸的,那么函数图像在任意点上的切线永远不会在函数图像的下方。这可以用以下不等式表示: $$ f(y) \geq f(x) + \nabla f(x)^T (y - x) \quad \text{for all } x, y $$ 其中 \(\nabla f(x)\) 是在点 \(x\) 处的梯度。

相比之下,非凸函数可能有多个局部最小值,因此很难找到全局最优解。深度学习中的许多目标函数是非凸的,这使得梯度下降法等优化方法的效果较不确定。然而,通过添加正则化、合理初始化参数、使用动量或自适应优化器等方法,可以在实际应用中提高优化效果。

代码实现

这个 Python 代码实现了一个简单的两层神经网络,并使用梯度下降法进行训练。它的任务是最小化网络的预测输出(y_pred)与目标输出(y)之间的均方误差损失

import numpy as np
from numpy.random import randn

N, Din, H, Dout = 64, 1000, 100, 10
x, y = randn(N, Din), randn(N, Dout)
w1, w2 = randn(Din, H), randn(H, Dout)
for t in range(10000):
    h = 1.0 / (1.0 + np.exp(-x.dot(w1)))  # Sigmoid 激活函数
    y_pred = h.dot(w2)
    loss = np.square(y_pred - y).sum()
    dy_pred = 2.0 (y_pred - y)
    dw2 = h.T.dot(dy_pred)
    dh = dy_pred.dot(w2.T)
    dw1 = x.T.dot(dh * h * (1 - h))
    w1 -= 1e-4 * dw1
    w2 -= 1e-4 * dw2
  • 初始化:

x:输入数据,形状为 (N, Din)

y:目标输出数据,形状为 (N, Dout)

w1:输入层到隐藏层的权重矩阵,形状为 (Din, H)

w2:隐藏层到输出层的权重矩阵,形状为 (H, Dout)

  • 前向传播(Forward Pass)
h = 1.0 / (1.0 + np.exp(-x.dot(w1)))  # Sigmoid 激活函数
y_pred = h.dot(w2)

1.0 / (1.0 + np.exp(-x.dot(w1))) 应用了 Sigmoid 激活函数,将隐藏层的输出限制在 (0, 1) 之间。

  • 反向传播(Backward Pass)
dy_pred = 2.0 * (y_pred - y)
dw2 = h.T.dot(dy_pred)
dh = dy_pred.dot(w2.T)
dw1 = x.T.dot(dh * h * (1 - h))

前向传播公式:

\[ h = \sigma(XW_1) = \frac{1}{1 + e^{-XW_1}}\\ y_{\text{pred}} = hW_2 \]

损失函数:

\[ L = \sum \left(y_{\text{pred}} - y\right)^2 \]

反向传播公式:

输出层梯度:

\[ \frac{\partial L}{\partial W_2} =\frac{\partial L}{\partial y_{\text{pred}} } \cdot \frac{\partial y_{\text{pred}} }{{\partial W_2}}= h^T \cdot \frac{\partial L}{\partial y_{\text{pred}}} = h^T \cdot 2(y_{\text{pred}} - y) \]

隐藏层梯度:

\[ \frac{\partial L}{\partial W_1} = X^T \cdot \left(\frac{\partial L}{\partial h} \cdot h(1 - h)\right) \]

该代码中,整个流程为:前向传播 -> 损失计算 -> 反向传播 -> 梯度更新,从而不断优化神经网络的权重,使预测输出更加接近目标值。


常用激活函数

每个激活函数(或非线性函数)的输入都是一个数字,然后对其进行某种固定的数学操作。下面是在实践中可能遇到的几种激活函数:

image-20240820233615111

img

左边是 Sigmoid 非线性函数,将实数压缩到 [0,1] 之间。右边是 tanh 函数,将实数压缩到 [-1,1]。

Sigmoid。 sigmoid 非线性函数的数学公式是 \(\sigma(x)= \dfrac{1}{(1+e^{-x})}\),函数图像如上图的左边所示。在前一节中已经提到过,它输入实数值并将其 "挤压" 到 0 到 1 范围内。更具体地说,很大的负数变成 0,很大的正数变成 1。随着对深层神经网络理解的加深,尤其是在深度学习的发展中,Sigmoid 函数逐渐被其他激活函数所取代,原因主要是由于以下两个关键缺陷:

  1. 梯度消失问题

Sigmoid 函数的输出范围在 0 到 1 之间,且其导数在接近这两个极值(即 0 或 1)时会趋近于 0。这意味着当输入值很大或很小时,Sigmoid 函数的梯度几乎为零。在反向传播过程中,这些小梯度将会被逐层传播,使得网络的权重更新变得非常缓慢,甚至停止更新。这一现象被称为梯度消失问题(vanishing gradient problem),严重阻碍了深层网络的训练。

回忆一下,在反向传播的时候,这个(局部)梯度将会与整个损失函数关于该门单元输出的梯度相乘。因此,如果局部梯度非常小,那么相乘的结果也会接近零,这会有效地 "杀死" 梯度,几乎就有没有信号通过神经元传到权重再到数据了。

  1. 非零中心性

Sigmoid 函数的输出范围是 (0, 1),这意味着它的输出不是零中心的。在反向传播中,如果输入到一个神经元的数据总是正数(即 \(x > 0\)),则该神经元的输出也是正数。这将导致梯度在反向传播过程中要么全部为正,要么全部为负,从而造成参数更新时的“锯齿形”震荡,减缓收敛速度。虽然通过增加数据的批量和其他手段可以部分缓解这一问题,但它仍然对网络的训练效率产生不利影响。

因为如果输入神经元的数据总是正数(比如在 \(f = w^Tx+b\) 中每个元素都)\(x > 0\),那么关于 \(w\) 的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数(具体依整个表达式 \(f\) 而定)。这将会导致梯度下降权重更新时出现 z 字型的下降。

Tanh。 Tanh(双曲正切)函数是一种常用的激活函数,其输出范围为 [-1, 1],与 Sigmoid 函数相似,它也存在饱和问题,但 Tanh 的一个显著优势是它的输出是零中心的。这意味着 Tanh 的输出在反向传播过程中不会引起像 Sigmoid 那样的梯度震荡问题,因此在神经网络的训练中往往表现得更好。

梯度消失:尽管 Tanh 的零中心输出是一大优势,但它仍然面临梯度消失问题。当输入远离零(即非常大或非常小)时,Tanh 的梯度会接近 0,从而导致深层网络中梯度传播的困难。

Tanh 函数实际上是一个经过放大和位移的 Sigmoid 函数,其公式为 \(\tanh(x) = 2\sigma(2x) - 1\),其中 \(\sigma(x)\) 是 Sigmoid 函数。这种关系表明,Tanh 在某种程度上可以被视为 Sigmoid 的改进版本。

img

左边是 ReLU(校正线性单元:Rectified Linear Unit)激活函数,当 \(x = 0\) 时函数值为 0。当 \(x > 0\) 函数的斜率为 1。右边是从 [Krizhevsky__][41]等的论文中截取的图表,指明使用 ReLU 比使用 tanh 的收敛快 6 倍。

优点:

  1. 加速收敛

相较于 sigmoid 和 tanh 函数,ReLU 对于随机梯度下降的收敛有巨大的加速作用( [Krizhevsky __][41]等的论文指出有 6 倍之多)。据称这是由它的线性,非饱和的公式导致的。

  1. 计算简单

sigmoid 和 tanh 神经元含有指数运算等耗费计算资源的操作,而 ReLU 可以简单地通过对一个矩阵进行阈值计算得到。

缺点:

  1. "Dying ReLU" 问题:在训练过程中,如果 ReLU 神经元接收到非常大的负梯度,它可能永远处于零输出状态,这意味着神经元再也不会激活,导致网络的部分单元永久失效。这个问题通常被称为“ReLU 死亡”。

例如,如果学习率设置得太高,可能会发现网络中 40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。通过合理设置学习率,这种情况的发生概率会降低。

Leaky ReLU:Leaky ReLU 是为解决 "ReLU 死亡" 问题的尝试。ReLU 中当 x< 0 时,函数值为 0。Leaky ReLU 为负数输入提供了一个非常小的斜率(例如 0.01),而不是将负数直接映射为零。其公式为:

\[ f(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \leq 0 \end{cases} \]

其中 \(\alpha\) 是一个小常数。这种设计允许负数输入也能产生小的负梯度,从而减少神经元“死亡”的可能性。

Maxout 是一种通用化的激活函数,它通过选择两个线性函数的最大值来构建激活输出。其函数公式为:

\[ f(x) = \max(w^T_1x + b_1, w^T_2x + b_2) \]

Maxout 是对 ReLU 和 leaky ReLU 的一般化归纳,它的函数是:\(max(w^T_1x+b_1, w^T_2x+b_2)\)。ReLU 和 Leaky ReLU 都是这个公式的特殊情况(比如 ReLU 就是当 \(w_1, b_1 = 0\) 的时候)。这样 Maxout 神经元就拥有 ReLU 单元的所有优点(线性操作和不饱和),而没有它的缺点(死亡的 ReLU 单元)。

  1. 避免“死亡”ReLU 问题:在训练深层神经网络时更加鲁棒
  2. 更强的表达能力:Maxout 是对 ReLU 和 Leaky ReLU 的一般化
  3. 线性且不饱和:帮助解决梯度消失问题并加快训练过程。

Maxout 的缺点

  1. 参数数量翻倍:每个 Maxout 神经元需要双倍的参数,因为它计算了两个线性函数的最大值。这使得网络的参数数量大幅增加,从而可能导致计算资源的需求和存储成本的显著上升。随着网络深度和宽度的增加,这一问题将更加突出。
  2. 计算复杂性增加:由于 Maxout 需要计算两个线性函数的最大值,它的计算复杂性高于 ReLU。对于非常深的网络,Maxout 的计算开销可能成为瓶颈。

尽管 Maxout 具有强大的表达能力和解决 ReLU 缺陷的优势,但其较高的参数和计算开销使得它更适用于需要高模型复杂性且计算资源充裕的场景。

神经元 neuron 建模

image-20240821162909277

生物动机与连接

img

大脑的基本计算单位是 神经元(neuron)。人类的神经系统中大约有 860 亿个神经元,它们被大约 1014-1015 个 突触(synapses) 连接起来。下面图表的左边展示了一个生物学的神经元,右边展示了一个常用的数学模型。每个神经元都从它的多个 树突(debdrite) 获得输入信号,然后沿着它唯一的 轴突(axon) 产生输出信号。轴突在末端会逐渐分枝,通过突触和其他神经元的树突相连。人工神经元则通过加权的输入信号和偏差计算一个激活值,并根据激活函数决定输出信号。

在下图右侧的神经元计算模型中,沿着轴突传播的信号将基于突触的突触强度,与其他神经元的树突进行乘法交互。突触的强度(也就是权重 \(w_i\)),是可学习的,且可以控制一个神经元对于另一个神经元的影响强度(还可以控制影响方向:使其兴奋(正权重)或使其抑制(负权重))。

在基本模型中,其他神经元的树突将信号(也就是输入 \(x_i\))传递到细胞体,信号在细胞体中相加(下图右侧的 \(\Sigma w_ix_i+b\))。求和后的信号传递到激活函数,激活函数对求和信号进行非线性变换,输出结果用于决定神经元是否激活及激活程度。

换句话说,每个神经元都对它的输入和权重进行点积,然后加上偏差,最后使用非线性函数(或称为激活函数)。本例中使用的是 sigmoid 函数 \(\sigma(x)= 1/(1+e^{-x})\)

粗糙模型:要注意这个对于生物神经元的建模是非常粗糙的:在实际中,有很多不同类型的神经元,每种都有不同的属性。生物神经元的树突可以进行复杂的非线性计算。突触并不就是一个简单的权重,它们是复杂的非线性动态系统。

作为线性分类器的单个神经元

神经元模型通过对输入信号进行加权求和,然后通过激活函数(如 sigmoid 函数)将其输出为一个概率值。这个输出可以直接用于二分类任务:

  • 当神经元输出接近 1 时,表示神经元“喜欢”输入,意味着输入属于某个特定类别。
  • 当输出接近 0 时,表示神经元“不喜欢”输入,意味着输入不属于该类别。

因此,单个神经元模型能够划分输入空间为两个线性分隔的区域,这类似于线性分类器的行为。

二分类 Softmax 分类器。在二分类任务中,sigmoid 函数的输出可以被解释为某个类别的概率 \(P(y_i = 1|x_i; w)\)。另一类别的概率则是 \(P(y_i = 0|x_i; w) = 1 - P(y_i = 1|x_i; w)\),因为总概率为 1。基于这个概率分布,可以使用交叉熵损失来优化神经元参数,从而得到一个二分类的 Softmax 分类器(即逻辑回归模型)。在这种情况下,神经元的输出大于 0.5 时,模型预测输入属于第一个类别。

二分类 SVM 分类器。通过在神经元输出端增加一个最大边界折叶损失(hinge loss)函数,神经元可以用作支持向量机(SVM)的二分类器。最大边界折叶损失强调分类边界的最大化,使分类器更加鲁棒。

理解正则化。在 SVM/Softmax 的例子中,正则化项可以看作是一种“逐渐遗忘”的机制。它通过引导权重逐渐趋向于 0,从而防止模型过拟合。这种方式在生物学上类似于突触的长期衰减,即突触强度随着时间的推移而逐渐减弱。