机器学习之浅层神经网络

文章目录

    • 一、浅层神经网络概述
      • (一)定义
      • (二)常见类型
    • 二、浅层神经网络的前向传播
    • 三、浅层神经网络的反向传播
    • 四、编写浅层神经网络案例(Python + NumPy 实现)
      • 代码解释
    • 五、浅层神经网络与深度学习的区别
      • (一)网络结构深度
      • (二)特征学习能力
      • (三)计算资源需求
      • (四)应用场景

一、浅层神经网络概述

(一)定义

浅层神经网络是一种相对简单的神经网络结构,相较于深度神经网络,其层数较少,一般包含输入层、一个或少数几个隐藏层以及输出层。因其结构简洁,在处理简单任务时,计算量较小、训练速度较快,但在面对复杂的非线性问题时,其特征提取和表达能力相对有限。

(二)常见类型

  1. 感知机(Perceptron):是最基础的人工神经网络模型,可看作是只有一个神经元的浅层神经网络,用于简单的线性分类任务。它接收多个输入并对其进行加权求和,再通过一个激活函数(早期常为阶跃函数)产生输出。虽然简单,但它是理解神经网络基本原理的基础。
  2. 多层感知机(Multilayer Perceptron,MLP):在感知机基础上增加了隐藏层,是较为常见的浅层神经网络。它可以处理更复杂的非线性问题,通过隐藏层的非线性变换,对输入数据进行特征提取和转换,进而在输出层完成分类或回归任务。

二、浅层神经网络的前向传播

前向传播是数据在浅层神经网络中从输入层流向输出层的过程。以一个包含输入层、一个隐藏层和输出层的浅层神经网络为例:

  1. 输入层 - 隐藏层:假设输入层有 n n n 个神经元,隐藏层有 m m m 个神经元。输入层接收原始数据 x = ( x 1 , x 2 , ⋯ , x n ) x = (x_1, x_2, \cdots, x_n) x=(x1,x2,,xn)。对于隐藏层的第 j j j 个神经元( j = 1 , 2 , ⋯ , m j = 1, 2, \cdots, m j=1,2,,m),首先计算输入的加权和 z j = ∑ i = 1 n w j i x i + b j z_j=\sum_{i = 1}^{n}w_{ji}x_i + b_j zj=i=1nwjixi+bj,其中 w j i w_{ji} wji 是输入层第 i i i 个神经元到隐藏层第 j j j 个神经元的连接权重, b j b_j bj 是隐藏层第 j j j 个神经元的偏置。然后,将 z j z_j zj 输入激活函数 f f f,得到隐藏层第 j j j 个神经元的输出 a j = f ( z j ) a_j = f(z_j) aj=f(zj)。隐藏层所有神经元的输出构成隐藏层的输出向量 a = ( a 1 , a 2 , ⋯ , a m ) a = (a_1, a_2, \cdots, a_m) a=(a1,a2,,am)
  2. 隐藏层 - 输出层:假设输出层有 k k k 个神经元。对于输出层的第 l l l 个神经元( l = 1 , 2 , ⋯ , k l = 1, 2, \cdots, k l=1,2,,k),计算 z l = ∑ j = 1 m w l j a j + b l z_l=\sum_{j = 1}^{m}w_{lj}a_j + b_l zl=j=1mwljaj+bl,这里 w l j w_{lj} wlj 是隐藏层第 j j j 个神经元到输出层第 l l l 个神经元的连接权重, b l b_l bl 是输出层第 l l l 个神经元的偏置。同样将 z l z_l zl 经过激活函数 g g g(根据任务不同选择不同激活函数,如分类任务常用 Soft - max,回归任务常用线性激活函数),得到输出层第 l l l 个神经元的输出 y l = g ( z l ) y_l = g(z_l) yl=g(zl),输出层所有神经元的输出构成最终的输出向量 y = ( y 1 , y 2 , ⋯ , y k ) y = (y_1, y_2, \cdots, y_k) y=(y1,y2,,yk)

三、浅层神经网络的反向传播

