AI 大模型与智能应用
实践与技术

专注分享 AI 大模型、Agent 开发、深度学习等技术实战与架构设计;兼具 C#/.NET 后端开发经验

113
技术文章
8
文章分类
512
技术标签
29029
累计字数
一文读懂 RNN:循环神经网络原理与结构解析
人工智能
2024-04-04 0k

一文读懂 RNN:循环神经网络原理与结构解析

大家好!今天我们来聊聊深度学习中一个非常有趣且重要的概念——循环神经网络(Recurrent Neural Network,简称RNN)。 如果你之前了解过普通的神经网络(比如用来识别图片的CNN),你可能会发现它们有一个共同的弱点:记性不好。它们处理每一张图片时都是独立的,不会记得上一张图片是什么。但是,在处理语言、语音或者股票走势这种有前后顺序的数据时,“记忆”就变得至关重要了。 这就轮到RNN登场了!让我们结合这张结构图,用最通俗的语言来拆解它。 1. RNN的核心思想:时间就是生命 请看图片左侧那个绿色的方块链条。这就是RNN最直观的形态。 普通神经网络:像是一个个独立的工人,每个人只负责处理手头的任务,做完就忘,不跟下一个人交流。 RNN:像是一条流水线上的工人团队。第二个工人不仅拿到了新的原料(输入数据),还收到了第一个工人传过来的“半成品”或“笔记”(隐藏状态)。 在图中,我们可以看到三个绿色的大方块,分别标记为: 第一个时间步 第二个时间步 第三个时间步 这代表了时间的流逝。RNN不仅仅是在处理空间上的数据,它还在处理时间序列。每一个绿色方块其实代表的是同一个神经网络层(Neural Network Layer) 在不同时间点的状态。这就是为什么叫“循环”神经网络——它在时间轴上自我循环。 2. 深入内部:到底发生了什么? 让我们把目光聚焦在中间那个最详细的绿色方块(第二个时间步)上。这里展示了RNN工作的核心秘密。 两个输入,一个输出 在这个时间步里,神经网络层 A 接收了两股信息流: 本次输入数据 ($X_t$):这是当前时刻的新信息。比如在翻译句子时,这就是当前读到的那个单词。 **上次时间步的隐藏状态 ($h_{t-1}$)**:这是从上一个绿色方块传过来的箭头。这代表了“过去的记忆”。 记忆的传递 注意看那个向上的箭头,指向紫色的圆圈 $h_t$。 $h_{t-1}$ 是**过去**的记忆。 $X_t$ 是现在的信息。 经过神经网络层 A 的处理(通常包含一个激活函数,如图中黄色的 tanh),生成了 $h_t$。 $h_t$ 既包含了现在的信息,也融合了过去的记忆。然后,它会作为“这次时间步的隐藏状态”,传递给下一个时间步(右边的绿色方块),同时也可能输出给外界(比如预测下一个词是什么)。 简单总结:RNN通过把上一步的计算结果传给下一步,从而实现了对历史信息的“记忆”。 3. 数学公式大揭秘(别怕,很简单!) 图片右上角给出了RNN核心的数学公式: $$h_t = \tanh(W_t[X_t, h_{t-1}] + b_t)$$ 看着复杂,其实拆开看就像做一道菜: $X_t$ (本次输入数据):这是主料。 **$h_{t-1}$ (上次时间步的隐藏状态)**:这是上一顿剩下的老汤,用来提味(提供上下文)。 **$[X_t, h_{t-1}]$ (Concatenate)**:图中的红色箭头汇聚在一起,表示把主料和老汤**拼接**在一起。 $W_t$ (权重矩阵):这是厨师的调味手法,决定了我们多重视新输入,多重视旧记忆。 $b_t$ (偏置矩阵):这是一个基础底味调整。 $\tanh$ (激活函数):这是最后的烹饪工序(比如烘烤),把数据压缩到 -1 到 1 之间,防止数值爆炸,并引入非线性特征。 $h_t$ (本次时间步的隐藏状态):出锅的美味佳肴,既可以直接吃(输出结果),也可以留一部分做下一顿的老汤(传给下一步)。 4.

