人工智能-深度学习-学习笔记
人工智能技术的发展展现出加速与深化的趋势,在深度学习领域同步推进的技术革新与应用拓展方面均取得了显著成果。随着深度学习算法与模型架构不断演进,在图像识别、语音处理以及自然语言理解等领域取得了显著进展,并已在金融、医疗、教育以及交通等多个行业实现了广泛的应用覆盖。其中,数据驱动与算力提升成为推动人工智能发展的核心动力来源,在这一过程中互联网及物联网技术的发展为其提供了丰富的数据资源支持;与此同时高性能计算平台、云计算以及边缘计算等技术的进步则为其提供了强大的算力保障。
个人在专业领域的学习经历基础上,并结合自身积累的学习经验和丰富的网络资源
先从生物学的角度理解一下神经网络

生物神经系统中的神经元向人工神经元转换,在仿生学研究中被广泛探讨;从生物学视角来看, 人工神经网络(ANN)模仿了生物神经系统中各神经元间的信号传递机制, 这一过程主要依赖于加权输入与激活函数计算实现类似的计算功能;基本单元: 每个个体的人工神经元会接收多个输入信号, 经过加权求和与偏置值处理后, 计算出一个激活值, 这一数值将作为构成该网络的基础模块参与整体运算
生物神经网络到人工神经元

激活函数
三种常用的激活函数sigmod、relu、tanh
激活函数在神经网络中扮演着引入非线性的关键角色

优点:
输出值限定在区间 (0, 1) 内,并适于表示事件发生的可能性程度,在机器学习中常用于表示概率或置信水平的大小。
函数不仅光滑连续且可微分,在实际应用中还具有良好的数值稳定性特性,在深度学习模型训练过程中能有效提升优化效率与收敛速度。
缺点:
当输入样本特征具有较大范数时模型趋于饱和化现象明显,在这种情况下模型的学习能力会受到限制并导致训练过程中的梯度消失问题出现。
此外该函数的非对称性特点使其输出结果呈现偏态分布特征,在实际应用中可能会影响后续神经网络层对样本数据的概率估计效率与准确性表现效果。
适用场景: 通常应用于解决两类分类问题中的概率预测任务,在逻辑回归模型中有广泛的应用实例与实践案例支持其有效性与可靠性评估标准设定依据等特性分析基础之上进行推广应用
2 ReLU (Rectified Linear Unit) 是一种神经网络中的激活函数 通过消除梯度消失的问题 其却可能带来神经元死亡的现象 这种权衡关系使得 ReLU 在实际应用中展现出良好的性能

优点:
输出范围限定在区间 (-1, 1) 内,并且均值为零的特性有助于加快收敛速度。
当输入接近于零时,函数曲线较为平缓,从而保证了较高的学习效率。
缺点:
类似于 Sigmoid 激活函数,在输入绝对值较大时可能会导致梯度消失现象出现。
计算过程中会涉及到指数运算这一环节,在一定程度上增加了计算复杂度。
适用场景: 该激活函数适用于神经网络中的隐藏层节点激活函数设计,并特别适合那些对输出结果要求具有对称性特点的场景。
3.Tanh:输出范围为 (-1, 1),在零点附近具有较大的梯度。

优点:
计算过程较为简便,在正向传播过程中展现出较快的收敛速度。
通过保持梯度在正值区域恒定为1的方式,有效防止了梯度消失现象的发生。
引入稀疏性机制后,在一定程度上缓解了过拟合问题。
缺点:
在负值区间内,导数为零的状态可能导致神经元陷入停滞状态,在训练过程中难以进行调整。
虽然输出均值不为零的状态可能会影响模型的整体训练稳定性。
适用场景: 广泛应用于隐藏层的激活函数设计中,并且在深度学习模型中表现出色
激活函数的选择:
隐藏层: ReLU是一种广泛采用的激活函数,在提升模型性能方面表现出色。其计算效率较高,并且在一定程度上能够缓解梯度消失的问题。对于存在"神经元死亡"风险的情况,则建议选用Leaky ReLU或Parametric ReLU等变体来进一步优化网络性能。
输出层:
对于二分类问题,则可采用Sigmoid函数来进行处理,并将其输出映射至(0,1)区间内以表示各类别的概率值。
而对于多分类问题,则应采用Softmax函数来完成任务,并将其输出映射至多个类别对应的概率分布上以实现结果预测的目标。
最后,在回归问题中,则应选用线性激活函数并直接生成连续数值作为最终预测结果。
网络拓扑结构
单层网络:仅通过一层前向传播连接输入与输出节点,并适用于解决具有线性关系的问题。
多层次结构:通过引入多个隐藏层来学习数据的复杂模式。
深度学习模型:随着深层结构的发展,在特征提取方面表现尤为突出。
网络拓扑层—单层网络


网络拓扑层—多层网络

多节点输出网络

多隐藏层网络

