(五)人工智能进阶:基础概念解释

前面我们介绍了人工智能是如何成为一个强大函数。接下来,搞清损失函数、优化方法和正则化等核心概念,才能真正驾驭它!
请添加图片描述

1. 什么是网络模型?

网络模型就像是一个精密的流水线工厂,由多个车间(层)组成,每个车间都负责特定的加工任务。原材料(输入数据)在这条流水线上逐步加工,最终产出成品(预测结果)。

基本组成部分

  1. 输入层:接收原始数据
  2. 隐藏层:进行数据处理转换
  3. 输出层:产生最终结果
import numpy as np

class SimpleNeuralNetwork:
    def __init__(self, input_size, hidden_size, output_size):
        # 初始化网络参数
        self.hidden_weights = np.random.randn(input_size, hidden_size)
        self.hidden_bias = np.zeros(hidden_size)
        self.output_weights = np.random.randn(hidden_size, output_size)
        self.output_bias = np.zeros(output_size)
    
    def relu(self, x):
        """激活函数:小于0则置0,大于0保持原值"""
        return np.maximum(0, x)
    
    def forward(self, x):
        """前向传播:数据通过网络的过程"""
        # 第一层转换
        self.hidden = self.relu(np.dot(x, self.hidden_weights) + self.hidden_bias)
        # 第二层转换
        self.output = np.dot(self.hidden, self.output_weights) + self.output_bias
        return self.output

常见网络模型类型

1. 前馈神经网络(最基础的模型)
class FeedForwardNetwork:
    def __init__(self):
        self.layers = [
            {"neurons": 128, "activation": "relu"},
            {"neurons": 64, "activation": "relu"},
            {"neurons": 10, "activation": "softmax"}
        ]
2. 卷积神经网络(处理图像)
class SimpleCNN:
    def __init__(self):
        self.layers = [
            {"type": "conv2d", "filters": 32, "kernel_size": 3},
            {"type": "maxpool", "size": 2},
            {"type": "conv2d", "filters": 64, "kernel_size": 3},
            {"type": "flatten"},
            {"type": "dense", "neurons": 10}
        ]
3. 循环神经网络(处理序列)
class SimpleRNN:
    def __init__(self, input_size, hidden_size):
        self.hidden_size = hidden_size
        # 初始化权重
        self.Wx = np.random.randn(input_size, hidden_size)   # 输入权重
        self.Wh = np.random.randn(hidden_size, hidden_size)  # 隐状态权重
        self.b = np.zeros(hidden_size)                       # 偏置

模型的实际应用示例

  1. 图像识别模型
def image_recognition_model():
    model = {
        "conv1": {"filters": 32, "kernel_size": 3},
        "pool1": {"size": 2},
        "conv2": {"filters": 64, "kernel_size": 3},
        "pool2": {"size": 2},
        "flatten": {},
        "dense1": {"units": 128},
        "dense2": {"units": 10}
    }
    return model
  1. 文本处理模型
def text_processing_model():
    model = {
        "embedding": {"vocab_size": 10000, "embed_dim": 100},
        "lstm": {"units": 64, "return_sequences": True},
        "global_pool": {},
        "dense": {"units": 1, "activation": "sigmoid"}
    }
    return model

模型的特点

  1. 层次结构
class LayeredNetwork:
    def __init__(self):
        self.architecture = [
            ("input", 784),           # 输入层:接收原始数据
            ("hidden", 256, "relu"),  # 隐藏层:特征提取
            ("hidden", 128, "relu"),  # 隐藏层:特征组合
            ("output", 10, "softmax") # 输出层:生成预测
        ]
  1. 参数学习
def train_step(model, inputs, targets):
    # 前向传播
    predictions = model.forward(inputs)
    # 计算损失
    loss = calculate_loss(predictions, targets)
    # 反向传播
    gradients = calculate_gradients(loss)
    # 更新参数
    model.update_parameters(gradients)
    return loss
  1. 特征提取能力
def extract_features(model, input_data):
    features = []
    # 逐层提取特征
    for layer in model.layers:
        input_data = layer.process(input_data)
        features.append(input_data)
    return features

