深度学习基础-----神经⽹络与深度学习((美)MichaelNielsen )

本文是深度学习基础,通过阅读神经⽹络与深度学习((美)MichaelNielsen )做的笔记

训练数据也成为监督数据

监督学习:是一种机器学习方法,模型通过使用带标签的数据进行训练。最终进行数据预测。

半监督学习:模型使用少量带标签的数据和大量未带标签的数据进行训练。最终进行数据预测。

无监督学习:模型使用没有标签的数据进行训练,最终进行数据预测。

二分类任务:将目标分类为两个类别,如邮件检测(垃圾邮件or正常邮件)

多分类类别:将目标分类为多个类别,如图像分类(猫,狗,鸟),数字识别(0-9)

在二分类任务中常用逻辑回归损失函数,逻辑损失函数越小,预测越接近真实值。

神将网络的学习指的是从训练数据中自动获取最有权重参数的过程

随机梯度下降法(stochastic gradient descent)即SGD

反向传播算法分向后传播和反向传播,

首先向后传播,经过神经网络的不同参数的权重和激活函数层层计算后得到输出

然后计算损失,即损失函数的值

反向传播,使用链式求导法则层层求偏导求解对于损失函数更小参数权重。

由于是链式求导所以当某些层偏导数小于1后,整体导数越来越小,于是会出现梯度消失的现象,使得不能减少损失函数的值。

卷积神经网络(CNN, Convolutional Neural Network)

卷积神经网络(CNN)是一种专门用于 处理图像和时序数据 的神经网络架构,它通过 局部感受野(Receptive Field) 和 参数共享(Parameter Sharing) 来提高计算效率,并减少参数数量。

主要有四层

  1. 卷积层,进行卷积计算提取特征
  2. 激活函数层,带入激活函数计算
  3. 池化层,降低维度,提高计算效率
  4. 全连接层,将上一层结点计算的结果传入下一层
    重复上述四步多次,最总转换为概率分布

神经结点中有一个或多个输入,一个输出

输入的数据根据其数学函数权重相乘相加后输出传入下一个结点

在整个网络中层层传递直到输出结果

但做识别任务并不好时,改变其某个权重可以使某类的识别任务表现变好,但其他识别任务可能会发生复杂且难以预料的变化。

于是引入激活函数进行调整神经结点输出,以求得更好的表现能力。

在神经网络中,输入层和输出层中间的叫做隐藏层,比如三层的神经网络有一层隐藏层,一层输入层,一层输出层,同样的,四层神经网络有两层隐藏层。

由于历史原因,多层神经网络又叫多层感知(MLP, Multi-Layer Perceptron)

为了能找到神经结点中合适的权重和偏执,需要引入损失函数来以量化如何实现这个权重和偏执。

为了能使代价尽量小,即想办法使损失函数尽量的小,引入了梯度下降算法找到使损失函数更小的权重参数。

由于每个结点都有很多参数,所以梯度下降就是对当前结点的参数的损失函数求偏导

找到极小值。

当求出极小值,找到了损失函数变小的方向,那么像这个方向,更新权重的大小就叫做学习率,或者叫做更新步长

又引伸出问题,若更新步长太大会错过极小值,导致损失函数变大,若是更新步长太小,时间开销会大。

再求多元函数极小值时需要求二阶偏导,导致计算开销,时间开销极大,

如,对于上百万参数,那么需要求百万*百万的二阶偏导即万亿次的偏导数(是万亿的一半,因为二阶偏导数具有轮换对称性)

为了优化梯度下降开销,采取随机梯度下降算法优化,即使用少量的样本,进行梯度下降算法,得到预估的使损失函数最小的梯度。

每次采用随机的小批量数据训练,直到用完了数据集中所有的数据,称为完成了一个训练迭代(epoch),然后开启下一个训练迭代周期。

这里为什么同一个数据集要训练多次,才能取得更好的性能,即损失函数更小?

因为由于数据批次不同,初始权重不同,损失函数参数太多,可能有很多极小值

所以训练多次迭代后,性能更好。

增量学习是一种训练方式,实时接收数据进行训练,并不是已有数据进行多次训练,直到损失函数收敛,最小化,增量学习一般两种场景,一种是数据量特别大,导致存不下那么多的数据,另一种是实时收到信息,如在线广告推荐,用户的行为数据不断改变,或金融市场股票价格实时更新,或是物联网传感器数据持续产生。

增量学习的训练方式对比于同一个数据集合多次训练直到拟合的方式,所需的内存更小,且模型实时更新,适合实时系统,但是也有很多问题。

如灾难性遗忘问题,即经过了当前的数据训练,对于之前的数据表现欠拟合。而且当数据分布发生变化时,训练变得不稳定,称为概念漂移或者数据分布漂移。当数据不同时,损失函数的形状可能发生变化,对于之前的损失函数最小值,可能不是当前的最小值。

支持向量机是一种监督学习算法,用于分类和回归任务,主要是通过一个界限来分开各种数据,界限又叫最优决策边界或超平面。

在线性可分的情况下,

二维空间的超平面就是一条直线

三维空间的超平面就是一个平面

更高维超平面就是一个更高为的"平面"

在线性不可分的情况下

会引入核函数,将数据映射到高维空间从而变得线性可分,常见的核函数有,线性和,多项式核,高斯核,Sigmoid核。

当激活函数在某些区域过于平滑时,导数非常小,求损失函数最小值时的求导,是损失函数对于权重求导,链式法则求导如下图所示

