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

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

1. 什么是网络模型?

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

基本组成部分

  1. 输入层:接收原始数据
  2. 隐藏层:进行数据处理转换
  3. 输出层:产生最终结果
import numpy as npclass 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_biasreturn 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_shapeself.num_classes = num_classesdef 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 * xdef 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_ratedef update(self, parameter, gradient):return parameter - self.lr * gradientclass Momentum:def __init__(self, learning_rate=0.01, momentum=0.9):self.lr = learning_rateself.momentum = momentumself.velocity = 0def update(self, parameter, gradient):self.velocity = self.momentum * self.velocity - self.lr * gradientreturn parameter + self.velocity

6. 什么是收敛?

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

  • 模型的表现趋于稳定
  • 损失不再明显下降
  • 预测结果基本符合预期
def check_convergence(loss_history, tolerance=1e-5):"""检查是否收敛"""if len(loss_history) < 2:return Falserecent_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} 轮收敛")breakdef 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

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

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

相关文章

级联配准learning

1.定义 级联配准&#xff08;Cascade Registration&#xff09;是一种在图像处理、计算机视觉等领域广泛应用的技术。它主要用于将不同视角、不同模态或者不同时间获取的图像进行精确的对齐&#xff0c;并且是通过多个阶段&#xff08;级联&#xff09;的处理来逐步优化配准的精…

初学STM32 --- 外部SRAM

SRAM简介 静态随机存取存储器&#xff08;Static Random-Access Memory&#xff0c;SRAM&#xff09; 1M字节容量的SRAM芯片XM8A51216为例介绍。 SRAM特性: 高速&#xff1a;具有最高访问速度15ns 低功耗&#xff1a;80MHz时55mA&#xff0c;待机电流 20mA TTL电平兼容 …

leetcode hot 100 前k个高平元素

