今天给大家分享一个强大的算法模型,神经网络算法

神经网络算法是一种受到人脑神经元结构启发而设计的机器学习算法。它的核心思想是通过模拟人脑处理信息的方式,对数据进行学习和处理。

它由大量相互连接的节点(称为神经元)组成,这些神经元分层排列,通过学习数据中的模式来执行复杂的任务,如图像识别、自然语言处理和预测分析。

一个典型的神经网络通常包含三类层

  • 输入层

    负责接收原始数据。每个节点代表输入数据的一个特征。

    这一层的神经元数量通常等于数据的特征数。

  • 隐藏层

    位于输入层和输出层之间,是神经网络进行信息处理和特征提取的核心。

    一个网络可以包含一个或多个隐藏层。

  • 输出层

    负责输出最终的预测结果,例如分类的类别、回归的数值等。

    神经元的数量取决于要解决的问题类型,例如,对于二分类问题,通常只有一个神经元;对于多分类问题,神经元数量等于类别数。

在这些层之间,神经元通过权重和偏差连接起来。权重代表了连接的强度,偏差则用于调整神经元的激活阈值。神经网络的学习过程,本质上就是不断调整这些权重和偏差,以使预测结果尽可能接近真实值。

神经元的工作方式

理解神经网络,首先要理解单个神经元是如何工作的。

一个神经元接收来自上一层神经元的多个输入,对这些输入进行加权求和,然后通过一个激活函数产生一个输出。

1.加权求和

假设一个神经元接收到  个输入 。每个输入都对应一个权重 。神经元的加权求和  的计算公式如下:其中, 是偏差

2. 激活函数

加权求和的结果  接下来会通过一个激活函数 。

激活函数的作用是引入非线性,这使得神经网络能够学习和表示更复杂的非线性模式。如果没有激活函数,无论网络有多少层,都只能表示线性关系,其效果将等同于一个简单的线性模型。

神经元的最终输出  为

常见的激活函数包括

  • Sigmoid

    将值压缩到 (0, 1) 区间,常用于二分类问题。

  • ReLU

    当输入大于0时,输出等于输入;否则输出为0。

    这是目前在深度学习中最常用的激活函数,因为它计算高效且能有效缓解梯度消失问题。

  • Tanh

    将值压缩到 (-1, 1) 区间。

神经网络的学习过程

神经网络的训练是一个不断迭代优化的过程,目标是找到一组最优的权重  和偏置 ,使得网络的预测结果尽可能接近真实值。

这个过程主要包括前向传播和反向传播两步。

1. 前向传播

在前向传播阶段,输入数据从输入层开始,通过隐藏层,一层一层地向前计算,直到输出层产生预测结果。

这个过程就是按照前面提到的加权求和和激活函数公式,对每个神经元进行计算。

2. 计算损失

得到预测结果  后,我们需要一个损失函数来衡量预测值与真实值  之间的差距。损失函数的值越小,模型的预测越准确。

不同的任务有不同的损失函数。

对于回归问题,常用的损失函数是均方误差(MSE)

其中, 是样本数量, 是第  个样本的真实值, 是网络的预测值。

对于分类问题,常用的损失函数是交叉熵损失(Cross-Entropy Loss)

3. 反向传播

这是神经网络学习的核心。

反向传播是一种利用链式法则的算法,用于高效地计算损失函数对每个权重和偏差的梯度。

梯度本质上是一个向量,它指向损失函数增长最快的方向。我们的目标是最小化损失,因此需要沿着梯度的反方向(即梯度下降)来调整权重和偏差。

反向传播的数学原理是

首先,计算输出层对损失函数的梯度  和 。

然后,利用链式法则,逐层向后计算前一层(L-1)的梯度:

这个过程一直持续到输入层。

4. 梯度下降

得到所有权重和偏置的梯度后,利用梯度下降算法来更新它们的值,使损失函数向着减小的方向移动。

