通俗易懂神经网络:从基础到实现

引言

神经网络是人工智能和深度学习的核心,它模仿人脑的工作方式,通过数据学习复杂的模式。本文将以通俗易懂的方式讲解神经网络的基础知识,包括单层神经网络、多层神经网络,最后用Python代码实现一个简单的神经网络模型。


1. 神经网络模型基础

1.1 什么是神经网络?

神经网络是由神经元(Neurons)组成的计算系统,它接收输入数据,经过一系列计算后输出预测结果。其核心思想是模仿人脑神经元之间的连接方式

图表:人工神经元结构示意图

输入x1
加权求和
输入x2
输入xn
激活函数f
输出y
偏置b

扩展说明:
每个神经元会对输入加权求和,加上偏置后通过激活函数,输出结果。激活函数赋予网络非线性表达能力。

1.2 神经元的结构

一个神经元的基本计算方式如下:

输出=f(w1x1+w2x2+⋯+wnxn+b) \text{输出} = f(w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b)\,输出=f(w1x1+w2x2++wnxn+b)

其中:

  • (x1,x2,…,xnx_1, x_2, \dots, x_nx1,x2,,xn) 是输入数据
  • (w1,w2,…,wnw_1, w_2, \dots, w_nw1,w2,,wn) 是权重(决定输入的重要性)
  • (bbb) 是偏置(调整输出的偏移量)
  • (fff) 是激活函数(引入非线性)

1.3 常见的激活函数

函数名称公式特点
Sigmoidσ(x)=11+e−x \sigma(x) = \frac{1}{1 + e^{-x}} \,σ(x)=1+ex1输出0~1,适合二分类
ReLUReLU(x)=max⁡(0,x) \text{ReLU}(x) = \max(0, x) \,ReLU(x)=max(0,x)计算快,缓解梯度消失
Tanhtanh⁡(x)=ex−e−xex+e−x  \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \,tanh(x)=ex+exexex输出-1~1,适合回归

图表:常见激活函数对比思维导图
在这里插入图片描述

扩展说明:
激活函数的选择会影响神经网络的收敛速度和表达能力。ReLU因其高效和缓解梯度消失问题,在深度网络中应用最广。


2. 单层神经网络(感知机)

单层神经网络(Perceptron)是最简单的神经网络,仅包含输入层和输出层,没有隐藏层。

图表:单层感知机结构图

输入x1
Σ
输入x2
输入xn
激活函数
输出y

2.1 数学表示

y=f(wTx+b) y = f(\mathbf{w}^T \mathbf{x} + b) y=f(wTx+b)

  • (x \mathbf{x}\,x) 是输入向量
  • (w \mathbf{w}\,w) 是权重向量
  • (bbb) 是偏置
  • (fff) 是激活函数(如Sigmoid)

2.2 应用场景

  • 线性分类(如逻辑回归)
  • 简单二分类问题

扩展说明:
单层感知机只能解决线性可分问题,无法拟合复杂的非线性关系。


3. 多层神经网络(深度神经网络)

多层神经网络(MLP, Multi-Layer Perceptron)包含输入层、隐藏层、输出层,能够学习更复杂的非线性关系。

图表:多层神经网络结构图

输入x1
隐藏层神经元1
隐藏层神经元2
输入x2
输出y

3.1 结构

  • 输入层:接收原始数据(如像素、文本)
  • 隐藏层:多个非线性变换层(常用ReLU)
  • 输出层:最终预测(如分类概率)

3.2 前向传播

数据从输入层逐层计算到输出层:
h1=f(W1x+b1)h2=f(W2h1+b2)…y=f(Wnhn−1+bn) \mathbf{h}_1 = f(\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1) \\ \mathbf{h}_2 = f(\mathbf{W}_2 \mathbf{h}_1 + \mathbf{b}_2) \\ \dots \\ \mathbf{y} = f(\mathbf{W}_n \mathbf{h}_{n-1} + \mathbf{b}_n) h1=f(W1x+b1)h2=f(W2h1+b2)y=f(Wnhn1+bn)

图表:前向传播流程图

输入层
隐藏层1
隐藏层2
输出层

3.3 反向传播(Backpropagation)

通过计算损失函数的梯度,调整权重和偏置:
w←w−η∂L∂w \mathbf{w} \leftarrow \mathbf{w} - \eta \frac{\partial L}{\partial \mathbf{w}} wwηwL
其中:

  • (LLL) 是损失函数(如交叉熵、MSE)
  • (η \eta\,η) 是学习率

图表:反向传播流程图

计算损失
计算梯度
计算梯度
计算梯度
输出层
隐藏层2
隐藏层1
输入层
损失函数

扩展说明:
前向传播负责计算输出,反向传播则根据损失调整参数,是神经网络学习的核心机制。


4. 神经网络代码简单实现(Python)

使用 numpysklearn 实现一个简单的多层神经网络(MLP)进行二分类。

4.1 数据准备