模型选择建议

根据任务类型选择合适的模型:

  1. 图像处理:使用CNN
def choose_model(task_type):
    if task_type == "image":
        return CNN()
    elif task_type == "text":
        return RNN()
    elif task_type == "tabular":
        return FeedForwardNetwork()
  1. 文本处理:使用RNN或Transformer
  2. 表格数据:使用前馈神经网络

示例:完整的模型定义

class ComprehensiveModel:
    def __init__(self, input_shape, num_classes):
        self.input_shape = input_shape
        self.num_classes = num_classes
        
    def build(self):
        model = {
            # 特征提取部分
            "feature_extractor": [
                {"type": "conv2d", "filters": 32, "kernel_size": 3},
                {"type": "maxpool", "size": 2},
                {"type": "conv2d", "filters": 64, "kernel_size": 3},
                {"type": "maxpool", "size": 2}
            ],
            
            # 分类部分
            "classifier": [
                {"type": "flatten"},
                {"type": "dense", "units": 128, "activation": "relu"},
                {"type": "dropout", "rate": 0.5},
                {"type": "dense", "units": self.num_classes, "activation": "softmax"}
            ]
        }
        return model

这个网络模型就像一个智能工厂:

  • 输入层是原料验收处
  • 隐藏层是各个加工车间
  • 输出层是成品检验处
  • 参数是工人的操作技能
  • 激活函数是工人的操作方法
  • 训练过程就是工人练习和提升技能的过程

通过这种方式,网络模型能够学习处理各种复杂的任务,从图像识别到语言翻译,从游戏对弈到自动驾驶。

2. 什么是学习?

想象你在教一个小孩认识猫:

  • 开始时,他可能把所有毛茸茸的动物都叫做猫
  • 通过不断看例子,他逐渐学会区分猫和狗
  • 最后,他能准确认出猫

在AI中,学习就是:

  1. 看大量例子(数据)
  2. 调整模型参数
  3. 提高预测准确率
# 简单的学习过程示例
class SimpleModel:
    def __init__(self):
        self.weight = 1.0  # 初始参数
    
    def predict(self, x):
        return self.weight * x
    
    def learn(self, x, true_value, learning_rate):
        prediction = self.predict(x)
        error = true_value - prediction
        # 调整参数
        self.weight += learning_rate * error

3. 什么是学习率?

学习率就像是学习时的"步子大小":

  • 太大:容易跨过最佳答案(学得太快,容易过头)
  • 太小:需要很长时间才能找到答案(学得太慢)
# 不同学习率的效果
def train_with_different_learning_rates():
    learning_rates = [0.1, 0.01, 0.001]
    for lr in learning_rates:
        model = SimpleModel()
        for _ in range(100):
            model.learn(x=2, true_value=4, learning_rate=lr)

4. 什么是损失函数?

损失函数就像是"考试成绩",用来衡量模型预测得有多准:

  • 预测越准确,分数越低
  • 预测越差,分数越高

常见的损失函数:

import numpy as np

# 均方误差(MSE)
def mse_loss(predictions, targets):
    return np.mean((predictions - targets) ** 2)

# 平均绝对误差(MAE)
def mae_loss(predictions, targets):
    return np.mean(np.abs(predictions - targets))

# 交叉熵损失(用于分类问题)
def cross_entropy_loss(predictions, targets):
    return -np.sum(targets * np.log(predictions))

5. 什么是优化器?

优化器就像是"学习策略",决定如何调整模型参数:

常见优化器示例:

class SGD:
    def __init__(self, learning_rate=0.01):
        self.lr = learning_rate
    
    def update(self, parameter, gradient):
        return parameter - self.lr * gradient

class Momentum:
    def __init__(self, learning_rate=0.01, momentum=0.9):
        self.lr = learning_rate
        self.momentum = momentum
        self.velocity = 0
    
    def update(self, parameter, gradient):
        self.velocity = self.momentum * self.velocity - self.lr * gradient
        return parameter + self.velocity

