人工智能当前的发展呈现出加速和深化的趋势,特别是在深度学习领域。技术革新与应用拓展并行推进,深度学习算法和模型结构不断创新,为处理复杂数据提供了强有力的工具,使得AI在图像识别、语音处理、自然语言理解等方面取得显著进展,并广泛应用于金融、医疗、教育、交通等多个行业。同时,数据驱动和算力提升成为AI发展的核心动力,互联网和物联网技术的发展为AI提供了丰富的数据资源,高性能计算平台、云计算以及边缘计算等技术的兴起则为AI提供了强大的算力支持。
笔者学习的专业是人工智能,基于自身的学习历程和网络的海量资源,决定着手更新一个人工智能的学习系列,记录个人的学习心得和历程。
先从生物学的角度理解一下神经网络
生物神经网络到人工神经元
生物学启发:人工神经网络(ANN)模拟了生物神经系统中神经元之间的信号传递过程,通过加权输入和激活函数实现类似的功能。
基本单元:人工神经元通过接收多个输入信号,结合权重计算和偏置,输出激活值,形成网络的基本构建模块。
生物神经网络到人工神经元
激活函数
三种常用的激活函数sigmod、relu、tanh
激活函数的作用与选择
激活函数是神经网络中引入非线性的关键机制,允许网络学习复杂的数据模式。常见激活函数包括:
1.Sigmoid:输出范围为 (0, 1),适合二分类问题,但存在梯度消失问题。
优点:
输出值在 (0, 1) 之间,适合处理概率问题,常用于二分类任务的输出层。
函数连续且可导,便于梯度计算。
缺点:
在输入值绝对值较大时,函数趋于饱和,梯度接近于零,可能导致梯度消失问题,影响深层网络的训练。
输出非零均值,可能导致后续层的神经元输入偏离零,影响训练效率。
适用场景: 主要用于输出层的二分类问题。
2.ReLU(Rectified Linear Unit):解决了梯度消失问题,但可能产生“神经元死亡”现象。
优点:
输出值在 (-1, 1) 之间,且均值为零,有助于加速收敛。
在零点附近,梯度较大,学习效率较高。
缺点:
与 Sigmoid 类似,在输入值绝对值较大时,可能出现梯度消失问题。
计算涉及指数运算,计算成本较高。
适用场景: 适用于隐藏层的激活函数,尤其在需要零均值输出的情况下。
3.Tanh:输出范围为 (-1, 1),在零点附近具有较大的梯度。
优点:
计算简单,收敛速度快。
在正值区域,梯度恒定为 1,避免了梯度消失问题。
引入稀疏性,有助于缓解过拟合。
缺点:
在负值区域,梯度为零,可能导致“神经元死亡”现象,即神经元在训练中不再更新。
输出非零均值,可能影响训练稳定性。
适用场景: 广泛用于隐藏层的激活函数,尤其在深度网络中表现优异
激活函数的选择:
隐藏层: ReLU 是常用的选择,因其计算效率高,且能有效缓解梯度消失问题。对于存在“神经元死亡”风险的情况,可考虑使用 Leaky ReLU 或 Parametric ReLU 等变体。
输出层:
二分类问题: 使用 Sigmoid 函数,将输出映射到 (0, 1) 区间,表示类别概率。
多分类问题: 使用 Softmax 函数,将输出映射到多个类别的概率分布。
回归问题: 使用线性激活函数,直接输出连续值。
网络拓扑结构
单层网络:由输入层直接连接到输出层,适用于线性问题。
多层网络:增加了隐藏层,能够捕获输入数据的非线性关系。
深度网络:隐藏层的数量显著增加,形成深度学习的基础,适合处理复杂的特征表达。
网络拓扑层—单层网络
网络拓扑层—多层网络
多节点输出网络
多隐藏层网络
训练神经网络
两个阶段 – 向前阶段 – 向后阶段
训练神经网络的流程
向前传播:计算网络的输出。
误差评估:通过损失函数(如均方误差或交叉熵)评估输出的准确性。
向后传播:利用梯度下降法调整权重和偏置,从而最小化误差。
梯度下降法
梯度下降法是机器学习和深度学习算法实践过程中非常重要的优化手段,贯穿模型的训练、调优
- 梯度下降法的基本原理
在数学上,给定一个可微函数 f(θ),其梯度 ∇f(θ) 指向函数值增长最快的方向。因此,沿着梯度的反方向移动,可以使函数值下降。梯度下降法的更新公式为:
其中,θ n表示第 n 次迭代的参数值,α 为学习率,控制每次更新的步长。
- 梯度下降法的三种形式
根据每次迭代中使用的数据量,梯度下降法可分为以下三种形式:
批量梯度下降法(Batch Gradient Descent,BGD):每次迭代使用整个训练集计算梯度,更新参数。这种方法在数据量较大时计算开销高,但更新方向准确。
随机梯度下降法(Stochastic Gradient Descent,SGD):每次迭代仅使用一个样本计算梯度,更新参数。计算效率高,但更新方向存在较大波动,可能导致收敛不稳定。
小批量梯度下降法(Mini-Batch Gradient Descent,MBGD):每次迭代使用一个小批量的样本计算梯度,更新参数。这种方法在计算效率和更新稳定性之间取得平衡,广泛应用于深度学习模型的训练。
- 学习率的选择
学习率 α 的选择对梯度下降法的收敛速度和稳定性至关重要:
学习率过大:可能导致参数更新过度,错过最优解,甚至使损失函数值发散。
学习率过小:收敛速度缓慢,训练时间延长。
为此,常采用学习率衰减策略,即随着迭代次数的增加逐步减小学习率,以平衡收敛速度和稳定性。
- 梯度下降法的改进算法
为克服标准梯度下降法的缺点,提出了多种改进算法:
动量梯度下降法(Momentum):在更新参数时考虑前几次更新的累积量,增加更新的惯性,减少震荡,加速收敛。
AdaGrad:根据参数的历史梯度平方和自适应调整学习率,对稀疏数据效果较好,但可能导致学习率过早衰减。
RMSProp:对 AdaGrad 进行改进,采用指数加权移动平均的方法,防止学习率过快衰减。
Adam:结合了动量和 RMSProp 的优点,计算梯度的一阶和二阶矩的估计,自适应调整学习率,具有较好的收敛性能。
- 梯度下降法的应用
梯度下降法在机器学习和深度学习中有广泛应用,包括:
线性回归:通过最小化均方误差,求解最佳拟合直线的参数。
逻辑回归:通过最小化对数损失函数,求解分类模型的参数。
神经网络训练:通过反向传播算法,利用梯度下降法更新网络权重和偏置,最小化损失函数。
- 梯度下降法的局限性
尽管梯度下降法在优化问题中广泛应用,但也存在一些局限性:
局部最小值:在非凸函数中,梯度下降法可能陷入局部最小值,无法找到全局最小值。
鞍点问题:在鞍点处,梯度为零,可能导致算法停滞,无法继续优化。
梯度消失或爆炸:在深层神经网络中,梯度可能在传播过程中逐渐减小或增大,影响训练效果。
sklearn 中的神经网络 API
sklearn是重要的机器学习框架,是 Python 生态系统中重要且广泛使用的机器学习库。它提供了丰富的工具,涵盖分类、回归、聚类、降维等多种算法,支持模型选择、数据预处理和评估等功能。其简洁一致的 API 设计使得用户能够快速上手并应用于实际项目。此外,scikit-learn 与 NumPy、SciPy、matplotlib 等科学计算库紧密集成,形成了强大的数据分析和建模工具链。很多机器学习的算法设计和验证工程都要调用到这个库。
https://scikit-learn.org/stable/modules/neural_networks_supervised.html
例子
from sklearn.neural_network import MLPClassifier
from sklearn.neural_network import MLPRegressor
# 示例:构建分类器
X = [[0, 0], [1, 1]] # 输入数据
y = [0,1] # 标签
clf = MLPClassifier(solver='sgd', alpha=1e-5, activation='relu', hidden_layer_sizes=(5, 2), max_iter=2000, tol=1e-4)
clf.fit(X, y) # 模型训练
predicted_value = clf.predict([[2, 2], [-1, -2]]) # 预测
print(predicted_value)
predicted_proba = clf.predict_proba([[2., 2.], [-1., -2.]])
print(predicted_proba)
print([coef.shape for coef in clf.coefs_])
print([coef for coef in clf.coefs_])
后续进一步整理后会把不同的博客文章加入分类栏目,方便查阅,预计整理出云计算、人工智能和数据结构与算法三个栏目 ,如果内容有说得不到位或者有问题的地方,欢迎各位大佬斧正,笔者会虚心学习改进!
版权归原作者 終不似少年遊* 所有, 如有侵权,请联系我们删除。