347. 前 K 个高频元素 已解答 中等 相关标签 相关企业 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 class Solution(object):def topKFrequent(self, nums, k):""":type nums: Lis…

Zabbix:自动发现功能讲解,包括网络发现、自动注册、低级别自动发现以及案例分享。

ZBX&#xff1a;自动发现功能讲解 视频讲解&#xff1a;Zabbix 自动发现网络发现概述操作方法 自动注册概述操作方法 低级别自动发现概述工作原理及工作流程案例1&#xff0c;base进程监控要求&#xff1a;步骤&#xff1a; 案例2&#xff0c;磁盘IO监控要求&#xff1a;步骤&a…

Windows上安装Go并配置环境变量(图文步骤)

前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量&#xff1b; Go语言版本&#xff1a;1.23.2 Windows版本&#xff1a;win11&#xff08;win10通用&#xff09; 下载Go环境 下载go环境&#xff1a;Go下载官网链接(https://golang.google.cn/dl/) 等待…

python3.x支持,但python2.7不支持的语法

python3.x支持,但python2.7不支持的语法 1.属性访问的问题&#xff1a; 你可能是在 params 中直接使用了某个对象的属性&#xff0c;而不是该属性的值。在你提供的信息中&#xff0c;<slot wrapper next of instance objects> 指的是一个对象的槽位&#xff08;slot wra…

开源GTKSystem.Windows.Forms框架:C# Winform跨平台运行深度解析

开源GTKSystem.Windows.Forms框架&#xff1a;C# Winform跨平台运行深度解析 一、跨平台框架的崛起 1.1 跨平台技术的现状与需求 在当今快速发展的科技时代&#xff0c;软件开发的需求日益多样化。随着移动设备和操作系统的不断涌现&#xff0c;开发者面临着前所未有的挑战&…

#端云一体化开发# #HarmonyOS Next#《说书人》鸿蒙原生基于角色的对话式文本编辑开发方案

1、写在前面 过去的一百年里&#xff0c;在“编程”的这个行业诞生之初&#xff0c;人们采用面向过程的方式进行开发&#xff0c;但是&#xff0c;伴随着程序规模的日益增大&#xff0c;程序的复杂度也随之增加&#xff0c;使用结构化编程方法来管理复杂的程序逻辑变得越来越困…

xadmin后台首页增加一个导入数据按钮

xadmin后台首页增加一个导入数据按钮 效果 流程 1、在添加小组件中添加一个html页面 2、写入html代码 3、在urls.py添加导入数据路由 4、在views.py中添加响应函数html代码 <!DOCTYPE html> <html lang

【AimRT】现代机器人通信中间件 AimRT

目录 一、什么是AimRT二、AimRT与ROS22.1 定位与设计2.2 组成与通信方式对比 三、AimRT基本概念3.1 Node、Pkg 和 Module3.2 Protocol、Channel、Rpc 和 Filter3.3 App模式 和 Pkg模式3.4 Executor3.5 Plugin 一、什么是AimRT AimRT 是智元机器人公司自主研发的一款机器人通信…

mysql系列7—Innodb的redolog

背景 本文涉及的内容较为底层&#xff0c;做了解即可&#xff0c;是以前学习《高性能Mysql》和《mysql是怎样运行的》的笔记整理所得。 redolog(后续使用redo日志表示)的核心作用是保证数据库的持久性。 在mysql系列5—Innodb的缓存中介绍过&#xff1a;数据和索引保存在磁盘上…

Swift Combine 学习(二):发布者 Publisher

Swift Combine 学习&#xff08;一&#xff09;&#xff1a;Combine 初印象Swift Combine 学习&#xff08;二&#xff09;&#xff1a;发布者 PublisherSwift Combine 学习&#xff08;三&#xff09;&#xff1a;Subscription和 SubscriberSwift Combine 学习&#xff08;四&…

Win11清除安全中心保护历史记录全攻略

Win11清除安全中心保护历史记录全攻略 在Windows 11操作系统中,安全中心作为守护系统安全的重要防线,扮演着举足轻重的角色。它不仅实时监控系统的安全状态,还详细记录各类安全事件,为用户提供全面的安全保障。然而,随着系统的长期使用,这些安全记录可能会逐渐累积,占用…

C++【内存管理】

C/C中程序的内存划分&#xff1a; 栈&#xff1a;又称堆栈&#xff0c;存放非静态的局部变量、函数参数、返回值等等&#xff0c;栈是向下增长的。内存映射段&#xff1a;是高效的&#xff29;&#xff0f;&#xff2f;映射方式&#xff0c;用于装载一个共享的动态内存库。用户…

手机租赁平台开发助力智能设备租赁新模式

内容概要 手机租赁平台开发&#xff0c;简单说就是让你用得起高大上的智能设备&#xff0c;不管是最新款的手机、平板&#xff0c;还是那些炫酷的智能耳机&#xff0c;这个平台应有尽有。想要体验但又不希望花大钱&#xff1f;那你就找对地方了&#xff01;通过灵活的租赁方案…

Spring Boot 3 文件上传、多文件上传、大文件分片上传、文件流处理以及批量操作

在 Spring Boot 3 中&#xff0c;可以通过内置的文件处理机制结合 Java 的 IO 流与多线程技术&#xff0c;实现文件上传、多文件上传、大文件分片上传、文件流处理以及批量操作的需求。以下是详细实现步骤&#xff1a; 1. 单文件上传 控制器代码 import org.springframework…

【开源免费】基于SpringBoot+Vue.JS校园社团信息管理系统(JAVA毕业设计)

本文项目编号 T 107 &#xff0c;文末自助获取源码 \color{red}{T107&#xff0c;文末自助获取源码} T107&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

【鸿蒙NEXT】鸿蒙里面类似iOS的Keychain——关键资产(@ohos.security.asset)实现设备唯一标识

前言 在iOS开发中Keychain 是一个非常安全的存储系统&#xff0c;用于保存敏感信息&#xff0c;如密码、证书、密钥等。与 NSUserDefaults 或文件系统不同&#xff0c;Keychain 提供了更高的安全性&#xff0c;因为它对数据进行了加密&#xff0c;并且只有经过授权的应用程序才…

Vite:新时代前端构建工具的最佳选择

Vite&#xff1a;新时代前端构建工具的最佳选择 随着前端技术的快速发展&#xff0c;传统的构建工具&#xff08;如 Webpack&#xff09;因其较慢的构建速度和复杂的配置逐渐暴露出局限性。Vite 作为一款基于现代浏览器的快速构建工具&#xff0c;以其极快的启动速度和简单的配…

使用npm包的工程如何引入mapboxgl-enhance/maplibre-gl-enhance扩展包

作者&#xff1a;刘大 前言 在使用iClient for MapboxGL/MapLibreGL项目开发中&#xff0c;往往会对接非EPSG:3857坐标系的地图&#xff0c;由于默认不支持&#xff0c;因此需引入mapboxgl-enhance/maplibre-gl-enhance扩展包。 在使用Vue等其他框架&#xff0c;通过npm包下载…