6. 什么是收敛?

收敛就像是"学有所成"的状态:

  • 模型的表现趋于稳定
  • 损失不再明显下降
  • 预测结果基本符合预期
def check_convergence(loss_history, tolerance=1e-5):
    """检查是否收敛"""
    if len(loss_history) < 2:
        return False
    
    recent_loss_change = abs(loss_history[-1] - loss_history[-2])
    return recent_loss_change < tolerance

7. 什么是正则化?

正则化就像是给模型设置"课外作业",防止它"死记硬背"(过拟合):

# L1正则化(Lasso)
def l1_regularization(weights, lambda_param):
    return lambda_param * np.sum(np.abs(weights))

# L2正则化(Ridge)
def l2_regularization(weights, lambda_param):
    return lambda_param * np.sum(weights ** 2)

# Dropout正则化
def dropout(layer_output, dropout_rate=0.5):
    mask = np.random.binomial(1, 1-dropout_rate, size=layer_output.shape)
    return layer_output * mask / (1-dropout_rate)

实际应用示例

让我们把这些概念组合起来:

class SimpleNeuralNetwork:
    def __init__(self):
        self.weights = np.random.randn(10)
        self.optimizer = Momentum()
        self.loss_history = []
    
    def train(self, x, y, epochs=1000):
        for epoch in range(epochs):
            # 前向传播
            prediction = self.predict(x)
            
            # 计算损失
            loss = mse_loss(prediction, y)
            self.loss_history.append(loss)
            
            # 计算梯度
            gradient = self.calculate_gradient(x, y)
            
            # 更新参数
            self.weights = self.optimizer.update(self.weights, gradient)
            
            # 检查是否收敛
            if check_convergence(self.loss_history):
                print(f"模型在第 {epoch} 轮收敛")
                break
    
    def predict(self, x):
        return np.dot(x, self.weights)

小结

这些概念环环相扣:

  1. 函数定义了模型的结构
  2. 学习让模型不断改进
  3. 学习率决定改进的步子大小
  4. 损失函数评估模型表现
  5. 优化器指导参数更新
  6. 收敛标志学习完成
  7. 正则化防止过度学习

就像学习骑自行车:

  • 函数是自行车的结构
  • 学习是练习的过程
  • 学习率是每次调整的幅度
  • 损失函数是摔倒的次数
  • 优化器是练习的方法
  • 收敛是学会骑车
  • 正则化是在不同路况下练习

延伸阅读

  1. 深度学习中的优化器解析:从 SGD 到 Adam - https://ruder.io/optimizing-gradient-descent/

  2. 神经网络基础:一文搞懂前向传播与反向传播 - https://medium.com/@14prakash/back-propagation-is-very-simple-who-made-it-complicated-97b794c97e5c

  3. 理解 LSTM 网络工作原理 - https://colah.github.io/posts/2015-08-Understanding-LSTMs/

  4. 深入浅出 Batch Normalization - https://towardsdatascience.com/batch-normalization-in-neural-networks-1ac91516821c

  5. 一文理解深度学习中的正则化技术 - https://neptune.ai/blog/fighting-overfitting-with-l1-or-l2-regularization

  6. 可视化理解卷积神经网络 - https://poloclub.github.io/cnn-explainer/

  7. 深度学习中的学习率设置技巧 - https://www.jeremyjordan.me/nn-learning-rate/

  8. 损失函数最优化指南 - https://machinelearningmastery.com/how-to-choose-loss-functions-when-training-deep-learning-neural-networks/

  9. Transformer模型详解:理解自注意力机制 - https://jalammar.github.io/illustrated-transformer/

  10. 深度学习中的激活函数对比 - https://mlfromscratch.com/activation-functions-explained/

  11. 梯度下降优化算法总结 - https://towardsdatascience.com/gradient-descent-algorithm-and-its-variants-10f652806a3

  12. 深度学习模型训练技巧:实用指南 - https://stanford.edu/~shervine/blog/pytorch-how-to-generate-data-parallel

  13. 交叉验证与模型评估详解 - https://scikit-learn.org/stable/modules/cross_validation.html

  14. 神经网络架构搜索入门 - https://lilianweng.github.io/posts/2020-08-06-nas/

  15. 深度学习中的数据增强技术 - https://neptune.ai/blog/data-augmentation-in-deep-learning

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC(二)原理