反向传播是训练浅层神经网络的关键算法,旨在通过调整网络的权重和偏置,使网络输出与真实标签之间的误差最小化。具体步骤如下:

  1. 计算损失:依据网络的输出 y y y 和真实标签 t t t,选取合适的损失函数 L L L(如分类任务常用交叉熵损失函数 L = − ∑ i = 1 N ∑ j = 1 k t i j log ⁡ ( y i j ) L = -\sum_{i = 1}^{N}\sum_{j = 1}^{k}t_{ij}\log(y_{ij}) L=i=1Nj=1ktijlog(yij),其中 N N N 是样本数量, k k k 是类别数;回归任务常用均方误差损失函数 L = 1 N ∑ i = 1 N ( y i − t i ) 2 L=\frac{1}{N}\sum_{i = 1}^{N}(y_i - t_i)^2 L=N1i=1N(yiti)2),计算当前样本的损失值 L L L
  2. 反向传播计算梯度:从输出层开始,逐层计算损失函数对每个权重和偏置的梯度。
    • 输出层:计算损失函数对输出层每个神经元的输入 z l z_l zl 的梯度 δ l = ∂ L ∂ z l \delta_l=\frac{\partial L}{\partial z_l} δl=zlL。例如,对于交叉熵损失函数和 Soft - max 激活函数, δ l = y l − t l \delta_l=y_l - t_l δl=yltl。然后计算损失函数对输出层权重 w l j w_{lj} wlj 和偏置 b l b_l bl 的梯度: ∂ L ∂ w l j = a j δ l \frac{\partial L}{\partial w_{lj}}=a_j\delta_l wljL=ajδl ∂ L ∂ b l = δ l \frac{\partial L}{\partial b_l}=\delta_l blL=δl
    • 隐藏层:计算损失函数对隐藏层每个神经元的输入 z j z_j zj 的梯度 δ j = ∑ l = 1 k w l j δ l ⋅ f ′ ( z j ) \delta_j=\sum_{l = 1}^{k}w_{lj}\delta_l\cdot f^\prime(z_j) δj=l=1kwljδlf(zj),其中 f ′ ( z j ) f^\prime(z_j) f(zj) 是隐藏层激活函数 f f f 的导数。再计算损失函数对隐藏层权重 w j i w_{ji} wji 和偏置 b j b_j bj 的梯度: ∂ L ∂ w j i = x i δ j \frac{\partial L}{\partial w_{ji}}=x_i\delta_j wjiL=xiδj ∂ L ∂ b j = δ j \frac{\partial L}{\partial b_j}=\delta_j bjL=δj
  3. 更新参数:根据计算得到的梯度,使用优化算法(如梯度下降法)更新权重和偏置。对于权重 w w w 和偏置 b b b,更新公式为 w = w − α ∂ L ∂ w w = w-\alpha\frac{\partial L}{\partial w} w=wαwL b = b − α ∂ L ∂ b b = b-\alpha\frac{\partial L}{\partial b} b=bαbL,其中 α \alpha α 是学习率。

四、编写浅层神经网络案例(Python + NumPy 实现)

以一个简单的二分类问题为例,展示浅层神经网络的训练和预测过程,同时包含反向传播算法的代码实现:

import numpy as np# 定义激活函数及其导数
def sigmoid(x):return 1 / (1 + np.exp(-x))def sigmoid_derivative(x):return x * (1 - x)# 训练数据
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])# 初始化参数
input_size = 2
hidden_size = 2
output_size = 1
learning_rate = 0.1# 随机初始化权重和偏置
W1 = np.random.randn(input_size, hidden_size)
b1 = np.zeros((1, hidden_size))
W2 = np.random.randn(hidden_size, output_size)
b2 = np.zeros((1, output_size))# 训练神经网络
for epoch in range(10000):# 前向传播# 隐藏层z1 = np.dot(X, W1) + b1a1 = sigmoid(z1)# 输出层z2 = np.dot(a1, W2) + b2a2 = sigmoid(z2)# 计算损失loss = np.mean((a2 - y) ** 2)# 反向传播# 输出层误差d2 = (a2 - y) * sigmoid_derivative(a2)# 隐藏层误差d1 = np.dot(d2, W2.T) * sigmoid_derivative(a1)# 更新权重和偏置W2 -= learning_rate * np.dot(a1.T, d2)b2 -= learning_rate * np.sum(d2, axis=0, keepdims=True)W1 -= learning_rate * np.dot(X.T, d1)b1 -= learning_rate * np.sum(d1, axis=0, keepdims=True)if epoch % 1000 == 0:print(f'Epoch {epoch}, Loss: {loss}')# 预测
z1 = np.dot(X, W1) + b1
a1 = sigmoid(z1)
z2 = np.dot(a1, W2) + b2
a2 = sigmoid(z2)
predictions = (a2 > 0.5).astype(int)
print("Predictions:", predictions)

