【大数据】机器学习------神经网络模型

embedded/2025/1/15 17:34:07/

一、神经网络模型

1. 基本概念
神经网络是一种模拟人类大脑神经元结构的计算模型,由多个神经元(节点)组成,这些节点按照不同层次排列,通常包括输入层、一个或多个隐藏层和输出层。每个神经元接收来自上一层神经元的输入,通过加权求和和激活函数处理后将结果传递给下一层。

在这里插入图片描述

2. 数学公式
对于一个具有 L L L 层的神经网络,第 l l l 层第 j j j 个神经元的输入 z j l z_j^l zjl 可以表示为:
在这里插入图片描述

其中 w i j l − 1 w_{ij}^{l-1} wijl1 是第 l − 1 l-1 l1 层第 i i i 个神经元到第 l l l 层第 j j j 个神经元的连接权重, a i l − 1 a_i^{l-1} ail1 是第 l − 1 l-1 l1 层第 i i i 个神经元的输出(激活值), b j l b_j^l bjl 是第 l l l 层第 j j j 个神经元的偏置。

激活函数 a j l = f ( z j l ) a_j^l = f(z_j^l) ajl=f(zjl),常见的激活函数有:

  • Sigmoid 函数在这里插入图片描述

  • ReLU 函数在这里插入图片描述

  • Tanh 函数在这里插入图片描述

二、感知机与多层网络

1. 感知机
感知机是一种最简单的神经网络,可用于二分类任务。对于输入向量 x = ( x 1 , x 2 , ⋯ , x n ) \mathbf{x}=(x_1,x_2,\cdots,x_n) x=(x1,x2,,xn),感知机的输出为:
在这里插入图片描述

其中 (sign) 函数为符号函数,当 (z\geq0) 时,(sign(z)=1);当 (z<0) 时,(sign(z)=-1)。

2. 多层感知机(MLP)
多层感知机包含多个隐藏层,能够解决非线性可分问题。

代码示例:感知机

import numpy as npclass Perceptron:def __init__(self, input_size, learning_rate=0.01, epochs=100):self.weights = np.random.rand(input_size)self.bias = np.random.rand(1)self.learning_rate = learning_rateself.epochs = epochsdef activation(self, z):return 1 if z >= 0 else -1def predict(self, x):linear_output = np.dot(x, self.weights) + self.biasreturn self.activation(linear_output)def train(self, X, y):for _ in range(self.epochs):for x, label in zip(X, y):prediction = self.predict(x)update = self.learning_rate * (label - prediction)self.weights += update * xself.bias += update# 示例数据
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([-1, -1, -1, 1])# 初始化感知机
perceptron = Perceptron(input_size=2)# 训练感知机
perceptron.train(X, y)# 预测
print(perceptron.predict([1, 1]))

在这里插入图片描述

代码解释

  • __init__ 方法初始化感知机的权重、偏置、学习率和训练轮数。
  • activation 是激活函数,这里使用简单的符号函数。
  • predict 计算感知机的输出。
  • train 方法根据训练数据更新权重和偏置。

三、误差逆传播算法(BP 算法)

BP 算法用于训练多层神经网络,通过计算输出误差并将其反向传播更新权重和偏置。

1. 前向传播
计算每层的输入和输出:
在这里插入图片描述

2. 反向传播
计算输出层误差:
在这里插入图片描述

对于隐藏层:
在这里插入图片描述

权重更新公式:
在这里插入图片描述

偏置更新公式:
在这里插入图片描述

代码示例:BP 算法实现

import numpy as npdef sigmoid(z):return 1 / (1 + np.exp(-z))def sigmoid_derivative(z):return sigmoid(z) * (1 - sigmoid(z))class NeuralNetwork:def __init__(self, input_size, hidden_size, output_size):self.input_size = input_sizeself.hidden_size = hidden_sizeself.output_size = output_sizeself.weights_input_hidden = np.random.rand(self.input_size, self.hidden_size)self.weights_hidden_output = np.random.rand(self.hidden_size, self.output_size)self.bias_hidden = np.random.rand(self.hidden_size)self.bias_output = np.random.rand(self.output_size)def forward(self, x):self.z_hidden = np.dot(x, self.weights_input_hidden) + self.bias_hiddenself.a_hidden = sigmoid(self.z_hidden)self.z_output = np.dot(self.a_hidden, self.weights_hidden_output) + self.bias_outputself.a_output = sigmoid(self.z_output)return self.a_outputdef backward(self, x, y, learning_rate):# 计算输出层误差output_error = y - self.a_outputoutput_delta = output_error * sigmoid_derivative(self.z_output)# 计算隐藏层误差hidden_error = np.dot(output_delta, self.weights_hidden_output.T)hidden_delta = hidden_error * sigmoid_derivative(self.z_hidden)# 更新权重和偏置self.weights_hidden_output += learning_rate * np.outer(self.a_hidden, output_delta)self.bias_output += learning_rate * output_deltaself.weights_input_hidden += learning_rate * np.outer(x, hidden_delta)self.bias_hidden += learning_rate * hidden_delta# 示例数据
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=2, output_size=1)# 训练
for epoch in range(10000):for x, target in zip(X, y):nn.forward(x)nn.backward(x, target, learning_rate=0.1)# 预测
print(nn.forward([1, 1]))
```![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/65389eb31fe24fbea5bf766e92472d30.png)**代码解释**- `sigmoid` 和 `sigmoid_derivative` 函数分别计算 sigmoid 函数及其导数。
- `NeuralNetwork` 类包含初始化权重和偏置、前向传播和反向传播的方法。
- `forward` 计算网络的输出。
- `backward` 计算误差并更新权重和偏置。**四、全局最小与局部最小****1. 概念**
- **全局最小**:在整个参数空间中,损失函数达到的最小点。
- **局部最小**:在参数空间的某个局部区域内,损失函数达到的最小点,但不是全局最小。**2. 解决方法**
- 随机初始化权重。
- 使用模拟退火等算法。**五、其他常见神经网络****1. 卷积神经网络 (CNN)**
主要用于图像处理,利用卷积层提取特征,通过池化层降低维度。**代码示例:使用 Keras 实现 CNN**
```python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
import numpy as np# 构建简单的 CNN 模型
model = Sequential([Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),MaxPooling2D((2, 2)),Flatten(),Dense(10, activation='softmax')
])# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])# 示例数据
X = np.random.random((100, 28, 28, 1))
y = np.random.randint(0, 10, (100,))# 训练模型
model.fit(X, y, epochs=10)

