深度学习基础与直观理解

深度学习基础与直观理解
张凯博深度学习的基本概念
深度学习做了什么样的一件事
在开始学习之前,我们首先要理解深度学习究竟要解决什么问题。
深度学习的核心目标是建立从输入到输出的复杂映射关系。比如一张猫的图片,人眼很容易区分图片中是否存在猫,但是对于计算机而言就不是那么容易了,我们需要找到一个映射关系$f(x)$,去让计算机通过这个关系来判断是否存在猫。
一旦找到这个准确的映射关系,计算机就能用它对新的图片进行自动判断。
简单神经网络
线性与非线性
最简单的数学变换是线性变换:$f(x)=wx+b$。
然而,现实世界中的大多数问题(如图像识别、语音处理)都是高度非线性的。单一线性变换无法捕捉这些复杂模式。这时就需要引入激活函数的概念,它的核心作用是将线性变换转换为非线性变换。不必担心激活函数会过于复杂,实践中使用的激活函数通常形式简洁且效果显著。
常用的激活函数:
- 
Sigmoid函数,将输出压缩到(0,1)区间:$$\sigma(z)=\dfrac{1}{1+e^{-z}} $$
 - 
整流线性单元,计算简单,能有效缓解梯度消失:$$ReLU(z)=max(0,z)$$
 
从单输入到多输入
基础模型通常考虑单一输入,但实际应用中的输入数据往往是多维的。比如识别猫,需要同时分析颜色、纹理、形状等。对于多输入情况,函数形式可扩展为:$f(x_1,x_2)=g(w_1x_1+w_2x_2+b)$
多层神经网络
通过堆叠多个处理层,构建更复杂的网络结构:$f(x_1,x_2)=g_1(w_3g_2(w_1x_1+w_2x_2+b_1)+b_2)$,这种分层结构使得网络能够学习更加复杂的特征表示,深层网络能够逐级提取特征——从边缘到局部形状,再到整个物体。
损失函数
如何衡量模型的好坏?
上面介绍了简单的神经网络是如何组成的,下面我们就需要知道如何评价我们同过神经网络构建的函数$f(x)$,我们需要一个标准来评估网络映射函数$f(x)$的拟合效果,这就是损失函数。
基础损失函数可表示为:$L=\sum_{i=1}^{N} |y_i-\hat{y_i}|$
由于绝对值在编程中不易使用,且均方误差因其光滑性(便于求导)而被广泛使用。均方误差损失函数为:$L=\sum_{i=1}^{N} (y_i-\hat{y_i})^2$
模型训练
神经网络具体是如何训练的呢?
介绍完最简单神经网络的构成后,现在开始了解一下神经网络的训练过程了。
在学习深度学习的过程中,经常提到训练、测试等词,那么神经网络是如何进行训练的呢?
神经网络的训练过程本质上就是去猜$w,b$等参数,通过不断改变参数的值,使得损失函数接近最小。
对于最简单的神经网络$f(X)=WX+B$一次函数,可以通过对损失函数进行求导确定参数值。然而对于复杂的神经网络则不能直接求得参数,实际上是通过观察改变参数的值的变化对损失函数大小的影响来决定参数值的。
具体来说,通过计算损失函数对参数的偏导数来指导参数更新:如对$w$变化对损失函数$L(w,b)$的变化的大小,即时损失函数对$w$的偏导。
$$w=w-\eta \dfrac{\partial L(w,b)}{\partial w}$$
$$b=b-\eta \dfrac{\partial L(w,b)}{\partial b}$$
其中:
- 
$\eta$是学习率,控制参数更新步长
 - 
$\nabla L$是梯度,指向损失函数增长最快的方向
 
通过持续调整$w$和$b$使损失函数$L(w,b)$最小化的过程,称为梯度下降法。
前向传播与反向传播
由于我们可以从右向左依次进行求导,然后逐步更新每层的参数,直到把所有的神经网络的参数,这个过程称为前向传播。
前向传播是指从输入层开始,逐层计算直到得到最终输出的过程。
在参数更新时,我们需要从输出层开始,依次计算每层的梯度。由于深层网络的梯度计算会依赖前层的偏导数值,这些梯度值需要从右向左逐层传递,这个过程就是反向传播。
反向传播专门负责计算损失函数关于每个参数的梯度。通过让每个参数沿梯度反方向更新,最终使损失函数达到最小。
前向传播:输入数据从网络底层流向顶层,逐层计算得到最终输出
反向传播:损失函数的梯度从输出层向输入层逐层反向传播,高效计算所有参数的梯度
这两者配合,实现了网络的高效训练。
过拟合与泛化
在训练过程中,如果模型过度贴合训练数据而导致在测试数据上表现不佳,这种现象称为过拟合。
泛化能力则指模型在未见数据上的预测准确性。
为了解决过拟合的问题,人们尝试了很多种方法。如,
- 
数据增强:通过旋转、缩放等技术扩充训练数据集
 - 
模型简化:减少网络层数,降低模型复杂度
 - 
早停法:在验证集性能开始下降时提前终止训练
 - 
正则化:抑制参数值的过度增长
 - 
Dropout:在训练过程中随机忽略部分神经元
 
复杂神经网络的表示
实际应用中的神经网络通常包含大量参数和深层结构,因此需要采用向量化的表示方法来高效处理参数和计算。
所以,将采用向量化来表示参数。





