人工智能中神经网络是如何进行学习的

devtools/2025/3/18 12:30:21/

在这里插入图片描述
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north
在这里插入图片描述

文章目录

    • 引言
    • 神经网络学习过程
    • 1. 前向传播
    • 2. 计算损失
    • 3. 反向传播
      • 反向传播的步骤
    • 4. 参数更新
    • 5. 重复迭代
    • 代码实现
    • 流程图
    • 总结
    • 参考文献

引言

神经网络学习过程是通过调整网络中的参数(权重和偏置)来最小化预测结果与真实值之间的误差。这一过程通常被称为训练,其核心是反向传播算法(Backpropagation)。本文将详细介绍神经网络学习过程,包括反向传播的原理、梯度下降优化方法,并通过代码和流程图帮助读者更好地理解。


神经网络学习过程

神经网络学习过程可以分为以下几个步骤:

  1. 前向传播:输入数据通过神经网络,得到预测结果。
  2. 计算损失:通过损失函数衡量预测结果与真实值之间的误差。
  3. 反向传播:计算损失函数对每个参数的梯度。
  4. 参数更新:使用梯度下降法更新网络的权重和偏置。
  5. 重复迭代:重复上述步骤,直到损失函数收敛或达到预定的训练次数。

下面我们将逐步展开这些步骤。


1. 前向传播

前向传播是神经网络预测的过程,输入数据从输入层经过隐藏层,最终到达输出层。具体过程如下:

  • 输入数据通过权重和偏置进行线性变换。
  • 对线性变换的结果应用激活函数,得到每一层的输出。
  • 最终输出层的输出即为预测结果。

关于前向传播的详细内容,可以参考上一篇博客《人工智能神经网络是如何进行预测的》。


2. 计算损失

损失函数(Loss Function)用于衡量预测结果与真实值之间的误差。常见的损失函数包括:

  • 均方误差(MSE):用于回归问题。
  • 交叉熵损失(Cross-Entropy Loss):用于分类问题。

假设我们有一个分类问题,使用交叉熵损失函数,其公式为:

在这里插入图片描述


3. 反向传播

反向传播是神经网络学习的核心。其目的是计算损失函数对每个参数的梯度,即损失函数对权重和偏置的偏导数。

反向传播的步骤

  1. 计算输出层的误差
    在这里插入图片描述

  2. 计算隐藏层的误差
    在这里插入图片描述

  3. 计算梯度
    在这里插入图片描述


4. 参数更新

通过梯度下降法更新网络的参数。梯度下降法的更新公式为:

在这里插入图片描述


5. 重复迭代

重复上述步骤,直到损失函数收敛或达到预定的训练次数。


代码实现

下面是一个简单的神经网络训练过程的Python实现,使用NumPy库进行矩阵运算。

import numpy as np# 定义激活函数及其导数
def sigmoid(x):return 1 / (1 + np.exp(-x))def sigmoid_derivative(x):return x * (1 - x)# 定义神经网络
class NeuralNetwork:def __init__(self, input_size, hidden_size, output_size):self.input_size = input_sizeself.hidden_size = hidden_sizeself.output_size = output_size# 初始化权重和偏置self.W1 = np.random.randn(self.input_size, self.hidden_size)self.b1 = np.zeros((1, self.hidden_size))self.W2 = np.random.randn(self.hidden_size, self.output_size)self.b2 = np.zeros((1, self.output_size))def forward(self, X):# 输入层到隐藏层self.z1 = np.dot(X, self.W1) + self.b1self.a1 = sigmoid(self.z1)# 隐藏层到输出层self.z2 = np.dot(self.a1, self.W2) + self.b2self.a2 = sigmoid(self.z2)return self.a2def backward(self, X, y, output, learning_rate):# 计算输出层的误差error = output - yd_output = error * sigmoid_derivative(output)# 计算隐藏层的误差error_hidden = np.dot(d_output, self.W2.T)d_hidden = error_hidden * sigmoid_derivative(self.a1)# 更新权重和偏置self.W2 -= np.dot(self.a1.T, d_output) * learning_rateself.b2 -= np.sum(d_output, axis=0, keepdims=True) * learning_rateself.W1 -= np.dot(X.T, d_hidden) * learning_rateself.b1 -= np.sum(d_hidden, axis=0, keepdims=True) * learning_ratedef train(self, X, y, epochs, learning_rate):for epoch in range(epochs):output = self.forward(X)self.backward(X, y, output, learning_rate)if epoch % 1000 == 0:loss = np.mean(np.square(y - output))print(f"Epoch {epoch}, Loss: {loss}")# 示例数据
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])# 创建神经网络并训练
nn = NeuralNetwork(input_size=2, hidden_size=4, output_size=1)
nn.train(X, y, epochs=10000, learning_rate=0.1)# 测试
output = nn.forward(X)
print("预测结果:", output)

