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

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

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,一经查实,立即删除!

相关文章

初学STM32 --- 外部SRAM

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

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/) 等待…

#端云一体化开发# #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;数据和索引保存在磁盘上…

C++【内存管理】

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

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

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

【开源免费】基于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;并且只有经过授权的应用程序才…

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

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

应急指挥系统总体架构方案

引言 应急指挥系统总体架构方案旨在构建一个高效、智能的应急管理体系&#xff0c;以应对自然灾害、事故灾难等突发事件&#xff0c;保障人民生命财产安全。 背景与挑战 近年来&#xff0c;安全生产形势严峻&#xff0c;自然灾害事故频发&#xff0c;对应急指挥系统的要求越…

如何用CSS3创建圆角矩形并居中显示?

在网页设计中&#xff0c;圆角矩形因其美观和现代感而被广泛使用&#xff0c;居中显示元素也是一个常见的需求。今天&#xff0c;我们将学习如何使用CSS3的border-radius属性来创建圆角矩形&#xff0c;并将其居中显示在页面上。 如果你正在学习CSS&#xff0c;那么这个实例将非…

UE5通过蓝图节点控制材质参数

通过蓝图节点控制材质的参数 蓝图节点 在材质上设置标量值 和 在材质上设置向量参数值 Set Scalar Parameter Value on Materials Set Vector Parameter Value on Materials 这两个蓝图节点都可以在蓝图中&#xff0c;控制材质的参数值和向量值

canvas+fabric实现时间刻度尺(二)

前言 我们前面实现了时间刻度尺&#xff0c;鼠标移动显示时间&#xff0c;接下来我们实现鼠标点击某个时间进行弹框。 效果 实现 1.监听鼠标按下事件 2.编写弹框页面 3.时间转换 <template><div><canvas id"rulerCanvas" width"1200"…

手机实时提取SIM卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电

手机实时提取SIM卡打电话的信令声音 --双卡手机来电如何获取哪一个卡的来电 一、前言 前面的篇章《手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案》中&#xff0c;我们论述了局域网SIP坐席通过手机外呼出去时&#xff0c;手机中主副卡的呼叫调度策略。 但…

离线语音识别+青云客语音机器人(幼儿园级别教程)

1、使用步骤 确保已安装以下库&#xff1a; pip install vosk sounddevice requests pyttsx3 2、下载 Vosk 模型&#xff1a; 下载适合的中文模型&#xff0c;如 vosk-model-small-cn-0.22。 下载地址&#xff1a; https://alphacephei.com/vosk/models 将模型解压后放置在…

Streaming Dense Video Captioning

原文出处 CVPR 原文链接 [2404.01297] Streaming Dense Video Captioninghttps://arxiv.org/abs/2404.01297 原文笔记 What 1、提出了一种基于聚类传入token的新记忆模块&#xff0c;该模块可以处理任意长的视频&#xff0c;并且可以在不访问视频所有帧的情况下处理视频(…

TCP 连接:三次握手与四次挥手

TCP 协议&#xff0c;全称为“传输控制协议”。 1. TCP 协议段格式 给出几个定义 &#xff1a; 16位源端口号 &#xff1a;用于标识发送端的应用程序。 16位目的端口号 &#xff1a;用于标识接收端的目标应用程序。 32位序号 &#xff1a;用于标识发送的每一个字节流中的第一…