当前位置: 首页 > article >正文

【单层神经网络】快速入门AI系列

单层神经网络原理

单层神经网络(Single-Layer Neural Network)是最简单的神经网络形式,通常由一个输入层和一个输出层组成,没有隐藏层。其核心原理如下:

  1. 输入层

    • 输入层接收特征向量 x = [ x 1 , x 2 , … , x n ] \mathbf{x} = [x_1, x_2, \dots, x_n] x=[x1,x2,,xn],每个 x i x_i xi代表一个特征。
  2. 权重和偏置

    • 每个输入 x i x_i xi与一个权重 w i w_i wi 相乘,权重表示特征的重要性。
    • 偏置 ( b ) 用于调整输出。
  3. 加权求和

    • 计算加权和 z = ∑ i = 1 n w i x i + b z = \sum_{i=1}^{n} w_i x_i + b z=i=1nwixi+b
  4. 激活函数

    • 通过激活函数 f ( z ) f(z) f(z) 引入非线性,常见激活函数包括Sigmoid、ReLU等。
  5. 输出层

    • 输出 y = f ( z ) y = f(z) y=f(z),表示神经网络的预测结果。

数学表示

神经网络的输出可以表示为:
y = f ( ∑ i = 1 n w i x i + b ) y = f\left( \sum_{i=1}^{n} w_i x_i + b \right) y=f(i=1nwixi+b)

训练过程

  1. 前向传播

    • 计算输出 y y y
  2. 损失函数

    • 计算预测值与真实值的误差,常用损失函数包括均方误差(MSE)和交叉熵损失。
  3. 反向传播

    • 通过梯度下降法更新权重和偏置,最小化损失函数。
  4. 参数更新

    • 更新公式为:
      w i ← w i − η ∂ L ∂ w i w_i \leftarrow w_i - \eta \frac{\partial L}{\partial w_i} wiwiηwiL
      b ← b − η ∂ L ∂ b b \leftarrow b - \eta \frac{\partial L}{\partial b} bbηbL
      其中, η \eta η是学习率, L L L是损失函数。

能解决的问题

单层神经网络适合解决线性可分问题,典型应用包括:

  1. 线性回归

    • 预测连续值,如房价预测。
  2. 二分类问题

    • 如垃圾邮件分类,通过Sigmoid函数输出概率。
  3. 多分类问题

    • 使用Softmax函数进行多类别分类,如手写数字识别。

局限性

单层神经网络无法解决非线性问题,如异或(XOR)问题。解决复杂问题需要引入多层神经网络(如多层感知机MLP)。

Python代码实现

import numpy as np


# 生成数据集
def generate_data(num_samples, w_true):
    np.random.seed(42)
    X = np.random.rand(num_samples, 2)  # 生成二维输入
    y = np.dot(X, w_true)  # 计算目标值 y = w1*x1 + w2*x2
    return X, y


# 定义单层神经网络
class SingleLayerNeuralNetwork:
    def __init__(self, input_dim):
        self.w = np.random.randn(input_dim)  # 初始化权重
        self.b = np.random.randn()  # 初始化偏置

    def forward(self, X):
        return np.dot(X, self.w) + self.b  # 计算预测值 y = X * w + b

    def train(self, X, y, learning_rate=0.01, epochs=200):
        for epoch in range(epochs):
            # 前向传播
            y_pred = self.forward(X)

            # 计算损失(均方误差)
            loss = np.mean((y_pred - y) ** 2)

            # 反向传播(计算梯度)
            dw = np.dot(X.T, (y_pred - y)) / len(X)  # 权重梯度
            db = np.mean(y_pred - y)  # 偏置梯度

            # 更新参数
            self.w -= learning_rate * dw
            self.b -= learning_rate * db

            # 打印损失
            if (epoch + 1) % 10 == 0:
                print(f"Epoch {epoch + 1}, Loss: {loss:.4f}")


# 参数设置
num_samples = 100  # 样本数量
w_true = np.array([3.0, -2.0])  # 真实的权重
learning_rate = 0.1
epochs = 300

# 生成数据
X, y = generate_data(num_samples, w_true)

# 创建模型
model = SingleLayerNeuralNetwork(input_dim=2)

# 训练模型
model.train(X, y, learning_rate=learning_rate, epochs=epochs)

# 打印训练后的权重和偏置
print("训练后的权重 w:", model.w)
print("训练后的偏置 b:", model.b)```


http://www.kler.cn/a/514581.html

相关文章:

  • XCP 协议基础
  • IDEA中Maven使用的踩坑与最佳实践
  • 备赛蓝桥杯之第十五届职业院校组省赛第二题:分享点滴
  • MySQL主从配置
  • 如何实现亿级用户在线状态统计?
  • HTML 表单和输入标签详解
  • 超大型集团合并报表数智管理转型
  • C语言基础------练习1
  • 相机内参的作用原理
  • doris:Stream Load
  • 登录认证(4):令牌技术:JWT令牌
  • Selenium-WEB自动化测试环境配置
  • springBoot 整合ModBus TCP
  • EJB如何管理事务
  • Qt Creator 15.0.0如何更换主题和字体
  • 【Java】常用工具类方法:树形结构、获取IP、对象拷贝、File相关、雪花算法等
  • ubuntu 安装显卡驱动gpu-cuda
  • TiDB 对 Hadoop 的影响:大数据时代的新选择
  • 深入理解 Java 的并发容器
  • MongoDB部署模式
  • 《论文阅读》GPT-3是否会产生移情对话?一种新的情境示例选择方法和用于生成同理心对话的自动评估度量 ICCL 2022
  • 手机网络性能测试仪器介绍
  • c#配置config文件
  • 布局预览问题
  • 持续升级《在线写python》小程序的功能,文章页增加一键复制功能,并自动去掉html标签
  • Python从0到100(八十五):神经网络-使用迁移学习完成猫狗分类