import numpy as np
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split# 生成非线性数据集
X, y = make_moons(n_samples=1000, noise=0.2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

4.2 定义神经网络

class NeuralNetwork:def __init__(self, input_size, hidden_size, output_size):# 初始化权重self.W1 = np.random.randn(input_size, hidden_size) * 0.01self.b1 = np.zeros(hidden_size)self.W2 = np.random.randn(hidden_size, output_size) * 0.01self.b2 = np.zeros(output_size)def relu(self, x):return np.maximum(0, x)def sigmoid(self, x):return 1 / (1 + np.exp(-x))def forward(self, X):# 前向传播self.z1 = np.dot(X, self.W1) + self.b1self.a1 = self.relu(self.z1)self.z2 = np.dot(self.a1, self.W2) + self.b2self.y_pred = self.sigmoid(self.z2)return self.y_preddef backward(self, X, y, lr=0.01):# 反向传播m = X.shape[0]# 计算梯度d_z2 = self.y_pred - y.reshape(-1, 1)d_W2 = np.dot(self.a1.T, d_z2) / md_b2 = np.sum(d_z2, axis=0) / md_a1 = np.dot(d_z2, self.W2.T)d_z1 = d_a1 * (self.a1 > 0)  # ReLU的导数d_W1 = np.dot(X.T, d_z1) / md_b1 = np.sum(d_z1, axis=0) / m# 更新权重self.W1 -= lr * d_W1self.b1 -= lr * d_b1self.W2 -= lr * d_W2self.b2 -= lr * d_b2def train(self, X, y, epochs=1000, lr=0.01):for epoch in range(epochs):y_pred = self.forward(X)loss = -np.mean(y * np.log(y_pred) + (1 - y) * np.log(1 - y_pred))self.backward(X, y, lr)if epoch % 100 == 0:print(f"Epoch {epoch}, Loss: {loss:.4f}")

4.3 训练与测试

# 初始化网络
nn = NeuralNetwork(input_size=2, hidden_size=4, output_size=1)# 训练
nn.train(X_train, y_train, epochs=1000, lr=0.1)# 测试
y_pred = (nn.forward(X_test) > 0.5).astype(int)
accuracy = np.mean(y_pred.flatten() == y_test)
print(f"Test Accuracy: {accuracy * 100:.2f}%")

输出示例

Epoch 0, Loss: 0.6931
Epoch 100, Loss: 0.3521
Epoch 200, Loss: 0.2104
...
Test Accuracy: 93.33%

5. 神经网络的应用场景

图表:神经网络应用场景思维导图

在这里插入图片描述

扩展说明:
神经网络广泛应用于图像、语音、文本等多种领域,是现代人工智能的基石。


总结

  • 单层神经网络:适合简单线性问题(如逻辑回归)。
  • 多层神经网络(MLP):能学习复杂非线性关系,是深度学习的基础。
  • 代码实现:使用 numpy 手动实现前向传播、反向传播,训练一个简单的分类模型。

希望这篇博客能帮助你理解神经网络的基本原理!🚀 如果有问题,欢迎留言讨论!

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

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

相关文章

【Linux】基本指令详解(三) 指令本质、三个查找指令、打包压缩、重要热键、linux体系结构、命令行解释器

文章目录date指令cal指令find指令(指令本质也是文件)which指令file指令whereis指令alias指令grep指令top指令打包和压缩指令zip/unzip指令关于rzsz(linux与windows互传 )tar指令linux机器之间互传bc指令uname指令(查看linux机器体系结构)几个重要的热键[Tab]按键[Ctrl]c按键[Ct…

MSTP 多生成树协议

MSTP 多生成树协议 STP/RSTP 的局限性 所有 vlan 共享一颗生成树无法实现不同 vlan 在多条 Trunk 链路上的分担 二层链路负载均衡STP/RSTP 的局限——次优二层路径**次优二层路径(Suboptimal Layer 2 Path) 是指: ** 数据帧在交换网络中传输时…

Shell脚本-tee工具

一、前言在 Linux/Unix 系统中,tee 是一个非常实用的命令行工具,它可以帮助我们 同时将命令的输出打印到终端,并写入文件。这种“双路输出”机制在脚本调试、日志记录、自动化任务中非常有用。无论是做日志分析、脚本调试,还是编写…

走进Linux的世界:Linux基本指令(三)

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…

跨域详解与解决方案:从理论到实践的全面指南

目录 1. 跨域是什么?为什么它让人头秃? 为什么跨域问题让人抓狂? 跨域的本质 2. 跨域的罪魁祸首:同源策略与CORS 同源策略的来龙去脉 CORS:跨域的“通行证” 3. JSONP:古老但依然有用的跨域“黑科技” JSONP的原理 JSONP的优缺点 4. 代理服务器:跨域的“中间人…

深入详解:决策树在辅助诊断系统与临床决策支持中的应用及实现细节

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#,Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

【详细笔记】两类曲线积分转换

文章目录参考教程一两类曲线积分的联系参数方程曲线的切线方向余弦参考教程2两类曲线积分之间的关系物理意义解释证明思路参考教程一 3分钟帮你搞定两类曲线积分之间的联系(弧长和坐标) 两类曲线积分的联系 设平面曲线LLL上的第二类曲线积分∫LPdxQdy…

【成品设计】基于STM32F429的云端电子相册

V1《基于STM32F429的云端电子相册》 V1硬件框图:V1功能说明: 支持 softAP 配网。支持 HTTPS 客户端的 GET\POST 请求支持文件系统用于图片的存储。支持 LVGL 自定义 GUI。日历功能。STM32F429文件系统LVGLRGB LCD屏幕。屏幕尺寸480*480. 首次开机交互&am…

网络安全隔离技术解析:从网闸到光闸的进化之路

目录 一、网络安全隔离技术体系 1.1 网络安全隔离技术发展历程 1.2 隔离技术分类矩阵 1.3 核心隔离原理对比 二、网闸技术深度解析 2.1 GAP架构剖析(Guarded Access Point System 安全隔离与信息交换系统) 2.2 技术演进路线 三、光闸技术突破创新…

初识 二叉树

目录树什么是二叉树二叉树的五种状态满二叉树完全二叉树二叉排序树平衡二叉树二叉树的遍历B3642 二叉树的遍历P1305 新二叉树二叉树的深度P4913 【深基16.例3】二叉树深度相关例题训练:二叉树问题树 这是树(拍摄于郑州轻工业大学,第一次郑州轻…

(1)Windows环境下安装Oracle

概述:Oracle数据库是一种网络上的数据库, 它在网络上支持多用户, 支持服务器/客户机等部署(或配置)。服务器与客户机是软件概念:它们与计算机硬件不存在一一对应的关系. 即:同一台计算机既可以充当服务器又可以充当客户机,或者一台计算机只充当服务器或只…

工业数据集成中间件工具OPC Router详细介绍

一、产品概述 OPC Router 是 Software Toolbox 旗下的一款面向工业数据集成与自动化的数据中间件工具,专注于实现各类工业系统之间的数据交互和自动化流程编排。它通过模块化的插件机制,打通 PLC、ERP、MES、数据库、MQTT、REST API 等不同系统之间的数…

消息队列 2.RabbitMQ的基本概念与使用

RabbitMQ 是一款基于 AMQP(Advanced Message Queuing Protocol)协议的开源消息中间件,主要用于实现分布式系统中的消息传递,支持异步通信、系统解耦、流量削峰等场景。在 Java 生态中,RabbitMQ 被广泛应用,…

【web安全】SQL注入与认证绕过

目录 一、SQL注入漏洞 1.1 基础注入原理 1.2 实用注入Payload分类 逻辑绕过型 注释截断型 联合查询型 常见的万能密码-CSDN博客 二、登录绕过实战技巧 2.1 基础绕过手法 2.2 高级绕过技巧 编码绕过 多重注释 参数污染 三、密码重置漏洞利用 3.1 常见漏洞模式 3…

Python适配器模式详解:让不兼容的接口协同工作

一、模式定义与核心思想 适配器模式(Adapter Pattern) 是一种结构型设计模式,它通过创建一个中间层(适配器),将不兼容的接口转换为客户端期望的接口。就像现实中的电源适配器,让不同国家的插头…

微信小程序列表数据上拉加载,下拉刷新

1.上拉加载数据,数据 下一页数据 前面的数据([...this.data.list, ...data.records)2.当用户上拉加载过快时,会不停的调用接口,需要节流阀isLoading3.上拉加载到最后一页的判断,isFinish// pages/list.js…

【树上倍增 LCA DFS 前缀和】P10391 [蓝桥杯 2024 省 A] 零食采购|普及+

本文涉及知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 CDFS 树上倍增 LCA P10391 [蓝桥杯 2024 省 A] 零食采购 题目描述 小蓝准备去星际旅行,出发前想在本星系采购一些零食,星系内有 nnn 颗星球&#x…

PDF发票批量打印工具哪个好?高效打印发票的实用工具推荐

开小超市这几年,每月要打几十张进货发票做账,以前打印时总犯愁:有的发票 PDF 太大,打出来字小得看不清;有的又太窄,白白浪费半张纸。试过手动调整,每张都要改缩放比例,累不说&#x…

4G模块 A7680通过MQTT协议连接到华为云

命令说明 基础AT指令 ATi显示产品的标志信息 ATCIMI查询IMSI ATCICCID从SIM卡读取ICCID ATCGSN查询产品序列号 ATCPIN查询卡状态 ATCSQ查询信号强度 ATCGATT查询当前PS域状态 ATCREG查询GPRS注册状态 ATCEREG查询4G注册状态 ATCGPADDR查询PDP地址 ATCMGF选择短信格式 ATCMGS发…

大模型词表设计与作用解析

几乎所有大型语言模型(LLM)都有自己独立的词表(Vocabulary)。这是模型设计和训练过程中的核心组件之一。以下是关于词表的关键点: 1. 词表的作用 分词基础:词表定义了模型如何将输入文本拆分成基本单元&…