目录 一、配置Maven&#xff08;为了提升速度&#xff09; 二、流程&&原理 SpringMVC中心控制器 完整流程&#xff1a; 一、配置Maven&#xff08;为了提升速度&#xff09; 在SpringMVC&#xff08;一&#xff09;配置-CSDN博客的配置中&#xff0c;导入Maven会非…

2、redis的持久化

redis的持久化 在redist当中&#xff0c;高可用的技术包括持久化&#xff0c;主从复制&#xff0c;哨兵模式&#xff0c;集群。 持久化是最简单的高可用的方法&#xff0c;作用就是备份数据。即将数据保存到硬盘&#xff0c;防止进程退出导致数据丢失。 redis持久化方式&…

【算法】模拟退火算法学习记录

写这篇博客的原因是博主本人在看某篇文章的时候&#xff0c;发现自己只是知道SGD这个东西&#xff0c;但是到底是个啥不清楚&#xff0c;所以百度了一下&#xff0c;然后在通过博客学习的时候看到了退火两个字&#xff0c;想到了本科做数模比赛的时候涉猎过&#xff0c;就上bil…

Visual Point Cloud Forecasting enables Scalable Autonomous Driving——点云论文阅读(12)

此内容是论文总结,重点看思路!! 文章概述 这篇文章介绍了一个名为 ViDAR 的视觉点云预测框架,它通过预测历史视觉输入生成未来点云,作为自动驾驶的预训练任务。ViDAR 集成了语义、三维几何和时间动态信息,有效提升了感知、预测和规划等自动驾驶核心任务的性能。实验表明…

AI 将在今年获得“永久记忆”,2028美国会耗尽能源储备

AI的“永久记忆”时代即将来临 谷歌前CEO施密特揭示了AI技术的前景&#xff0c;他相信即将在2025年迎来一场伟大的变化。AI将实现“永久记忆”&#xff0c;改变我们与科技的互动过程。施密特将现有的AI上下文窗口比作人类的短期记忆&#xff0c;难以持久保存信息。他的设想是…

工控主板ESM7000/6800E支持远程桌面控制

英创公司ESM7000 是面向工业领域的双核 Cortex-A7 高性能嵌入式主板&#xff0c;ESM6800E则为单核Cortex-A7 高性价比嵌入式主板&#xff0c;ESM7000、ESM6800E都是公司的成熟产品&#xff0c;已广泛应用于工业很多领域。ESM7000/6800E板卡中Linux系统配置为linux-4.9.11内核、…

越权漏洞简介及靶场演示

越权漏洞简介及靶场演示 文章目录 一、什么是越权&#xff1f; &#xff08;一&#xff09;越权漏洞的概念&#xff08;二&#xff09;越权漏洞的分类&#xff08;三&#xff09;常见越权方法&#xff08;四&#xff09;未授权访问 二、越权漏洞测试过程 &#xff08;一&…

VIT:视觉transformer|学习微调记录

一、了解VIT结构 vit提出了对于图片完全采用transformer结构而不是CNN的方法&#xff0c;通过将图片分为patch&#xff0c;再将patch展开输入编码器&#xff08;grid_size网格大小&#xff09;&#xff0c;最后用MLP将输出转化为对应类预测。 详细信息可以看下面这个分享&…

coredns报错plugin/forward: no nameservers found

coredns报错plugin/forward: no nameservers found并且pod无法启动 出现该报错原因 是coredns获取不到宿主机配置的dns地址 查看宿主机是否有dns地址 resolvectl status 我这里是配置正确后&#xff0c;如果没配置过以下是不会显示出dns地址的 给宿主机增加静态dns地址之后将…

使用Diffusion Models进行图像超分辩重建