当激活函数导数很小时,由于链式法则,激活函数的导数也很小,造成找不到最小值或者损失函数收敛过慢的情况。

激活函数导数过小称为梯度消失,

于是引入了交叉熵损失函数

其中n是训练数据总数,y是真实值,a是预测值

可以看到这个函数的定义域是(0,1),因此函数内部所有的项都是负数,所以c>0

当预测值接近于实际值时,交叉熵接近于0,即y和a预测的0类或者1类都准确

所以当预测准时交叉熵损失函数小,

又根据链式法则求导,可以约掉激活函数的导数,摆脱激活函数的依赖,从而解决梯度消失问题。

以上总结:由于激活函数在某些值的曲线过于平滑,导致梯度消失现象,使用交叉熵函数作为损失函数可以解决激活函数梯度消失的问题,且交叉熵函数还有很好的性质,适用于分类问题。

当训练轮数过多会对于训练数据过拟合,而对其他数据没有很好的泛化作用。

为了消除过拟合的现象,采取多种办法。

例如,增加训练数据可以减弱过拟合,或者采用规范化(正则化方法)

L2正则化(L2规范化)是指在损失函数中增加一个额外的正项,以增加当前权重的损失函数,以减小大权重参数的影响。对于交叉熵损失函数的L2正则化为

可以看到后面的w(权重)越大,损失函数越大,其效果是更倾向学习小一点的权重。

还有其他许多规范化(正则化)的方法如

L1规范化,弃权(Dropout),增加样本数据量等

总结之前的:

多层神经元,包括输入层,隐藏层,输出层,又叫深度神经网络,或者多层感知机mlp。

输入数据经过神经结点的权重和激活函数计算后,输出结果,由于表现并不好,于是引入损失函数进行对于找到合适权重的量化即也就是学习的过程,损失函数有很多种,如二次损失函数,交叉熵损失函数。

那么如何找到损失函数最小值,又引入梯度下降法,或者其他方法 找到损失函数最小值如随机梯度下降法,adma,牛顿法,动量法等。

以求梯度找损失函数最小值,即求导数,以找到损失函数变小的最快路径,可以用柯西-施瓦茨不等式进行证明,梯度下降法是最近最速路径的最优办法。

有时求导,会出现导数为0或者过于小的情况,被称为梯度消失,实际是激活函数的图像在某些值过于平滑,于是为了解决这个问题,可以换其他合适的损失函数或者换其他激活函数。

例如可以将二次损失函数换为交叉熵损失函数,当对于交叉熵损失函数求导时可以发现将激活函数的导数恰好消掉了。从而解决梯度消失的问题。

于是到了训练输出,会发现过拟合的现象,即对于训练数据有很好的拟合效果,而对于验证数据/测试数据没有很好的拟合现象,于是引入规范化(正则化),常用的有L1规范化,L2规范化,Dropout,实际是在损失函数减去一个与当前结点权值有关的正项,即对于大权中参数会使当前损失函数变大,即叫做惩罚,以使对于大权重参数的影响变小。

总结结束

但在《深度学习与神经网络》中,为什么规范化对于深度学习过拟合有很好的作用,

我们已经看到了规范化在实践中能够减少过度拟合了。这是令⼈振奋的,不过,这背后的原

因还不得⽽知!通常的说法是:⼩的权重在某种程度上,意味着更低的复杂性,也就对数据给出

了⼀种更简单却更强⼤解释,因此应该优先选择。这虽然很简短,不过暗藏了⼀些可能看起来

会令⼈困惑的因素。

对于下图

可以找到线性函数进行拟合,即一条斜线,显然并不是完全拟合

也可以找到9阶多项式进行拟合,可以完全拟合,

但对于不在图像内的点,线性函数的泛化拟合效果一般都比多项式效果好,抗干扰能力也更强。

于是好像找到了规律,即对于一种现象,简单的解释比复杂的解释更好,这被称为"奥 卡姆剃⼑原则"。

书中原文如下

但是,这就不是⼀个 ⼀般的科学原理。也没有任何先验的逻辑原因来说明简单的解释就⽐更为负责的解释要好。实际上,有时候更加复杂的解释其实是正确的。

例如,爱因斯坦的相对论和牛顿的力学定律。

但现在还不知道为什么会有简单的比复杂的更好,其中的数学原理是什么?

目前只是经验说明。

相关推荐
云狐创意11 分钟前
小豆包api:gpt-4o模型api已接入,出图更稳定
人工智能·程序人生
记得开心一点嘛13 分钟前
YOLOv11模型的常见处理
深度学习·yolo·机器学习
郝YH是人间理想16 分钟前
OpenCV基础——轮廓检测、模板匹配、图像均衡化
开发语言·图像处理·人工智能·python·opencv·计算机视觉
十九万里20 分钟前
基于 OpenCV + Haar Cascade 实现的极简版本人脸标注(本地化)
人工智能·后端
万事可爱^31 分钟前
传统神经网络、CNN与RNN
人工智能·rnn·神经网络·机器学习·cnn
用户77853718369637 分钟前
揭秘AI自动化框架Browser-use(四):Browser-use记忆模块技术解析
人工智能·后端
华健课堂38 分钟前
DeepSeek 聊天机器人项目
人工智能·deepseek
Lx35241 分钟前
🌟《生物代码革命:DNA存储与AI的奇妙反应》🌟
人工智能
孔令飞1 小时前
Neovim Go IDE 安装和配置
人工智能·云原生·go
孔令飞1 小时前
如何使用声明式API编程来开发业务代码?
人工智能·云原生·go