RNN 循环神经网络 深度学习
阅读更多
从JSONP到CORS:跨域解决方案的技术演进与架构思考
前端开发
2024-02-12 0k

从JSONP到CORS:跨域解决方案的技术演进与架构思考

在Web开发领域,CORS(跨源资源共享)是每个前端开发者都会遇到的关键概念。但为什么我们如今使用CORS,而曾经流行的JSONP却逐渐退出历史舞台?本文将带您深入理解跨域解决方案从JSONP到CORS的技术演进历程。 第一部分:理解CORS - 跨域资源共享 什么是CORS? CORS(Cross-Origin Resource Sharing,跨源资源共享)是浏览器强制执行的一种安全机制,用于解决"同源策略"带来的限制。 同源策略要求协议、域名、端口完全相同的请求才被允许。例如: https://www.example.com → https://api.example.com ❌ 跨域 http://localhost:3000 → http://localhost:8080 ❌ 跨域 CORS的工作原理 当浏览器检测到跨域请求时,会执行以下流程: 发送预检请求:对于非简单请求,浏览器先发送OPTIONS请求 服务器响应:后端返回包含CORS头部的响应 浏览器验证:浏览器检查头部,决定是否放行 实际请求:验证通过后发送真正的请求 # 预检请求 OPTIONS /api/data HTTP/1.1 Origin: https://www.example.com Access-Control-Request-Method: POST # 服务器响应 HTTP/1.1 200 OK Access-Control-Allow-Origin: https://www.example.com Access-Control-Allow-Methods: GET, POST, PUT Access-Control-Allow-Headers: Content-Type 为什么配置服务端CORS就能解决问题? 关键在于:CORS的决定权在服务器,浏览器只是执行者。 当您在.NET服务端配置CORS时,有多种方式: ASP.NET Core 全局配置: // Program.cs var builder = WebApplication.CreateBuilder(args); builder.Services.AddCors(options => { options.AddPolicy("AllowSpecificOrigin", policy => { policy.

CORS JSONP 跨域
阅读更多
PyTorch GPU 配置指南:CUDA 安装与环境验证
人工智能
2024-02-09 0k

PyTorch GPU 配置指南:CUDA 安装与环境验证

PyTorch 作为主流的深度学习框架,在安装时严格区分了 CPU 版本与 GPU 版本。这两个版本对应不同的底层二进制分发包,并非仅通过代码参数进行区分。在实际开发与部署中,准确判断当前环境并进行相应的版本切换是保障模型训练与推理效率的基础。 一、 验证当前 PyTorch 版本类型 确认已安装版本的最直接方式是通过 Python 代码进行检测。通过导入 torch 库并调用相关函数,可以获取当前的版本信息及硬件加速状态: import torch print("PyTorch版本:", torch.__version__) print("CUDA是否可用:", torch.cuda.is_available()) print("CUDA版本:", torch.version.cuda) 在输出结果中,若 torch.cuda.is_available() 返回 True,且版本号包含 +cuXXX 后缀(如 2.1.0+cu118),则表明当前为 GPU 版本;若返回 False,或版本号包含 +cpu 后缀,则表明当前为纯 CPU 版本。此外,也可在终端使用 pip show torch 命令,通过查看包版本号的后缀来快速判断。 二、 从 CPU 版本切换至 GPU 版本 若检测到当前为 CPU 版本且需要启用硬件加速,需执行卸载与重装操作。首先,通过 pip uninstall torch torchvision torchaudio -y 命令彻底卸载现有的 CPU 版本。 随后,需确认系统显卡驱动所支持的最高 CUDA 版本(可通过终端执行 nvidia-smi 命令查看)。根据查到的 CUDA 版本,从 PyTorch 官方源拉取对应的 GPU 版本进行安装。例如,对于支持 CUDA 12.