流程图

以下是神经网络学习过程的流程图:

输入数据
前向传播
计算损失
反向传播
计算梯度
更新参数
是否收敛?
结束

总结

神经网络学习过程是通过前向传播、计算损失、反向传播和参数更新四个步骤不断迭代完成的。反向传播算法是神经网络学习的核心,它通过链式法则计算损失函数对每个参数的梯度,并使用梯度下降法更新参数。本文通过代码和流程图详细解释了这一过程,希望能帮助读者更好地理解神经网络学习机制。


参考文献

  1. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
  2. Nielsen, M. A. (2015). Neural Networks and Deep Learning. Determination Press.
    在这里插入图片描述

http://www.ppmy.cn/devtools/168055.html

相关文章

python-leetcode 54.全排列

题目: 给定不含重复数字的数组nums,返回其所有可能的全排列,可以按任意顺序返回答案 回溯法 一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通…

基于 YOLOv8 和 PyQt5 的火焰、烟雾检测

目标检测是计算机视觉领域的一个重要研究方向,广泛应用于安防监控、自动驾驶、工业检测等领域。近年来,随着深度学习技术的快速发展,YOLO(You Only Look Once)系列算法因其速度快、精度高而备受关注。本文将介绍如何利用 YOLOv8 和 PyQt5 开发一个视频目标检测应用,实现从…

Rust学习之实现命令行小工具minigrep(一)

Rust学习之实现命令行小工具minigrep(一) 通过开发一个在指定文件中查询某个特定字符串命的令行小工具进一步学习和巩固Rust基础。 已同步自建博客地址 源码已上传Github 创建项目 cargo new minigrep1接收命令行参数 我们想要实现的命令效果如下&…

CMake 开发库(Library)的最佳实践

1. 使用 Modern CMake 开发库 CMake 在 C社区中非常流行, 可以说是事实上的 C 包管理工具. 在Meeting C 开发者调查中, 有 75.73%的受访者表示自己使用 CMake 作为构建工具. 选择一个广泛流行的工具来打包库意味着你的项目更容易被别人使用. 本文将从一个简单的库的打包样例开…

考研专业课复习方法:如何高效记忆和理解?

高效记忆与理解指南 考研专业课是每个考生面临的重大挑战之一,它不仅要求我们掌握大量的知识点,还考验我们的理解和应用能力,为了在有限的时间内取得最佳效果,我们需要制定一套高效的复习策略,以下是关于如何在考研中高效记忆和理…

Linux 操作系统简介

Linux 操作系统 Linux 是一种自由和开源的操作系统,最初由芬兰的 Linus Torvalds 在1991年创建。它是一个类 Unix 操作系统,广泛用于服务器、个人电脑和嵌入式设备。Linux 操作系统的核心是 Linux 内核,其周围构建了各种工具和应用程序&…

【图像分类】ImageNet32 数据集下载指南

【图像分类】ImageNet32 数据集下载指南 写在最前面1. 介绍2. 访问 ImageNet 官网3. 申请下载权限**申请流程:** 4. 下载 ImageNet 数据集5. 注意事项6. 结论 🌈你好呀!我是 是Yu欸 🚀 感谢你的陪伴与支持~ 欢迎添加文末好友 &am…

QT编程之HTTP服务端与客户端技术

一、HTTP 服务器实现方案 ‌QtWebApp 集成‌ 将QtWebApp源码的 httpserver 目录导入项目,并在 .pro 文件中添加 include ($$PWD/httpserver/httpserver.pri)‌。配置 WebApp.ini 文件定义服务参数(IP、端口、线程池等),通过 HttpL…