代码解释

  1. 激活函数定义:定义了 Sigmoid 激活函数及其导数,用于神经网络中神经元的非线性变换和反向传播时计算梯度。
  2. 训练数据:创建了一个简单的二分类数据集 X X X 和对应的标签 y y y
  3. 参数初始化:随机初始化输入层到隐藏层的权重 W 1 W1 W1、隐藏层偏置 b 1 b1 b1、隐藏层到输出层的权重 W 2 W2 W2 和输出层偏置 b 2 b2 b2
  4. 训练过程
    • 前向传播:按照上述前向传播的步骤,依次计算隐藏层和输出层的输出。
    • 计算损失:使用均方误差损失函数计算当前样本的损失值。
    • 反向传播:按照反向传播的步骤,计算输出层和隐藏层的误差,进而计算梯度。
    • 参数更新:根据计算得到的梯度,使用梯度下降法更新权重和偏置。
  5. 预测:使用训练好的模型对训练数据进行预测,并将输出结果转换为 0 或 1 的分类标签。

五、浅层神经网络与深度学习的区别

(一)网络结构深度

浅层神经网络层数较少,通常只有一个或少数几个隐藏层;而深度学习模型,如深度神经网络、卷积神经网络(CNN)、循环神经网络(RNN)及其变体(LSTM、GRU 等),往往具有较多的隐藏层,层数可达数十层甚至更多。例如,在图像识别领域广泛应用的 AlexNet 有 8 层(5 个卷积层和 3 个全连接层),而 ResNet 可以有 50 层、101 层甚至更多层。

(二)特征学习能力

浅层神经网络由于层数有限,其特征提取能力相对较弱,对于复杂的数据模式,可能难以学习到足够丰富和抽象的特征。深度学习模型凭借其深度结构,能够自动从原始数据中逐层学习不同层次的特征,从低级的局部特征逐步学习到高级的全局抽象特征。例如在图像识别中,CNN 可以自动学习到图像的边缘、纹理等低级特征,以及物体的形状、类别等高级特征。

(三)计算资源需求

浅层神经网络计算量相对较小,对计算资源的需求较低,在普通的 CPU 环境下即可进行训练和推理。深度学习模型由于结构复杂、参数众多,训练过程需要大量的计算资源,通常需要使用 GPU 集群等高性能计算设备来加速训练过程。

(四)应用场景

浅层神经网络适用于一些简单的、数据规模较小、特征相对容易提取的任务,如简单的手写数字识别、简单的文本分类等。深度学习则广泛应用于复杂的任务,如大规模图像识别与分类、语音识别、自然语言处理中的机器翻译、情感分析等,能够处理海量数据和复杂的模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37322.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu快速安装使用gRPC C++

目录 引言一、快速安装1. 安装必要依赖库2. 安装gRPC 二、测试使用三、参考博客 引言 关于gRPC随着云原生微服务的火热也流行了起来,而且学好一个gRPC框架对目前来说也是必须的了。然而对于一个基础的小白来说,这个gRPC的框架运用起来是及其的困难&…

AES 简介 以及 C# 和 js 实现【加密知多少系列_3】

〇、AES 简介 AES 的全称是 Advanced Encryption Standard,意思是高级加密标准。它的出现主要是为了取代 DES(Data Encryption StandardData Encryption Standard)加密算法的,因为我们都知道 DES 算法的密钥长度是 56Bit&#xf…

在Django模型中的Mysql安装

安装mysql驱动 文章目录 安装mysql驱动1.打开PowerShell 安装mysql的驱动2.安装mysqlclient驱动2.1开始安装2.2 pip list 进行验证 出现mysqlclient 以及pymysql即可 3.正式安装mysql3.1打开mysql官网 www.mysql.com3.2点击下载 然后划到最后点击mysql社区下载 3.3 点击适合win…

AI赋能企业协作6-FizEIM的功能探索

本系列文章AI赋能企业协作与第一个系列IM工具对比中反复比较了国内外、商业、开源的IM工具以及IM工具的AI支持,在之前的比较对象中,由于信息偏差,Workplus(BeeWorks)已不再开源,这里向各位读者致歉&#xf…

java项目之基于ssm的旅游论坛(源码+文档)

项目简介 旅游论坛实现了以下功能: 用户信息管理: 用户信息新增 用户信息修改 景点信息管理: 景点信息添加 景点信息删除 景点信息修改 论坛类型管理 论坛类型添加 论坛类型修改 论坛类型删除 公告类型管理: 公告类型添加 公…

Linux安装Elasticsearch集群-----docker安装es集群

目录 技术背景 1.2 实验目标 二、实验内容 1.1 服务器规划 二、传统方式安装Elasticsearch集群 2.1 安装Java环境(10.1.1.6/8) 2.3 配置集群节点(以10.1.1.6) 2.4 启动服务 ES Data节点1(10.1.1.8)…

【嵌入式】复刻SQFMI开源的Watchy墨水屏电子表——(2)软件部分

书接上文 基于乐鑫 ESP32-PICO-D4 模块的墨水屏智能手表开源项目Watchy 完成了硬件部分,接下来就是软件部分: 一 开发环境配置(Arduino ESP32) 首先需要进行 Arduino ESP32 开发环境的安装配置,过程参考之前的帖子&a…