PyTorch CUDA GPU加速
阅读更多
DDD领域驱动设计全面解析:.NET核心概念与落地实践指南
架构与设计
2024-01-24 0k

DDD领域驱动设计全面解析:.NET核心概念与落地实践指南

DDD领域驱动设计全面解析:.NET核心概念与落地实践指南 领域驱动设计(Domain-Driven Design,简称 DDD)是一种以业务领域为核心的现代化软件架构设计方法论,专注于解决复杂企业级业务系统的设计与开发难题。在当今微服务架构和分布式系统盛行的环境下,DDD已成为构建高内聚、低耦合系统的最佳实践。本文将深入剖析DDD核心概念,结合.NET技术栈全面讲解DDD落地实践,帮助开发者掌握企业级应用架构设计精髓。 .NET 作为成熟稳定的企业级开发平台,天然支持 DDD 领域驱动设计的核心诉求 —— 无论是分层架构、面向对象设计,还是依赖注入、领域模型映射等,都能通过 ASP.NET Core、EF Core、MediatR 等 .NET 生态工具无缝落地。本文将从 DDD 领域驱动设计的核心思想出发,结合 .NET 实战场景,系统讲解 DDD 关键概念、架构分层及落地技巧,提供完整的企业应用架构解决方案。 一、DDD领域驱动设计核心思想:业务驱动的架构哲学 DDD领域驱动设计的本质是业务驱动而非技术驱动,所有设计决策都围绕业务需求展开,在 .NET 企业应用开发中,核心遵循三大原则: 领域优先:业务逻辑(领域模型)是系统的核心资产,技术细节(数据库、API、缓存等)仅作为辅助实现; 边界清晰:通过「限界上下文」划分业务边界,解决复杂系统中的 “知识混乱”,避免不同业务模块的概念冲突; 迭代演进:通过「领域语言(Ubiquitous Language)」统一团队(开发、产品、测试)认知,领域模型随业务迭代持续优化。 二、DDD核心概念详解与.NET落地实践 DDD 的概念体系可分为「领域层核心概念」「架构分层」「辅助概念」三类,以下结合 .NET 代码示例和生态工具逐一说明。 (一)领域层核心概念:DDD业务逻辑的核心载体 领域层是 DDD 的 “心脏”,包含业务模型、规则和行为,不依赖任何外部技术框架,纯业务逻辑封装。 1. 领域模型(Domain Model)- DDD核心设计元素 领域模型是业务概念的代码映射,分为两种设计风格: 贫血模型:仅包含属性和 getter/setter,无业务逻辑(传统 MVC 常用,非 DDD 推荐); 充血模型:包含属性 + 业务逻辑方法(DDD 核心),模型自身封装业务规则,确保数据一致性。 .

DDD 领域驱动设计 dotnet
阅读更多
天气查询API实现 | 后端开发最佳实践
后端开发
2023-12-25 0k

天气查询API实现 | 后端开发最佳实践

