一、概述

  人工神经网络(Artificial Neural Network,ANN),是一种模拟生物神经网络结构和功能的计算模型,它通过大量的神经元相互连接,实现对复杂数据的处理和模式识别。从本质上讲,人工神经网络是对人脑神经细胞的数学抽象,试图模仿人类大脑处理信息的方式,以解决各种实际问题。

  早在上世纪八九十年代,关于人工神经网络的研究已层出不穷,但限于当时的计算能力和数据能力,未能有效地显现其优势。近十几年以来,在许多新型复杂问题上,传统机器学习技术越发地难以满足需求,而随着计算能力不断提升、大数据不断涌现,人工神经网络凸显出了越来越强大的性能,在图像识别、语音识别、自然语言处理等方面取得了巨大的成功,并从此一发不可收拾,成为机器学习技术的一个重要方向。

二、模型原理

  本质上来讲,人工神经网络也就是由多个神经元连接而成的一个多层感知机,通过对外部信息的感知,经过模型的一系列计算,得到预测的输出值。

1. 人工神经元

  在人工神经网络中,一个典型的人工神经元接收多个输入信号,每个输入信号都对应一个权重,权重代表了该输入信号的重要程度。这些输入信号与对应权重相乘后进行求和,再加上一个偏置项,得到的结果会通过一个激活函数进行处理。

  激活函数的作用是为神经元引入非线性特性,常见的激活函数有 Sigmoid 函数、ReLU(修正线性单元)函数等。以 Sigmoid 函数为例,它将输入映射到 0 到 1 之间,能够将任意实数压缩到这个区间内,适用于二分类问题的输出层;而 ReLU 函数则更为简单高效,当输入大于等于 0 时,输出等于输入,当输入小于 0 时,输出为 0,这种特性可有效解决梯度消失问题。通过激活函数的处理,神经元得到一个输出值,作为其他神经元的输入进行传递。一个典型神经元的结构示意图如下

2. 网络结构

  人工神经网络由大量神经元相互连接构成,根据连接方式的不同,组成不同的网络结构,其中一种典型的网络结构是全连接前馈式神经网络,它由多个神经元完全地逐层相互连接,也叫做多层感知机(Multilayer Perceptron,MLP),包括输入层、隐含层、输出层。一个典型的全连接前馈式神经网络的结构示意图为

  对于分类问题,输出层神经元个数通常对应于类别个数,再在输出层后面加上一个softmax计算,输出各个类别对应的概率,将概率最大的那个输出作为预测类别。假设神经网络输出层向量为\(Z=\left[ z_1,z_2,...,z_K \right]\),则softmax计算表达式为

\[softmax(Z)_i=\frac{e^{z_i}}{\sum_{k=1}^{K}{e^{z_k}}}
\]

  对于回归问题,输出层可直接设计为一个以线性函数为激活函数的神经元,其输出即为连续型变量输出。

3. 模型的训练

  神经网络的训练就是训练网络中的参数(权重、偏置等),使得网络的输出能够尽可能地接近真实结果,这一过程通常是通过误差反向传播(Backpropagation,简称 BP)算法来完成。

  首先将训练数据输入到网络中,经过前向传播计算得到网络的输出,然后通过损失函数计算网络输出与真实标签之间的误差。常见的损失函数如均方误差(Mean Squared Error,MSE),适用于回归问题;交叉熵损失函数,常用于分类问题。接下来从输出层开始,计算损失函数对每个参数的梯度,沿着负梯度的方向更新参数,可以使损失函数的值减小。在操作过程中,通常会使用优化器,如随机梯度下降(Stochastic Gradient Descent,SGD)及其改进版本 Adam、Adagrad 等,这些优化器通过不同的策略调整学习率(更新的步长),以更高效地找到使损失函数收敛的参数组合。​

  随着训练的进行,模型在训练数据上的误差逐渐减小,性能不断提升,最终具备对新数据准确预测的能力。

三、Python实现

(环境: Python 3.11,scikit-learn 1.5.1,PyTorch 2.4.0)

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split # 生成模拟数据
X, y = make_classification(
n_samples=1000, n_features=20, n_informative=10,
n_redundant=5, random_state=42
) # 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
) # 转换为PyTorch张量
X_train_tensor = torch.FloatTensor(X_train)
y_train_tensor = torch.LongTensor(y_train)
X_test_tensor = torch.FloatTensor(X_test)
y_test_tensor = torch.LongTensor(y_test) # 创建数据加载器
train_dataset = TensorDataset(X_train_tensor, y_train_tensor)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) # 定义全连接前馈神经网络
class FeedForwardNN(nn.Module):
def __init__(self, input_size, hidden_size, num_classes):
super(FeedForwardNN, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, num_classes) def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out # 初始化模型
input_size = 20 # 输入特征数
hidden_size = 50 # 隐藏层神经元数
num_classes = 2 # 分类类别数
model = FeedForwardNN(input_size, hidden_size, num_classes) # 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练模型
num_epochs = 50
for epoch in range(num_epochs):
for batch_X, batch_y in train_loader:
# 前向传播
outputs = model(batch_X)
loss = criterion(outputs, batch_y) # 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step() if (epoch + 1) % 10 == 0:
print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}') # 评估模型
with torch.no_grad():
outputs = model(X_test_tensor)
_, predicted = torch.max(outputs.data, 1)
accuracy = (predicted == y_test_tensor).sum().item() / y_test_tensor.size(0)
print(f'Accuracy on test set: {accuracy:.4f}')