更新规则如下:

其中, 是学习率,它控制了每次更新的步长。学习率的选择非常重要,过大会导致模型不稳定,过小则会导致训练过程过慢。

案例分享

以下是一个对鸢尾花数据集进行分类的完整示例代码,代码中包含了训练神经网络模型、进行预测以及绘制损失函数曲线和决策边界图的完整流程。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from matplotlib.colors import ListedColormap
# 1. 加载和预处理数据
# 加载鸢尾花数据集
iris = load_iris()
# 为了便于可视化,我们只选取前两个特征:花萼长度和花萼宽度
X = iris.data[:, :2]
y = iris.target
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 数据标准化(非常重要,有助于神经网络收敛)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 2. 训练神经网络模型
# MLPClassifier 是一个多层感知机分类器
# hidden_layer_sizes=(10, 5): 两个隐藏层,分别有10个和5个神经元
# max_iter=1000: 最大迭代次数,防止训练时间过长
# alpha=0.01: L2 正则化参数,防止过拟合
# random_state=1: 随机种子,确保结果可复现
# early_stopping=True: 提前停止训练,如果验证分数没有提高,则停止
mlp = MLPClassifier(hidden_layer_sizes=(10, 5), max_iter=1000, alpha=0.01,
                    solver='adam', verbose=False, random_state=1,
                    early_stopping=True)
# 训练模型
mlp.fit(X_train_scaled, y_train)
# 3. 评估模型
train_score = mlp.score(X_train_scaled, y_train)
test_score = mlp.score(X_test_scaled, y_test)
print(f"训练集准确率: {train_score:.2f}")
print(f"测试集准确率: {test_score:.2f}")
# 4. 绘制训练过程中的损失函数曲线
plt.figure(figsize=(10, 6))
plt.plot(mlp.loss_curve_)
plt.title("训练损失函数曲线", fontsize=16)
plt.xlabel("迭代次数", fontsize=12)
plt.ylabel("损失值", fontsize=12)
plt.grid(True)
plt.show()
# 5. 绘制决策边界图
def plot_decision_boundary(X, y, model, scaler):
    h = .02  # 网格步长
    x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
    y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                         np.arange(y_min, y_max, h))
    # 使用训练好的模型对网格点进行预测
    Z = model.predict(scaler.transform(np.c_[xx.ravel(), yy.ravel()]))
    Z = Z.reshape(xx.shape)
    # 绘制等高线和散点图
    plt.figure(figsize=(10, 6))
    cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
    cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
    plt.pcolormesh(xx, yy, Z, cmap=cmap_light)
    # 绘制训练数据点
    sns.scatterplot(x=X[:, 0], y=X[:, 1], hue=y, palette=cmap_bold, s=80, alpha=0.8,
                    edgecolor='k', legend=False)
    plt.title("神经网络的决策边界图", fontsize=16)
    plt.xlabel("花萼长度 (cm)", fontsize=12)
    plt.ylabel("花萼宽度 (cm)", fontsize=12)
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())
    plt.show()
调用函数绘制决策边界图
plot_decision_boundary(X, y, mlp, scaler)

CSDN粉丝独家福利
这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】

👉1.2025最新版人工智能CV+NLP入门学习思维导图👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过人工智能CV+NLP的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
(全套教程文末领取哈)
————————————————

 👉2.人工智能CV+NLP配套视频👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。
800G视频配套资料:

👉3.人工智能CV+NLP全套学习资料👈

1.python从入门到实战
2.机器学习从入门到项目实战
3.深度学习经典论文
4.数学方向知识汇总
5.人工智能项目实战
。。。。。。(全套教程文末领取哈)

👉4.人工智能CV+NLP+大模型经典学习电子书👈
随着人工智能技术的飞速发展,人工智能已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)

 👉5.大模型面试题&答案👈
截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)

CSDN粉丝独家福利
这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