代码解释

  • Conv2D 是卷积层,MaxPooling2D 是池化层,Flatten 将多维数据展平,Dense 是全连接层。
  • model.compile 配置模型的优化器和损失函数。
  • model.fit 进行模型训练。

2. 循环神经网络 (RNN)
适用于序列数据,如文本、时间序列,通过隐藏状态保存序列信息。

代码示例:使用 Keras 实现 RNN

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, Dense
import numpy as np# 构建简单的 RNN 模型
model = Sequential([SimpleRNN(50, activation='relu', input_shape=(10, 1)),Dense(1)
])# 编译模型
model.compile(optimizer='adam', loss='mse')# 示例数据
X = np.random.random((100, 10, 1))
y = np.random.random((100, 1))# 训练模型
model.fit(X, y, epochs=10)

代码解释

  • SimpleRNN 是简单循环神经网络层。
  • 其余部分与 CNN 示例类似,包括模型的编译和训练。

六、深度学习
深度学习是使用具有多个层次的神经网络进行学习的技术,通过大量数据和强大的计算能力训练复杂的网络结构,在图像识别、语音识别、自然语言处理等领域取得了巨大成功。

通过以上内容,你可以对神经网络的各个知识点有一个全面的了解,包括基本的数学公式、不同类型神经网络的实现代码,以及如何使用流行的深度学习框架(如 Keras)进行模型的构建和训练。不同的网络结构和算法可以根据具体的任务和数据特点进行选择和优化,以达到更好的性能。


http://www.ppmy.cn/embedded/154150.html

相关文章

2025年VGC大众汽车科技社招入职测评综合能力英语口语SHL历年真题汇总、考情分析

早在1978年&#xff0c;大众汽车集团就开始了与中国的联系。1984年&#xff0c;集团在华的第一家合资企业—上汽大众汽车有限公司奠基成立&#xff1b;1991年&#xff0c;一汽-大众汽车有限公司成立&#xff1b;2017年&#xff0c;大众汽车&#xff08;安徽&#xff09;有限公司…

计算机网络之---无线通信概述

无线通信概述 无线通信基于电磁波的传播原理。电磁波由电场和磁场交替变化而成&#xff0c;通过天线发射和接收。信号从发射端通过空气&#xff08;或真空&#xff09;传播到接收端。 常见的无线电波类型包括&#xff1a; 低频波段&#xff08;LF, MF, HF&#xff09;&#xf…

html使用css外部类选择器

在写html时&#xff0c;可以在head标签里导入外部css样式&#xff0c;在body中需要使用这个类的标签时&#xff0c;可以标签中选择类&#xff08;class&#xff09;为定义的css样式。 <!DOCTYPE html> <html lang"en"> <head><meta charset&qu…

解决问题 PHP $_SERVER[‘HTTPS‘] 没有值

遇到的问题&#xff1a; 最近重新安装了nginxphp&#xff0c;目前http和https都支持&#xff0c;编写代码判断是否是https请求&#xff1a; function IsHttpsRequest() {if (!empty($_SERVER[HTTPS]) && strtolower($_SERVER[HTTPS]) ! off) {return TRUE;} elseif (i…

Git提交失败【File[xxxxxx] size xxxMB, exceeds quota 100MB】

使用码云作为代码版本库&#xff0c;提交文件是报错&#xff1a;remote: error: File:[xxxxx] size xxxMB , exceeds 100.00 MB。 原因很明显&#xff0c;因为其支持的最大单个文件为100M&#xff0c;我上传的文件超过100M了&#xff0c;此时单纯remove文件是无法解决该问…

甲状腺肿瘤-图像分类数据集

甲状腺肿瘤-图像分类数据集 数据集&#xff1a; 链接: https://pan.baidu.com/s/1enzQjIEr5gX6JzWp5peKoA?pwd4j5j 提取码: 4j5j 数据集信息介绍&#xff1a; 文件夹 恶性的 中的图片数量: 804 文件夹 正常甲状腺 中的图片数量: 171 文件夹 良性的 中的图片数量: 632 所有…

【MARL】基于强化学习的红蓝双方对抗作战仿真

文章目录 前言一、环境规则具体参数 二、原理价值评估执行Critic给Actor指导 三、实验效果训练情况探索噪音设置 四、总结 前言 临近期末&#xff0c;要交一次python大作业&#xff0c;乘这次机会&#xff0c;将之前做的项目的一个类似于红蓝对战的小游戏&#xff0c;再次整理…

【汇编】x86汇编编程寄存器资源心中有数

1. CPU状态及控制寄存器 TR&#xff0c;GDTR&#xff0c;LDTRcr0-cr3EFLAGS 等等 2. 业务计算寄存器&#xff08;我起的名字&#xff09; 业务寄存器用于访问内存、参数传递、数据传递、计算。 段寄存器6个&#xff1a; cs&#xff0c;ds&#xff0c;es&#xff0c;ss&…