关于微信小程序端base64解码问题

由于atob是浏览器端的,对于微信小程序不支持,导致模拟器【开发工具】显示正常,但真机异常解析失败问题,微信小程序原有的api,官方文档中也废弃了 解决方案: 调用: const decodedString ba…

如何通过Odoo 18创建与配置服务器操作

如何通过Odoo 18创建与配置服务器操作 服务器操作是Odoo实现业务流程自动化的核心工具,允许你在服务器端执行自动化任务,通常由按钮点击或自动化工作流等事件触发。这些操作使用 Python 编写,能够执行复杂的业务逻辑,从而增强 Od…

Windows主机、虚拟机Ubuntu、开发板,三者之间文件互传

以下内容源于日常学习的整理,欢迎交流。 下图是Windows主机、虚拟机Ubuntu、开发者三者之间文件互传的方式示意图: 注意,下面谈及的所有方式,都要求两者的IP地址处于同一网段,涉及到的软件资源见felm。 一、Windows主…

[设计模式与源码]1_Spring三级缓存中的单例模式

欢迎来到啾啾的博客🐱,一个致力于构建完善的Java程序员知识体系的博客📚,记录学习的点滴,分享工作的思考、实用的技巧,偶尔分享一些杂谈💬。 欢迎评论交流,感谢您的阅读&#x1f604…

微服务架构中的API网关:Spring Cloud与Kong/Traefik等方案对比

微服务架构中的API网关:Spring Cloud与Kong/Traefik等方案对比 一、API 网关的概念二、API 网关的主要功能2.1 统一入口与路由转发2.2 安全与权限控制2.3 流量管理与容错2.4 API 管理与聚合2.5 监控与日志2.5 协议转换与适配2.6 控制平面与配置管理 三、API 网关选型…

中兴B860AV3.2-T/B860AV3.1-T2_S905L3-B_2+8G_安卓9.0_先线刷+后卡刷固件-完美修复反复重启瑕疵

中兴电信B860AV3.2-T/B860AV3.1-T2_晶晨S905L3-B芯片_28G_安卓9.0_先线刷后卡刷-刷机固件包,完美修复刷机后盒子反复重启的瑕疵。 这两款盒子是可以通刷的,最早这个固件之前论坛本人以及其他水友都有分享交流过不少的固件,大概都…

Stable Diffusion lora训练(一)

一、不同维度的LoRA训练步数建议 2D风格训练 数据规模:建议20-50张高质量图片(分辨率≥10241024),覆盖多角度、多表情的平面风格。步数范围:总步数控制在1000-2000步,公式为 总步数 Repeat Image Epoch …

Web3 时代数据保护的关键挑战与应对策略

Web3 时代数据保护的关键挑战与应对策略 随着互联网技术的飞速发展,我们正步入 Web3 时代,这是一个以去中心化、用户主权和数据隐私为核心的新时代。在这个时代,数据保护成为了一个至关重要的议题。本文将探讨 Web3 时代数据保护面临的主要挑…

微信小程序计算属性与监听器:miniprogram-computed

小程序框架没有提供计算属性相关的 api ,但是官方为开发者提供了拓展工具库 miniprogram-computed。 该工具库提供了两个功能: 计算属性 computed监听器 watch 一、安装 miniprogram-computed 在项目的根目录下,使用如下命令,…

实体机安装linux视频教程。windows和ubuntu共存。启动时选择切换引导系统。

登录ubuntu官网下载iso镜像。 https://ubuntu.com/download 桌面版带G U I 操作界面,服务版靠远程命令行操作,类似wsl,没有图形界面,显卡跑满无需分散算力到显示交互界面上。 点alter natice downloads可以下载旧版本。具体版本选…

Numpy

一、Numpy优势 学习目标 目标 了解Numpy运算速度上的优势 知道Numpy的数组内存块风格 知道Numpy的并行化运算 1 Numpy介绍 Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。 Numpy支持常见的数组和矩…

小红书不绑定手机号会显示ip吗

小红书作为一个生活方式分享平台,拥有庞大的用户群体。在小红书上,用户可以分享自己的生活点滴、购物心得、美食体验等,与其他用户进行互动交流。最近,不少用户对于小红书是否会在不绑定手机号的情况下显示IP属地产生了疑问&#…

FPGA multiboot 方案

FPGA multiboot 方案 初版方案 初版方案不需要软件参与,只是为了验证flash启动。当前已完成。 使用jtag 通过vivaod harwaremanager去将fpga bit流文件加载到demo板flash中。 具体操作: 约束添加for golden bitstream # 设置电源参考,1.…