卷积神经网络(Convolutional Neural Networks)
- 卷积层(Convolutional Layers)
卷积层是卷积神经网络中的核心组件。在这一层中,我们使用一个叫做卷积核(Kernel)的窗口在输入图像上滑动,提取特征。卷积核的大小、步长(Stride)和填充(Padding)都是可以设置的参数。步长表示每次滑动窗口移动的像素数,填充是在输入图像周围添加的像素数。
卷积操作的目的是提取输入图像的局部特征。例如,一个3x3的卷积核可以从输入图像中提取一个3x3的局部区域的信息。通过在整个图像上滑动这个卷积核,我们可以得到一个特征图(Feature Map),表示输入图像的局部特征。
- 激活层(Activation Layers)
激活层是神经网络中另一个重要组成部分。在这一层中,我们对输入数据应用一个激活函数(Activation Function),如ReLU(Rectified Linear Unit)或Sigmoid。激活函数的作用是引入非线性,使得神经网络能够学习更复杂的特征。ReLU激活函数在输入值大于0时保持原值,否则设为0。Sigmoid激活函数将输入值映射到0和1之间。
- 池化层(Pooling Layers)
池化层的主要作用是降低特征图的尺寸,减少计算复杂度。常见的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化是在输入特征图的一个小窗口内取最大值作为输出特征图的值。平均池化则是计算输入特征图窗口内的平均值作为输出特征图的值。
损失函数(Loss Functions)
在训练神经网络时,我们需要定义一个损失函数来衡量模型预测值与真实值之间的差异。损失函数的目标是最小化这种差异,从而让神经网络更好地拟合训练数据。根据不同的任务类型(如分类、回归等),我们可以选择不同的损失函数。
常用的损失函数有:
交叉熵损失(Cross-Entropy Loss):交叉熵损失常用于分类任务,计算公式为:负对数似然(Negative Log Likelihood)。交叉熵损失可以衡量模型预测概率分布与真实概率分布之间的差异。
均方误差损失(Mean Squared Error Loss):均方误差损失常用于回归任务,计算公式为:真实值与预测值之差的平方和的均值。均方误差损失可以衡量预测值与真实值之间的平均误差。
梯度下降(Gradient Descent)算法
梯度下降是一种优化算法,用于最小化损失函数。梯度下降的核心思想是沿着损失函数的负梯度方向更新模型的权重,从而逐步减小损失函数的值。在每次迭代过程中,我们都需要计算损失函数的梯度(梯度是损失函数的导数),然后按照梯度的方向更新权重。
梯度下降有几种不同的变体,主要区别在于如何计算梯度:
批量梯度下降(Batch Gradient Descent):在每次迭代时,使用整个训练集来计算梯度。
随机梯度下降(Stochastic Gradient Descent, SGD):在每次迭代时,仅使用一个训练样本来计算梯度。虽然计算速度更快,但可能导致更新过程非常不稳定。
小批量梯度下降(Mini-batch Gradient Descent):在每次迭代时,使用一小部分训练样本(如8个,16个等)来计算梯度。这种方法既充分利用了计算资源,又保持了较好的更新稳定性。
在实际应用中,我们通常使用小批量梯度下降算法来训练神经网络,因为它兼具计算效率和更新稳定性。此外,根据训练数据的规模和计算资源的限制,我们可以灵活调整批次大小(batch size)以获得更好的训练效果。
优化器(Optimizers)
优化器是用于更新神经网络权重的算法,其目的是最小化损失函数。我们已经学习了梯度下降算法,它是一种最基本的优化器。然而,在实际应用中,我们还有许多其他类型的优化器,这些优化器通常能够更快地收敛到最优解,或者更稳定地进行权重更新。
以下是一些常见的优化器:
随机梯度下降(Stochastic Gradient Descent, SGD):我们已经学过了,它是最基本的优化器。
带动量的随机梯度下降(Momentum SGD):在SGD的基础上添加了动量项,可以加速收敛过程,并抑制更新过程中的震荡。
Adagrad:根据参数的更新历史来调整学习率,适用于稀疏数据和非凸优化问题。
RMSProp:在Adagrad的基础上修改,增加了一个指数加权移动平均项,以克服Adagrad学习率过快衰减的问题。
Adam:结合了Momentum和RMSProp的优点,同时在学习率调整上采用了自适应方法。Adam通常在实践中表现很好,是许多任务的首选优化器。
如何在多层神经网络中应用梯度下降和误差反向传播算法。
首先,我们回顾一下在单层神经网络中应用梯度下降的方法。在多层神经网络中,我们基本上沿用相同的权重更新策略。我们沿着损失函数的负梯度方向更新权重,以便更快地收敛到最优解。此外,我们还需要使用误差反向传播算法。
误差反向传播的主要思想是逐层地将损失从输出层传播到输入层。具体来说,我们首先计算输出层的损失,然后更新相应的权重。接着,我们计算更低层的误差,并将损失传播到这些层。最后,我们将损失传播到输入层,并更新输入层的权重。
为了更直观地理解这个过程,我们可以使用计算图来表示神经网络。计算图是一种图形表示方法,可以帮助我们更清晰地理解神经网络中的各种计算。在计算图中,节点表示变量(如输入、权重等),边表示计算操作(如加法、乘法等)。
通过分析计算图,我们可以得到每个节点的梯度。梯度表示损失函数相对于该节点的变化率。在反向传播过程中,我们需要根据梯度对每个节点的权重进行更新。具体来说,我们需要计算损失函数相对于权重的偏导数,然后按照梯度方向更新权重。
为了计算梯度,我们可以使用链式法则。链式法则是微积分中的一种基本技巧,可以帮助我们计算复合函数的导数。在计算图中,我们可以将复合函数分解为多个简单函数,然后逐个计算这些函数的导数。最后,我们将这些导数相乘,得到复合函数的导数。
在多层神经网络中,我们可以将损失函数看作是一系列简单函数的组合。通过链式法则,我们可以逐层计算梯度,并将损失从输出层传播到输入层。在这个过程中,我们需要遵循以下原则:
- 从输出层开始,向输入层方向进行计算。
- 在每一层,先计算损失函数相对于权重的偏导数,然后按照梯度方向更新权重。
- 将计算得到的梯度传播到下一层,重复步骤2。
通过这种方式,我们可以逐层更新神经网络的权重,从而最小化损失函数。这就是多层神经网络中梯度下降和误差反向传播算法的主要原理。
如何根据损失最小化选择合适的优化器
在神经网络中,我们通常使用梯度下降算法及其变体来更新权重。这些算法的核心思想是沿着损失函数的负梯度方向更新权重。然而,在实际应用中,我们还可以选择其他优化器,这些优化器通常具有更快的收敛速度或更稳定的性能。
例如,在多层神经网络中,我们可以选择以下几种常见的优化器:
- 带动量的随机梯度下降(Momentum SGD):这种优化器在普通随机梯度下降的基础上增加了动量项,从而加速收敛过程并减少震荡。
- AdaGrad:这种优化器可以根据参数的更新历史自动调整学习率,适用于稀疏数据和非凸优化问题。
- RMSProp:这种优化器在AdaGrad的基础上进行了改进,增加了一个指数加权移动平均项,以克服AdaGrad学习率过快衰减的问题。
- Adam:这种优化器结合了Momentum和RMSProp的优点,并在学习率调整上采用了自适应方法。在实际应用中,Adam通常具有较好的性能。
选择合适的优化器可以帮助我们更快地找到损失函数的最小值。在实际应用中,我们通常需要根据任务的特点和数据的性质来选择合适的优化器。为了获得最佳性能,我们可能还需要对优化器的参数进行调整,例如学习率、动量等。
现在我们已经了解了如何在多层神经网络中应用梯度下降和误差反向传播算法以及如何选择合适的优化器。接下来,我们可以尝试将这些知识应用到实际问题中,如图像识别、语音识别等领域。
举例说明
我们需要首先搭建一个适当的神经网络结构,包括卷积层、激活层、池化层等。接着,我们需要定义损失函数以衡量模型的预测与真实值之间的差异,并选择一个合适的优化器来最小化损失函数。在训练过程中,我们将使用梯度下降算法和误差反向传播算法来更新神经网络的权重。通过不断迭代和优化,我们可以使神经网络在给定任务上获得更好的性能。
评论和提示
关于训练算法:
- 神经网络无法保证收敛到零训练误差,可能收敛到局部最优或无限震荡。
- 然而,在实践中,许多大型网络在真实数据上都能收敛到较低的误差。
- 可能需要数千个周期(一个周期指网络看到所有训练数据一次),花费数小时或数天进行训练。
- 为了避免局部最小值问题,可以从不同的随机权重开始进行多次试验(随机重启),并选择训练集误差最低的试验结果。
- 设置学习率以及选择隐藏单元和层数可能具有一定难度。
关于防止过拟合:
- 运行过多的周期可能会导致过拟合。
- 保留一个验证集,在每个周期后测试其准确性。当额外的周期实际上增加了验证误差时,停止训练。
关于框架和实践技巧:
- 使用小批量(mini-batch)训练。
- 使用正则化。
- 为参数使用交叉验证。
- 使用修正线性单元(ReLU)或泄漏修正线性单元(Leaky ReLU),不要使用Sigmoid激活函数。
- 对数据进行中心化(减去均值)处理。
- 学习率:过高还是过低。
Exercise Sheet
什么是深度学习? 深度学习(Deep Learning)是一种基于人工神经网络的机器学习方法。它使用多层神经网络结构,可以自动学习输入数据的抽象特征,用于解决复杂的分类、回归和生成等问题。
计算机视觉中的不同深度学习算法概述。 例如:卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)、变分自编码器(VAE)等。
有监督学习与非监督学习的基本区别以及计算机视觉中的例子。 有监督学习是基于已标注数据进行学习的算法,例如图像分类。非监督学习是在无标签数据的情况下进行学习的算法,例如聚类和降维。计算机视觉中的例子包括:有监督学习的图像分类任务,非监督学习的图像聚类任务。
CNN、RCNN、Fast-RCNN和Mask-RCNN之间的区别。 CNN是卷积神经网络,主要用于图像分类。RCNN是在CNN基础上加入区域提议的目标检测算法。Fast-RCNN进一步优化RCNN,引入RoI Pooling加速计算。Mask-RCNN在Fast-RCNN基础上,加入分割分支实现实例分割。
隐藏层、卷积层、池化层等是什么? 隐藏层是神经网络中的中间层,用于提取输入数据的特征。卷积层是CNN中的一种特殊层,用于进行局部权重共享的特征提取。池化层是CNN中的一种下采样层,用于降低空间维度和提高计算效率。
YOLO算法是如何工作的? YOLO将目标检测任务作为一个密集预测问题,将输入图像划分为网格,每个网格负责预测包围盒和类别概率。YOLO将整个任务转化为一个整体的回归问题,实现端到端的训练和预测。
如何计算权重和非线性函数是什么? 权重是神经网络中的参数,通过梯度下降等优化算法进行更新。非线性函数是神经网络中的激活函数,例如Sigmoid、ReLU等,用于引入非线性关系以提高模型的表达能力。
与其他激活函数(如Sigmoid)相比,在哪些例子中ReLU更适用? ReLU在深度神经网络中具有较好的性能,因为它可以缓解梯度消失问题,加速收敛过程。例如,在多层卷积神经网络中,ReLU通常比Sigmoid更适用。
什么是反向传播? 反向传播(Backpropagation)是一种高效计算梯度的算法。通过链式法则,将损失从输出层传播到输入层,从而实现权重的更新。
什么是损失函数? 损失函数(Loss Function)是衡量模型预测与真实值之间差异的指标。优化算法的目标是最小化损失函数以提高模型性能。
数据增强是什么以及常用的增强方法? 数据增强(Data Augmentation)是一种扩充训练数据的方法,通过对原始数据进行变换,生成新的训练样本。常用的方法包括平移、旋转、翻转、缩放等。
What is Deep Learning? Deep Learning is a machine learning approach based on artificial neural networks with multiple layers. It enables the automatic learning of abstract features from input data, which can be used to solve complex problems like classification, regression, and generation.
Outline different DL algorithms for computer vision. Examples include Convolutional Neural Networks (CNNs), Recurrent Neural Networks (RNNs), Generative Adversarial Networks (GANs), and Variational Autoencoders (VAEs).
Explain the fundamental difference between Supervised and Unsupervised learning and give examples in Computer Vision. Supervised learning algorithms learn from labeled data, e.g., image classification. Unsupervised learning algorithms learn from unlabeled data, e.g., clustering and dimensionality reduction. Examples in computer vision include image classification tasks for supervised learning and image clustering tasks for unsupervised learning.
Explain the difference between CNN, RCNN, Fast-RCNN, and Mask-RCNN. CNNs are Convolutional Neural Networks primarily used for image classification tasks. RCNN is an object detection algorithm that adds region proposals to CNNs. Fast-RCNN further optimizes the RCNN by introducing RoI Pooling for faster computation. Mask-RCNN extends Fast-RCNN by adding a segmentation branch for instance segmentation tasks.
What are hidden layers, convolution layers, pooling layers, etc.? Hidden layers are intermediate layers in a neural network responsible for extracting features from input data. Convolution layers are specialized layers in CNNs that perform feature extraction using local weight sharing. Pooling layers are downsampling layers in CNNs that reduce spatial dimensions and improve computational efficiency.
Explain how the YOLO algorithm works. YOLO treats object detection as a dense prediction problem by dividing the input image into a grid, with each grid cell responsible for predicting bounding boxes and class probabilities. YOLO transforms the entire task into a single regression problem, enabling end-to-end training and prediction.
How are weights calculated, and what are non-linear functions? Weights are the parameters of a neural network, and they are updated using optimization algorithms like gradient descent. Non-linear functions are activation functions in a neural network, such as Sigmoid and ReLU, which introduce non-linear relationships to enhance the model’s expressive capacity.
Identify examples where ReLU would be better suited as compared to other activation functions, e.g., sigmoid. ReLU has better performance in deep neural networks because it helps mitigate the vanishing gradient problem and accelerates the convergence process. For instance, in multi-layer convolutional neural networks, ReLU is generally more suitable than Sigmoid.
What is backpropagation? Backpropagation is an efficient algorithm for computing gradients. It uses the chain rule to propagate the loss from the output layer to the input layer, enabling weight updates.
What is a loss function? A loss function is a metric that measures the discrepancy between model predictions and true values. The goal of optimization algorithms is to minimize the loss function to improve model performance.
What is data augmentation and commonly used augmentation methods? Data augmentation is a method to expand the training data by applying various transformations to the original data, generating new training samples. Common methods include translation, rotation, flipping, and scaling.