训练神经网络
两个阶段 – 向前阶段 – 向后阶段
构建神经网络的过程
前向传播过程中,计算网络的输出结果
在评估误差时,采用均方误差或交叉熵等损失函数来衡量预测结果与实际值之间的差异
反向传播过程中,在使用梯度下降法优化参数的过程中(即调整权重和偏置),目标是最小化预测结果与真实值之间的差异
梯度下降法

梯度下降法在机器学习和深度学习算法实践过程中起到关键作用,并在整个模型训练与优化的过程中扮演核心角色。
1. 梯度下降法的基本原理
从数学角度来看,在优化理论中,给定一个可导函数 f(θ),它的梯度 ∇f(θ) 总是指示着函数值增长最快的方向;由此可知,在负梯度方向进行迭代更新是能使目标函数逐步减小的过程。该方法的基本迭代步骤即为此类优化算法的核心原理:通过不断沿负梯度方向搜索最优解的位置,并在此基础上逐步逼近极小值点。

其中,θ n表示第 n 次迭代的参数值,α 为学习率,控制每次更新的步长。
2. 梯度下降法的三种形式
根据每次迭代中使用的数据量,梯度下降法可分为以下三种形式:
批量梯度下降法(Batch Gradient Descent, BGD):在每次迭代过程中利用完整的训练数据集来计算梯度并更新参数。该方法虽然能够保证优化方向的准确性,但在处理大规模数据时会带来较高的计算开销。
随机梯度下降法(Stochastic Gradient Descent, SGD)是一种优化算法:它通过在每一次迭代过程中仅利用单一数据点来估算梯度进而更新模型参数。该方法具有较高的计算效率但在具体实现过程中可能会因为参数更新的方向不够稳定而导致整体优化效果受到影响
小批量梯度下降法(Mini-Batch Gradient Descent, MBGD)是一种优化算法:它通过小批量样本高效地计算梯度并更新参数以优化模型参数。该方法通过权衡利弊实现了良好的计算效率与更新稳定性,在深度学习模型训练中得到了广泛应用
3. 学习率的选择
学习率 α 的选择对梯度下降法的收敛速度和稳定性至关重要:
学习率过大:可能导致参数更新过度,错过最优解,甚至使损失函数值发散。
学习率过小:收敛速度缓慢,训练时间延长。
为了达到目标目的,常用的方法是学习率衰减策略。具体来说,在迭代次数不断增加的过程中,我们会逐渐降低学习率数值。这种调整策略旨在调节收敛速度与稳定性之间的平衡关系。
4. 梯度下降法的改进算法
为克服标准梯度下降法的缺点,提出了多种改进算法:
动量梯度下降法(Momentum):在参数更新过程中积累前几次更新的结果,在迭代中增强过程中的持续性,并降低振荡现象以加快收敛速度。
AdaGrad:基于参数历史梯度平方的累积总和来动态调整学习率,在处理稀疏数据时表现出较好的适用性,并可能使学习速率提前下降
RMSProp 是一种基于 AdaGrad 的优化方法,在其基础上引入了指数加权移动平均的技术来抑制学习率的过度衰减。
Adam整合了动量和RMSProp的优势,在对一阶与二阶矩进行估计的过程中实现了动态调节学习速率,并展现出良好的收敛效果。
5. 梯度下降法的应用
梯度下降法在机器学习和深度学习中有广泛应用,包括:
线性回归:通过最小化均方误差,求解最佳拟合直线的参数。
逻辑回归:通过最小化对数损失函数,求解分类模型的参数。
神经网络训练:基于反向传播技术,在运用梯度下降方法调整网络参数的值时,在线性回归模型中实现损失函数的降低。
6. 梯度下降法的局限性
尽管梯度下降法在优化问题中广泛应用,但也存在一些局限性:
在非凸函数中,在应用梯度下降法时可能会陷入局部最小值(local minima),难以到达全局最优解(global minimum)。
鞍点问题:在鞍点处,梯度为零,可能导致算法停滞,无法继续优化。
梯度衰减或突增:在深层神经网络中,在传播过程中逐渐减小到接近零,在传播过程中急剧增大到非常高的水平
sklearn 中的神经网络 API
scikit-learn 被广泛认为是机器学习领域的核心框架,在Python生态系统中占据核心地位并被广泛应用。它集成了全面且功能强大的工具集合,在分类算法用于数据划分与识别问题等多类任务中发挥着关键作用,并提供回归分析方法以探索变量之间的关系模式以及聚类技术以识别数据中的潜在群体特征等基础支持。凭借统一且直观的API设计使用户能够迅速掌握并将其应用于实际项目中,在开发及评估新的机器学习方法时,this library 成为不可或缺的基础工具,并与NumPy, SciPy以及matplotlib等科学计算库紧密集成形成了强大的数据分析与建模能力 chain.
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_])
python
在后续进一步整理的基础上, 我会把不同类别的博客文章归入专门的分类栏目, 便于查阅, 预见到将构建云计算、人工智能以及数据结构与算法这三个类别, 如果有表述不够准确或存在疑问的地方, 欢迎各位专家不吝赐教, 本人也会虚心接受建议并不断改进