End.

人工神经网络(ANN)模型的更多相关文章

  1. 【机器学习】人工神经网络ANN

    神经网络是从生物领域自然的鬼斧神工中学习智慧的一种应用.人工神经网络(ANN)的发展经历的了几次高潮低谷,如今,随着数据爆发.硬件计算能力暴增.深度学习算法的优化,我们迎来了又一次的ANN雄起时代,以 ...

  2. 人工神经网络--ANN

    神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术. 本文以一种简单的,循序的方 ...

  3. MATLAB人工神经网络ANN代码

      本文介绍基于MATLAB实现人工神经网络(ANN)回归的详细代码与操作. 目录 1 分解代码 1.1 循环准备 1.2 神经网络构建 1.3 数据处理 1.4 模型训练参数配置 1.5 神经网络实 ...

  4. 机器学习笔记之人工神经网络(ANN)

    人工神经网络(ANN)提供了一种普遍而且实际的方法从样例中学习值为实数.离散值或向量函数.人工神经网络由一系列简单的单元相互连接构成,其中每个单元有一定数量的实值输入,并产生单一的实值输出. 上面是一 ...

  5. SIGAI深度学习第二集 人工神经网络1

    讲授神经网络的思想起源.神经元原理.神经网络的结构和本质.正向传播算法.链式求导及反向传播算法.神经网络怎么用于实际问题等 课程大纲: 神经网络的思想起源 神经元的原理 神经网络结构 正向传播算法 怎 ...

  6. [数据挖掘课程笔记]人工神经网络(ANN)

    人工神经网络(Artificial Neural Networks)顾名思义,是模仿人大脑神经元结构的模型.上图是一个有隐含层的人工神经网络模型.X = (x1,x2,..,xm)是ANN的输入,也就 ...

  7. C#中调用Matlab人工神经网络算法实现手写数字识别

    手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写 ...

  8. 人工神经网络 Artificial Neural Network

    2017-12-18 23:42:33 一.什么是深度学习 深度学习(deep neural network)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高 ...

  9. 人工神经网络反向传播算法(BP算法)证明推导

    为了搞明白这个没少在网上搜,但是结果不尽人意,最后找到了一篇很好很详细的证明过程,摘抄整理为 latex 如下. (原文:https://blog.csdn.net/weixin_41718085/a ...

  10. 人工神经网络(从原理到代码) Step 01 感知器 梯度下降

    版权声明: 本文由SimonLiang所有,发布于http://www.cnblogs.com/idignew/.如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任. 感知器 ...

随机推荐

  1. FANUC发那科机器人控制箱维修操作流程

    FANUC发那科机器人在工业自动化领域中占有重要地位,其高效.稳定和精确的性能赢得了众多用户的青睐.然而,随着使用时间的增长,可能会出现FANUC机器人控制柜故障,影响到发那科机器人的正常运行.本文将 ...

  2. SQL取系统时间的前一个月的月份和年份

    SQL SERVER 提供了一些时间函数:取当前时间:select getdate()取前一个月的时间:SELECT DATEADD(MONTH,-1,GETDATE()) 月份减一个月取年份:SEL ...

  3. Linux - openssh通过源码build rpm包

    # 安装依赖包 yum install --downloadonly --downloaddir=/home/rpm-install rpm-build gcc gcc-c++ glibc glibc ...

  4. Flink学习(十六) ProcessFunctionAPI(底层API)

    我们之前学习的转换算子是无法访问时间的时间戳信息和水位线信息的.而这些在一些应用场景下,极为重要,例如MapFunction这样的map转换算子就无法访问时间戳或者当前事件的事件时间. 基于此,Dat ...

  5. Java Map一些基本使用方法

    1 // Map key值不能相同,value值可以相同 2 // HashMap中的Entry对象是无序排列的 3 4 // 实例化1 5 Map<String, String> map ...

  6. 【Python】将网格数据写入到VTK文件

    1. vtk 文件格式 根据官网进行总结 vtk文件组成:5个部分. 第一部分,第一行:表明文件版本.写"# vtk DataFile Version 2.0"就行 第二部分,第二 ...

  7. JavaScript与jQuery基础入门到放弃

    JavaScript与jQuery基础入门到放弃 引言: - BOM 操作 - DOM 操作 - jQuery 类库 BOM 操作 BOM (Browser Object Model) 指浏览器对象模 ...

  8. AI与.NET技术实操系列(七):使用Emgu CV进行计算机视觉操作

    引言 计算机视觉(Computer Vision, CV)是人工智能领域中最为引人注目的分支之一.从自动驾驶汽车到医疗影像分析,从智能安防系统到虚拟现实体验,计算机视觉的应用无处不在,深刻地改变着我们 ...

  9. PVE虚拟机安装详解

    前言 PVE,全称Proxmox Virtual Environment,是基于Debian的Linux系统,虚拟机内核为KVM.硬件兼容性优秀.界面功能不强,很多操作要靠命令行,但扩展能力几乎是无限 ...

  10. PLSQL Developer使用大全

    第一章 PLSQL Developer特性 PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发.如今,有越来越多的商业逻辑和应用逻辑转向了Oracle S ...