1. 天气查询功能介绍 天气查询API在现代Web和移动应用中扮演着重要角色,它可以为用户提供实时天气数据、未来天气预报以及生活指数等关键信息。本文将详细介绍如何实现一个高效、稳定的天气查询服务,涵盖从API选择、异步编程实现到缓存优化的完整开发流程。 2. 天气API服务选择指南 在开发天气查询应用时,选择合适的API服务提供商至关重要。以下是几个主流的天气API服务对比: 和风天气API:国内数据覆盖全面,API文档完善,适合后端开发使用 OpenWeatherMap:全球天气数据服务,国际化支持好 高德地图天气API:国内覆盖较全面,适合本地化应用 百度地图天气API:与百度地图集成良好,适合地图应用场景 本文以和风天气API为例,详细讲解调用天气API的完整实现方案,包括API密钥获取、请求构建、响应解析和错误处理等关键环节。 3. 天气查询API代码实现 3.1 获取和风天气API密钥 在开始天气查询开发前,首先需要在和风天气开发者平台注册账号并获取API密钥。注册流程简单,完成后即可获得免费额度的API访问权限。 3.2 天气查询类实现 using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using Newtonsoft.Json; public class WeatherAPI { private readonly string _apiKey; private readonly string _baseUrl; private readonly HttpClient _httpClient; public WeatherAPI(string apiKey) { _apiKey = apiKey; _baseUrl = "https://devapi.qweather.com/v7"; _httpClient = new HttpClient(); _httpClient.Timeout = TimeSpan.FromSeconds(10); } /// <summary> /// 实现获取指定位置的实时天气数据 /// 支持城市ID或经纬度查询 /// </summary> public async Task<Dictionary<string, object>> GetCurrentWeatherAsync(string location) { string url = $"{_baseUrl}/weather/now"; var parameters = new Dictionary<string, string> { { "key", _apiKey }, { "location", location } // 可以是城市ID或经纬度 }; try { using (var response = await _httpClient.

C#天气查询 ASP.NET Core开发 和风天气API调用
阅读更多
结合代码,看懂PyTorch的自动微分(Autograd)
人工智能
2023-12-16 0k

结合代码,看懂PyTorch的自动微分(Autograd)

在深度学习中,PyTorch 的自动微分(Autograd)机制极大地简化了模型训练过程。在实际的训练代码中,自动微分并不是一个孤立的函数,而是通过一套标准的训练闭环来体现的。结合一段典型的 PyTorch 模型训练代码,自动微分主要体现在以下三个核心步骤: 有的说法是叫“自动梯度”更合理 1. 开启梯度追踪(构建计算图) pred_y = model(x) loss_value = loss(pred_y, y) 在 PyTorch 中,模型的参数(如权重 w 和偏置 b)在初始化时默认带有 requires_grad=True 属性。当代码执行前向传播 model(x) 以及计算损失 loss(pred_y, y) 时,PyTorch 的 Autograd 引擎会在后台默默记录所有的运算过程,并动态构建出一张“计算图”。 2. 触发反向传播(自动计算梯度) loss_value.sum().backward() 这是自动微分最直接的体现。调用 .backward() 后,Autograd 引擎会从损失值(标量)出发,沿着之前构建的计算图逆向遍历,利用链式法则自动计算出每一个参与运算的参数的梯度。开发者完全不需要手动编写任何求导公式。 3. 梯度清零(防止梯度累加) optimzer.zero_grad() PyTorch 的自动微分机制默认会累加梯度,而不是覆盖梯度。如果不手动清零,之前批次计算出的梯度会一直叠加,导致模型参数更新混乱。因此,在每次反向传播之前,必须通过优化器将之前自动计算并累积的梯度清空。 总结 这段训练代码完美遵循了 PyTorch 自动微分的标准范式:前向传播记录计算图 -> 梯度清零 -> 反向传播自动求导 -> 优化器更新参数。理解这一过程,是掌握 PyTorch 模型训练的核心。

PyTorch 自动微分 Autograd
阅读更多
四维张量计算原理
人工智能
2023-10-22 0k

四维张量计算原理

四维张量 sum(dim) 计算原理 示例张量 t4,shape = (2, 2, 2, 3) → 2个组 × 2个块 × 2行 × 3列 📦 原始张量结构 第 0 组 (dim=0 索引0) 第 0 块 (dim=1 索引0) 123 412 第 1 块 (dim=1 索引1) 210 132 第 1 组 (dim=0 索引1) 第 0 块 (dim=1 索引0) 321 024 第 1 块 (dim=1 索引1) 142 213 dim=0:组维度  |  dim=1:块维度  |  dim=2:行维度  |  dim=3:列维度 1.

张量 PyTorch 深度学习
阅读更多
一文讲透激活函数:为什么它能搞定非线性问题?
人工智能
2023-08-28 0k

一文讲透激活函数:为什么它能搞定非线性问题?

很多人入门神经网络,都会卡在“激活函数”这一步。 你可能听过无数遍这句话:加入激活函数,神经网络就能处理非线性问题。但心里大概率藏着一堆问号: 什么是线性?什么是非线性?为什么一条直线就能表示线性问题? 激活函数到底做了什么,凭什么它就能处理非线性? ReLU把负数都归零了,数据不会失真吗?信息不会丢吗? 识别图片这么复杂的事,和“曲线”到底有什么关系? 这篇文章我们完全抛开公式,用生活里的例子,把这些问题一次性讲透,数学小白、计算机小白也能看懂。 一、先搞懂基础:什么是线性?什么是非线性? 先别急着看神经网络,我们从最日常的事说起。 1. 线性问题:“成正比”的简单关系 想象你去买苹果,一斤5块钱。 买1斤,花5元 买2斤,花10元 买10斤,花50元 买的重量翻倍,花的钱也跟着翻倍。这种输入变多少,输出就按固定比例跟着变的关系,就叫线性关系。 把它画在坐标图上,就是一条直直的线,“线性”这个名字就是这么来的。 生活里纯线性的事还有很多:按小时算的时薪、匀速行驶的路程和时间……它们的规律都很简单:没有拐弯、没有阈值,永远按固定比例走。 2. 非线性问题:真实世界的本来面貌 但真实世界里,绝大多数事情都不是“成正比”这么简单。 举几个最常见的例子: 体温与健康:37度是正常,38度算发烧,42度就会有生命危险。不是温度越高“病得越重”,到了某个临界点,性质就完全变了。 按开关开灯:按到一半灯还是灭的,一旦过了某个临界点,灯突然全亮。中间有一个明确的“阈值”。 房价与面积:不是面积大一倍价格就大一倍,地段、学区、楼层、装修都会影响价格,各种因素交织,关系弯弯曲曲。 识别一张猫的照片:像素亮度变一点点,它还是猫;但变多了可能就变成狗了,绝不是简单的比例关系。 这些不成正比、有拐弯、有阈值、关系复杂的问题,就叫非线性问题。画在图上,它们是曲线、折线、奇形怪状的面,一条直线根本描述不了。 二、没有激活函数的神经网络:永远只会画直线 搞懂了线性和非线性,我们再来看神经网络本身。 神经网络最基本的单元叫“神经元”,它做的事特别简单:接收一堆输入,给每个输入分配一个“重要程度”(权重),全部加起来,再加上一个偏移量,然后输出结果。 说白了就是:把各个数按比例加起来。 比如判断一个水果是不是苹果,神经元可能会算: 颜色红不红 × 0.6 + 圆不圆 × 0.3 + 大小 × 0.1 = 总分 这本质上还是一个线性计算——输入怎么变,输出都按固定比例跟着变。 叠很多层,总该变复杂了吧? 有人会说:一层是直线,我叠一百层、一千层,总该能处理复杂问题了吧? 很遗憾,不行。 你可以这么理解:第一层把输入“按比例加一遍”得到结果,第二层再把这个结果“按比例加一遍”……不管你加多少层,本质上都是“按比例加来加去”,最后数学上化简一下,仍然等价于一层线性计算。 举个最简单的例子: 第一层:y = 2x + 1 第二层:z = 3y + 2 合起来化简:z = 3(2x+1) + 2 = 6x + 5 最后还是一条直线。

激活函数 神经网络 ReLU
阅读更多
Windows 11 隐藏技巧清单:这些神级设置,让你的电脑好用到飞起
工具与效率
2023-08-21 0k

Windows 11 隐藏技巧清单:这些神级设置,让你的电脑好用到飞起

除了之前提到的经典技巧,Windows 11还有很多类似这样好用的“隐藏彩蛋”。我把它们整理成了一份清单,希望能帮你解决问题: 🚀 效率小细节 告别繁琐批处理:一键批量重命名:在文件资源管理器里,一次性选中所有需要改名的文件,然后右键并选择“重命名”,输入一个统一的名称并按回车。比如输入“项目报告”,它们就会被自动命名为“项目报告 (1)”、“项目报告 (2)”……从此告别一个个手动修改。 秒回桌面,优雅摸鱼:Win + D 是个好用的快捷键,按一次瞬间显示桌面,再按一次就能恢复之前的所有窗口。比一个个点“最小化”或者鼠标狂甩到“显示桌面”按钮快多了,非常适合在老板突然经过时“一秒切回桌面”。 Ctrl键找鼠标:在“设置” → “蓝牙和其他设备” → “鼠标” → “其他鼠标设置” → “指针选项”里,勾选“当按 CTRL 键时显示指针的位置”。之后找不到鼠标指针时,按一下Ctrl键,一个会动的圆形光圈就会立刻指示出它的位置,对高分辨率屏幕或者眼神不太好的用户非常友好。 Ctrl键找鼠标:高分辨率屏幕或密集代码中经常找不到鼠标?在“设置” > “蓝牙和其他设备” > “鼠标” > “其他鼠标设置” > “指针选项”中,勾选“当按 CTRL 键时显示指针的位置”。找不到它时按一下Ctrl键,一个动画光圈会立刻为它定位。 锁屏忘了?手机帮你记:通过“设置” → “蓝牙和其他设备” → “添加蓝牙设备”将手机与电脑配对,然后在“账户” → “登录选项”中,找到“动态锁”,勾选“允许 Windows 在你离开时自动锁定设备”。当你带着手机离开,系统检测不到配对设备的蓝牙信号就会自动锁定电脑,安全又便利。 👓 不再迷路的鼠标指针 Ctrl键找鼠标:高分辨率屏幕或密集代码中经常找不到鼠标?在“设置” > “蓝牙和其他设备” > “鼠标” > “其他鼠标设置” > “指针选项”中,勾选“当按 CTRL 键时显示指针的位置”。找不到它时按一下Ctrl键,一个动画光圈会立刻为它定位。 ⚙️ 系统加速隐藏开关 让搜索“飞”起来:关闭Bing网络搜索:在注册表路径 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search 下,找到或新建一个名为 BingSearchEnabled 的 DWORD (32 位)值,将其数值数据设置为 0。这会让系统只搜索本地内容,避开网络延迟,搜索响应速度能快上不少。 告别“又卡又闪”的资源管理器:通过第三方免费工具 ExplorerPatcher,在其属性设置中,找到“文件资源管理器(File Explorer)”菜单,取消勾选“Windows 11 命令栏(Command Bar)”,并选择使用“Windows 10 Ribbon 菜单”或“Windows 7 命令栏”。这样可以大幅提升文件资源管理器的稳定性和响应速度。 禁用“自动发现”提速文件夹:在注册表路径 HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell 下,新建一个名为 FolderType 的字符串值,并将其数值数据设置为 NotSpecified。这可以防止系统反复扫描文件夹内容以“自动优化”视图,打开文件较多的文件夹时会流畅很多。 ✨ 解放双手的智能功能 不想打字?直接说吧!:在任何可以输入文字的地方,按下 Win + H 快捷键,就能直接唤醒 Windows 的语音录入功能。对着麦克风说话,系统会自动识别并转换成文字,还支持基础的标点符号识别,非常适合懒得打字或者需要快速记录的场景。 续上你的工作:重启自动恢复应用:在“设置” → “账户” → “登录选项”中,开启“自动保存我的可重启应用,并在我重新登录时将它们重启”。下次电脑重启或更新后,那些未关闭的文件夹和应用会像什么都没发生过一样,自动重新打开,让你的工作无缝衔接。 一次性拥有所有设置:上帝模式:在桌面上新建一个文件夹,然后将文件夹重命名为:上帝模式.

Windows Windows 11 技巧
阅读更多
AI真的懂你的话吗?一文看透大模型的“概率魔法”与“维度陷阱”
人工智能
2023-07-03 0k

AI真的懂你的话吗?一文看透大模型的“概率魔法”与“维度陷阱”

今天,我们就来扒一扒人工智能与人类认知的底层逻辑,揭开 AI 运转的四大核心真相。 一、 机器学习的本质:真的只是“算概率”吗? 很多人认为“机器学习 = 概率推测”。这个说法抓住了主流,但不够全面。 “概率推测”确实是最核心的思维方式。 比如判断一封邮件是不是垃圾邮件(分类),或者大模型预测下一个词是什么(生成),本质上都在计算概率。从统计学派的角度看,很多机器学习问题就是概率推断。 但是,机器学习的武器库远不止概率,它还包括其他核心机制: 算具体数值(回归):预测明天气温25度、房价300万。模型直接输出确定的连续数值,而不是推测概率。 算距离与几何(聚类、SVM):把相似的用户分群(K-Means),核心是计算数据点之间的“空间距离”;支持向量机(SVM)是寻找“最宽的几何间隔”来切分数据。这依赖的是几何和线性代数。 算奖励与试错(强化学习):AI 下围棋、机器人学走路,核心是通过不断“试错”来最大化累积奖励,学习的是行动策略。 小结:机器学习的核心是 “从数据中学习规律,从而对未知事物进行预测或决策”。“概率”只是它最常用的一种数学工具,而非全部。 二、 人脑 vs AI:我们的大脑也是一台“概率推测机”吗? 既然 AI 在算概率,那人类呢?现代认知科学和神经科学的主流观点给出了肯定的答案:人的大脑本质上就是一台“概率推测机”。 大脑是如何做概率推测的? 贝叶斯大脑假说:大脑时刻在做贝叶斯推断。它结合“先验概率”(过去的经验)和“当前证据”(感官输入),推测出最可能的结果。大脑不是被动接收信息,而是主动预测世界。 预测编码(自由能原理):神经科学家 Karl Friston 认为,大脑的核心任务是最小化“意外”。大脑时刻生成预测,如果现实和预测不符(比如你以为台阶还有一级,结果踩空了),大脑就会产生“预测误差”,并立刻更新概率模型。 神经层面的“概率投票”:单个神经元的放电充满随机性。大脑做决定时,是成千上万个神经元在“投票”,当支持某个决定的概率累积超过阈值时,大脑才会做出行动。 但是,人脑和 AI 有本质区别 虽然都是概率推测,但两者的表现截然不同: 计算精度:AI 是精确计算(算出下一个词是“苹果”的概率为 87.3%);人脑是模糊估算(靠“直觉”,容易产生认知偏差)。 数据需求:AI 需要海量数据(看几百亿个词);人脑擅长小样本学习(小孩看一次狗,就能认出所有的狗)。 核心目标:AI 为了优化目标函数(降低误差);人脑为了生存与繁衍(草丛里有动静,宁可错认为老虎,也不能漏判)。 三、 机器的“语义魔法”:它怎么懂文字的意思? 很多人以为,机器把文字转成向量,就像是给字典里的字编号(比如“苹果”是1024号,“梨”是1025号)。如果真是这样,机器确实不懂语义,因为编号之间没有数学关系。 真相是:现代 AI 用的向量不是“编号”,而是“多维空间里的坐标”。 1. 机器怎么“知道”语义?(靠统计学的“物以类聚”) 语言学有个核心假设:“一个词的含义,由它周围的词决定。” 机器在阅读了千亿篇文章后发现:“吃 ” 后面常接“苹果”、“香蕉”;“ 手机” 前面常接“苹果”、“华为”。 机器通过神经网络,把这种 “共同出现的概率” 变成了 “空间里的距离”。在机器的多维空间里,“国王”减去“男人”加上“女人”的坐标,刚好等于“女王”!机器不懂什么是国王,但它用几何距离完美表达了人类的语义关系。 2. 机器怎么“压缩”语义?(靠注意力机制“互相染色”) 当你输入“我想吃苹果”时,编码器(Encoder)通过注意力机制(Attention) 让这5个词互相“交流”:

机器学习 概率 贝叶斯
阅读更多