Diffusion Models专栏文章汇总:入门与实战 前言:图像超分辨率重建是一个经典CV任务,其实LR(低分辨率)和 HR(高分辨率)图像仅在高频细节上存在差异。通过添加适当的噪声,LR 图像将变得与其 HR 对应图像无法区分。这篇博客介绍一种方式巧妙利用这个规律使用Diffusion Mod…

NineData 荣获年度“创新解决方案奖”

近日&#xff0c;国内知名 IT 垂直媒体 & 技术社区 IT168 再次启动“技术卓越奖”评选&#xff0c;由行业 CIO/CTO 大咖、技术专家及 IT 媒体多方联合评审&#xff0c;NineData 凭借技术性能和产品创新等方面表现出色&#xff0c;在数据库工具领域荣获“2024 年度创新解决方…

liunx下载gitlab

1.地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 安装 postfix 并启动 yum install postfix systemctl start postfix systemctl enable postfix ssh服务启动 systemctl enable sshd systemctl start sshd开放 ssh 以及 http 服务&#xff0c…

SQL—替换字符串—replace函数用法详解

SQL—替换字符串—replace函数用法详解 REPLACE() 函数——查找一个字符串中的指定子串&#xff0c;并将其替换为另一个子串。 REPLACE(str, old_substring, new_substring)str&#xff1a;要进行替换操作的原始字符串。old_substring&#xff1a;要被替换的子串。new_substri…

Android笔试面试题AI答之Android基础(11)

Android入门请看《Android应用开发项目式教程》&#xff0c;视频、源码、答疑&#xff0c;手把手教 文章目录 1.Android的权限有哪些&#xff1f;**1. 普通权限****常见普通权限** **2. 危险权限****权限分组****常见危险权限组及权限** **3. 特殊权限****常见特殊权限** **4. …

机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型

机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型 目录 机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型1 过拟合和欠拟合1.1 过拟合1.2 欠拟合 2 正则化惩罚2.1 概念2.2 函数2.3 正则化种类 3 K折交叉验证3.1 概念3.2 图片理解3.3 函数导入3.4 参数理解 4 训练模型K折交…

[AHK]用大模型写ahk脚本

问题背景 遇到程序在运行&#xff0c;但是在屏幕上看不到的窘境&#xff0c;于是想用AHK来实现一键在主屏幕上居中显示。 解决思路 手撸是不可能手撸的&#xff0c;我有豆包我有cursor&#xff0c;于是想看看她俩到底能力咋样。 提示词 用AHK v2实现&#xff1a;热键WinC …

Word如何插入图片并移动到某个位置

Word如何插入图片并移动到某一个位置 新建word→插入→图片 选择合适的位置→选择图片→打开 点击图片→布局选项→选择文字环绕下的任意一个→固定在页面上 点击图片就可以将图片移动到任意位置

ElasticSearch7.10-分词器

文章目录 分词器1.字符过滤器1.介绍2.过滤html标签3.mappings过滤规则&#xff08;屏蔽非文明用语&#xff09;4.正则替换 2.自定义分词器1.代码2.查询 3.中文分词器1.下载ik分词器7.10.0版本&#xff08;跟es对应&#xff09;2.应用ik分词器1.进入插件目录下创建一个ik目录2.将…

python利用selenium实现大麦网抢票

大麦网&#xff08;damai.cn&#xff09;是中国领先的现场娱乐票务平台&#xff0c;涵盖演唱会、音乐会、话剧、歌剧、体育赛事等多种门票销售。由于其平台上经常会有热门演出&#xff0c;抢票成为许多用户关注的焦点。然而&#xff0c;由于票务资源的有限性&#xff0c;以及大…

Linux 笔记 SELinux 常见操作与介绍

SELinux&#xff08;Security-Enhanced Linux&#xff09;是 Linux 操作系统中的一种安全模块&#xff0c;旨在提供更细粒度的访问控制。它最初由美国国家安全局&#xff08;NSA&#xff09;开发&#xff0c;目的是增强 Linux 系统的安全性。SELinux 通过强制访问控制&#xff…